diff options
| author | Carl Hetherington <cth@carlh.net> | 2025-12-17 18:23:45 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2025-12-18 12:54:28 +0100 |
| commit | 360a935d7422c0fae0c85f32447e751f26fc37d5 (patch) | |
| tree | 71012097ba0425ede0a16d48dbaa98aaceb9ccc2 | |
| parent | 3a001037ec1131c236b253d16bfc2c3bc8f36212 (diff) | |
Add CPL::picture_encoding().
| -rw-r--r-- | src/cpl.cc | 28 | ||||
| -rw-r--r-- | src/cpl.h | 4 | ||||
| -rw-r--r-- | test/cpl_test.cc | 26 |
3 files changed, 58 insertions, 0 deletions
@@ -850,3 +850,31 @@ CPL::can_be_read() const return std::all_of(r.begin(), r.end(), [](shared_ptr<const Reel> reel) { return reel->can_be_read(); }); } + +PictureEncoding +CPL::picture_encoding() const +{ + PictureEncoding encoding = PictureEncoding::NO_VIDEO; + + for (auto reel: reels()) { + auto const reel_encoding = reel->picture_encoding(); + switch (reel_encoding) { + case PictureEncoding::NO_VIDEO: + break; + case PictureEncoding::JPEG2000: + case PictureEncoding::MPEG2: + if (encoding == PictureEncoding::NO_VIDEO) { + encoding = reel_encoding; + } else if (encoding != reel_encoding) { + encoding = PictureEncoding::MIXED; + } + break; + case PictureEncoding::MIXED: + encoding = PictureEncoding::MIXED; + break; + } + } + + return encoding; +} + @@ -47,6 +47,7 @@ #include "key.h" #include "language_tag.h" #include "main_sound_configuration.h" +#include "picture_encoding.h" #include "profile.h" #include "rating.h" #include "verify.h" @@ -352,6 +353,9 @@ public: return _read_composition_metadata; } + /** @return picture encoding scheme used by assets in this CPL */ + PictureEncoding picture_encoding() const; + static std::string static_pkl_type(Standard standard); protected: diff --git a/test/cpl_test.cc b/test/cpl_test.cc index 25b3306b..105f30fe 100644 --- a/test/cpl_test.cc +++ b/test/cpl_test.cc @@ -76,3 +76,29 @@ BOOST_AUTO_TEST_CASE(interop_cpl_with_metadata_test) BOOST_CHECK_EQUAL(cpl.annotation_text().get_value_or(""), "EyeLeader2sec_XSN_F-133_XX-XX_MOS_4K_20230124_EYE_IOP_OV"); } + +BOOST_AUTO_TEST_CASE(cpl_picture_encoding_test1) +{ + dcp::DCP dcp(private_test / "TONEPLATES-SMPTE-PLAINTEXT_TST_F_XX-XX_ITL-TD_51-XX_2K_WOE_20111001_WOE_OV"); + dcp.read(); + BOOST_REQUIRE_EQUAL(dcp.cpls().size(), 1U); + BOOST_CHECK(dcp.cpls()[0]->picture_encoding() == dcp::PictureEncoding::JPEG2000); +} + + +BOOST_AUTO_TEST_CASE(cpl_picture_encoding_test2) +{ + dcp::DCP dcp(private_test / "data" / "mas"); + dcp.read(); + BOOST_REQUIRE_EQUAL(dcp.cpls().size(), 1U); + BOOST_CHECK(dcp.cpls()[0]->picture_encoding() == dcp::PictureEncoding::MPEG2); +} + + +BOOST_AUTO_TEST_CASE(cpl_picture_encoding_test3) +{ + dcp::DCP dcp(private_test / "data" / "SMPTE_TST-1-Bv21_S_EN-EN-CCAP_US_51-HI-VI_2K_ISDCF_20170110_DTB_SMPTE_OV"); + dcp.read(); + BOOST_REQUIRE_EQUAL(dcp.cpls().size(), 1U); + BOOST_CHECK(dcp.cpls()[0]->picture_encoding() == dcp::PictureEncoding::JPEG2000); +} |
