Use studio and facility from Interop/SMPTE metadata rather than ISDCF.
authorCarl Hetherington <cth@carlh.net>
Fri, 2 Apr 2021 21:45:19 +0000 (23:45 +0200)
committerCarl Hetherington <cth@carlh.net>
Sun, 4 Apr 2021 18:48:35 +0000 (20:48 +0200)
12 files changed:
src/lib/film.cc
src/lib/film.h
src/lib/isdcf_metadata.cc
src/lib/isdcf_metadata.h
src/wx/dcp_panel.cc
src/wx/isdcf_metadata_dialog.cc
src/wx/isdcf_metadata_dialog.h
src/wx/metadata_dialog.cc
src/wx/metadata_dialog.h
src/wx/smpte_metadata_dialog.cc
src/wx/smpte_metadata_dialog.h
test/isdcf_name_test.cc

index 1f188021b8babbb082bf9a82f2611465638726e8..1275c571b8b9fb47d92a2a38a57b6749778c7ed7 100644 (file)
@@ -490,6 +490,9 @@ Film::metadata (bool with_content_paths) const
        if (_facility) {
                root->add_child("Facility")->add_child_text(*_facility);
        }
+       if (_studio) {
+               root->add_child("Studio")->add_child_text(*_studio);
+       }
        if (_luminance) {
                root->add_child("LuminanceValue")->add_child_text(raw_convert<string>(_luminance->value()));
                root->add_child("LuminanceUnit")->add_child_text(dcp::Luminance::unit_to_string(_luminance->unit()));
@@ -666,6 +669,7 @@ Film::read_metadata (optional<boost::filesystem::path> path)
        _chain = f.optional_string_child("Chain");
        _distributor = f.optional_string_child("Distributor");
        _facility = f.optional_string_child("Facility");
+       _studio = f.optional_string_child("Studio");
 
        auto value = f.optional_number_child<float>("LuminanceValue");
        auto unit = f.optional_string_child("LuminanceUnit");
@@ -986,8 +990,8 @@ Film::isdcf_name (bool if_created_now) const
 
        d += "_" + resolution_to_string (_resolution);
 
-       if (!dm.studio.empty ()) {
-               d += "_" + dm.studio;
+       if (_studio && _studio->length() >= 2) {
+               d += "_" + to_upper (_studio->substr(0, 4));
        }
 
        if (if_created_now) {
@@ -996,8 +1000,8 @@ Film::isdcf_name (bool if_created_now) const
                d += "_" + boost::gregorian::to_iso_string (_isdcf_date);
        }
 
-       if (!dm.facility.empty ()) {
-               d += "_" + dm.facility;
+       if (_facility && _facility->length() >= 3) {
+               d += "_" + to_upper(_facility->substr(0, 3));
        }
 
        if (_interop) {
@@ -2061,6 +2065,14 @@ Film::set_facility (optional<string> f)
 }
 
 
+void
+Film::set_studio (optional<string> s)
+{
+       FilmChangeSignaller ch (this, Property::STUDIO);
+       _studio = s;
+}
+
+
 optional<DCPTime>
 Film::marker (dcp::Marker type) const
 {
index 6b50bba5e9759a2ffd39e83dce4f988863bb3451..fa87c6c35f99e62bbe0619ba7d5b40f0f3c069b6 100644 (file)
@@ -239,6 +239,7 @@ public:
                CHAIN,
                DISTRIBUTOR,
                FACILITY,
+               STUDIO,
                LUMINANCE,
        };
 
@@ -373,6 +374,10 @@ public:
                return _facility;
        }
 
+       boost::optional<std::string> studio () const {
+               return _studio;
+       }
+
        boost::optional<dcp::Luminance> luminance () const {
                return _luminance;
        }
@@ -416,6 +421,7 @@ public:
        void set_status (dcp::Status s);
        void set_chain (boost::optional<std::string> c = boost::none);
        void set_facility (boost::optional<std::string> f = boost::none);
+       void set_studio (boost::optional<std::string> s = boost::none);
        void set_distributor (boost::optional<std::string> d = boost::none);
        void set_luminance (boost::optional<dcp::Luminance> l = boost::none);
 
@@ -522,6 +528,7 @@ private:
        boost::optional<std::string> _chain;
        boost::optional<std::string> _distributor;
        boost::optional<std::string> _facility;
+       boost::optional<std::string> _studio;
        boost::optional<dcp::Luminance> _luminance;
 
        int _state_version;
index c190ba3dcc1cbddc733a9ea6bb701955195bc2c4..eb8bcb1a543af2c64fd44830573c8c8adb617c09 100644 (file)
@@ -34,10 +34,7 @@ using std::shared_ptr;
 using dcp::raw_convert;
 
 ISDCFMetadata::ISDCFMetadata (cxml::ConstNodePtr node)
-       : studio (node->string_child ("Studio"))
-       , facility (node->string_child ("Facility"))
-       /* This stuff was added later */
-       , temp_version (node->optional_bool_child ("TempVersion").get_value_or (false))
+       : temp_version (node->optional_bool_child ("TempVersion").get_value_or (false))
        , pre_release (node->optional_bool_child ("PreRelease").get_value_or (false))
        , red_band (node->optional_bool_child ("RedBand").get_value_or (false))
        , chain (node->optional_string_child ("Chain").get_value_or (""))
@@ -50,8 +47,6 @@ ISDCFMetadata::ISDCFMetadata (cxml::ConstNodePtr node)
 void
 ISDCFMetadata::as_xml (xmlpp::Node* root) const
 {
-       root->add_child("Studio")->add_child_text (studio);
-       root->add_child("Facility")->add_child_text (facility);
        root->add_child("TempVersion")->add_child_text (temp_version ? "1" : "0");
        root->add_child("PreRelease")->add_child_text (pre_release ? "1" : "0");
        root->add_child("RedBand")->add_child_text (red_band ? "1" : "0");
@@ -63,9 +58,7 @@ ISDCFMetadata::as_xml (xmlpp::Node* root) const
 bool
 operator== (ISDCFMetadata const & a, ISDCFMetadata const & b)
 {
-        return a.studio == b.studio &&
-               a.facility == b.facility &&
-               a.temp_version == b.temp_version &&
+        return a.temp_version == b.temp_version &&
                a.pre_release == b.pre_release &&
                a.red_band == b.red_band &&
                a.chain == b.chain &&
index 1c80e7b5ddef19260ec66c41a7b69492164df381..b578dc997872b71ce434289741bea1c40f753b88 100644 (file)
@@ -43,8 +43,6 @@ public:
        void as_xml (xmlpp::Node *) const;
        void read_old_metadata (std::string, std::string);
 
-       std::string studio;
-       std::string facility;
        /** true if this is a temporary version (without final picture or sound) */
        bool temp_version;
        /** true if this is a pre-release version (final picture and sound, but without accessibility features) */
index 6d0e6496519e885d4608f71c0ef29f28903b4f8e..a46ae0226c7819674be74360edf551402333b284 100644 (file)
@@ -450,6 +450,8 @@ DCPPanel::film_changed (Film::Property p)
        case Film::Property::VERSION_NUMBER:
        case Film::Property::RELEASE_TERRITORY:
        case Film::Property::RATINGS:
+       case Film::Property::FACILITY:
+       case Film::Property::STUDIO:
                setup_dcp_name ();
                break;
        default:
index f7cb8df8c6471fc95978aa6bf948689611c1e2c2..559047742203a8ca8f04df141e7d4fe1abeb286c 100644 (file)
@@ -35,12 +35,6 @@ using std::shared_ptr;
 ISDCFMetadataDialog::ISDCFMetadataDialog (wxWindow* parent, ISDCFMetadata dm, bool threed)
        : TableDialog (parent, _("ISDCF name"), 2, 1, true)
 {
-       add (_("Studio (e.g. TCF)"), true);
-       _studio = add (new wxTextCtrl (this, wxID_ANY));
-
-       add (_("Facility (e.g. DLA)"), true);
-       _facility = add (new wxTextCtrl (this, wxID_ANY));
-
        _temp_version = add (new CheckBox(this, _("Temp version")));
        add_spacer ();
 
@@ -63,8 +57,6 @@ ISDCFMetadataDialog::ISDCFMetadataDialog (wxWindow* parent, ISDCFMetadata dm, bo
        add (_("Mastered luminance (e.g. 14fl)"), true);
        _mastered_luminance = add (new wxTextCtrl (this, wxID_ANY));
 
-       _studio->SetValue (std_to_wx (dm.studio));
-       _facility->SetValue (std_to_wx (dm.facility));
        _temp_version->SetValue (dm.temp_version);
        _pre_release->SetValue (dm.pre_release);
        _red_band->SetValue (dm.red_band);
@@ -81,8 +73,6 @@ ISDCFMetadataDialog::isdcf_metadata () const
 {
        ISDCFMetadata dm;
 
-       dm.studio = wx_to_std (_studio->GetValue ());
-       dm.facility = wx_to_std (_facility->GetValue ());
        dm.temp_version = _temp_version->GetValue ();
        dm.pre_release = _pre_release->GetValue ();
        dm.red_band = _red_band->GetValue ();
index 2fc8ca8c30639b1fba6ba8c66b1105358c049824..47cfd54a703c85de946e45a971b3c0ffd56794d9 100644 (file)
@@ -33,8 +33,6 @@ public:
        ISDCFMetadata isdcf_metadata () const;
 
 private:
-       wxTextCtrl* _studio;
-       wxTextCtrl* _facility;
        wxCheckBox* _temp_version;
        wxCheckBox* _pre_release;
        wxCheckBox* _red_band;
index 376591ca23760977457b23f8e767c3bfa1b21ba8..17151161ca7d0463f7e302a1ff2419632f49feb8 100644 (file)
@@ -72,9 +72,18 @@ MetadataDialog::setup ()
        overall_sizer->Layout ();
        overall_sizer->SetSizeHints (this);
 
+       _enable_facility->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::enable_facility_changed, this));
+       _facility->Bind (wxEVT_TEXT, boost::bind(&MetadataDialog::facility_changed, this));
+       _enable_studio->Bind (wxEVT_CHECKBOX, boost::bind(&MetadataDialog::enable_studio_changed, this));
+       _studio->Bind (wxEVT_TEXT, boost::bind(&MetadataDialog::studio_changed, this));
+
        _film_changed_connection = film()->Change.connect(boost::bind(&MetadataDialog::film_changed, this, _1, _2));
 
        film_changed (ChangeType::DONE, Film::Property::RELEASE_TERRITORY);
+       film_changed (ChangeType::DONE, Film::Property::FACILITY);
+       film_changed (ChangeType::DONE, Film::Property::STUDIO);
+
+       setup_sensitivity ();
 }
 
 
@@ -92,6 +101,16 @@ MetadataDialog::film_changed (ChangeType type, Film::Property property)
                        _release_territory = *rt;
                        checked_set (_release_territory_text, std_to_wx(*dcp::LanguageTag::get_subtag_description(*_release_territory)));
                }
+       } else if (property == Film::Property::FACILITY) {
+               checked_set (_enable_facility, static_cast<bool>(film()->facility()));
+               if (film()->facility()) {
+                       checked_set (_facility, *film()->facility());
+               }
+       } else if (property == Film::Property::STUDIO) {
+               checked_set (_enable_studio, static_cast<bool>(film()->studio()));
+               if (film()->studio()) {
+                       checked_set (_studio, *film()->studio());
+               }
        }
 }
 
@@ -136,6 +155,8 @@ MetadataDialog::setup_sensitivity ()
        auto const enabled = _enable_release_territory->GetValue();
        _release_territory_text->Enable (enabled);
        _edit_release_territory->Enable (enabled);
+       _facility->Enable (_enable_facility->GetValue());
+       _studio->Enable (_enable_studio->GetValue());
 }
 
 
