summaryrefslogtreecommitdiff
path: root/src/lib/film.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2024-05-17 15:52:39 +0200
committerCarl Hetherington <cth@carlh.net>2024-05-19 23:07:52 +0200
commita6a6d8a7a1c4c59bac9de6fa8f4cd879ebeef55d (patch)
treece23c7951554df079f09259dd1a33f1c0c210151 /src/lib/film.cc
parente9627c2ac61551e3598601805d12938479ad3dff (diff)
Generalise SMPTE Bv2.0 limitation to also support SMPTE A.smpte-a
Diffstat (limited to 'src/lib/film.cc')
-rw-r--r--src/lib/film.cc27
1 files changed, 19 insertions, 8 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc
index d9ab6e2a3..8a7e01aaf 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -167,7 +167,6 @@ Film::Film (optional<boost::filesystem::path> dir)
, _three_d (false)
, _sequence (true)
, _interop (Config::instance()->default_interop ())
- , _limit_to_smpte_bv20(false)
, _audio_processor (0)
, _reel_type (ReelType::SINGLE)
, _reel_length (2000000000)
@@ -251,10 +250,16 @@ Film::video_identifier () const
s += "_I";
} else {
s += "_S";
- if (_limit_to_smpte_bv20) {
+ switch (_smpte_flavour) {
+ case dcp::SMPTEFlavour::A:
+ s += "_LA";
+ break;
+ case dcp::SMPTEFlavour::BV20:
s += "_L20";
- } else {
+ break;
+ case dcp::SMPTEFlavour::BV21:
s += "_L21";
+ break;
}
}
@@ -403,7 +408,7 @@ Film::metadata (bool with_content_paths) const
root->add_child("ThreeD")->add_child_text (_three_d ? "1" : "0");
root->add_child("Sequence")->add_child_text (_sequence ? "1" : "0");
root->add_child("Interop")->add_child_text (_interop ? "1" : "0");
- root->add_child("LimitToSMPTEBv20")->add_child_text(_limit_to_smpte_bv20 ? "1" : "0");
+ root->add_child("SMPTEFlavour")->add_child_text(smpte_flavour_to_string(_smpte_flavour));
root->add_child("Encrypted")->add_child_text (_encrypted ? "1" : "0");
root->add_child("Key")->add_child_text (_key.hex ());
root->add_child("ContextID")->add_child_text (_context_id);
@@ -580,7 +585,13 @@ Film::read_metadata (optional<boost::filesystem::path> path)
_three_d = f.bool_child ("ThreeD");
_interop = f.bool_child ("Interop");
- _limit_to_smpte_bv20 = f.optional_bool_child("LimitToSMPTEBv20").get_value_or(false);
+
+ if (auto old = f.optional_bool_child("LimitToSMPTEBv20")) {
+ _smpte_flavour = dcp::SMPTEFlavour::BV20;
+ } else if (auto flavour = f.optional_string_child("SMPTEFlavour")) {
+ _smpte_flavour = string_to_smpte_flavour(*flavour);
+ }
+
_key = dcp::Key (f.string_child ("Key"));
_context_id = f.optional_string_child("ContextID").get_value_or (dcp::make_uuid ());
@@ -1198,10 +1209,10 @@ Film::set_interop (bool i)
void
-Film::set_limit_to_smpte_bv20(bool limit)
+Film::set_smpte_flavour(dcp::SMPTEFlavour flavour)
{
- FilmChangeSignaller ch(this, FilmProperty::LIMIT_TO_SMPTE_BV20);
- _limit_to_smpte_bv20 = limit;
+ FilmChangeSignaller ch(this, FilmProperty::SMPTE_FLAVOUR);
+ _smpte_flavour = flavour;
}