From 4e244c8a4b34268445123b7d6df54ff303561fa5 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 6 Jul 2025 23:23:26 +0200 Subject: Allow audio processors to pass through HI/VI/DBox etc (#3020). Previously you couldn't map these things if you were using a processor. --- src/lib/audio_processor.cc | 63 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'src/lib/audio_processor.cc') diff --git a/src/lib/audio_processor.cc b/src/lib/audio_processor.cc index e13ba017b..26c906635 100644 --- a/src/lib/audio_processor.cc +++ b/src/lib/audio_processor.cc @@ -25,7 +25,10 @@ #include "upmixer_a.h" #include "upmixer_b.h" +#include "i18n.h" + +using std::shared_ptr; using std::string; using std::unique_ptr; using std::vector; @@ -96,3 +99,63 @@ AudioProcessor::all() return raw; } + + +shared_ptr +AudioProcessor::run(std::shared_ptr in, int channels) +{ + auto out = do_run(in, std::min(channels, out_channels())); + + if (out->channels() < channels) { + out->set_channels(channels); + } + + for (auto const pass: pass_through()) { + if (static_cast(pass) < channels && static_cast(pass) < out->channels()) { + out->copy_channel_from(in.get(), static_cast(pass), static_cast(pass)); + } + } + + return out; +} + + +void +AudioProcessor::make_audio_mapping_default(AudioMapping& mapping) const +{ + mapping.make_zero(); + + auto const channels = std::min(mapping.input_channels(), mapping.output_channels()); + + for (auto pass: pass_through()) { + if (static_cast(pass) < channels) { + mapping.set(pass, static_cast(pass), 1); + } + } +} + + +vector +AudioProcessor::input_names() const +{ + return { + NamedChannel(_("HI"), 6), + NamedChannel(_("VI"), 7), + NamedChannel(_("DBP"), 13), + NamedChannel(_("DBS"), 14), + NamedChannel(_("Sign"), 15) + }; +} + + +vector +AudioProcessor::pass_through() +{ + return { + dcp::Channel::HI, + dcp::Channel::VI, + dcp::Channel::MOTION_DATA, + dcp::Channel::SYNC_SIGNAL, + dcp::Channel::SIGN_LANGUAGE + }; +} -- cgit v1.2.3