summaryrefslogtreecommitdiff
path: root/src/lib/audio_mapping.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2018-11-23 00:24:09 +0000
committerCarl Hetherington <cth@carlh.net>2018-11-23 00:24:09 +0000
commite13e5cd4cfda39b0a0b77ed8036e14e15f93ec2e (patch)
tree7580c93f98c2afbebdc0915b5ed9a000be533cbb /src/lib/audio_mapping.cc
parentdf30165f29beb41078b1a17894ee1ef5327abc20 (diff)
Move make_default into AudioMapping.
Diffstat (limited to 'src/lib/audio_mapping.cc')
-rw-r--r--src/lib/audio_mapping.cc50
1 files changed, 49 insertions, 1 deletions
diff --git a/src/lib/audio_mapping.cc b/src/lib/audio_mapping.cc
index bf454b5e5..86add09f4 100644
--- a/src/lib/audio_mapping.cc
+++ b/src/lib/audio_mapping.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2013-2015 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2013-2018 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
@@ -21,9 +21,11 @@
#include "audio_mapping.h"
#include "util.h"
#include "digester.h"
+#include "audio_processor.h"
#include <dcp/raw_convert.h>
#include <libcxml/cxml.h>
#include <libxml++/libxml++.h>
+#include <boost/regex.hpp>
#include <iostream>
using std::list;
@@ -36,6 +38,7 @@ using std::vector;
using std::abs;
using boost::shared_ptr;
using boost::dynamic_pointer_cast;
+using boost::optional;
using dcp::raw_convert;
AudioMapping::AudioMapping ()
@@ -78,6 +81,51 @@ AudioMapping::make_zero ()
}
}
+void
+AudioMapping::make_default (AudioProcessor const * processor, optional<boost::filesystem::path> filename)
+{
+ static string const regex[] = {
+ ".*[\\._-]L[\\._-].*",
+ ".*[\\._-]R[\\._-].*",
+ ".*[\\._-]C[\\._-].*",
+ ".*[\\._-]Lfe[\\._-].*",
+ ".*[\\._-]Ls[\\._-].*",
+ ".*[\\._-]Rs[\\._-].*"
+ };
+
+ static int const regexes = sizeof(regex) / sizeof(*regex);
+
+ if (processor) {
+ processor->make_audio_mapping_default (*this);
+ } else {
+ make_zero ();
+ if (input_channels() == 1) {
+ bool guessed = false;
+
+ /* See if we can guess where this stream should go */
+ if (filename) {
+ for (int i = 0; i < regexes; ++i) {
+ boost::regex e (regex[i], boost::regex::icase);
+ if (boost::regex_match(filename->string(), e) && i < output_channels()) {
+ set (0, i, 1);
+ guessed = true;
+ }
+ }
+ }
+
+ if (!guessed) {
+ /* If we have no idea, just put it on centre */
+ set (0, static_cast<int>(dcp::CENTRE), 1);
+ }
+ } else {
+ /* 1:1 mapping */
+ for (int i = 0; i < min (input_channels(), output_channels()); ++i) {
+ set (i, i, 1);
+ }
+ }
+ }
+}
+
AudioMapping::AudioMapping (cxml::ConstNodePtr node, int state_version)
{
if (state_version < 32) {