Different configuration of filename format for assets / metadata (since CPL/PKL files...
authorCarl Hetherington <cth@carlh.net>
Thu, 4 Aug 2016 20:56:14 +0000 (21:56 +0100)
committerCarl Hetherington <cth@carlh.net>
Thu, 4 Aug 2016 20:56:14 +0000 (21:56 +0100)
src/lib/config.cc
src/lib/config.h
src/lib/reel_writer.cc
src/lib/util.cc
src/lib/writer.cc
src/wx/config_dialog.cc
test/file_naming_test.cc

index 5dbbd692e60b50fcdbdf77043fd375a7a393b227..6f7c8ec556c369a21b5d47b96190a85902789530 100644 (file)
@@ -110,7 +110,8 @@ Config::set_defaults ()
        _cinemas_file = path ("cinemas.xml");
        _show_hints_before_make_dcp = true;
        _kdm_filename_format = dcp::NameFormat ("KDM %f %c %s");
-       _dcp_filename_format = dcp::NameFormat ("%t_%i");
+       _dcp_metadata_filename_format = dcp::NameFormat ("%t_%i");
+       _dcp_asset_filename_format = dcp::NameFormat ("%t_%i");
 
        _allowed_dcp_frame_rates.clear ();
        _allowed_dcp_frame_rates.push_back (24);
@@ -294,7 +295,8 @@ try
        _cinemas_file = f.optional_string_child("CinemasFile").get_value_or (path ("cinemas.xml").string ());
        _show_hints_before_make_dcp = f.optional_bool_child("ShowHintsBeforeMakeDCP").get_value_or (true);
        _kdm_filename_format = dcp::NameFormat (f.optional_string_child("KDMFilenameFormat").get_value_or ("KDM %f %c %s"));
-       _dcp_filename_format = dcp::NameFormat (f.optional_string_child("DCPFilenameFormat").get_value_or ("%t_%i.mxf"));
+       _dcp_metadata_filename_format = dcp::NameFormat (f.optional_string_child("DCPMetadataFilenameFormat").get_value_or ("%t_%i"));
+       _dcp_asset_filename_format = dcp::NameFormat (f.optional_string_child("DCPAssetFilenameFormat").get_value_or ("%t_%i"));
 
        /* Replace any cinemas from config.xml with those from the configured file */
        if (boost::filesystem::exists (_cinemas_file)) {
@@ -453,7 +455,8 @@ Config::write_config_xml () const
        root->add_child("CinemasFile")->add_child_text (_cinemas_file.string());
        root->add_child("ShowHintsBeforeMakeDCP")->add_child_text (_show_hints_before_make_dcp ? "1" : "0");
        root->add_child("KDMFilenameFormat")->add_child_text (_kdm_filename_format.specification ());
-       root->add_child("DCPFilenameFormat")->add_child_text (_dcp_filename_format.specification ());
+       root->add_child("DCPMetadataFilenameFormat")->add_child_text (_dcp_metadata_filename_format.specification ());
+       root->add_child("DCPAssetFilenameFormat")->add_child_text (_dcp_asset_filename_format.specification ());
 
        try {
                doc.write_to_file_formatted (path("config.xml").string ());
index 3a03084621d82f5c97cb6fc882c304cb5b581c3b..a988cda6b7f11b687303ac255dd97b337aa1c7b0 100644 (file)
@@ -271,8 +271,12 @@ public:
                return _kdm_filename_format;
        }
 
-       dcp::NameFormat dcp_filename_format () const {
-               return _dcp_filename_format;
+       dcp::NameFormat dcp_metadata_filename_format () const {
+               return _dcp_metadata_filename_format;
+       }
+
+       dcp::NameFormat dcp_asset_filename_format () const {
+               return _dcp_asset_filename_format;
        }
 
        /** @param n New number of local encoding threads */
@@ -486,8 +490,12 @@ public:
                maybe_set (_kdm_filename_format, n);
        }
 
-       void set_dcp_filename_format (dcp::NameFormat n) {
-               maybe_set (_dcp_filename_format, n);
+       void set_dcp_metadata_filename_format (dcp::NameFormat n) {
+               maybe_set (_dcp_metadata_filename_format, n);
+       }
+
+       void set_dcp_asset_filename_format (dcp::NameFormat n) {
+               maybe_set (_dcp_asset_filename_format, n);
        }
 
        void clear_history () {
@@ -602,7 +610,8 @@ private:
        boost::filesystem::path _cinemas_file;
        bool _show_hints_before_make_dcp;
        dcp::NameFormat _kdm_filename_format;
-       dcp::NameFormat _dcp_filename_format;
+       dcp::NameFormat _dcp_metadata_filename_format;
+       dcp::NameFormat _dcp_asset_filename_format;
 
        /** Singleton instance, or 0 */
        static Config* _instance;
index 176c54c8f277910c1c63625034e5669e576d191d..fa2813837bf065d4f57af3f00575367dedd4f107 100644 (file)
@@ -334,7 +334,9 @@ ReelWriter::create_reel (list<ReferencedReelAsset> const & refs, list<shared_ptr
                }
        }
 
+       DCPOMATIC_ASSERT (reel_picture_asset);
        reel->add (reel_picture_asset);
+
        /* If we have a hash for this asset in the CPL, assume that it is correct */
        if (reel_picture_asset->hash()) {
                reel_picture_asset->asset_ref()->set_hash (reel_picture_asset->hash().get());
index a0d6453ff76af2f5d2a44e3a924ebf5092cabfad..1cf71ba32090a40963363d8abc37d065c9160124 100644 (file)
@@ -627,7 +627,7 @@ video_asset_filename (shared_ptr<dcp::PictureAsset> asset, int reel_index, int r
        if (summary) {
                values['c'] = summary.get();
        }
-       return Config::instance()->dcp_filename_format().get(values) + ".mxf";
+       return Config::instance()->dcp_asset_filename_format().get(values) + ".mxf";
 }
 
 string
@@ -641,7 +641,7 @@ audio_asset_filename (shared_ptr<dcp::SoundAsset> asset, int reel_index, int ree
        if (summary) {
                values['c'] = summary.get();
        }
-       return Config::instance()->dcp_filename_format().get(values) + ".mxf";
+       return Config::instance()->dcp_asset_filename_format().get(values) + ".mxf";
 }
 
 float
index a5085abae001c2a4e97077a5f59fb5b608e672f6..85099062f1493e7f742f8297a1c34d2d8ae8de19 100644 (file)
@@ -514,7 +514,7 @@ Writer::finish ()
                }
        }
 
-       dcp.write_xml (_film->interop () ? dcp::INTEROP : dcp::SMPTE, meta, signer, Config::instance()->dcp_filename_format());
+       dcp.write_xml (_film->interop () ? dcp::INTEROP : dcp::SMPTE, meta, signer, Config::instance()->dcp_metadata_filename_format());
 
        LOG_GENERAL (
                N_("Wrote %1 FULL, %2 FAKE, %3 REPEAT, %4 pushed to disk"), _full_written, _fake_written, _repeat_written, _pushed_to_disk
index 640f73873c7b00c4da7157eba2b5bb3683f5d980..a33099a42424934f9744fbfc723314ef1df72bb7 100644 (file)
@@ -1376,6 +1376,17 @@ public:
        {}
 
 private:
+       void add_top_aligned_label_to_sizer (wxSizer* table, wxWindow* parent, wxString text)
+       {
+               int flags = wxALIGN_TOP | wxTOP | wxLEFT;
+#ifdef __WXOSX__
+               flags |= wxALIGN_RIGHT;
+               text += wxT (":");
+#endif
+               wxStaticText* m = new wxStaticText (parent, wxID_ANY, text);
+               table->Add (m, 0, flags, DCPOMATIC_SIZER_Y_GAP);
+       }
+
        void setup ()
        {
                wxFlexGridSizer* table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
@@ -1400,40 +1411,39 @@ private:
                table->AddSpacer (0);
 
                {
-                       int flags = wxALIGN_TOP | wxTOP | wxLEFT;
-                       wxString t = _("DCP filename format");
-#ifdef __WXOSX__
-                       flags |= wxALIGN_RIGHT;
-                       t += wxT (":");
-#endif
-                       wxStaticText* m = new wxStaticText (_panel, wxID_ANY, t);
-                       table->Add (m, 0, flags, DCPOMATIC_SIZER_Y_GAP);
+                       add_top_aligned_label_to_sizer (table, _panel, _("DCP metadata filename format"));
+                       dcp::NameFormat::Map titles;
+                       titles['t'] = "type (cpl/pkl)";
+                       titles['i'] = "unique ID";
+                       titles['c'] = "content filename";
+                       dcp::NameFormat::Map examples;
+                       examples['t'] = "cpl";
+                       examples['i'] = "eb1c112c-ca3c-4ae6-9263-c6714ff05d64";
+                       examples['c'] = "myfile.mp4";
+                       _dcp_metadata_filename_format = new NameFormatEditor (_panel, Config::instance()->dcp_metadata_filename_format(), titles, examples);
+                       table->Add (_dcp_metadata_filename_format->panel(), 1, wxEXPAND | wxALL);
                }
 
-               dcp::NameFormat::Map titles;
-               titles['t'] = "type (j2c/pcm/sub/cpl/pkl)";
-               titles['i'] = "unique ID";
-               titles['r'] = "reel number";
-               titles['n'] = "number of reels";
-               titles['c'] = "content filename";
-               dcp::NameFormat::Map examples;
-               examples['t'] = "j2c";
-               examples['i'] = "eb1c112c-ca3c-4ae6-9263-c6714ff05d64";
-               examples['r'] = "1";
-               examples['n'] = "4";
-               examples['c'] = "myfile.mp4";
-               _dcp_filename_format = new NameFormatEditor (_panel, Config::instance()->dcp_filename_format(), titles, examples);
-               table->Add (_dcp_filename_format->panel(), 1, wxEXPAND | wxALL);
-
-#ifdef __WXOSX__
-               wxStaticText* m = new wxStaticText (_panel, wxID_ANY, _("Log:"));
-               table->Add (m, 0, wxALIGN_TOP | wxLEFT | wxRIGHT | wxEXPAND | wxALL | wxALIGN_RIGHT, 6);
-#else
-               wxStaticText* m = new wxStaticText (_panel, wxID_ANY, _("Log"));
-               table->Add (m, 0, wxALIGN_TOP | wxLEFT | wxRIGHT | wxEXPAND | wxALL, 6);
-#endif
+               {
+                       add_top_aligned_label_to_sizer (table, _panel, _("DCP asset filename format"));
+                       dcp::NameFormat::Map titles;
+                       titles['t'] = "type (j2c/pcm/sub)";
+                       titles['i'] = "unique ID";
+                       titles['r'] = "reel number";
+                       titles['n'] = "number of reels";
+                       titles['c'] = "content filename";
+                       dcp::NameFormat::Map examples;
+                       examples['t'] = "j2c";
+                       examples['i'] = "eb1c112c-ca3c-4ae6-9263-c6714ff05d64";
+                       examples['r'] = "1";
+                       examples['n'] = "4";
+                       examples['c'] = "myfile.mp4";
+                       _dcp_asset_filename_format = new NameFormatEditor (_panel, Config::instance()->dcp_asset_filename_format(), titles, examples);
+                       table->Add (_dcp_asset_filename_format->panel(), 1, wxEXPAND | wxALL);
+               }
 
                {
+                       add_top_aligned_label_to_sizer (table, _panel, _("Log"));
                        wxBoxSizer* t = new wxBoxSizer (wxVERTICAL);
                        _log_general = new wxCheckBox (_panel, wxID_ANY, _("General"));
                        t->Add (_log_general, 1, wxEXPAND | wxALL);
@@ -1463,7 +1473,8 @@ private:
                _maximum_j2k_bandwidth->Bind (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&AdvancedPage::maximum_j2k_bandwidth_changed, this));
                _allow_any_dcp_frame_rate->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&AdvancedPage::allow_any_dcp_frame_rate_changed, this));
                _only_servers_encode->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&AdvancedPage::only_servers_encode_changed, this));
