Add preference for the default number of DCP channels (#897).
authorCarl Hetherington <cth@carlh.net>
Fri, 17 Jun 2016 22:22:06 +0000 (23:22 +0100)
committerCarl Hetherington <cth@carlh.net>
Fri, 17 Jun 2016 22:48:22 +0000 (23:48 +0100)
ChangeLog
src/lib/config.cc
src/lib/config.h
src/lib/film.cc
src/wx/config_dialog.cc

index da87cb96a37cb1355c1d64045b20d7bc0a97b2b4..784a686747cc0223babd0737c452ea74e048adbd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2016-06-17  Carl Hetherington  <cth@carlh.net>
+
+       * Add configurable default for the number of DCP
+       audio channels (#897).
+
 2016-06-16  Carl Hetherington  <cth@carlh.net>
 
        * Ignore any hidden files when looking for image files.
index f8debbb4e6a81382a804278854f52b03cc19dbbe..891d832a24c6575a6e4b1130bb149334416e673b 100644 (file)
@@ -85,6 +85,7 @@ Config::set_defaults ()
        _default_still_length = 10;
        _default_container = Ratio::from_id ("185");
        _default_dcp_content_type = DCPContentType::from_isdcf_name ("FTR");
+       _default_dcp_audio_channels = 6;
        _default_j2k_bandwidth = 100000000;
        _default_audio_delay = 0;
        _default_interop = false;
@@ -208,6 +209,8 @@ Config::read ()
                _default_dcp_content_type = DCPContentType::from_isdcf_name (c.get ());
        }
 
+       _default_dcp_audio_channels = f.optional_number_child<int>("DefaultDCPAudioChannels").get_value_or (6);
+
        if (f.optional_string_child ("DCPMetadataIssuer")) {
                _dcp_issuer = f.string_child ("DCPMetadataIssuer");
        } else if (f.optional_string_child ("DCPIssuer")) {
@@ -389,6 +392,7 @@ Config::write_config_xml () const
        if (_default_dcp_content_type) {
                root->add_child("DefaultDCPContentType")->add_child_text (_default_dcp_content_type->isdcf_name ());
        }
+       root->add_child("DefaultDCPAudioChannels")->add_child_text (raw_convert<string> (_default_dcp_audio_channels));
        root->add_child("DCPIssuer")->add_child_text (_dcp_issuer);
        root->add_child("DCPCreator")->add_child_text (_dcp_creator);
 
index 6baa434a32fd10f08ea435572cf46dd802fbcb39..1ffcfdb9881831f90de4e98d5f3c7c4196c87eba 100644 (file)
@@ -152,6 +152,10 @@ public:
                return _default_dcp_content_type;
        }
 
+       int default_dcp_audio_channels () const {
+               return _default_dcp_audio_channels;
+       }
+
        std::string dcp_issuer () const {
                return _dcp_issuer;
        }
@@ -351,6 +355,10 @@ public:
                maybe_set (_default_dcp_content_type, t);
        }
 
+       void set_default_dcp_audio_channels (int c) {
+               maybe_set (_default_dcp_audio_channels, c);
+       }
+
        void set_dcp_issuer (std::string i) {
                maybe_set (_dcp_issuer, i);
        }
@@ -529,6 +537,7 @@ private:
        int _default_still_length;
        Ratio const * _default_container;
        DCPContentType const * _default_dcp_content_type;
+       int _default_dcp_audio_channels;
        std::string _dcp_issuer;
        std::string _dcp_creator;
        int _default_j2k_bandwidth;
index 64550556b39bd3d27104468a1573f7ab8b7fd6a7..3cd3f0f21e7ec5c4e9546569b142a8b21155740b 100644 (file)
@@ -133,7 +133,7 @@ Film::Film (boost::filesystem::path dir, bool log)
        , _j2k_bandwidth (Config::instance()->default_j2k_bandwidth ())
        , _isdcf_metadata (Config::instance()->default_isdcf_metadata ())
        , _video_frame_rate (24)
-       , _audio_channels (6)
+       , _audio_channels (Config::instance()->default_dcp_audio_channels ())
        , _three_d (false)
        , _sequence (true)
        , _interop (Config::instance()->default_interop ())
index 1cbad576c07fc1475039b5f20b44774f36484b14..e44ed879bbcd6895b527abc11c813d6a1c7f2e74 100644 (file)
@@ -432,6 +432,10 @@ private:
                _dcp_content_type = new wxChoice (_panel, wxID_ANY);
                table->Add (_dcp_content_type);
 
+               add_label_to_sizer (table, _panel, _("Default DCP audio channels"), true);
+               _dcp_audio_channels = new wxChoice (_panel, wxID_ANY);
+               table->Add (_dcp_audio_channels);
+
                {
                        add_label_to_sizer (table, _panel, _("Default JPEG2000 bandwidth"), true);
                        wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL);
@@ -473,7 +477,15 @@ private:
                        _dcp_content_type->Append (std_to_wx (ct[i]->pretty_name ()));
                }
 
+               vector<pair<string, string> > items;
+               for (int i = 0; i <= 16; i += 2) {
+                       items.push_back (make_pair (raw_convert<string> (i), raw_convert<string> (i)));
+               }
+
+               checked_set (_dcp_audio_channels, items);
+
                _dcp_content_type->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&DefaultsPage::dcp_content_type_changed, this));
+               _dcp_audio_channels->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&DefaultsPage::dcp_audio_channels_changed, this));
 
                _j2k_bandwidth->SetRange (50, 250);
                _j2k_bandwidth->Bind (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&DefaultsPage::j2k_bandwidth_changed, this));
@@ -508,6 +520,7 @@ private:
                _directory->SetPath (std_to_wx (config->default_directory_or (wx_to_std (wxStandardPaths::Get().GetDocumentsDir())).string ()));
                checked_set (_j2k_bandwidth, config->default_j2k_bandwidth() / 1000000);
                _j2k_bandwidth->SetRange (50, config->maximum_j2k_bandwidth() / 1000000);
+               checked_set (_dcp_audio_channels, raw_convert<string> (config->default_dcp_audio_channels()));
                checked_set (_audio_delay, config->default_audio_delay ());
                checked_set (_standard, config->default_interop() ? 1 : 0);
        }
@@ -522,6 +535,14 @@ private:
                Config::instance()->set_default_audio_delay (_audio_delay->GetValue());
        }
 
+       void dcp_audio_channels_changed ()
+       {
+               int const s = _dcp_audio_channels->GetSelection ();
+               if (s != wxNOT_FOUND) {
+                       Config::instance()->set_default_dcp_audio_channels (s * 2);
+               }
+       }
+
        void directory_changed ()
        {
                Config::instance()->set_default_directory (wx_to_std (_directory->GetPath ()));
@@ -568,6 +589,7 @@ private:
 #endif
        wxChoice* _container;
        wxChoice* _dcp_content_type;
+       wxChoice* _dcp_audio_channels;
        wxChoice* _standard;
 };