@@ -150,3 +171,57 @@ MetadataDialog::enable_release_territory_changed ()
        }
 }
 
+
+void
+MetadataDialog::setup_advanced (wxPanel* panel, wxSizer* sizer)
+{
+       _enable_facility = new wxCheckBox (panel, wxID_ANY, _("Facility"));
+       sizer->Add (_enable_facility, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL);
+       _facility = new wxTextCtrl (panel, wxID_ANY);
+       sizer->Add (_facility, 1, wxEXPAND);
+
+       _enable_studio = new wxCheckBox (panel, wxID_ANY, _("Studio"));
+       sizer->Add (_enable_studio, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL);
+       _studio = new wxTextCtrl (panel, wxID_ANY);
+       sizer->Add (_studio, 1, wxEXPAND);
+}
+
+
+void
+MetadataDialog::facility_changed ()
+{
+       film()->set_facility (wx_to_std(_facility->GetValue()));
+}
+
+
+void
+MetadataDialog::enable_facility_changed ()
+{
+       setup_sensitivity ();
+       if (_enable_facility->GetValue()) {
+               film()->set_facility (wx_to_std(_facility->GetValue()));
+       } else {
+               film()->set_facility ();
+       }
+}
+
+
+void
+MetadataDialog::studio_changed ()
+{
+       film()->set_studio (wx_to_std(_studio->GetValue()));
+}
+
+
+void
+MetadataDialog::enable_studio_changed ()
+{
+       setup_sensitivity ();
+       if (_enable_studio->GetValue()) {
+               film()->set_studio (wx_to_std(_studio->GetValue()));
+       } else {
+               film()->set_studio ();
+       }
+}
+
+
index 8483d861506d362194e20c2d89f1376ed99c7200..50533fc0fe7fd2962727cd39e6511008e5aca44c 100644 (file)
@@ -44,13 +44,17 @@ public:
 
 protected:
        virtual void setup_standard (wxPanel*, wxSizer*);