-               _dcp_filename_format->Changed.connect (boost::bind (&AdvancedPage::dcp_filename_format_changed, this));
+               _dcp_metadata_filename_format->Changed.connect (boost::bind (&AdvancedPage::dcp_metadata_filename_format_changed, this));
+               _dcp_asset_filename_format->Changed.connect (boost::bind (&AdvancedPage::dcp_asset_filename_format_changed, this));
                _log_general->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&AdvancedPage::log_changed, this));
                _log_warning->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&AdvancedPage::log_changed, this));
                _log_error->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&AdvancedPage::log_changed, this));
@@ -1510,9 +1521,14 @@ private:
                Config::instance()->set_only_servers_encode (_only_servers_encode->GetValue ());
        }
 
-       void dcp_filename_format_changed ()
+       void dcp_metadata_filename_format_changed ()
+       {
+               Config::instance()->set_dcp_metadata_filename_format (_dcp_metadata_filename_format->get ());
+       }
+
+       void dcp_asset_filename_format_changed ()
        {
-               Config::instance()->set_dcp_filename_format (_dcp_filename_format->get ());
+               Config::instance()->set_dcp_asset_filename_format (_dcp_asset_filename_format->get ());
        }
 
        void log_changed ()
@@ -1552,7 +1568,8 @@ private:
        wxSpinCtrl* _maximum_j2k_bandwidth;
        wxCheckBox* _allow_any_dcp_frame_rate;
        wxCheckBox* _only_servers_encode;
-       NameFormatEditor* _dcp_filename_format;
+       NameFormatEditor* _dcp_metadata_filename_format;
+       NameFormatEditor* _dcp_asset_filename_format;
        wxCheckBox* _log_general;
        wxCheckBox* _log_warning;
        wxCheckBox* _log_error;
index 5bc2e6dd4116009b9dc617a7177ee37aa3030362..054685a7e32c42ca64ec4f4477729cbc01c3c6c4 100644 (file)
@@ -30,7 +30,7 @@ using boost::shared_ptr;
 BOOST_AUTO_TEST_CASE (file_naming_test)
 {
        dcp::NameFormat nf ("%c");
-       Config::instance()->set_dcp_filename_format (dcp::NameFormat ("%c"));
+       Config::instance()->set_dcp_metadata_filename_format (dcp::NameFormat ("%c"));
        shared_ptr<Film> film = new_test_film ("file_naming_test");
        film->set_name ("file_naming_test");
        film->set_dcp_content_type (DCPContentType::from_isdcf_name ("FTR"));