summaryrefslogtreecommitdiff
path: root/src/lib/audio_processor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/audio_processor.cc')
-rw-r--r--src/lib/audio_processor.cc63
1 files changed, 63 insertions, 0 deletions
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<AudioBuffers>
+AudioProcessor::run(std::shared_ptr<const AudioBuffers> 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<int>(pass) < channels && static_cast<int>(pass) < out->channels()) {
+ out->copy_channel_from(in.get(), static_cast<int>(pass), static_cast<int>(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<int>(pass) < channels) {
+ mapping.set(pass, static_cast<int>(pass), 1);
+ }
+ }
+}
+
+
+vector<NamedChannel>
+AudioProcessor::input_names() const
+{
+ return {
+ NamedChannel(_("HI"), 6),
+ NamedChannel(_("VI"), 7),
+ NamedChannel(_("DBP"), 13),
+ NamedChannel(_("DBS"), 14),
+ NamedChannel(_("Sign"), 15)
+ };
+}
+
+
+vector<dcp::Channel>
+AudioProcessor::pass_through()
+{
+ return {
+ dcp::Channel::HI,
+ dcp::Channel::VI,
+ dcp::Channel::MOTION_DATA,
+ dcp::Channel::SYNC_SIGNAL,
+ dcp::Channel::SIGN_LANGUAGE
+ };
+}