summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2025-03-27 01:43:05 +0100
committerCarl Hetherington <cth@carlh.net>2025-03-27 01:43:05 +0100
commit059f68ed9d6d74fc6dd28e034db8a4f743c7a76c (patch)
tree5b41149768ec75e0ea60f00dcb70f0ba21558b1a
parentd880fa106cd803e400aeb246fb4db757a9a87677 (diff)
Bump libdcp for Bv2.0 fixes (#2988).
-rw-r--r--cscript2
-rw-r--r--src/lib/writer.cc5
-rw-r--r--test/bv20_test.cc59
3 files changed, 63 insertions, 3 deletions
diff --git a/cscript b/cscript
index 0f09ae3bf..d3beaf92b 100644
--- a/cscript
+++ b/cscript
@@ -436,7 +436,7 @@ def build_with_cpp17(target):
def dependencies(target, options):
- deps = [('libdcp', 'v1.10.17', {'c++17': build_with_cpp17(target)})]
+ deps = [('libdcp', 'v1.10.18', {'c++17': build_with_cpp17(target)})]
deps.append(('libsub', 'v1.6.53'))
deps.append(('leqm-nrt', '30dcaea1373ac62fba050e02ce5b0c1085797a23'))
deps.append(('rtaudio', 'f619b76'))
diff --git a/src/lib/writer.cc b/src/lib/writer.cc
index 7a933724c..9f64a1686 100644
--- a/src/lib/writer.cc
+++ b/src/lib/writer.cc
@@ -595,7 +595,8 @@ Writer::finish()
auto cpl = make_shared<dcp::CPL>(
film()->dcp_name(),
film()->dcp_content_type()->libdcp_kind(),
- film()->interop() ? dcp::Standard::INTEROP : dcp::Standard::SMPTE
+ film()->interop() ? dcp::Standard::INTEROP : dcp::Standard::SMPTE,
+ film()->limit_to_smpte_bv20() ? dcp::Profile::SMPTE_BV20 : dcp::Profile::SMPTE_BV21
);
dcp.add (cpl);
@@ -705,7 +706,7 @@ Writer::finish()
if (dcpomatic::film::is_vf(film())) {
group_id = dcp::make_uuid();
}
- dcp.write_xml(signer, !film()->limit_to_smpte_bv20(), Config::instance()->dcp_metadata_filename_format(), group_id);
+ dcp.write_xml(signer, Config::instance()->dcp_metadata_filename_format(), group_id);
LOG_GENERAL (
N_("Wrote %1 FULL, %2 FAKE, %3 REPEAT, %4 pushed to disk"), _full_written, _fake_written, _repeat_written, _pushed_to_disk
diff --git a/test/bv20_test.cc b/test/bv20_test.cc
index d41868601..796445075 100644
--- a/test/bv20_test.cc
+++ b/test/bv20_test.cc
@@ -32,6 +32,7 @@ LIBDCP_ENABLE_WARNINGS
using std::shared_ptr;
+using std::string;
bool
@@ -68,6 +69,61 @@ has_mxf_mca_subdescriptors(shared_ptr<const Film> film)
}
+string
+constraints_profile(shared_ptr<const Film> film)
+{
+ auto cpl = dcp::file_to_string(find_file(film->dir(film->dcp_name()), "cpl_"));
+ cxml::Document xml("CompositionPlaylist");
+ xml.read_string(cpl);
+
+ auto reel_list = xml.node_child("ReelList");
+ if (!reel_list) {
+ return {};
+ }
+
+ auto reel = reel_list->node_child("Reel");
+ if (!reel) {
+ return {};
+ }
+
+ auto asset_list = reel->node_child("AssetList");
+ if (!asset_list) {
+ return {};
+ }
+
+ auto meta_asset = asset_list->node_child("CompositionMetadataAsset");
+ if (!meta_asset) {
+ return {};
+ }
+
+ auto extension = meta_asset->node_child("ExtensionMetadataList");
+ if (!extension) {
+ return {};
+ }
+
+ auto metadata = extension->node_child("ExtensionMetadata");
+ if (!metadata) {
+ return {};
+ }
+
+ auto property_list = metadata->node_child("PropertyList");
+ if (!property_list) {
+ return {};
+ }
+
+ auto property = property_list->node_child("Property");
+ if (!property) {
+ return {};
+ }
+
+ if (auto value = property->optional_string_child("Value")) {
+ return *value;
+ }
+
+ return {};
+}
+
+
BOOST_AUTO_TEST_CASE(bv21_extensions_used_when_not_limited)
{
auto picture = content_factory("test/data/flat_red.png");
@@ -78,6 +134,8 @@ BOOST_AUTO_TEST_CASE(bv21_extensions_used_when_not_limited)
BOOST_CHECK(has_cpl_mca_subdescriptors(film));
BOOST_CHECK(has_mxf_mca_subdescriptors(film));
+ BOOST_CHECK(constraints_profile(film) == "SMPTE-RDD-52:2020-Bv2.1");
+
}
@@ -92,5 +150,6 @@ BOOST_AUTO_TEST_CASE(bv21_extensions_not_used_when_limited)
BOOST_CHECK(!has_cpl_mca_subdescriptors(film));
BOOST_CHECK(!has_mxf_mca_subdescriptors(film));
+ BOOST_CHECK(constraints_profile(film) == "SMPTE-RDD-52:2020-Bv2.0");
}