summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2022-12-16 00:19:00 +0100
committerCarl Hetherington <cth@carlh.net>2022-12-16 10:51:34 +0100
commit11cc2c64b148201fbf962c68c21af9f5f706c257 (patch)
treef2e46a0aebcb2260ea254142ab500a211f43b901
parent0e76d77bd43c528ef27ef0c4ee27aa5cb509794e (diff)
Make sure main picture active area values are even (#2392).
-rw-r--r--src/lib/writer.cc4
-rw-r--r--src/wx/verify_dcp_dialog.cc3
-rw-r--r--test/dcp_metadata_test.cc19
3 files changed, 24 insertions, 2 deletions
diff --git a/src/lib/writer.cc b/src/lib/writer.cc
index 2dd46f0b2..2e732c280 100644
--- a/src/lib/writer.cc
+++ b/src/lib/writer.cc
@@ -676,8 +676,8 @@ Writer::finish (boost::filesystem::path output_dcp)
auto active_area = film()->active_area();
if (active_area.width > 0 && active_area.height > 0) {
- /* It's not allowed to have a zero active area width or height */
- cpl->set_main_picture_active_area (active_area);
+ /* It's not allowed to have a zero active area width or height, and the sizes must be multiples of 2 */
+ cpl->set_main_picture_active_area({ active_area.width & ~1, active_area.height & ~1});
}
auto sl = film()->subtitle_languages().second;
diff --git a/src/wx/verify_dcp_dialog.cc b/src/wx/verify_dcp_dialog.cc
index bb51baeac..bd36334cd 100644
--- a/src/wx/verify_dcp_dialog.cc
+++ b/src/wx/verify_dcp_dialog.cc
@@ -380,6 +380,9 @@ VerifyDCPDialog::VerifyDCPDialog (wxWindow* parent, shared_ptr<VerifyDCPJob> job
case dcp::VerificationNote::Code::INVALID_CONTENT_KIND:
add(i, _("An invalid <ContentKind> %n has been used."));
break;
+ case dcp::VerificationNote::Code::INVALID_MAIN_PICTURE_ACTIVE_AREA:
+ add(i, _("The <MainPictureActiveArea> is either not a multiple of 2, or is bigger than an asset."));
+ break;
}
}
diff --git a/test/dcp_metadata_test.cc b/test/dcp_metadata_test.cc
index 8d410e13d..dd81a4161 100644
--- a/test/dcp_metadata_test.cc
+++ b/test/dcp_metadata_test.cc
@@ -50,3 +50,22 @@ BOOST_AUTO_TEST_CASE (dcp_metadata_test)
BOOST_CHECK_EQUAL (cpls[0]->issuer(), "this is the issuer");
}
+
+BOOST_AUTO_TEST_CASE(main_picture_active_area_test)
+{
+ auto content = content_factory(TestPaths::private_data() / "bbc405.png");
+ auto film = new_test_film2("main_picture_active_area_test", content);
+ film->set_resolution(Resolution::FOUR_K);
+ film->set_interop(false);
+
+ make_and_verify_dcp(film, { dcp::VerificationNote::Code::MISSING_CPL_METADATA });
+
+ dcp::DCP dcp(film->dir(film->dcp_name()));
+ dcp.read();
+ auto cpls = dcp.cpls();
+ BOOST_REQUIRE_EQUAL(cpls.size(), 1U);
+
+ BOOST_REQUIRE(static_cast<bool>(cpls[0]->main_picture_active_area()));
+ BOOST_REQUIRE(cpls[0]->main_picture_active_area() == dcp::Size(2866, 2160));
+}
+