-       virtual void setup_advanced (wxPanel*, wxSizer*) {}
+       virtual void setup_advanced (wxPanel*, wxSizer*);
        virtual void film_changed (ChangeType type, Film::Property property);
        virtual void setup_sensitivity ();
 
 private:
        void edit_release_territory ();
        void enable_release_territory_changed ();
+       void facility_changed ();
+       void enable_facility_changed ();
+       void studio_changed ();
+       void enable_studio_changed ();
 
        wxCheckBox* _enable_release_territory;
        /** The current release territory displayed in the UI; since we can't easily convert
@@ -60,6 +64,10 @@ private:
        boost::optional<dcp::LanguageTag::RegionSubtag> _release_territory;
        wxStaticText* _release_territory_text;
        Button* _edit_release_territory;
+       wxCheckBox* _enable_facility;
+       wxTextCtrl* _facility;
+       wxCheckBox* _enable_studio;
+       wxTextCtrl* _studio;
 
        boost::signals2::scoped_connection _film_changed_connection;
 };
index 857be282c8ba75a0917d11185047672c89f6d81a..37a957921808c0988a314e743cd54bbbcbd66872 100644 (file)
@@ -120,11 +120,6 @@ SMPTEMetadataDialog::setup_advanced (wxPanel* panel, wxSizer* sizer)
        _distributor = new wxTextCtrl (panel, wxID_ANY);
        sizer->Add (_distributor, 1, wxEXPAND);
 
-       _enable_facility = new wxCheckBox (panel, wxID_ANY, _("Facility"));
-       sizer->Add (_enable_facility, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL);
-       _facility = new wxTextCtrl (panel, wxID_ANY);
-       sizer->Add (_facility, 1, wxEXPAND);
-
        add_label_to_sizer (sizer, panel, _("Luminance"), true, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL);
        {
                auto s = new wxBoxSizer (wxHORIZONTAL);
@@ -187,8 +182,6 @@ SMPTEMetadataDialog::setup ()
        _chain->Bind (wxEVT_TEXT, boost::bind(&SMPTEMetadataDialog::chain_changed, this));
        _enable_distributor->Bind (wxEVT_CHECKBOX, boost::bind(&SMPTEMetadataDialog::enable_distributor_changed, this));
        _distributor->Bind (wxEVT_TEXT, boost::bind(&SMPTEMetadataDialog::distributor_changed, this));
-       _enable_facility->Bind (wxEVT_CHECKBOX, boost::bind(&SMPTEMetadataDialog::enable_facility_changed, this));
-       _facility->Bind (wxEVT_TEXT, boost::bind(&SMPTEMetadataDialog::facility_changed, this));
        _luminance_value->Bind (wxEVT_SPINCTRLDOUBLE, boost::bind(&SMPTEMetadataDialog::luminance_changed, this));
        _luminance_unit->Bind (wxEVT_CHOICE, boost::bind(&SMPTEMetadataDialog::luminance_changed, this));
 
@@ -197,7 +190,6 @@ SMPTEMetadataDialog::setup ()
        film_changed (ChangeType::DONE, Film::Property::STATUS);
        film_changed (ChangeType::DONE, Film::Property::CHAIN);
        film_changed (ChangeType::DONE, Film::Property::DISTRIBUTOR);
-       film_changed (ChangeType::DONE, Film::Property::FACILITY);
        film_changed (ChangeType::DONE, Film::Property::CONTENT_VERSIONS);
        film_changed (ChangeType::DONE, Film::Property::LUMINANCE);
 
@@ -240,11 +232,6 @@ SMPTEMetadataDialog::film_changed (ChangeType type, Film::Property property)
                if (film()->distributor()) {
                        checked_set (_distributor, *film()->distributor());
                }
-       } else if (property == Film::Property::FACILITY) {
-               checked_set (_enable_facility, static_cast<bool>(film()->facility()));
-               if (film()->facility()) {
-                       checked_set (_facility, *film()->facility());
-               }
        } else if (property == Film::Property::LUMINANCE) {
                auto lum = film()->luminance();
                if (lum) {
@@ -338,13 +325,6 @@ SMPTEMetadataDialog::distributor_changed ()
 }
 
 
-void
-SMPTEMetadataDialog::facility_changed ()
-{
-       film()->set_facility (wx_to_std(_facility->GetValue()));
-}
-
-
 void
 SMPTEMetadataDialog::luminance_changed ()
 {
@@ -371,7 +351,6 @@ SMPTEMetadataDialog::setup_sensitivity ()
 
        _chain->Enable (_enable_chain->GetValue());
        _distributor->Enable (_enable_distributor->GetValue());
-       _facility->Enable (_enable_facility->GetValue());
 }
 
 
@@ -399,15 +378,3 @@ SMPTEMetadataDialog::enable_distributor_changed ()
 }
 
 
-void
-SMPTEMetadataDialog::enable_facility_changed ()
-{
-       setup_sensitivity ();
-       if (_enable_facility->GetValue()) {
-               film()->set_facility (wx_to_std(_facility->GetValue()));
-       } else {
-               film()->set_facility ();
-       }
-}
-
-
index 28cc381439e3c0afa023a2a879650c0489475c41..f1cbee9774181ae5b0c6fa0c8573cbbba173876b 100644 (file)
@@ -59,11 +59,9 @@ private:
        void status_changed ();
        void chain_changed ();
        void distributor_changed ();
-       void facility_changed ();
        void luminance_changed ();
        void enable_chain_changed ();
        void enable_distributor_changed ();
-       void enable_facility_changed ();
 
        LanguageTagWidget* _name_language;
        wxSpinCtrl* _version_number;
@@ -72,8 +70,6 @@ private:
        wxTextCtrl* _chain;
        wxCheckBox* _enable_distributor;
        wxTextCtrl* _distributor;
-       wxCheckBox* _enable_facility;
-       wxTextCtrl* _facility;
        wxSpinCtrlDouble* _luminance_value;
        wxChoice* _luminance_unit;
        EditableList<dcp::Rating, RatingDialog>* _ratings;
index 4ddf57e7044deb9ea5b64f539a66147ed1f043dc..b55cea1adfaf487f0a27539136276f18772f11a4 100644 (file)
@@ -41,8 +41,9 @@
 
 
 using std::cout;
-using std::shared_ptr;
 using std::make_shared;
+using std::shared_ptr;
+using std::string;
 
 
 BOOST_AUTO_TEST_CASE (isdcf_name_test)
@@ -63,17 +64,16 @@ BOOST_AUTO_TEST_CASE (isdcf_name_test)
        film->set_content_versions({"1"});
        film->set_release_territory(dcp::LanguageTag::RegionSubtag("GB"));
        film->set_ratings({dcp::Rating("BBFC", "PG")});
+       film->set_studio (string("ST"));
+       film->set_facility (string("FAC"));
        ISDCFMetadata m;
-       m.studio = "ST";
-       m.facility = "FA";
        film->set_isdcf_metadata (m);
        film->set_interop (true);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilm_FTR-1_F_EN-XX_GB-PG_10_2K_ST_20140704_FA_IOP_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilm_FTR-1_F_EN-XX_GB-PG_10_2K_ST_20140704_FAC_IOP_OV");
 
        /* Check that specifying no audio language writes XX */
        audio->audio->set_language (boost::none);
