From: Carl Hetherington Date: Tue, 14 Jun 2016 14:51:03 +0000 (+0100) Subject: Basic guessing of audio channels from filenames (#393). X-Git-Tag: v2.8.10~15 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=a2111c9816c9597e6f121010e6f4f34797abb0c7 Basic guessing of audio channels from filenames (#393). --- diff --git a/ChangeLog b/ChangeLog index 99ec8dadf..648f86814 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2016-06-14 c.hetherington + * Basic guessing of audio channels from filenames (#393). + * Fix incorrectly-reported frame rate when importing 3D DCPs. diff --git a/src/lib/ffmpeg_content.cc b/src/lib/ffmpeg_content.cc index b2b67e565..b34fdf6aa 100644 --- a/src/lib/ffmpeg_content.cc +++ b/src/lib/ffmpeg_content.cc @@ -218,6 +218,8 @@ FFmpegContent::examine (shared_ptr job) set_default_colour_conversion (); } + boost::filesystem::path first_path = path (0); + { boost::mutex::scoped_lock lm (_mutex); @@ -239,7 +241,7 @@ FFmpegContent::examine (shared_ptr job) AudioStreamPtr as = audio->streams().front(); AudioMapping m = as->mapping (); - film()->make_audio_mapping_default (m); + film()->make_audio_mapping_default (m, first_path); as->set_mapping (m); } diff --git a/src/lib/film.cc b/src/lib/film.cc index ff5cba000..64550556b 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -62,6 +62,7 @@ #include #include #include +#include #include #include #include @@ -1292,18 +1293,44 @@ Film::subtitle_language () const /** Change the gains of the supplied AudioMapping to make it a default * for this film. The defaults are guessed based on what processor (if any) - * is in use and the number of input channels. + * is in use, the number of input channels and any filename supplied. */ void -Film::make_audio_mapping_default (AudioMapping& mapping) const +Film::make_audio_mapping_default (AudioMapping& mapping, optional filename) const { + static string const regex[] = { + ".*[\\._-]L[\\._-].*", + ".*[\\._-]R[\\._-].*", + ".*[\\._-]C[\\._-].*", + ".*[\\._-]Lfe[\\._-].*", + ".*[\\._-]Ls[\\._-].*", + ".*[\\._-]Rs[\\._-].*" + }; + + static int const regexes = sizeof(regex) / sizeof(*regex); + if (audio_processor ()) { audio_processor()->make_audio_mapping_default (mapping); } else { mapping.make_zero (); if (mapping.input_channels() == 1) { - /* Mono -> Centre */ - mapping.set (0, static_cast (dcp::CENTRE), 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 < mapping.output_channels()) { + mapping.set (0, i, 1); + guessed = true; + } + } + } + + if (!guessed) { + /* If we have no idea, just put it on centre */ + mapping.set (0, static_cast (dcp::CENTRE), 1); + } } else { /* 1:1 mapping */ for (int i = 0; i < min (mapping.input_channels(), mapping.output_channels()); ++i) { diff --git a/src/lib/film.h b/src/lib/film.h index 3b33aa305..ca0855b5c 100644 --- a/src/lib/film.h +++ b/src/lib/film.h @@ -144,7 +144,11 @@ public: std::string subtitle_language () const; - void make_audio_mapping_default (AudioMapping & mapping) const; + void make_audio_mapping_default ( + AudioMapping & mapping, + boost::optional filename = boost::optional () + ) const; + std::vector audio_output_names () const; void repeat_content (ContentList, int);