diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-04-22 14:29:08 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-04-22 14:29:31 +0100 |
| commit | 31f491c0f13d23506fd810f61982976a9a60e44d (patch) | |
| tree | 76fad30419e4f75fabc5581bbcc988c9366bae0d | |
| parent | 8031edf0ce27b75727438e504128448b0884b426 (diff) | |
Select active channels on opening audio analysis (#802).
| -rw-r--r-- | ChangeLog | 2 | ||||
| -rw-r--r-- | src/lib/film.cc | 69 | ||||
| -rw-r--r-- | src/lib/film.h | 2 | ||||
| -rw-r--r-- | src/wx/audio_dialog.cc | 26 | ||||
| -rw-r--r-- | src/wx/audio_dialog.h | 3 |
5 files changed, 63 insertions, 39 deletions
@@ -1,5 +1,7 @@ 2016-04-22 c.hetherington <cth@carlh.net> + * Select active channels on opening audio analysis (#802). + * Disallow KDM until times from being before from times (#821). * Warn when loading certificates from files that have diff --git a/src/lib/film.cc b/src/lib/film.cc index 1775f7c7f..b80962ead 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -493,6 +493,32 @@ Film::file (boost::filesystem::path f) const return p; } +list<int> +Film::mapped_audio_channels () const +{ + list<int> mapped; + + if (audio_processor ()) { + /* Processors are mapped 1:1 to DCP outputs so we can work out mappings from there */ + for (int i = 0; i < audio_processor()->out_channels(); ++i) { + mapped.push_back (i); + } + } else { + BOOST_FOREACH (shared_ptr<Content> i, content ()) { + shared_ptr<const AudioContent> ac = dynamic_pointer_cast<const AudioContent> (i); + if (ac) { + list<int> c = ac->audio_mapping().mapped_output_channels (); + copy (c.begin(), c.end(), back_inserter (mapped)); + } + } + + mapped.sort (); + mapped.unique (); + } + + return mapped; +} + /** @return a ISDCF-compliant name for a DCP of this film */ string Film::isdcf_name (bool if_created_now) const @@ -646,46 +672,21 @@ Film::isdcf_name (bool if_created_now) const } } - /* Find all mapped channels */ + /* Count mapped audio channels */ int non_lfe = 0; int lfe = 0; - if (audio_processor ()) { - /* Processors are mapped 1:1 to DCP outputs so we can guess the number of LFE/ - non-LFE from the channel counts. - */ - non_lfe = audio_processor()->out_channels (); - if (non_lfe >= 4) { - --non_lfe; - ++lfe; - } - } else { - list<int> mapped; - BOOST_FOREACH (shared_ptr<Content> i, content ()) { - shared_ptr<const AudioContent> ac = dynamic_pointer_cast<const AudioContent> (i); - if (ac) { - list<int> c = ac->audio_mapping().mapped_output_channels (); - copy (c.begin(), c.end(), back_inserter (mapped)); - } + BOOST_FOREACH (int i, mapped_audio_channels ()) { + if (i >= audio_channels()) { + /* This channel is mapped but is not included in the DCP */ + continue; } - mapped.sort (); - mapped.unique (); - - /* Count them */ - - for (list<int>::const_iterator i = mapped.begin(); i != mapped.end(); ++i) { - if (*i >= audio_channels()) { - /* This channel is mapped but is not included in the DCP */ - continue; - } - - if (static_cast<dcp::Channel> (*i) == dcp::LFE) { - ++lfe; - } else { - ++non_lfe; - } + if (static_cast<dcp::Channel> (i) == dcp::LFE) { + ++lfe; + } else { + ++non_lfe; } } diff --git a/src/lib/film.h b/src/lib/film.h index b8e31a420..4ad905758 100644 --- a/src/lib/film.h +++ b/src/lib/film.h @@ -154,6 +154,8 @@ public: std::list<DCPTimePeriod> reels () const; + std::list<int> mapped_audio_channels () const; + /** Identifiers for the parts of our state; used for signalling changes. */ diff --git a/src/wx/audio_dialog.cc b/src/wx/audio_dialog.cc index 2117963f6..20185bf8f 100644 --- a/src/wx/audio_dialog.cc +++ b/src/wx/audio_dialog.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2015 Carl Hetherington <cth@carlh.net> + Copyright (C) 2013-2016 Carl Hetherington <cth@carlh.net> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,9 +27,11 @@ #include "lib/job_manager.h" #include <libxml++/libxml++.h> #include <boost/filesystem.hpp> +#include <boost/foreach.hpp> #include <iostream> using std::cout; +using std::list; using boost::shared_ptr; using boost::bind; using boost::optional; @@ -40,6 +42,7 @@ using boost::dynamic_pointer_cast; AudioDialog::AudioDialog (wxWindow* parent, shared_ptr<Film> film, shared_ptr<AudioContent> content) : wxDialog (parent, wxID_ANY, _("Audio"), wxDefaultPosition, wxSize (640, 512), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxFULL_REPAINT_ON_RESIZE) , _film (film) + , _content (content) , _channels (film->audio_channels ()) , _plot (0) { @@ -168,9 +171,24 @@ AudioDialog::try_to_load_analysis () ++i; } - if (i == _channels && _channel_checkbox[0]) { - _channel_checkbox[0]->SetValue (true); - _plot->set_channel_visible (0, true); + if (i == _channels) { + /* Nothing checked; check mapped ones */ + + list<int> mapped; + shared_ptr<AudioContent> content = _content.lock (); + + if (content) { + mapped = content->audio_mapping().mapped_output_channels (); + } else { + mapped = film->mapped_audio_channels (); + } + + BOOST_FOREACH (int i, mapped) { + if (_channel_checkbox[i]) { + _channel_checkbox[i]->SetValue (true); + _plot->set_channel_visible (i, true); + } + } } i = 0; diff --git a/src/wx/audio_dialog.h b/src/wx/audio_dialog.h index 0f791dc16..8320171ce 100644 --- a/src/wx/audio_dialog.h +++ b/src/wx/audio_dialog.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2015 Carl Hetherington <cth@carlh.net> + Copyright (C) 2013-2016 Carl Hetherington <cth@carlh.net> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -45,6 +45,7 @@ private: boost::shared_ptr<AudioAnalysis> _analysis; boost::weak_ptr<Film> _film; + boost::weak_ptr<AudioContent> _content; int _channels; boost::shared_ptr<const Playlist> _playlist; AudioPlot* _plot; |