-       film->set_isdcf_metadata (m);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilm_FTR-1_F_XX-XX_GB-PG_10_2K_ST_20140704_FA_IOP_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilm_FTR-1_F_XX-XX_GB-PG_10_2K_ST_20140704_FAC_IOP_OV");
 
        /* Test a long name and some different data */
 
@@ -91,21 +91,21 @@ BOOST_AUTO_TEST_CASE (isdcf_name_test)
        film->set_version_number(2);
        film->set_release_territory(dcp::LanguageTag::RegionSubtag("US"));
        film->set_ratings({dcp::Rating("MPA", "R")});
+       film->set_studio (string("di"));
+       film->set_facility (string("ppfacility"));
        BOOST_REQUIRE (!wait_for_jobs());
        audio = content_factory("test/data/sine_440.wav").front();
        film->examine_and_add_content (audio);
        BOOST_REQUIRE (!wait_for_jobs());
        BOOST_REQUIRE (audio->audio);
        audio->audio->set_language (dcp::LanguageTag("de-DE"));
-       m.studio = "DI";
-       m.facility = "PP";
        film->set_isdcf_metadata (m);
        film->set_interop (false);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_TLR-2_S_DE-fr_US-R_MOS_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_TLR-2_S_DE-fr_US-R_MOS_4K_DI_20140704_PPF_SMPTE_OV");
 
        /* Test to see that RU ratings like 6+ survive */
        film->set_ratings({dcp::Rating("RARS", "6+")});
-       BOOST_CHECK_EQUAL (film->dcp_name(false), "MyNiceFilmWith_TLR-2_S_DE-fr_US-6+_MOS_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->dcp_name(false), "MyNiceFilmWith_TLR-2_S_DE-fr_US-6+_MOS_4K_DI_20140704_PPF_SMPTE_OV");
        film->set_ratings({dcp::Rating("MPA", "R")});
 
        /* Test interior aspect ratio: shouldn't be shown with trailers */
@@ -115,26 +115,26 @@ BOOST_AUTO_TEST_CASE (isdcf_name_test)
        BOOST_REQUIRE (!wait_for_jobs());
        content->video->set_custom_ratio (1.33);
        film->set_container (Ratio::from_id ("185"));
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_TLR-2_F_DE-fr_US-R_MOS_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_TLR-2_F_DE-fr_US-R_MOS_4K_DI_20140704_PPF_SMPTE_OV");
 
        /* But should be shown for anything else */
 
        film->set_dcp_content_type (DCPContentType::from_isdcf_name ("XSN"));
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PPF_SMPTE_OV");
 
        /* And it should always be numeric */
 
        content->video->set_custom_ratio (2.39);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2_F-239_DE-fr_US-R_MOS_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2_F-239_DE-fr_US-R_MOS_4K_DI_20140704_PPF_SMPTE_OV");
 
        content->video->set_custom_ratio (1.9);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2_F-190_DE-fr_US-R_MOS_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2_F-190_DE-fr_US-R_MOS_4K_DI_20140704_PPF_SMPTE_OV");
        content->video->set_custom_ratio (1.33);
 
        /* Test 3D */
 
        film->set_three_d (true);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2-3D_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PP_SMPTE-3D_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2-3D_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PPF_SMPTE-3D_OV");
 
        /* Test content type modifiers */
 
@@ -147,7 +147,7 @@ BOOST_AUTO_TEST_CASE (isdcf_name_test)
        m.mastered_luminance = "4fl";
        film->set_isdcf_metadata (m);
        film->set_video_frame_rate (48);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2-Temp-Pre-RedBand-MyChain-2D-4fl-48_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2-Temp-Pre-RedBand-MyChain-2D-4fl-48_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PPF_SMPTE_OV");
 
        /* Test a name which is already in camelCase */
 
@@ -161,12 +161,12 @@ BOOST_AUTO_TEST_CASE (isdcf_name_test)
        film->set_isdcf_metadata (m);
        film->set_video_frame_rate (24);
        film->set_name ("IKnowCamels");
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "IKnowCamels_XSN-2_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "IKnowCamels_XSN-2_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PPF_SMPTE_OV");
 
        /* And one in capitals */
 
        film->set_name ("LIKE SHOUTING");
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_MOS_4K_DI_20140704_PPF_SMPTE_OV");
 
        /* Test audio channel markup */
 
@@ -174,48 +174,48 @@ BOOST_AUTO_TEST_CASE (isdcf_name_test)
        auto sound = make_shared<FFmpegContent>("test/data/sine_440.wav");
        film->examine_and_add_content (sound);
        BOOST_REQUIRE (!wait_for_jobs());
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_10_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_10_4K_DI_20140704_PPF_SMPTE_OV");
 
        AudioMapping mapping = sound->audio->mapping ();
 
        mapping.set (0, dcp::Channel::LEFT, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_20_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_20_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::RIGHT, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_30_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_30_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::LFE, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_31_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_31_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::LS, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_41_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_41_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::RS, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::HI, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51_4K_DI_20140704_PPF_SMPTE_OV");
 
        film->set_audio_channels (8);
        mapping.set (0, dcp::Channel::HI, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51-HI_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51-HI_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::VI, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51-HI-VI_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51-HI-VI_4K_DI_20140704_PPF_SMPTE_OV");
 
        film->set_audio_channels(10);
        mapping.set (0, dcp::Channel::HI, 0.0);
        mapping.set (0, dcp::Channel::VI, 0.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::HI, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51-HI_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51-HI_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::VI, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51-HI-VI_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_51-HI-VI_4K_DI_20140704_PPF_SMPTE_OV");
 
        film->set_audio_channels(12);
        mapping.set (0, dcp::Channel::BSL, 1.0);
@@ -223,12 +223,12 @@ BOOST_AUTO_TEST_CASE (isdcf_name_test)
        mapping.set (0, dcp::Channel::HI, 0.0);
        mapping.set (0, dcp::Channel::VI, 0.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_71_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_71_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::HI, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_71-HI_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_71-HI_4K_DI_20140704_PPF_SMPTE_OV");
        mapping.set (0, dcp::Channel::VI, 1.0);
        sound->audio->set_mapping (mapping);
-       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_71-HI-VI_4K_DI_20140704_PP_SMPTE_OV");
+       BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-fr_US-R_71-HI-VI_4K_DI_20140704_PPF_SMPTE_OV");
 }