diff options
Diffstat (limited to 'test/verify_test.cc')
| -rw-r--r-- | test/verify_test.cc | 1916 |
1 files changed, 921 insertions, 995 deletions
diff --git a/test/verify_test.cc b/test/verify_test.cc index dc5fa017..88e6681b 100644 --- a/test/verify_test.cc +++ b/test/verify_test.cc @@ -245,16 +245,16 @@ to_string(dcp::VerificationNote const& note) "\n [%1 %2 %3 %4 %5 %6 ", static_cast<int>(note.type()), static_cast<int>(note.code()), - note.note().get_value_or("<none>"), note.file().get_value_or("<none>"), note.line().get_value_or(0), - note.frame().get_value_or(0) + note.frame().get_value_or(0), + note.reel_index().get_value_or(-1) ); s += dcp::String::compose( "%1 %2 %3 %4 %5]\n", - note.id().get_value_or("<none>"), - note.other_id().get_value_or("<none>"), + note.asset_id().get_value_or("<none>"), + note.other_asset_id().get_value_or("<none>"), note.cpl_id().get_value_or("<none>"), note.reference_hash().get_value_or("<none>"), note.calculated_hash().get_value_or("<none>") @@ -419,14 +419,6 @@ note(dcp::VerificationNote::Code code, shared_ptr<const dcp::CPL> cpl) static dcp::VerificationNote -note(dcp::VerificationNote::Code code, string note, shared_ptr<const dcp::CPL> cpl) -{ - return dcp::VerificationNote(code, note).set_cpl_id(cpl->id()); -} - - -static -dcp::VerificationNote note(dcp::VerificationNote::Code code, boost::filesystem::path path, shared_ptr<const dcp::CPL> cpl) { return dcp::VerificationNote(code, path).set_cpl_id(cpl->id()); @@ -529,21 +521,19 @@ BOOST_AUTO_TEST_CASE (verify_incorrect_picture_sound_hash) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - dcp::VerificationNote( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - canonical(cpl->file().get()) - ).set_cpl_id(dcp_test1_cpl_id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + dcp::VerificationNote(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(dcp_test1_cpl_id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id("5407b210-4441-4e97-8b16-8bdc7c12da54"), VN( VC::INCORRECT_PICTURE_HASH, canonical(video_path) - ).set_cpl_id(dcp_test1_cpl_id()).set_reference_hash(video_calc.old_hash()).set_calculated_hash(video_calc.new_hash()), + ).set_cpl_id(dcp_test1_cpl_id()).set_reference_hash(video_calc.old_hash()).set_calculated_hash(video_calc.new_hash()) + .set_reel_index(0).set_asset_id("5407b210-4441-4e97-8b16-8bdc7c12da54"), VN( VC::INCORRECT_SOUND_HASH, canonical(audio_path) - ).set_cpl_id(dcp_test1_cpl_id()).set_reference_hash(audio_calc.old_hash()).set_calculated_hash(audio_calc.new_hash()), + ).set_cpl_id(dcp_test1_cpl_id()).set_reference_hash(audio_calc.old_hash()).set_calculated_hash(audio_calc.new_hash()) + .set_reel_index(0).set_asset_id("97f0f352-5b77-48ee-a558-9df37717f4fa"), }); } @@ -571,23 +561,19 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_picture_sound_hashes) { note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - canonical(cpl->file().get()) - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id("5407b210-4441-4e97-8b16-8bdc7c12da54"), VN( VC::MISMATCHED_CPL_HASHES, canonical(dir / dcp_test1_cpl()) ).set_cpl_id(dcp_test1_cpl_id()).set_reference_hash("x" + calc.old_hash()).set_calculated_hash(calc.old_hash()), - VN(VC::MISMATCHED_PICTURE_HASHES, canonical(dir / "video.mxf")).set_cpl_id(dcp_test1_cpl_id()), - VN(VC::MISMATCHED_SOUND_HASHES, canonical(dir / "audio.mxf")).set_cpl_id(dcp_test1_cpl_id()), - { VC::INVALID_XML, "value 'x3M7YTgvFKXXMEGLkIbV4miC90FE=' is invalid Base64-encoded binary", canonical(dir / dcp_test1_pkl()), 28 }, - { VC::INVALID_XML, "value 'xskI+5b/9LA/y6h0mcyxysJYanxI=' is invalid Base64-encoded binary", canonical(dir / dcp_test1_pkl()), 12 }, - { VC::INVALID_XML, "value 'xvsVjRV9vhTBPUWfE/TT1o2vdQsI=' is invalid Base64-encoded binary", canonical(dir / dcp_test1_pkl()), 20 }, + VN(VC::MISMATCHED_PICTURE_HASHES, canonical(dir / "video.mxf")).set_cpl_id(dcp_test1_cpl_id()).set_reel_index(0).set_asset_id("5407b210-4441-4e97-8b16-8bdc7c12da54"), + VN(VC::MISMATCHED_SOUND_HASHES, canonical(dir / "audio.mxf")).set_cpl_id(dcp_test1_cpl_id()).set_reel_index(0).set_asset_id("97f0f352-5b77-48ee-a558-9df37717f4fa"), + VN(VC::INVALID_XML, canonical(dir / dcp_test1_pkl()), 28).set_error("value 'x3M7YTgvFKXXMEGLkIbV4miC90FE=' is invalid Base64-encoded binary"), + VN(VC::INVALID_XML, canonical(dir / dcp_test1_pkl()), 12).set_error("value 'xskI+5b/9LA/y6h0mcyxysJYanxI=' is invalid Base64-encoded binary"), + VN(VC::INVALID_XML, canonical(dir / dcp_test1_pkl()), 20).set_error("value 'xvsVjRV9vhTBPUWfE/TT1o2vdQsI=' is invalid Base64-encoded binary"), }); } @@ -612,21 +598,17 @@ BOOST_AUTO_TEST_CASE (verify_failed_read_content_kind) { dir }, {}, { - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id("5407b210-4441-4e97-8b16-8bdc7c12da54"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - canonical(cpl->file().get()) - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id("5407b210-4441-4e97-8b16-8bdc7c12da54"), VN( VC::MISMATCHED_CPL_HASHES, canonical(dir / dcp_test1_cpl()) ).set_cpl_id(dcp_test1_cpl_id()).set_reference_hash(calc.old_hash()).set_calculated_hash(calc.new_hash()), - VN(VC::INVALID_CONTENT_KIND, string("xtrailer")).set_cpl_id(dcp_test1_cpl_id()) + VN(VC::INVALID_CONTENT_KIND).set_cpl_id(dcp_test1_cpl_id()).set_content_kind("xtrailer"), }); } @@ -670,22 +652,18 @@ BOOST_AUTO_TEST_CASE (verify_invalid_picture_frame_rate) std::vector<VN> expected = { - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id("5407b210-4441-4e97-8b16-8bdc7c12da54"), note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - canonical(cpl->file().get()) - ).set_cpl_id(cpl->id()), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id("5407b210-4441-4e97-8b16-8bdc7c12da54"), VN( VC::MISMATCHED_CPL_HASHES, canonical(cpl_path) ).set_cpl_id(cpl->id()).set_calculated_hash("7n7GQ2TbxQbmHYuAR8ml7XDOep8=").set_reference_hash("skI+5b/9LA/y6h0mcyxysJYanxI="), - VN(VC::INVALID_PICTURE_FRAME_RATE, string{"99/1"}).set_cpl_id(cpl->id()) + VN(VC::INVALID_PICTURE_FRAME_RATE).set_cpl_id(cpl->id()).set_reel_index(0).set_frame_rate({99, 1}), }; check_verify_result(dcp::verify({dir}, {}, &stage, &progress, {}, xsd_test).notes, expected); @@ -709,14 +687,10 @@ BOOST_AUTO_TEST_CASE (verify_missing_asset) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - canonical(cpl->file().get()) - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), { VC::MISSING_ASSET, canonical(dir) / "video.mxf" } }); } @@ -738,15 +712,11 @@ BOOST_AUTO_TEST_CASE (verify_empty_asset_path) std::vector<VN> expected = { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - canonical(cpl->file().get()) - ).set_cpl_id(cpl->id()), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), { VC::EMPTY_ASSET_PATH } }; @@ -768,31 +738,25 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_standard) using VC = VN::Code; std::vector<VN> expected = { - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id("5407b210-4441-4e97-8b16-8bdc7c12da54"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id("5407b210-4441-4e97-8b16-8bdc7c12da54"), note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - canonical(cpl->file().get()) - ).set_cpl_id(cpl->id()), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), { VC::MISMATCHED_STANDARD }, - VN(VC::INVALID_XML, "invalid character encountered", canonical(cpl_path), 42).set_cpl_id(cpl->id()), - VN(VC::INVALID_XML, "no declaration found for element 'Id'", canonical(cpl_path), 53).set_cpl_id(cpl->id()), - VN(VC::INVALID_XML, "no declaration found for element 'EditRate'", canonical(cpl_path), 54).set_cpl_id(cpl->id()), - VN(VC::INVALID_XML, "no declaration found for element 'IntrinsicDuration'", canonical(cpl_path), 55).set_cpl_id(cpl->id()), - VN( - VC::INVALID_XML, + VN(VC::INVALID_XML, canonical(cpl_path), 42).set_cpl_id(cpl->id()).set_error("invalid character encountered"), + VN(VC::INVALID_XML, canonical(cpl_path), 53).set_cpl_id(cpl->id()).set_error("no declaration found for element 'Id'"), + VN(VC::INVALID_XML, canonical(cpl_path), 54).set_cpl_id(cpl->id()).set_error("no declaration found for element 'EditRate'"), + VN(VC::INVALID_XML, canonical(cpl_path), 55).set_cpl_id(cpl->id()).set_error("no declaration found for element 'IntrinsicDuration'"), + VN(VC::INVALID_XML, canonical(cpl_path), 149).set_cpl_id(cpl->id()).set_error( "element 'Id' is not allowed for content model '(Id,AnnotationText?,EditRate,IntrinsicDuration," "EntryPoint?,Duration?,FullContentTitleText,ReleaseTerritory?,VersionNumber?,Chain?,Distributor?," "Facility?,AlternateContentVersionList?,Luminance?,MainSoundConfiguration,MainSoundSampleRate," - "MainPictureStoredArea,MainPictureActiveArea,MainSubtitleLanguageList?,ExtensionMetadataList?,)'", - canonical(cpl_path), 149 - ).set_cpl_id(cpl->id()), + "MainPictureStoredArea,MainPictureActiveArea,MainSubtitleLanguageList?,ExtensionMetadataList?,)'" + ), VN( VC::MISMATCHED_CPL_HASHES, canonical(cpl_path) ).set_cpl_id(cpl->id()).set_reference_hash("skI+5b/9LA/y6h0mcyxysJYanxI=").set_calculated_hash("FZ9E7L/pOuJ6aZfbiaANTv8BFOo=") @@ -817,24 +781,19 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_id) using VC = VN::Code; std::vector<VN> expected = { - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id("5407b210-4441-4e97-8b16-8bdc7c12da54"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id("5407b210-4441-4e97-8b16-8bdc7c12da54"), note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - canonical(cpl->file().get()) - ).set_cpl_id(cpl->id()), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), note(VC::MATCHING_CPL_HASHES, cpl), - VN( - VC::INVALID_XML, + VN(VC::INVALID_XML, canonical(cpl_path), 3).set_cpl_id(cpl->id()).set_error( "value 'urn:uuid:6affb8ee-0020-4dff-a53c-17652f6358a' does not match regular expression " - "facet 'urn:uuid:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}'", canonical(cpl_path), 3 - ).set_cpl_id(cpl->id()) + "facet 'urn:uuid:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}'" + ), }; check_verify_result(dcp::verify({dir}, {}, &stage, &progress, {}, xsd_test).notes, expected); @@ -849,28 +808,27 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_issue_date) auto const dir = dcp::String::compose("build/test/verify_test%1", suffix); auto const cpl_path = find_cpl(dir); - auto cpl = std::make_shared<dcp::CPL>(cpl_path); + auto dcp = dcp::DCP(dir); + dcp.read(); + auto const cpl = dcp.cpls()[0]; + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; std::vector<VN> expected = { - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - canonical(cpl->file().get()) - ).set_cpl_id(cpl->id()), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), VN( VC::MISMATCHED_CPL_HASHES, canonical(cpl_path) ).set_cpl_id(cpl->id()).set_reference_hash("skI+5b/9LA/y6h0mcyxysJYanxI=").set_calculated_hash("sz3BeIugJ567q3HMnA62JeRw4TE="), - VN(VC::INVALID_XML, "invalid character encountered", canonical(cpl_path), 5).set_cpl_id(cpl->id()), + VN(VC::INVALID_XML, canonical(cpl_path), 5).set_cpl_id(cpl->id()).set_error("invalid character encountered"), }; check_verify_result(dcp::verify({dir}, {}, &stage, &progress, {}, xsd_test).notes, expected); @@ -886,31 +844,28 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_pkl_id) auto const dir = dcp::String::compose("build/test/verify_test%1", suffix); auto const pkl_path = find_pkl(dir); auto const cpl_path = find_cpl(dir); - auto cpl = std::make_shared<dcp::CPL>(cpl_path); + auto dcp = dcp::DCP(dir); + dcp.read(); + auto const cpl = dcp.cpls()[0]; + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; std::vector<VN> expected = { - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - canonical(cpl->file().get()) - ).set_cpl_id(cpl->id()), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), note(VC::MATCHING_CPL_HASHES, cpl), - VN( - VC::INVALID_XML, + VN(VC::INVALID_XML, canonical(pkl_path), 3).set_error( "value 'urn:uuid:x199d58b-5ef8-4d49-b270-07e590ccb280' does not match regular " - "expression facet 'urn:uuid:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}'", - canonical(pkl_path), 3 - ), + "expression facet 'urn:uuid:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}'" + ), }; check_verify_result(dcp::verify({dir}, {}, &stage, &progress, {}, xsd_test).notes, expected); @@ -926,31 +881,28 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_asset_map_id) auto const dir = dcp::String::compose("build/test/verify_test%1", suffix); auto const cpl_path = find_cpl(dir); auto const asset_map_path = find_asset_map(dir); - auto cpl = std::make_shared<dcp::CPL>(cpl_path); + auto dcp = dcp::DCP(dir); + dcp.read(); + auto const cpl = dcp.cpls()[0]; + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; std::vector<VN> expected = { - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - canonical(cpl->file().get()) - ).set_cpl_id(cpl->id()), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), note(VC::MATCHING_CPL_HASHES, cpl), - VN( - VC::INVALID_XML, + VN(VC::INVALID_XML, canonical(asset_map_path), 3).set_error( "value 'urn:uuid:x17b3de4-6dda-408d-b19b-6711354b0bc3' does not match regular " - "expression facet 'urn:uuid:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}'", - canonical(asset_map_path), 3 - ), + "expression facet 'urn:uuid:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}'" + ), }; check_verify_result(dcp::verify({dir}, {}, &stage, &progress, {}, xsd_test).notes, expected); @@ -1012,16 +964,18 @@ BOOST_AUTO_TEST_CASE (verify_invalid_standard) vector<VN> expected = { note(VC::NONE_ENCRYPTED, cpl), { VC::INVALID_STANDARD }, - note(VC::VALID_CONTENT_KIND, string{"feature"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("feature"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "j2c_c6035f97-b07d-4e1c-944d-603fc2ddc242.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "j2c_c6035f97-b07d-4e1c-944d-603fc2ddc242.mxf"), cpl) + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "j2c_c6035f97-b07d-4e1c-944d-603fc2ddc242.mxf"), cpl).set_reel_index(0).set_asset_id("c6035f97-b07d-4e1c-944d-603fc2ddc242"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "j2c_c6035f97-b07d-4e1c-944d-603fc2ddc242.mxf"), cpl).set_reel_index(0).set_asset_id("c6035f97-b07d-4e1c-944d-603fc2ddc242"), }; for (int j = 0; j < 24; ++j) { - expected.push_back(VN(VC::INVALID_JPEG2000_GUARD_BITS_FOR_2K, string("2")).set_cpl_id(cpl->id())); + expected.push_back( + VN(VC::INVALID_JPEG2000_GUARD_BITS_FOR_2K).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id("c6035f97-b07d-4e1c-944d-603fc2ddc242").set_guard_bits(2) + ); } check_verify_result(notes, expected); @@ -1037,6 +991,7 @@ BOOST_AUTO_TEST_CASE (verify_invalid_duration) BOOST_REQUIRE(dcp.cpls().size() == 1); auto cpl = dcp.cpls()[0]; + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -1044,19 +999,21 @@ BOOST_AUTO_TEST_CASE (verify_invalid_duration) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"feature"}, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "j2c_d7576dcb-a361-4139-96b8-267f5f8d7f91.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "j2c_d7576dcb-a361-4139-96b8-267f5f8d7f91.mxf"), cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("feature"), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "j2c_d7576dcb-a361-4139-96b8-267f5f8d7f91.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "j2c_d7576dcb-a361-4139-96b8-267f5f8d7f91.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), { VC::INVALID_STANDARD }, - VN(VC::INVALID_DURATION, string("d7576dcb-a361-4139-96b8-267f5f8d7f91")).set_cpl_id(cpl->id()), - VN(VC::INVALID_INTRINSIC_DURATION, string("d7576dcb-a361-4139-96b8-267f5f8d7f91")).set_cpl_id(cpl->id()), - VN(VC::INVALID_DURATION, string("a2a87f5d-b749-4a7e-8d0c-9d48a4abf626")).set_cpl_id(cpl->id()), - VN(VC::INVALID_INTRINSIC_DURATION, string("a2a87f5d-b749-4a7e-8d0c-9d48a4abf626")).set_cpl_id(cpl->id()), + VN(VC::INVALID_DURATION).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id("d7576dcb-a361-4139-96b8-267f5f8d7f91"), + VN(VC::INVALID_INTRINSIC_DURATION).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id("d7576dcb-a361-4139-96b8-267f5f8d7f91"), + VN(VC::INVALID_DURATION).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id("a2a87f5d-b749-4a7e-8d0c-9d48a4abf626"), + VN(VC::INVALID_INTRINSIC_DURATION).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id("a2a87f5d-b749-4a7e-8d0c-9d48a4abf626"), VN(VC::EMPTY_CONTENT_VERSION_LABEL_TEXT, cpl->file().get()).set_cpl_id(cpl->id()) }; for (int i = 0; i < 23; ++i) { - expected.push_back(VN(VC::INVALID_JPEG2000_GUARD_BITS_FOR_2K, string("2")).set_cpl_id(cpl->id())); + expected.push_back( + VN(VC::INVALID_JPEG2000_GUARD_BITS_FOR_2K).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id("d7576dcb-a361-4139-96b8-267f5f8d7f91").set_guard_bits(2) + ); } check_verify_result({ dir }, {}, expected); @@ -1098,6 +1055,7 @@ BOOST_AUTO_TEST_CASE (verify_invalid_picture_frame_size_in_bytes) prepare_directory (dir); auto cpl = dcp_from_frame (oversized_frame, dir); + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -1105,20 +1063,26 @@ BOOST_AUTO_TEST_CASE (verify_invalid_picture_frame_size_in_bytes) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "pic.mxf"), cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "pic.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), }; for (auto i = 0; i < 24; ++i) { expected.push_back( - VN(VC::INVALID_JPEG2000_CODESTREAM, string("missing marker start byte")).set_frame(i).set_frame_rate(24).set_cpl_id(cpl->id())); + VN(VC::INVALID_JPEG2000_CODESTREAM).set_frame(i).set_frame_rate(dcp::Fraction(24, 1)) + .set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(picture_id).set_error("missing marker start byte") + ); } for (auto i = 0; i < 24; ++i) { expected.push_back( - VN(VC::INVALID_PICTURE_FRAME_SIZE_IN_BYTES, canonical(dir / "pic.mxf")).set_frame(i).set_frame_rate(24).set_cpl_id(cpl->id())); + VN( + VC::INVALID_PICTURE_FRAME_SIZE_IN_BYTES, + canonical(dir / "pic.mxf") + ).set_frame(i).set_frame_rate(dcp::Fraction(24, 1)).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(picture_id) + ); } expected.push_back( @@ -1146,28 +1110,33 @@ BOOST_AUTO_TEST_CASE (verify_nearly_invalid_picture_frame_size_in_bytes) prepare_directory (dir); auto cpl = dcp_from_frame (oversized_frame, dir); + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; vector<VN> expected = { - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "pic.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "pic.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), }; for (auto i = 0; i < 24; ++i) { expected.push_back( - VN(VC::INVALID_JPEG2000_CODESTREAM, string("missing marker start byte")).set_frame(i).set_frame_rate(24).set_cpl_id(cpl->id()) + VN(VC::INVALID_JPEG2000_CODESTREAM).set_frame(i).set_frame_rate(dcp::Fraction(24, 1)) + .set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(picture_id).set_error("missing marker start byte") ); } for (auto i = 0; i < 24; ++i) { expected.push_back( - VN(VC::NEARLY_INVALID_PICTURE_FRAME_SIZE_IN_BYTES, canonical(dir / "pic.mxf")).set_frame(i).set_frame_rate(24).set_cpl_id(cpl->id()) + VN( + VC::NEARLY_INVALID_PICTURE_FRAME_SIZE_IN_BYTES, + canonical(dir / "pic.mxf") + ).set_frame(i).set_frame_rate(dcp::Fraction(24, 1)).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(picture_id) ); } @@ -1188,6 +1157,7 @@ BOOST_AUTO_TEST_CASE (verify_valid_picture_frame_size_in_bytes) prepare_directory (dir); auto cpl = dcp_from_frame (frame, dir); + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -1195,14 +1165,14 @@ BOOST_AUTO_TEST_CASE (verify_valid_picture_frame_size_in_bytes) { dir }, {}, { - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "pic.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "pic.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "pic.mxf"), cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "pic.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -1227,10 +1197,10 @@ BOOST_AUTO_TEST_CASE (verify_valid_interop_subtitles) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), { VC::INVALID_STANDARD }, - VN(VC::MISSING_FONT, string{"theFontId"}).set_cpl_id(cpl->id()) + VN(VC::MISSING_FONT).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_load_font_id("theFontId"), }); } @@ -1254,10 +1224,10 @@ BOOST_AUTO_TEST_CASE(verify_catch_missing_font_file_with_interop_ccap) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), { VC::INVALID_STANDARD }, - VN(VC::MISSING_FONT, string{"theFontId"}).set_cpl_id(cpl->id()) + VN(VC::MISSING_FONT).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_load_font_id("theFontId"), }); } @@ -1288,17 +1258,14 @@ BOOST_AUTO_TEST_CASE (verify_invalid_interop_subtitles) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), { VC::INVALID_STANDARD }, - VN(VC::INVALID_XML, string("no declaration found for element 'Foo'"), path(), 5).set_cpl_id(cpl->id()), - VN( - VC::INVALID_XML, - string("element 'Foo' is not allowed for content model '(SubtitleID,MovieTitle,ReelNumber,Language,LoadFont*,Font*,Subtitle*)'"), - path(), - 29 - ).set_cpl_id(cpl->id()), - VN(VC::MISSING_FONT, string{"theFontId"}).set_cpl_id(cpl->id()) + VN(VC::INVALID_XML, path(), 5).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_error("no declaration found for element 'Foo'"), + VN(VC::INVALID_XML, path(), 29).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_error( + "element 'Foo' is not allowed for content model '(SubtitleID,MovieTitle,ReelNumber,Language,LoadFont*,Font*,Subtitle*)'" + ), + VN(VC::MISSING_FONT).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_load_font_id("theFontId"), }); } @@ -1322,11 +1289,11 @@ BOOST_AUTO_TEST_CASE(verify_interop_subtitle_asset_with_no_subtitles) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), { VC::INVALID_STANDARD }, - VN(VC::MISSING_SUBTITLE, asset->id(), boost::filesystem::canonical(asset->file().get())).set_cpl_id(cpl->id()), - VN(VC::MISSING_FONT, string{"theFontId"}).set_cpl_id(cpl->id()) + VN(VC::MISSING_SUBTITLE, boost::filesystem::canonical(asset->file().get())).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()), + VN(VC::MISSING_FONT).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_load_font_id("theFontId"), }); } @@ -1340,6 +1307,8 @@ BOOST_AUTO_TEST_CASE(verify_interop_subtitle_asset_with_single_space_subtitle) auto reel_asset = make_shared<dcp::ReelInteropTextAsset>(dcp::TextType::OPEN_SUBTITLE, asset, dcp::Fraction(24, 1), 16 * 24, 0); auto cpl = write_dcp_with_single_asset(dir, reel_asset, dcp::Standard::INTEROP); + auto const subs_id = cpl->reels()[0]->main_subtitle()->id(); + using VN = dcp::VerificationNote; using VC = VN::Code; @@ -1350,10 +1319,10 @@ BOOST_AUTO_TEST_CASE(verify_interop_subtitle_asset_with_single_space_subtitle) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), { VC::INVALID_STANDARD }, - VN(VC::MISSING_FONT, string{"Arial"}).set_cpl_id(cpl->id()) + VN(VC::MISSING_FONT).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_load_font_id("Arial"), }); } @@ -1377,12 +1346,12 @@ BOOST_AUTO_TEST_CASE (verify_valid_smpte_subtitles) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()), - VN(VC::INVALID_SUBTITLE_ISSUE_DATE, string{"2021-04-14T13:19:14.000+02:00"}).set_cpl_id(cpl->id()), - VN(VC::INCORRECT_SUBTITLE_NAMESPACE_COUNT, asset->id()).set_cpl_id(cpl->id()), + VN(VC::INVALID_SUBTITLE_ISSUE_DATE).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_issue_date("2021-04-14T13:19:14.000+02:00"), + VN(VC::INCORRECT_SUBTITLE_NAMESPACE_COUNT).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()), }); } @@ -1409,20 +1378,18 @@ BOOST_AUTO_TEST_CASE (verify_invalid_smpte_subtitles) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), - VN(VC::INVALID_XML, string("no declaration found for element 'Foo'"), path(), 2).set_cpl_id(cpl->id()), - VN( - VC::INVALID_XML, - string("element 'Foo' is not allowed for content model '(Id,ContentTitleText,AnnotationText?,IssueDate,ReelNumber?,Language?,EditRate,TimeCodeRate,StartTime?,DisplayType?,LoadFont*,SubtitleList)'"), - path(), - 2 - ).set_cpl_id(cpl->id()), - VN(VC::MISSING_SUBTITLE_START_TIME, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), + VN(VC::INVALID_XML, path(), 2).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_error("no declaration found for element 'Foo'"), + VN(VC::INVALID_XML, path(), 2).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_error( + "element 'Foo' is not allowed for content model " + "'(Id,ContentTitleText,AnnotationText?,IssueDate,ReelNumber?,Language?,EditRate,TimeCodeRate,StartTime?,DisplayType?,LoadFont*,SubtitleList)'" + ), + VN(VC::MISSING_SUBTITLE_START_TIME, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()), - VN(VC::INVALID_SUBTITLE_ISSUE_DATE, string{"2020-05-09T00:29:21.000+02:00"}).set_cpl_id(cpl->id()), - VN(VC::INCORRECT_SUBTITLE_NAMESPACE_COUNT, asset->id()).set_cpl_id(cpl->id()), + VN(VC::INVALID_SUBTITLE_ISSUE_DATE).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_issue_date("2020-05-09T00:29:21.000+02:00"), + VN(VC::INCORRECT_SUBTITLE_NAMESPACE_COUNT).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()), }); } @@ -1446,15 +1413,15 @@ BOOST_AUTO_TEST_CASE (verify_empty_text_node_in_subtitles) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), - VN(VC::EMPTY_TEXT).set_cpl_id(cpl->id()), - VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()), - VN(VC::MISSING_SUBTITLE_LANGUAGE, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), + VN(VC::EMPTY_TEXT).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()), + VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()), + VN(VC::MISSING_SUBTITLE_LANGUAGE, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()), - VN(VC::INVALID_SUBTITLE_ISSUE_DATE, string{"2021-08-09T18:34:46.000+02:00"}).set_cpl_id(cpl->id()), - VN(VC::INCORRECT_SUBTITLE_NAMESPACE_COUNT, asset->id()).set_cpl_id(cpl->id()) + VN(VC::INVALID_SUBTITLE_ISSUE_DATE).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_issue_date("2021-08-09T18:34:46.000+02:00"), + VN(VC::INCORRECT_SUBTITLE_NAMESPACE_COUNT).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()), }); } @@ -1479,10 +1446,10 @@ BOOST_AUTO_TEST_CASE (verify_empty_text_node_in_subtitles_with_child_nodes) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), { VC::INVALID_STANDARD }, - VN(VC::MISSING_FONT, string{"font0"}).set_cpl_id(cpl->id()) + VN(VC::MISSING_FONT).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_load_font_id("font0"), }); } @@ -1497,6 +1464,7 @@ BOOST_AUTO_TEST_CASE (verify_empty_text_node_in_subtitles_with_empty_child_nodes auto reel_asset = make_shared<dcp::ReelInteropTextAsset>(dcp::TextType::OPEN_SUBTITLE, asset, dcp::Fraction(24, 1), 192, 0); auto cpl = write_dcp_with_single_asset (dir, reel_asset, dcp::Standard::INTEROP); + auto const subs_id = asset->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -1507,12 +1475,12 @@ BOOST_AUTO_TEST_CASE (verify_empty_text_node_in_subtitles_with_empty_child_nodes note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - VN(VC::MISSING_SUBTITLE, asset->id(), boost::filesystem::canonical(asset->file().get())).set_cpl_id(cpl->id()), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::MISSING_SUBTITLE, boost::filesystem::canonical(asset->file().get())).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs_id), { VC::INVALID_STANDARD }, - VN(VC::EMPTY_TEXT).set_cpl_id(cpl->id()), - VN(VC::MISSING_FONT, string{"font0"}).set_cpl_id(cpl->id()) + VN(VC::EMPTY_TEXT).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs_id), + VN(VC::MISSING_FONT).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_load_font_id("font0"), }); } @@ -1546,10 +1514,10 @@ BOOST_AUTO_TEST_CASE (verify_external_asset) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), - { VC::EXTERNAL_ASSET, picture->asset()->id() }, + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), + VN(VC::EXTERNAL_ASSET).set_asset_id(picture->asset()->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -1617,6 +1585,7 @@ BOOST_AUTO_TEST_CASE (verify_invalid_cpl_metadata_bad_tag) e.replace ("MainSound", "MainSoundX"); } + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -1624,34 +1593,24 @@ BOOST_AUTO_TEST_CASE (verify_invalid_cpl_metadata_bad_tag) { dir }, {}, { - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "pic.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "pic.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1440x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "pic.mxf"), cpl), - VN( - VC::INVALID_XML, string("no declaration found for element 'meta:MainSoundXConfiguration'"), canonical(cpl->file().get()), 50 - ).set_cpl_id(cpl->id()), - VN( - VC::INVALID_XML, string("no declaration found for element 'meta:MainSoundXSampleRate'"), canonical(cpl->file().get()), 51 - ).set_cpl_id(cpl->id()), - VN( - VC::INVALID_XML, - string("element 'meta:MainSoundXConfiguration' is not allowed for content model " - "'(Id,AnnotationText?,EditRate,IntrinsicDuration,EntryPoint?,Duration?," - "FullContentTitleText,ReleaseTerritory?,VersionNumber?,Chain?,Distributor?," - "Facility?,AlternateContentVersionList?,Luminance?,MainSoundConfiguration," - "MainSoundSampleRate,MainPictureStoredArea,MainPictureActiveArea,MainSubtitleLanguageList?," - "ExtensionMetadataList?,)'"), - canonical(cpl->file().get()), - 71).set_cpl_id(cpl->id()), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1440, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "pic.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::INVALID_XML, canonical(cpl->file().get()), 50).set_cpl_id(cpl->id()).set_error("no declaration found for element 'meta:MainSoundXConfiguration'"), + VN(VC::INVALID_XML, canonical(cpl->file().get()), 51).set_cpl_id(cpl->id()).set_error("no declaration found for element 'meta:MainSoundXSampleRate'"), + VN(VC::INVALID_XML, canonical(cpl->file().get()), 71).set_cpl_id(cpl->id()).set_error( + "element 'meta:MainSoundXConfiguration' is not allowed for content model " + "'(Id,AnnotationText?,EditRate,IntrinsicDuration,EntryPoint?,Duration?," + "FullContentTitleText,ReleaseTerritory?,VersionNumber?,Chain?,Distributor?," + "Facility?,AlternateContentVersionList?,Luminance?,MainSoundConfiguration," + "MainSoundSampleRate,MainPictureStoredArea,MainPictureActiveArea,MainSubtitleLanguageList?," + "ExtensionMetadataList?,)'" + ), VN( VC::MISMATCHED_CPL_HASHES, canonical(cpl->file().get()) ).set_cpl_id(cpl->id()).set_reference_hash(calc.old_hash()).set_calculated_hash(calc.new_hash()) @@ -1687,7 +1646,7 @@ BOOST_AUTO_TEST_CASE (verify_invalid_cpl_metadata_missing_tag) check_verify_result ( { dir }, {}, - {{ dcp::VerificationNote::Code::FAILED_READ, string("missing XML tag Width in MainPictureStoredArea") }} + { dcp::VerificationNote(dcp::VerificationNote::Code::FAILED_READ).set_error("missing XML tag Width in MainPictureStoredArea") } ); } @@ -1714,11 +1673,11 @@ BOOST_AUTO_TEST_CASE (verify_invalid_language1) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), - VN(VC::INVALID_LANGUAGE, string("badlang")).set_cpl_id(cpl->id()), - VN(VC::INVALID_LANGUAGE, string("wrong-andbad")).set_cpl_id(cpl->id()), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), + VN(VC::INVALID_LANGUAGE).set_cpl_id(cpl->id()).set_reel_index(0).set_language("badlang"), + VN(VC::INVALID_LANGUAGE).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_language("wrong-andbad"), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -1747,11 +1706,11 @@ BOOST_AUTO_TEST_CASE (verify_invalid_language2) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), - VN(VC::INVALID_LANGUAGE, string("badlang")).set_cpl_id(cpl->id()), - VN(VC::INVALID_LANGUAGE, string("wrong-andbad")).set_cpl_id(cpl->id()), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), + VN(VC::INVALID_LANGUAGE).set_cpl_id(cpl->id()).set_reel_index(0).set_language("badlang"), + VN(VC::INVALID_LANGUAGE).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_language("wrong-andbad"), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -1796,23 +1755,19 @@ BOOST_AUTO_TEST_CASE (verify_invalid_language3) { dir }, {}, { - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "videofoo.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "videofoo.mxf"), cpl).set_reel_index(0).set_asset_id(picture->id()), note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1440x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "videofoo.mxf"), cpl), - VN(VC::INVALID_LANGUAGE, string("this-is-wrong")).set_cpl_id(cpl->id()), - VN(VC::INVALID_LANGUAGE, string("andso-is-this")).set_cpl_id(cpl->id()), - VN(VC::INVALID_LANGUAGE, string("fred-jim")).set_cpl_id(cpl->id()), - VN(VC::INVALID_LANGUAGE, string("frobozz")).set_cpl_id(cpl->id()), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1440, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "videofoo.mxf"), cpl).set_reel_index(0).set_asset_id(picture->id()), + VN(VC::INVALID_LANGUAGE).set_cpl_id(cpl->id()).set_language("this-is-wrong"), + VN(VC::INVALID_LANGUAGE).set_cpl_id(cpl->id()).set_language("andso-is-this"), + VN(VC::INVALID_LANGUAGE).set_cpl_id(cpl->id()).set_language("fred-jim"), + VN(VC::INVALID_LANGUAGE).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(sound->id()).set_language("frobozz"), }); } @@ -1882,23 +1837,20 @@ check_picture_size_ok (int width, int height, int frame_rate, bool three_d) boost::filesystem::path dir; std::tie(notes, cpl, dir) = check_picture_size(width, height, frame_rate, three_d); + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; std::vector<VN> expected = { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - dcp::String::compose("%1x%2", width, height), - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl) + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({width, height}), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id) }; check_verify_result(notes, expected); } @@ -1913,24 +1865,23 @@ check_picture_size_bad_frame_size (int width, int height, int frame_rate, bool t boost::filesystem::path dir; std::tie(notes, cpl, dir) = check_picture_size(width, height, frame_rate, three_d); + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; std::vector<VN> expected = { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::MATCHING_CPL_HASHES, cpl), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({width, height}), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - dcp::String::compose("%1x%2", width, height), - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - VN(VC::INVALID_PICTURE_SIZE_IN_PIXELS, dcp::String::compose("%1x%2", width, height), canonical(dir / "video.mxf")).set_cpl_id(cpl->id()) + VC::INVALID_PICTURE_SIZE_IN_PIXELS, canonical(dir / "video.mxf") + ).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(picture_id).set_size_in_pixels({width, height}), }; check_verify_result(notes, expected); } @@ -1945,25 +1896,22 @@ check_picture_size_bad_2k_frame_rate (int width, int height, int frame_rate, boo boost::filesystem::path dir; std::tie(notes, cpl, dir) = check_picture_size(width, height, frame_rate, three_d); + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; std::vector<VN> expected = { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - dcp::String::compose("%1x%2", width, height), - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - VN(VC::INVALID_PICTURE_FRAME_RATE, dcp::String::compose("%1/1", frame_rate * (three_d ? 2 : 1))).set_cpl_id(cpl->id()), - VN(VC::INVALID_PICTURE_FRAME_RATE_FOR_2K, dcp::String::compose("%1/1", frame_rate), canonical(dir / "video.mxf")).set_cpl_id(cpl->id()) + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({width, height}), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::INVALID_PICTURE_FRAME_RATE).set_cpl_id(cpl->id()).set_reel_index(0).set_frame_rate({frame_rate * (three_d ? 2 : 1), 1}), + VN(VC::INVALID_PICTURE_FRAME_RATE_FOR_2K, canonical(dir / "video.mxf")).set_cpl_id(cpl->id()).set_reel_index(0).set_frame_rate({frame_rate, 1}).set_asset_id(picture_id), }; check_verify_result(notes, expected); @@ -1979,24 +1927,21 @@ check_picture_size_bad_4k_frame_rate (int width, int height, int frame_rate, boo boost::filesystem::path dir; std::tie(notes, cpl, dir) = check_picture_size(width, height, frame_rate, three_d); + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; std::vector<VN> expected = { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - dcp::String::compose("%1x%2", width, height), - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - VN(VC::INVALID_PICTURE_FRAME_RATE_FOR_4K, dcp::String::compose("%1/1", frame_rate), canonical(dir / "video.mxf")).set_cpl_id(cpl->id()) + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({width, height}), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::INVALID_PICTURE_FRAME_RATE_FOR_4K, canonical(dir / "video.mxf")).set_cpl_id(cpl->id()).set_reel_index(0).set_frame_rate({frame_rate, 1}).set_asset_id(picture_id), }; check_verify_result(notes, expected); @@ -2049,26 +1994,6 @@ BOOST_AUTO_TEST_CASE (verify_picture_size) shared_ptr<dcp::CPL> cpl; boost::filesystem::path dir; std::tie(notes, cpl, dir) = check_picture_size(3996, 2160, 24, true); - - using VN = dcp::VerificationNote; - using VC = VN::Code; - - std::vector<VN> expected = { - note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::MATCHING_CPL_HASHES, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"3996x2160"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - { VC::INVALID_PICTURE_ASSET_RESOLUTION_FOR_3D }, - }; } @@ -2130,12 +2055,14 @@ BOOST_AUTO_TEST_CASE (verify_invalid_closed_caption_xml_size_in_bytes) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), - VN(VC::MISSING_SUBTITLE_START_TIME, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()), - VN(VC::INVALID_CLOSED_CAPTION_XML_SIZE_IN_BYTES, string("419371"), canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()), - VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), + VN(VC::MISSING_SUBTITLE_START_TIME, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()), + VN( + VC::INVALID_CLOSED_CAPTION_XML_SIZE_IN_BYTES, canonical(dir / "subs.mxf") + ).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_size_in_bytes(419371), + VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -2179,19 +2106,18 @@ verify_timed_text_asset_too_large (string name) note(dcp::VerificationNote::Code::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), VN( - VC::INVALID_TIMED_TEXT_SIZE_IN_BYTES, string("121698284"), canonical(dir / "subs.mxf") - ).set_cpl_id(cpl->id()), + VC::INVALID_TIMED_TEXT_SIZE_IN_BYTES, canonical(dir / "subs.mxf") + ).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_size_in_bytes(121698284), VN( VC::INVALID_TIMED_TEXT_FONT_SIZE_IN_BYTES, - "121634816", canonical(dir / "subs.mxf") - ).set_cpl_id(cpl->id()), - VN(VC::MISSING_SUBTITLE_START_TIME, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()), - VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()), + ).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_size_in_bytes(121634816), + VN(VC::MISSING_SUBTITLE_START_TIME, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()), + VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -2243,6 +2169,8 @@ BOOST_AUTO_TEST_CASE (verify_missing_subtitle_language) cpl->reels()[0]->add(reel_subs); dcp->write_xml(); + auto const picture_id = cpl->reels()[0]->main_picture()->id(); + auto const subs_id = cpl->reels()[0]->main_subtitle()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -2253,18 +2181,14 @@ BOOST_AUTO_TEST_CASE (verify_missing_subtitle_language) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - VN(VC::MISSING_SUBTITLE_LANGUAGE, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()), - VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()) + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::MISSING_SUBTITLE_LANGUAGE, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs_id), + VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs_id) }); } @@ -2298,6 +2222,14 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_subtitle_languages) dcp->write_xml(); + std::vector<string> const picture_ids = { + cpl->reels()[0]->main_picture()->id(), + cpl->reels()[1]->main_picture()->id() + }; + std::vector<string> const subs_ids = { + cpl->reels()[0]->main_subtitle()->id(), + cpl->reels()[1]->main_subtitle()->id() + }; using VN = dcp::VerificationNote; using VC = VN::Code; @@ -2305,24 +2237,20 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_subtitle_languages) { path }, {}, { - note(VC::CORRECT_PICTURE_HASH, canonical(path / "video0.mxf"), cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(path / "video1.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(path / "video0.mxf"), cpl).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::CORRECT_PICTURE_HASH, canonical(path / "video1.mxf"), cpl).set_reel_index(1).set_asset_id(picture_ids[1]), note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video0.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video1.mxf"), cpl), - VN(VC::MISSING_SUBTITLE_START_TIME, canonical(path / "subs1.mxf")).set_cpl_id(cpl->id()), - VN(VC::MISSING_SUBTITLE_START_TIME, canonical(path / "subs2.mxf")).set_cpl_id(cpl->id()), - VN(VC::MISMATCHED_SUBTITLE_LANGUAGES).set_cpl_id(cpl->id()), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video0.mxf"), cpl).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video1.mxf"), cpl).set_reel_index(1).set_asset_id(picture_ids[1]), + VN(VC::MISSING_SUBTITLE_START_TIME, canonical(path / "subs1.mxf")).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs_ids[0]), + VN(VC::MISSING_SUBTITLE_START_TIME, canonical(path / "subs2.mxf")).set_cpl_id(cpl->id()).set_reel_index(1).set_asset_id(subs_ids[1]), + VN(VC::MISMATCHED_SUBTITLE_LANGUAGES).set_cpl_id(cpl->id()).set_reel_index(1).set_asset_id(subs_ids[1]), }); } @@ -2356,6 +2284,14 @@ BOOST_AUTO_TEST_CASE (verify_multiple_closed_caption_languages_allowed) dcp->write_xml(); + std::vector<string> const picture_ids = { + cpl->reels()[0]->main_picture()->id(), + cpl->reels()[1]->main_picture()->id() + }; + std::vector<string> const subs_ids = { + cpl->reels()[0]->closed_captions()[0]->id(), + cpl->reels()[1]->closed_captions()[0]->id() + }; using VN = dcp::VerificationNote; using VC = VN::Code; @@ -2366,20 +2302,16 @@ BOOST_AUTO_TEST_CASE (verify_multiple_closed_caption_languages_allowed) note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(path / "video0.mxf"), cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(path / "video1.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video0.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video1.mxf"), cpl), - VN(VC::MISSING_SUBTITLE_START_TIME, canonical(path / "subs1.mxf")).set_cpl_id(cpl->id()), - VN(VC::MISSING_SUBTITLE_START_TIME, canonical(path / "subs2.mxf")).set_cpl_id(cpl->id()) + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::CORRECT_PICTURE_HASH, canonical(path / "video0.mxf"), cpl).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::CORRECT_PICTURE_HASH, canonical(path / "video1.mxf"), cpl).set_reel_index(1).set_asset_id(picture_ids[1]), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video0.mxf"), cpl).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video1.mxf"), cpl).set_reel_index(1).set_asset_id(picture_ids[1]), + VN(VC::MISSING_SUBTITLE_START_TIME, canonical(path / "subs1.mxf")).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs_ids[0]), + VN(VC::MISSING_SUBTITLE_START_TIME, canonical(path / "subs2.mxf")).set_cpl_id(cpl->id()).set_reel_index(1).set_asset_id(subs_ids[1]) }); } @@ -2423,6 +2355,7 @@ BOOST_AUTO_TEST_CASE (verify_missing_subtitle_start_time) cpl->reels()[0]->add(reel_subs); dcp->write_xml(); + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -2430,21 +2363,17 @@ BOOST_AUTO_TEST_CASE (verify_missing_subtitle_start_time) { dir }, {}, { - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - VN(VC::MISSING_SUBTITLE_START_TIME, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()), - VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()) + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::MISSING_SUBTITLE_START_TIME, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs->id()), + VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs->id()), }); } @@ -2489,6 +2418,7 @@ BOOST_AUTO_TEST_CASE (verify_invalid_subtitle_start_time) cpl->reels().front()->add(reel_subs); dcp->write_xml(); + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -2498,19 +2428,15 @@ BOOST_AUTO_TEST_CASE (verify_invalid_subtitle_start_time) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - VN(VC::INVALID_SUBTITLE_START_TIME, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()), - VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()) + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::INVALID_SUBTITLE_START_TIME, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs->id()), + VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs->id()), }); } @@ -2602,17 +2528,20 @@ BOOST_AUTO_TEST_CASE (verify_invalid_subtitle_first_text_time) auto const dir = path("build/test/verify_invalid_subtitle_first_text_time"); /* Just too early */ auto cpl = dcp_with_text<dcp::ReelSMPTETextAsset>(dcp::TextType::OPEN_SUBTITLE, dir, {{ 4 * 24 - 1, 5 * 24 }}); + + auto const subs_id = cpl->reels()[0]->main_subtitle()->asset()->id(); + check_verify_result ( { dir }, {}, { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs_id), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); @@ -2633,10 +2562,10 @@ BOOST_AUTO_TEST_CASE (verify_valid_subtitle_first_text_time) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -2692,10 +2621,10 @@ BOOST_AUTO_TEST_CASE (verify_valid_subtitle_first_text_time_on_second_reel) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -2714,17 +2643,20 @@ BOOST_AUTO_TEST_CASE (verify_invalid_subtitle_spacing) { 4 * 24, 5 * 24 }, { 5 * 24 + 1, 6 * 24 }, }); + + auto const subs_id = cpl->reels()[0]->main_subtitle()->asset()->id(); + check_verify_result ( {dir}, {}, { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - VN(VC::INVALID_SUBTITLE_SPACING).set_cpl_id(cpl->id()), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::INVALID_SUBTITLE_SPACING).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs_id), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -2750,10 +2682,10 @@ BOOST_AUTO_TEST_CASE (verify_valid_subtitle_spacing) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -2766,17 +2698,20 @@ BOOST_AUTO_TEST_CASE(verify_invalid_subtitle_duration) auto const dir = path("build/test/verify_invalid_subtitle_duration"); auto cpl = dcp_with_text<dcp::ReelSMPTETextAsset>(dcp::TextType::OPEN_SUBTITLE, dir, {{ 4 * 24, 4 * 24 - 1 }}); + + auto const subs_id = cpl->reels()[0]->main_subtitle()->asset()->id(); + check_verify_result ( {dir}, {}, { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - VN(VC::INVALID_SUBTITLE_DURATION).set_cpl_id(cpl->id()), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::INVALID_SUBTITLE_DURATION).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs_id), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -2789,17 +2724,20 @@ BOOST_AUTO_TEST_CASE(verify_invalid_subtitle_duration_bv21) auto const dir = path("build/test/verify_invalid_subtitle_duration_bv21"); auto cpl = dcp_with_text<dcp::ReelSMPTETextAsset>(dcp::TextType::OPEN_SUBTITLE, dir, {{ 4 * 24, 4 * 24 + 1 }}); + + auto const subs_id = cpl->reels()[0]->main_subtitle()->asset()->id(); + check_verify_result ( {dir}, {}, { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - VN(VC::INVALID_SUBTITLE_DURATION_BV21).set_cpl_id(cpl->id()), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::INVALID_SUBTITLE_DURATION_BV21).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs_id), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -2819,10 +2757,10 @@ BOOST_AUTO_TEST_CASE (verify_valid_subtitle_duration) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -2850,13 +2788,15 @@ BOOST_AUTO_TEST_CASE (verify_subtitle_overlapping_reel_boundary) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - VN(VC::MISMATCHED_TIMED_TEXT_DURATION , "72 96", boost::filesystem::canonical(asset->file().get())).set_cpl_id(cpl->id()), - VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()), - VN(VC::SUBTITLE_OVERLAPS_REEL_BOUNDARY).set_cpl_id(cpl->id()), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN( + VC::MISMATCHED_TIMED_TEXT_DURATION, boost::filesystem::canonical(asset->file().get()) + ).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()).set_duration(96).set_other_duration(72), + VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()), + VN(VC::SUBTITLE_OVERLAPS_REEL_BOUNDARY).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -2884,10 +2824,10 @@ BOOST_AUTO_TEST_CASE (verify_invalid_subtitle_line_count1) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::INVALID_SUBTITLE_LINE_COUNT).set_cpl_id(cpl->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); @@ -2915,10 +2855,10 @@ BOOST_AUTO_TEST_CASE (verify_valid_subtitle_line_count1) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -2946,10 +2886,10 @@ BOOST_AUTO_TEST_CASE (verify_invalid_subtitle_line_count2) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::INVALID_SUBTITLE_LINE_COUNT).set_cpl_id(cpl->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); @@ -2978,10 +2918,10 @@ BOOST_AUTO_TEST_CASE (verify_valid_subtitle_line_count2) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -3006,10 +2946,10 @@ BOOST_AUTO_TEST_CASE (verify_invalid_subtitle_line_length1) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::NEARLY_INVALID_SUBTITLE_LINE_LENGTH).set_cpl_id(cpl->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); @@ -3035,10 +2975,10 @@ BOOST_AUTO_TEST_CASE (verify_invalid_subtitle_line_length2) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::INVALID_SUBTITLE_LINE_LENGTH).set_cpl_id(cpl->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); @@ -3067,10 +3007,10 @@ BOOST_AUTO_TEST_CASE (verify_valid_closed_caption_line_count1) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::INVALID_CLOSED_CAPTION_LINE_COUNT).set_cpl_id(cpl->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); @@ -3098,10 +3038,10 @@ BOOST_AUTO_TEST_CASE (verify_valid_closed_caption_line_count2) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -3129,10 +3069,10 @@ BOOST_AUTO_TEST_CASE (verify_invalid_closed_caption_line_count3) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::INVALID_CLOSED_CAPTION_LINE_COUNT).set_cpl_id(cpl->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); @@ -3161,10 +3101,10 @@ BOOST_AUTO_TEST_CASE (verify_valid_closed_caption_line_count4) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -3189,10 +3129,10 @@ BOOST_AUTO_TEST_CASE (verify_valid_closed_caption_line_length) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -3217,16 +3157,44 @@ BOOST_AUTO_TEST_CASE (verify_invalid_closed_caption_line_length) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::INVALID_CLOSED_CAPTION_LINE_LENGTH).set_cpl_id(cpl->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } +BOOST_AUTO_TEST_CASE(verify_invalid_closed_caption_line_length_with_utf8) +{ + auto const dir = path("build/test/verify_invalid_closed_caption_line_length_with_utf8"); + auto cpl = dcp_with_text<dcp::ReelSMPTETextAsset> ( + dcp::TextType::CLOSED_CAPTION, + dir, + { + { 96, 300, 0.0, dcp::VAlign::CENTER, "0123456789012345678901234567890…" } + }); + + using VN = dcp::VerificationNote; + using VC = VN::Code; + + check_verify_result ( + {dir}, + {}, + { + note(VC::NONE_ENCRYPTED, cpl), + note(VC::MATCHING_CPL_HASHES, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), + note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) + }); +} + + BOOST_AUTO_TEST_CASE (verify_mismatched_closed_caption_valign1) { auto const dir = path ("build/test/verify_mismatched_closed_caption_valign1"); @@ -3248,10 +3216,10 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_closed_caption_valign1) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -3278,10 +3246,10 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_closed_caption_valign2) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::MISMATCHED_CLOSED_CAPTION_VALIGN).set_cpl_id(cpl->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); @@ -3309,10 +3277,10 @@ BOOST_AUTO_TEST_CASE (verify_incorrect_closed_caption_ordering1) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -3339,10 +3307,10 @@ BOOST_AUTO_TEST_CASE (verify_incorrect_closed_caption_ordering2) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -3361,10 +3329,10 @@ BOOST_AUTO_TEST_CASE (verify_incorrect_closed_caption_ordering3) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::INCORRECT_CLOSED_CAPTION_ORDERING).set_cpl_id(cpl->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); @@ -3385,10 +3353,10 @@ BOOST_AUTO_TEST_CASE (verify_incorrect_closed_caption_ordering4) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -3424,13 +3392,13 @@ BOOST_AUTO_TEST_CASE (verify_invalid_sound_frame_rate) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "videofoo.mxf"), cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "videofoo.mxf"), cpl).set_reel_index(0).set_asset_id(picture->id()), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "videofoo.mxf"), cpl), - VN(VC::INVALID_SOUND_FRAME_RATE, string("96000"), canonical(dir / "audiofoo.mxf")).set_cpl_id(cpl->id()), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "videofoo.mxf"), cpl).set_reel_index(0).set_asset_id(picture->id()).set_asset_id(picture->id()), + VN(VC::INVALID_SOUND_FRAME_RATE, canonical(dir / "audiofoo.mxf")).set_cpl_id(cpl->id()).set_reel_index(0).set_frame_rate({96000, 1}).set_asset_id(sound->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -3454,6 +3422,7 @@ BOOST_AUTO_TEST_CASE (verify_missing_cpl_annotation_text) e.replace("<AnnotationText>A Test DCP</AnnotationText>", ""); } + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -3462,15 +3431,11 @@ BOOST_AUTO_TEST_CASE (verify_missing_cpl_annotation_text) {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), VN(VC::MISSING_CPL_ANNOTATION_TEXT, canonical(cpl->file().get())).set_cpl_id(cpl->id()), VN( @@ -3497,6 +3462,7 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_cpl_annotation_text) e.replace("<AnnotationText>A Test DCP</AnnotationText>", "<AnnotationText>A Test DCP 1</AnnotationText>"); } + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -3506,15 +3472,11 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_cpl_annotation_text) { note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::MISMATCHED_CPL_ANNOTATION_TEXT, canonical(cpl->file().get())).set_cpl_id(cpl->id()), VN( VC::MISMATCHED_CPL_HASHES, canonical(cpl->file().get()) @@ -3553,14 +3515,14 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_asset_duration) {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(mp->id()), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - VN(VC::MISMATCHED_ASSET_DURATION).set_cpl_id(cpl->id()), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(mp->id()), + VN(VC::MISMATCHED_ASSET_DURATION).set_cpl_id(cpl->id()).set_reel_index(0), VN(VC::MISSING_CPL_METADATA, canonical(cpl->file().get())).set_cpl_id(cpl->id()) }); } @@ -3631,20 +3593,24 @@ BOOST_AUTO_TEST_CASE (verify_missing_main_subtitle_from_some_reels) { path dir ("build/test/missing_main_subtitle_from_some_reels"); auto cpl = verify_subtitles_must_be_in_all_reels_check (dir, true, false); + std::vector<string> const picture_ids = { + cpl->reels()[0]->main_picture()->asset()->id(), + cpl->reels()[1]->main_picture()->asset()->id() + }; check_verify_result ( { dir }, {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video1.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video2.mxf"), cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video1.mxf"), cpl).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video2.mxf"), cpl).set_reel_index(1).set_asset_id(picture_ids[1]), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video1.mxf"), cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video2.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video1.mxf"), cpl).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video2.mxf"), cpl).set_reel_index(1).set_asset_id(picture_ids[1]), VN(VC::MISSING_MAIN_SUBTITLE_FROM_SOME_REELS).set_cpl_id(cpl->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); @@ -3654,20 +3620,24 @@ BOOST_AUTO_TEST_CASE (verify_missing_main_subtitle_from_some_reels) { path dir ("build/test/verify_subtitles_must_be_in_all_reels2"); auto cpl = verify_subtitles_must_be_in_all_reels_check (dir, true, true); + std::vector<string> const picture_ids = { + cpl->reels()[0]->main_picture()->asset()->id(), + cpl->reels()[1]->main_picture()->asset()->id() + }; check_verify_result( {dir}, {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video1.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video2.mxf"), cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video1.mxf"), cpl).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video2.mxf"), cpl).set_reel_index(1).set_asset_id(picture_ids[1]), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video1.mxf"), cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video2.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video1.mxf"), cpl).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video2.mxf"), cpl).set_reel_index(1).set_asset_id(picture_ids[1]), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -3675,20 +3645,24 @@ BOOST_AUTO_TEST_CASE (verify_missing_main_subtitle_from_some_reels) { path dir ("build/test/verify_subtitles_must_be_in_all_reels1"); auto cpl = verify_subtitles_must_be_in_all_reels_check (dir, false, false); + std::vector<string> const picture_ids = { + cpl->reels()[0]->main_picture()->asset()->id(), + cpl->reels()[1]->main_picture()->asset()->id() + }; check_verify_result( {dir}, {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video1.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video2.mxf"), cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video1.mxf"), cpl).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video2.mxf"), cpl).set_reel_index(1).set_asset_id(picture_ids[1]), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video1.mxf"), cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video2.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video1.mxf"), cpl).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video2.mxf"), cpl).set_reel_index(1).set_asset_id(picture_ids[1]), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -3758,19 +3732,23 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_closed_caption_asset_counts) { path dir ("build/test/mismatched_closed_caption_asset_counts"); auto cpl = verify_closed_captions_must_be_in_all_reels_check (dir, 3, 4); + std::vector<string> const picture_ids = { + cpl->reels()[0]->main_picture()->asset()->id(), + cpl->reels()[1]->main_picture()->asset()->id() + }; check_verify_result ( {dir}, {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video1.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video2.mxf"), cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video1.mxf"), cpl).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video2.mxf"), cpl).set_reel_index(1).set_asset_id(picture_ids[1]), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video1.mxf"), cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video2.mxf"), cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video1.mxf"), cpl).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video2.mxf"), cpl).set_reel_index(1).set_asset_id(picture_ids[1]), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), VN(VC::MISMATCHED_CLOSED_CAPTION_ASSET_COUNTS).set_cpl_id(cpl->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) @@ -3780,19 +3758,23 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_closed_caption_asset_counts) { path dir ("build/test/verify_closed_captions_must_be_in_all_reels2"); auto cpl = verify_closed_captions_must_be_in_all_reels_check (dir, 4, 4); + std::vector<string> const picture_ids = { + cpl->reels()[0]->main_picture()->asset()->id(), + cpl->reels()[1]->main_picture()->asset()->id() + }; check_verify_result( {dir}, {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video1.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video2.mxf"), cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video1.mxf"), cpl).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video2.mxf"), cpl).set_reel_index(1).set_asset_id(picture_ids[1]), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video1.mxf"), cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video2.mxf"), cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video1.mxf"), cpl).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video2.mxf"), cpl).set_reel_index(1).set_asset_id(picture_ids[1]), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); @@ -3801,19 +3783,23 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_closed_caption_asset_counts) { path dir ("build/test/verify_closed_captions_must_be_in_all_reels3"); auto cpl = verify_closed_captions_must_be_in_all_reels_check (dir, 0, 0); + std::vector<string> const picture_ids = { + cpl->reels()[0]->main_picture()->asset()->id(), + cpl->reels()[1]->main_picture()->asset()->id() + }; check_verify_result( {dir}, {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video1.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video2.mxf"), cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video1.mxf"), cpl).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video2.mxf"), cpl).set_reel_index(1).set_asset_id(picture_ids[1]), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video1.mxf"), cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video2.mxf"), cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video1.mxf"), cpl).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video2.mxf"), cpl).set_reel_index(1).set_asset_id(picture_ids[1]), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); @@ -3855,6 +3841,7 @@ verify_text_entry_point_check(dcp::TextType type, path dir, dcp::VerificationNot dcp->set_annotation_text("A Test DCP"); dcp->write_xml(); + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -3863,14 +3850,14 @@ verify_text_entry_point_check(dcp::TextType type, path dir, dcp::VerificationNot {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - VN(code, subs->id()).set_cpl_id(cpl->id()), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN(code).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -3941,6 +3928,7 @@ BOOST_AUTO_TEST_CASE (verify_missing_hash) e.delete_first_line_containing("<Hash>"); } + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -3949,21 +3937,17 @@ BOOST_AUTO_TEST_CASE (verify_missing_hash) {}, { note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), VN( VC::MISMATCHED_CPL_HASHES, cpl->file().get() ).set_cpl_id(cpl->id()).set_reference_hash(calc.old_hash()).set_calculated_hash(calc.new_hash()), - VN(VC::MISSING_HASH, asset_id).set_cpl_id(cpl->id()) + VN(VC::MISSING_HASH).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset_id), }); } @@ -3990,24 +3974,19 @@ verify_markers_test ( note.set_cpl_id(cpl->id()); } + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; - test_notes.push_back(note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl)); + test_notes.push_back(note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id)); test_notes.push_back(note(VC::MATCHING_CPL_HASHES, cpl)); test_notes.push_back(note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl)); test_notes.push_back(note(VC::NONE_ENCRYPTED, cpl)); - test_notes.push_back( - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()) - ); - test_notes.push_back(note(VC::VALID_CONTENT_KIND, string{"feature"}, cpl)); - test_notes.push_back(note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl)); - test_notes.push_back(note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl)); - test_notes.push_back(note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl)); + test_notes.push_back(VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080})); + test_notes.push_back(note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("feature")); + test_notes.push_back(note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text)); + test_notes.push_back(VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP")); + test_notes.push_back(note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id)); check_verify_result({dir}, {}, test_notes); } @@ -4082,7 +4061,7 @@ BOOST_AUTO_TEST_CASE (verify_markers) { dcp::Marker::LFOC, dcp::Time(23, 24, 24) } }, { - { VC::INCORRECT_FFOC, string("3") } + { VN(VC::INCORRECT_FFOC).set_time(dcp::Time(3, 24, 24)) } }); verify_markers_test ( @@ -4094,7 +4073,7 @@ BOOST_AUTO_TEST_CASE (verify_markers) { dcp::Marker::LFOC, dcp::Time(18, 24, 24) } }, { - { VC::INCORRECT_LFOC, string("18") } + { VN(VC::INCORRECT_LFOC).set_time(dcp::Time(18, 24, 24)) } }); } @@ -4108,6 +4087,7 @@ BOOST_AUTO_TEST_CASE (verify_missing_cpl_metadata_version_number) cpl->unset_version_number(); dcp->write_xml(); + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -4115,19 +4095,15 @@ BOOST_AUTO_TEST_CASE (verify_missing_cpl_metadata_version_number) {dir}, {}, { - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), VN(VC::MISSING_CPL_METADATA_VERSION_NUMBER, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -4149,6 +4125,7 @@ BOOST_AUTO_TEST_CASE (verify_missing_extension_metadata1) e.delete_lines ("<meta:ExtensionMetadataList>", "</meta:ExtensionMetadataList>"); } + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -4157,17 +4134,13 @@ BOOST_AUTO_TEST_CASE (verify_missing_extension_metadata1) {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), VN( VC::MISMATCHED_CPL_HASHES, cpl->file().get() ).set_cpl_id(cpl->id()).set_reference_hash(calc.old_hash()).set_calculated_hash(calc.new_hash()), @@ -4191,6 +4164,7 @@ BOOST_AUTO_TEST_CASE (verify_missing_extension_metadata2) e.delete_lines ("<meta:ExtensionMetadata scope=\"http://isdcf.com/ns/cplmd/app\">", "</meta:ExtensionMetadata>"); } + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -4199,17 +4173,13 @@ BOOST_AUTO_TEST_CASE (verify_missing_extension_metadata2) {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), VN( VC::MISMATCHED_CPL_HASHES, cpl->file().get() ).set_cpl_id(cpl->id()).set_reference_hash(calc.old_hash()).set_calculated_hash(calc.new_hash()), @@ -4234,6 +4204,7 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata3) e.replace ("n</meta:Name>", "n</meta:NameX>"); } + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -4242,22 +4213,15 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata3) {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - VN( - VC::INVALID_XML, string("no declaration found for element 'meta:NameX'"), cpl->file().get(), 70 - ).set_cpl_id(cpl->id()), - VN( - VC::INVALID_XML, string("element 'meta:NameX' is not allowed for content model '(Name,PropertyList?,)'"), cpl->file().get(), 77).set_cpl_id(cpl->id()), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN(VC::INVALID_XML, cpl->file().get(), 70).set_cpl_id(cpl->id()).set_error("no declaration found for element 'meta:NameX'"), + VN(VC::INVALID_XML, cpl->file().get(), 77).set_cpl_id(cpl->id()).set_error("element 'meta:NameX' is not allowed for content model '(Name,PropertyList?,)'"), VN( VC::MISMATCHED_CPL_HASHES, cpl->file().get() ).set_cpl_id(cpl->id()).set_reference_hash(calc.old_hash()).set_calculated_hash(calc.new_hash()), @@ -4280,6 +4244,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_extension_metadata1) e.replace ("Application", "Fred"); } + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); + using VN = dcp::VerificationNote; using VC = VN::Code; @@ -4288,21 +4254,17 @@ BOOST_AUTO_TEST_CASE (verify_invalid_extension_metadata1) {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, cpl->file().get()).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), VN( VC::MISMATCHED_CPL_HASHES, cpl->file().get() ).set_cpl_id(cpl->id()).set_reference_hash(calc.old_hash()).set_calculated_hash(calc.new_hash()), - VN(VC::INVALID_EXTENSION_METADATA, string("<Name> should be 'Application'"), cpl->file().get()).set_cpl_id(cpl->id()) + VN(VC::INVALID_EXTENSION_METADATA, cpl->file().get()).set_cpl_id(cpl->id()).set_error("<Name> should be 'Application'"), }); } @@ -4322,6 +4284,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_extension_metadata2) e.replace ("DCP Constraints Profile", "Fred"); } + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); + using VN = dcp::VerificationNote; using VC = VN::Code; @@ -4330,23 +4294,17 @@ BOOST_AUTO_TEST_CASE (verify_invalid_extension_metadata2) {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), VN( VC::MISMATCHED_CPL_HASHES, cpl->file().get() ).set_cpl_id(cpl->id()).set_reference_hash(calc.old_hash()).set_calculated_hash(calc.new_hash()), - VN( - VC::INVALID_EXTENSION_METADATA, string("No correctly-formed DCP Constraints Profile found"), cpl->file().get() - ).set_cpl_id(cpl->id()) + VN(VC::INVALID_EXTENSION_METADATA, cpl->file().get()).set_cpl_id(cpl->id()).set_error("No correctly-formed DCP Constraints Profile found"), }); } @@ -4367,6 +4325,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata6) e.replace ("</meta:Value>", "</meta:ValueX>"); } + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); + using VN = dcp::VerificationNote; using VC = VN::Code; @@ -4375,29 +4335,19 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata6) {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - VN( - VC::INVALID_XML, string("no declaration found for element 'meta:ValueX'"), cpl->file().get(), 74 - ).set_cpl_id(cpl->id()), - VN( - VC::INVALID_XML, string("element 'meta:ValueX' is not allowed for content model '(Name,Value)'"), cpl->file().get(), 75 - ).set_cpl_id(cpl->id()), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN(VC::INVALID_XML, cpl->file().get(), 74).set_cpl_id(cpl->id()).set_error("no declaration found for element 'meta:ValueX'"), + VN(VC::INVALID_XML, cpl->file().get(), 75).set_cpl_id(cpl->id()).set_error("element 'meta:ValueX' is not allowed for content model '(Name,Value)'"), VN( VC::MISMATCHED_CPL_HASHES, cpl->file().get() ).set_cpl_id(cpl->id()).set_reference_hash(calc.old_hash()).set_calculated_hash(calc.new_hash()), - VN( - VC::INVALID_EXTENSION_METADATA, string("No correctly-formed DCP Constraints Profile found"), cpl->file().get() - ).set_cpl_id(cpl->id()) + VN(VC::INVALID_EXTENSION_METADATA, cpl->file().get()).set_cpl_id(cpl->id()).set_error("No correctly-formed DCP Constraints Profile found"), }); } @@ -4417,6 +4367,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata7) e.replace ("SMPTE-RDD-52:2020-Bv2.1", "Fred"); } + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); + using VN = dcp::VerificationNote; using VC = VN::Code; @@ -4425,23 +4377,17 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata7) {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), VN( VC::MISMATCHED_CPL_HASHES, cpl->file().get() ).set_cpl_id(cpl->id()).set_reference_hash(calc.old_hash()).set_calculated_hash(calc.new_hash()), - VN( - VC::INVALID_EXTENSION_METADATA, string("No correctly-formed DCP Constraints Profile found"), cpl->file().get() - ).set_cpl_id(cpl->id()) + VN(VC::INVALID_EXTENSION_METADATA, cpl->file().get()).set_cpl_id(cpl->id()).set_error("No correctly-formed DCP Constraints Profile found"), }); } @@ -4462,6 +4408,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata8) e.replace ("</meta:Property>", "</meta:PropertyX>"); } + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); + using VN = dcp::VerificationNote; using VC = VN::Code; @@ -4470,22 +4418,19 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata8) {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, string{"1998x1080"}, cpl->file().get()).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - VN(VC::INVALID_XML, string("no declaration found for element 'meta:PropertyX'"), cpl->file().get(), 72).set_cpl_id(cpl->id()), - VN( - VC::INVALID_XML, string("element 'meta:PropertyX' is not allowed for content model '(Property+)'"), cpl->file().get(), 76).set_cpl_id(cpl->id()), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, cpl->file().get()).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN(VC::INVALID_XML, cpl->file().get(), 72).set_cpl_id(cpl->id()).set_error("no declaration found for element 'meta:PropertyX'"), + VN(VC::INVALID_XML, cpl->file().get(), 76).set_cpl_id(cpl->id()).set_error("element 'meta:PropertyX' is not allowed for content model '(Property+)'"), VN( VC::MISMATCHED_CPL_HASHES, cpl->file().get() ).set_cpl_id(cpl->id()).set_reference_hash(calc.old_hash()).set_calculated_hash(calc.new_hash()), - VN( - VC::INVALID_EXTENSION_METADATA, string("No correctly-formed DCP Constraints Profile found"), cpl->file().get() - ).set_cpl_id(cpl->id()) + VN(VC::INVALID_EXTENSION_METADATA, cpl->file().get()).set_cpl_id(cpl->id()).set_error("No correctly-formed DCP Constraints Profile found"), }); } @@ -4506,6 +4451,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata9) e.replace ("</meta:PropertyList>", "</meta:PropertyListX>"); } + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); + using VN = dcp::VerificationNote; using VC = VN::Code; @@ -4514,23 +4461,17 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata9) {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - VN( - VC::INVALID_XML, string("no declaration found for element 'meta:PropertyListX'"), cpl->file().get(), 71 - ).set_cpl_id(cpl->id()), - VN( - VC::INVALID_XML, string("element 'meta:PropertyListX' is not allowed for content model '(Name,PropertyList?,)'"), cpl->file().get(), 77 - ).set_cpl_id(cpl->id()), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, cpl->file().get()).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN(VC::INVALID_XML, cpl->file().get(), 71).set_cpl_id(cpl->id()).set_error("no declaration found for element 'meta:PropertyListX'"), + VN(VC::INVALID_XML, cpl->file().get(), 77).set_cpl_id(cpl->id()).set_error( + "element 'meta:PropertyListX' is not allowed for content model '(Name,PropertyList?,)'" + ), VN( VC::MISMATCHED_CPL_HASHES, cpl->file().get() ).set_cpl_id(cpl->id()).set_reference_hash(calc.old_hash()).set_calculated_hash(calc.new_hash()), @@ -4557,7 +4498,10 @@ BOOST_AUTO_TEST_CASE (verify_unsigned_cpl_with_encrypted_content) e.delete_lines ("<dsig:Signature", "</dsig:Signature>"); } - auto cpl = std::make_shared<dcp::CPL>(cpl_path); + auto dcp = dcp::DCP(dir); + dcp.read(); + auto const cpl = dcp.cpls()[0]; + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -4567,15 +4511,15 @@ BOOST_AUTO_TEST_CASE (verify_unsigned_cpl_with_encrypted_content) {}, { note(VC::ALL_ENCRYPTED, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_CONTENT_KIND, string{"feature"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("feature"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), VN( VC::MISMATCHED_CPL_HASHES, canonical(cpl_path) ).set_cpl_id(cpl->id()).set_reference_hash(calc.old_hash()).set_calculated_hash(calc.new_hash()), - VN(VC::MISMATCHED_PKL_ANNOTATION_TEXT_WITH_CPL, encryption_test_pkl_id(), canonical(pkl)).set_cpl_id(cpl->id()), + VN(VC::MISMATCHED_PKL_ANNOTATION_TEXT_WITH_CPL, canonical(pkl)).set_cpl_id(cpl->id()).set_pkl_id(encryption_test_pkl_id()), VN(VC::MISSING_FFEC_IN_FEATURE).set_cpl_id(cpl->id()), VN(VC::MISSING_FFMC_IN_FEATURE).set_cpl_id(cpl->id()), VN(VC::MISSING_FFOC).set_cpl_id(cpl->id()), @@ -4601,7 +4545,10 @@ BOOST_AUTO_TEST_CASE (verify_unsigned_pkl_with_encrypted_content) e.delete_lines ("<dsig:Signature", "</dsig:Signature>"); } - auto cpl = std::make_shared<dcp::CPL>(cpl_path); + auto dcp = dcp::DCP(dir); + dcp.read(); + auto const cpl = dcp.cpls()[0]; + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -4611,19 +4558,19 @@ BOOST_AUTO_TEST_CASE (verify_unsigned_pkl_with_encrypted_content) {}, { note(VC::ALL_ENCRYPTED, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_CONTENT_KIND, string{"feature"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("feature"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), note(VC::MATCHING_CPL_HASHES, cpl), - VN(VC::MISMATCHED_PKL_ANNOTATION_TEXT_WITH_CPL, encryption_test_pkl_id(), canonical(pkl)).set_cpl_id(cpl->id()), + VN(VC::MISMATCHED_PKL_ANNOTATION_TEXT_WITH_CPL, canonical(pkl)).set_cpl_id(cpl->id()).set_pkl_id(encryption_test_pkl_id()), VN(VC::MISSING_FFEC_IN_FEATURE).set_cpl_id(cpl->id()), VN(VC::MISSING_FFMC_IN_FEATURE).set_cpl_id(cpl->id()), VN(VC::MISSING_FFOC).set_cpl_id(cpl->id()), VN(VC::MISSING_LFOC).set_cpl_id(cpl->id()), VN(VC::MISSING_CPL_METADATA, canonical(cpl_path)).set_cpl_id(cpl->id()), - VN(VC::UNSIGNED_PKL_WITH_ENCRYPTED_CONTENT, encryption_test_pkl_id(), canonical(pkl)) + VN(VC::UNSIGNED_PKL_WITH_ENCRYPTED_CONTENT, canonical(pkl)).set_pkl_id(encryption_test_pkl_id()), }); } @@ -4641,7 +4588,10 @@ BOOST_AUTO_TEST_CASE (verify_unsigned_pkl_with_unencrypted_content) e.delete_lines ("<dsig:Signature", "</dsig:Signature>"); } - auto cpl = make_shared<dcp::CPL>(find_cpl(dir)); + auto dcp = dcp::DCP(dir); + dcp.read(); + auto const cpl = dcp.cpls()[0]; + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -4650,19 +4600,15 @@ BOOST_AUTO_TEST_CASE (verify_unsigned_pkl_with_unencrypted_content) {dir}, {}, { - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - canonical(cpl->file().get()) - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, cpl->file().get()).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), }); } @@ -4733,18 +4679,14 @@ BOOST_AUTO_TEST_CASE (verify_partially_encrypted) {dir}, {}, { - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1440x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, cpl->file().get()).set_cpl_id(cpl->id()).set_size_in_pixels({1440, 1080}), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(mp->id()), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(mp->id()), VN(VC::PARTIALLY_ENCRYPTED).set_cpl_id(cpl->id()) }); } @@ -4849,14 +4791,16 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_subtitle_resource_id) {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - VN(VC::MISMATCHED_TIMED_TEXT_DURATION , "240 0", boost::filesystem::canonical(subs_mxf)).set_cpl_id(cpl->id()), - VN(VC::MISMATCHED_TIMED_TEXT_RESOURCE_ID).set_cpl_id(cpl->id()), - VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN( + VC::MISMATCHED_TIMED_TEXT_DURATION, boost::filesystem::canonical(subs_mxf) + ).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs_asset->id()).set_duration(0).set_other_duration(240), + VN(VC::MISMATCHED_TIMED_TEXT_RESOURCE_ID).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs_asset->id()), + VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs_asset->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -4924,16 +4868,18 @@ BOOST_AUTO_TEST_CASE (verify_incorrect_timed_text_id) {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - VN(VC::MISMATCHED_TIMED_TEXT_DURATION , "240 0", boost::filesystem::canonical(subs_mxf)).set_cpl_id(cpl->id()), - VN(VC::INCORRECT_TIMED_TEXT_ASSET_ID).set_cpl_id(cpl->id()), - VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN( + VC::MISMATCHED_TIMED_TEXT_DURATION, boost::filesystem::canonical(subs_mxf) + ).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs_asset->id()).set_duration(0).set_other_duration(240), + VN(VC::INCORRECT_TIMED_TEXT_ASSET_ID).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs_asset->id()), + VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs_asset->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()), - VN(VC::INVALID_SUBTITLE_ISSUE_DATE, string{"2018-10-02T12:25:14+02:00"}).set_cpl_id(cpl->id()) + VN(VC::INVALID_SUBTITLE_ISSUE_DATE).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subs_asset->id()).set_issue_date("2018-10-02T12:25:14+02:00"), }); } @@ -4954,12 +4900,16 @@ BOOST_AUTO_TEST_CASE (verify_threed_marked_as_twod) {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(path / "0d6f57e6-adac-4e1d-bfbe-d162bf13e2cd_j2c.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "0d6f57e6-adac-4e1d-bfbe-d162bf13e2cd_j2c.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(path / "0d6f57e6-adac-4e1d-bfbe-d162bf13e2cd_j2c.mxf"), cpl).set_reel_index(0).set_asset_id("0d6f57e6-adac-4e1d-bfbe-d162bf13e2cd"), + note( + VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, + canonical(path / "0d6f57e6-adac-4e1d-bfbe-d162bf13e2cd_j2c.mxf"), + cpl + ).set_reel_index(0).set_asset_id("0d6f57e6-adac-4e1d-bfbe-d162bf13e2cd"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - VN(VC::THREED_ASSET_MARKED_AS_TWOD, boost::filesystem::canonical(find_file(path, "j2c"))), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN(VC::THREED_ASSET_MARKED_AS_TWOD, boost::filesystem::canonical(find_file(path, "j2c"))).set_asset_id("0d6f57e6-adac-4e1d-bfbe-d162bf13e2cd"), VN(VC::INVALID_STANDARD) }); @@ -4983,8 +4933,8 @@ BOOST_AUTO_TEST_CASE (verify_unexpected_things_in_main_markers) ); } - auto cpl = make_shared<dcp::CPL>(find_cpl(dir)); - + auto const cpl = dcp->cpls()[0]; + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -4993,22 +4943,18 @@ BOOST_AUTO_TEST_CASE (verify_unexpected_things_in_main_markers) {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - canonical(cpl->file().get()) - ).set_cpl_id(cpl->id()), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, cpl->file().get()).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN( VC::MISMATCHED_CPL_HASHES, canonical(find_cpl(dir)) ).set_cpl_id(cpl->id()).set_reference_hash(calc.old_hash()).set_calculated_hash(calc.new_hash()), - VN(VC::UNEXPECTED_ENTRY_POINT).set_cpl_id(cpl->id()), - VN(VC::UNEXPECTED_DURATION).set_cpl_id(cpl->id()) + VN(VC::UNEXPECTED_ENTRY_POINT).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::UNEXPECTED_DURATION).set_cpl_id(cpl->id()).set_reel_index(0) }); } @@ -5027,7 +4973,8 @@ BOOST_AUTO_TEST_CASE(verify_invalid_content_kind) e.replace("trailer", "trip"); } - auto cpl = std::make_shared<dcp::CPL>(find_cpl(dir)); + auto const cpl = dcp->cpls()[0]; + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -5037,21 +4984,16 @@ BOOST_AUTO_TEST_CASE(verify_invalid_content_kind) {}, { note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - canonical(cpl->file().get()) - ).set_cpl_id(cpl->id()), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, cpl->file().get()).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), VN( VC::MISMATCHED_CPL_HASHES, canonical(find_cpl(dir)) ).set_cpl_id(cpl->id()).set_reference_hash(calc.old_hash()).set_calculated_hash(calc.new_hash()), - VN(VC::INVALID_CONTENT_KIND, string("trip") - ).set_cpl_id(cpl->id()), + VN(VC::INVALID_CONTENT_KIND).set_cpl_id(cpl->id()).set_content_kind("trip"), }); } @@ -5071,7 +5013,8 @@ BOOST_AUTO_TEST_CASE(verify_valid_content_kind) e.replace("<ContentKind>trailer</ContentKind>", "<ContentKind scope=\"http://bobs.contents/\">trip</ContentKind>"); } - auto cpl = std::make_shared<dcp::CPL>(find_cpl(dir)); + auto const cpl = dcp->cpls()[0]; + auto const picture_id = cpl->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -5081,16 +5024,12 @@ BOOST_AUTO_TEST_CASE(verify_valid_content_kind) {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - canonical(cpl->file().get()) - ).set_cpl_id(cpl->id()), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, cpl->file().get()).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), VN( VC::MISMATCHED_CPL_HASHES, canonical(find_cpl(dir)) ).set_cpl_id(cpl->id()).set_reference_hash(calc.old_hash()).set_calculated_hash(calc.new_hash()), @@ -5117,7 +5056,8 @@ BOOST_AUTO_TEST_CASE(verify_invalid_main_picture_active_area_1) } dcp::PKL pkl(find_pkl(dir)); - auto cpl = std::make_shared<dcp::CPL>(find_cpl(dir)); + auto const cpl = dcp->cpls()[0]; + auto const picture_id = cpl->reels()[0]->main_picture()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -5127,21 +5067,21 @@ BOOST_AUTO_TEST_CASE(verify_invalid_main_picture_active_area_1) {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), VN( VC::MISMATCHED_CPL_HASHES, canonical(find_cpl(dir)) ).set_cpl_id(cpl->id()).set_reference_hash(calc.old_hash()).set_calculated_hash(calc.new_hash()), VN( - VC::INVALID_MAIN_PICTURE_ACTIVE_AREA, "width 1997 is not a multiple of 2", canonical(find_cpl(dir)) - ).set_cpl_id(cpl->id()), + VC::INVALID_MAIN_PICTURE_ACTIVE_AREA, canonical(find_cpl(dir)) + ).set_cpl_id(cpl->id()).set_error("width 1997 is not a multiple of 2"), VN( - VC::INVALID_MAIN_PICTURE_ACTIVE_AREA, "height 4080 is bigger than the asset height 1080", canonical(find_cpl(dir)) - ).set_cpl_id(cpl->id()), + VC::INVALID_MAIN_PICTURE_ACTIVE_AREA, canonical(find_cpl(dir)) + ).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(picture_id).set_error("height 4080 is bigger than the asset height 1080"), }); } @@ -5166,6 +5106,7 @@ BOOST_AUTO_TEST_CASE(verify_invalid_main_picture_active_area_2) dcp::PKL pkl(find_pkl(dir)); auto cpl = std::make_shared<dcp::CPL>(find_cpl(dir)); + auto const picture_id = cpl->reels()[0]->main_picture()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -5175,24 +5116,24 @@ BOOST_AUTO_TEST_CASE(verify_invalid_main_picture_active_area_2) {}, { note(VC::NONE_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), VN( VC::MISMATCHED_CPL_HASHES, canonical(find_cpl(dir)) ).set_cpl_id(cpl->id()).set_reference_hash(calc.old_hash()).set_calculated_hash(calc.new_hash()), VN( - VC::INVALID_MAIN_PICTURE_ACTIVE_AREA, "height 5125 is not a multiple of 2", canonical(find_cpl(dir)) - ).set_cpl_id(cpl->id()), + VC::INVALID_MAIN_PICTURE_ACTIVE_AREA, canonical(find_cpl(dir)) + ).set_cpl_id(cpl->id()).set_error("height 5125 is not a multiple of 2"), VN( - VC::INVALID_MAIN_PICTURE_ACTIVE_AREA, "width 9900 is bigger than the asset width 1998", canonical(find_cpl(dir)) - ).set_cpl_id(cpl->id()), + VC::INVALID_MAIN_PICTURE_ACTIVE_AREA, canonical(find_cpl(dir)) + ).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(picture_id).set_error("width 9900 is bigger than the asset width 1998"), VN( - VC::INVALID_MAIN_PICTURE_ACTIVE_AREA, "height 5125 is bigger than the asset height 1080", canonical(find_cpl(dir)) - ).set_cpl_id(cpl->id()) + VC::INVALID_MAIN_PICTURE_ACTIVE_AREA, canonical(find_cpl(dir)) + ).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(picture_id).set_error("height 5125 is bigger than the asset height 1080"), }); } @@ -5223,16 +5164,12 @@ BOOST_AUTO_TEST_CASE(verify_duplicate_pkl_asset_ids) { note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - canonical(cpl->file().get()) - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::NONE_ENCRYPTED, cpl), - { VC::DUPLICATE_ASSET_ID_IN_PKL, pkl.id(), canonical(find_pkl(dir)) }, + VN(VC::DUPLICATE_ASSET_ID_IN_PKL, canonical(find_pkl(dir))).set_pkl_id(pkl.id()), }); } @@ -5264,21 +5201,15 @@ BOOST_AUTO_TEST_CASE(verify_duplicate_assetmap_asset_ids) { note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - canonical(cpl->file().get()) - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, canonical(cpl->file().get())).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::NONE_ENCRYPTED, cpl), VN( - VC::DUPLICATE_ASSET_ID_IN_ASSETMAP, asset_map.id(), canonical(find_asset_map(dir)) - ), - VN( - VC::EXTERNAL_ASSET, string("5407b210-4441-4e97-8b16-8bdc7c12da54") - ) + VC::DUPLICATE_ASSET_ID_IN_ASSETMAP, canonical(find_asset_map(dir)) + ).set_asset_map_id(asset_map.id()), + VN(VC::EXTERNAL_ASSET).set_asset_id("5407b210-4441-4e97-8b16-8bdc7c12da54"), }); } @@ -5306,12 +5237,16 @@ BOOST_AUTO_TEST_CASE(verify_mismatched_sound_channel_counts) cpl->set_main_picture_active_area(dcp::Size(1998, 1080)); cpl->set_version_number(1); - { + std::vector<string> picture_ids; + std::vector<string> sound_ids; + { /* Reel with 2 channels of audio */ auto mp = simple_picture(path, "1", frames, {}); + picture_ids.push_back(mp->id()); auto ms = simple_sound(path, "1", mxf_meta, "en-US", frames, sample_rate, {}, 2); + sound_ids.push_back(ms->id()); auto reel = make_shared<dcp::Reel>( std::make_shared<dcp::ReelMonoPictureAsset>(mp, 0), @@ -5329,7 +5264,9 @@ BOOST_AUTO_TEST_CASE(verify_mismatched_sound_channel_counts) /* Reel with 6 channels of audio */ auto mp = simple_picture(path, "2", frames, {}); + picture_ids.push_back(mp->id()); auto ms = simple_sound(path, "2", mxf_meta, "en-US", frames, sample_rate, {}, 6); + sound_ids.push_back(ms->id()); auto reel = make_shared<dcp::Reel>( std::make_shared<dcp::ReelMonoPictureAsset>(mp, 0), @@ -5357,21 +5294,17 @@ BOOST_AUTO_TEST_CASE(verify_mismatched_sound_channel_counts) note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(path / "video1.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video1.mxf"), cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(path / "video2.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video2.mxf"), cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, cpl->file().get()).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), + note(VC::CORRECT_PICTURE_HASH, canonical(path / "video1.mxf"), cpl).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video1.mxf"), cpl).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::CORRECT_PICTURE_HASH, canonical(path / "video2.mxf"), cpl).set_reel_index(1).set_asset_id(picture_ids[1]), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video2.mxf"), cpl).set_reel_index(1).set_asset_id(picture_ids[1]), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN( VC::MISMATCHED_SOUND_CHANNEL_COUNTS, canonical(find_file(path, "audio2")) - ).set_cpl_id(cpl->id()) + ).set_cpl_id(cpl->id()).set_reel_index(1).set_asset_id(sound_ids[1]) }); } @@ -5428,21 +5361,16 @@ BOOST_AUTO_TEST_CASE(verify_invalid_main_sound_configuration) note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(path / "video1.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video1.mxf"), cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), + note(VC::CORRECT_PICTURE_HASH, canonical(path / "video1.mxf"), cpl).set_reel_index(0).set_asset_id(mp->id()), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video1.mxf"), cpl).set_reel_index(0).set_asset_id(mp->id()), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, cpl->file().get()).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN( VC::INVALID_MAIN_SOUND_CONFIGURATION, - std::string{"MainSoundConfiguration has 6 channels but sound assets have 2"}, canonical(find_cpl(path)) - ).set_cpl_id(cpl->id()) + ).set_cpl_id(cpl->id()).set_error("MainSoundConfiguration has 6 channels but sound assets have 2"), }); } @@ -5502,16 +5430,12 @@ BOOST_AUTO_TEST_CASE(verify_invalid_tile_part_size) vector<VN> expected = { note(VC::NONE_ENCRYPTED, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::CORRECT_PICTURE_HASH, canonical(path / "video.mxf"), cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, cpl->file().get()).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::CORRECT_PICTURE_HASH, canonical(path / "video.mxf"), cpl).set_reel_index(0).set_asset_id(mp->id()), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), note(VC::MATCHING_CPL_HASHES, cpl), VN(VC::MISSING_FFOC).set_cpl_id(cpl->id()), VN(VC::MISSING_LFOC).set_cpl_id(cpl->id()) @@ -5520,7 +5444,7 @@ BOOST_AUTO_TEST_CASE(verify_invalid_tile_part_size) for (auto frame = 0; frame < 24; frame++) { expected.push_back( VN(VC::INVALID_PICTURE_FRAME_SIZE_IN_BYTES, canonical(path / "video.mxf") - ).set_frame(frame).set_frame_rate(24).set_cpl_id(cpl->id()) + ).set_frame(frame).set_frame_rate(dcp::Fraction(24, 1)).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(mp->id()) ); } @@ -5533,9 +5457,9 @@ BOOST_AUTO_TEST_CASE(verify_invalid_tile_part_size) for (auto frame = 0; frame < 24; frame++) { for (auto component = 0; component < 3; component++) { expected.push_back( - VN( - VC::INVALID_JPEG2000_TILE_PART_SIZE - ).set_frame(frame).set_frame_rate(24).set_component(component).set_size(component_sizes[component]).set_cpl_id(cpl->id()) + VN(VC::INVALID_JPEG2000_TILE_PART_SIZE) + .set_frame(frame).set_frame_rate(dcp::Fraction(24, 1)).set_component(component) + .set_size_in_bytes(component_sizes[component]).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(mp->id()) ); } } @@ -5562,17 +5486,21 @@ BOOST_AUTO_TEST_CASE(verify_too_many_subtitle_namespaces) note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CONTENT_KIND, string{"feature"}, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"Dcp_FTR-1_F_XX-XX_MOS_2K_20230407_SMPTE_OV"}, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "j2c_42b34dcd-caa5-4c7b-aa0f-66a590947ba1.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "j2c_42b34dcd-caa5-4c7b-aa0f-66a590947ba1.mxf"), cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("feature"), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("Dcp_FTR-1_F_XX-XX_MOS_2K_20230407_SMPTE_OV"), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "j2c_42b34dcd-caa5-4c7b-aa0f-66a590947ba1.mxf"), cpl).set_reel_index(0).set_asset_id("42b34dcd-caa5-4c7b-aa0f-66a590947ba1"), + note( + VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, + canonical(dir / "j2c_42b34dcd-caa5-4c7b-aa0f-66a590947ba1.mxf"), + cpl + ).set_reel_index(0).set_asset_id("42b34dcd-caa5-4c7b-aa0f-66a590947ba1"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), VN(VC::MISSING_FFEC_IN_FEATURE).set_cpl_id(cpl->id()), VN(VC::MISSING_FFMC_IN_FEATURE).set_cpl_id(cpl->id()), - VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()), - VN(VC::MISSING_SUBTITLE_LANGUAGE, canonical(find_file(dir, "sub_"))).set_cpl_id(cpl->id()), + VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id("315de731-1173-484c-9a35-bdacf5a9d99d"), + VN(VC::MISSING_SUBTITLE_LANGUAGE, canonical(find_file(dir, "sub_"))).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id("315de731-1173-484c-9a35-bdacf5a9d99d"), VN(VC::MISSING_CPL_METADATA, canonical(find_file(dir, "cpl_"))).set_cpl_id(cpl->id()), - VN(VC::INCORRECT_SUBTITLE_NAMESPACE_COUNT, std::string{"315de731-1173-484c-9a35-bdacf5a9d99d"}).set_cpl_id(cpl->id()), + VN(VC::INCORRECT_SUBTITLE_NAMESPACE_COUNT).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id("315de731-1173-484c-9a35-bdacf5a9d99d") }); } @@ -5600,10 +5528,10 @@ BOOST_AUTO_TEST_CASE(verify_missing_load_font_for_font) note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), { VC::INVALID_STANDARD }, - VN(VC::MISSING_LOAD_FONT_FOR_FONT).set_id("theFontId").set_cpl_id(cpl->id()) + VN(VC::MISSING_LOAD_FONT_FOR_FONT).set_load_font_id("theFontId").set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(asset->id()) }); } @@ -5648,6 +5576,8 @@ BOOST_AUTO_TEST_CASE(verify_missing_load_font) cpl->reels()[0]->add(reel_subs); dcp->write_xml(); + auto const picture_id = dcp->cpls()[0]->reels()[0]->main_picture()->asset()->id(); + using VN = dcp::VerificationNote; using VC = VN::Code; @@ -5658,17 +5588,13 @@ BOOST_AUTO_TEST_CASE(verify_missing_load_font) note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), - VN(VC::MISSING_LOAD_FONT).set_id(reel_subs->id()).set_cpl_id(cpl->id()) + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, cpl->file().get()).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + VN(VC::MISSING_LOAD_FONT).set_asset_id(reel_subs->id()).set_cpl_id(cpl->id()).set_reel_index(0) }); } @@ -5701,15 +5627,11 @@ BOOST_AUTO_TEST_CASE(verify_spots_wrong_asset) note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - VN(VC::MISMATCHED_ASSET_MAP_ID).set_id(asset_1).set_other_id(asset_2) + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, cpl->file().get()).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::MISMATCHED_ASSET_MAP_ID).set_asset_id(asset_1).set_other_asset_id(asset_2) }); } @@ -5724,6 +5646,7 @@ BOOST_AUTO_TEST_CASE(verify_cpl_content_version_label_text_empty) auto cpl = dcp->cpls()[0]; cpl->set_content_version(dcp::ContentVersion("")); dcp->write_xml(); + auto picture_id = dcp->cpls()[0]->reels()[0]->main_picture()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -5732,18 +5655,14 @@ BOOST_AUTO_TEST_CASE(verify_cpl_content_version_label_text_empty) {dir}, {}, { - VN( - VC::VALID_MAIN_PICTURE_ACTIVE_AREA, - string{"1998x1080"}, - cpl->file().get() - ).set_cpl_id(cpl->id()), + VN(VC::VALID_MAIN_PICTURE_ACTIVE_AREA, cpl->file().get()).set_cpl_id(cpl->id()).set_size_in_pixels({1998, 1080}), note(VC::NONE_ENCRYPTED, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("A Test DCP"), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0).set_asset_id(picture_id), VN(VC::EMPTY_CONTENT_VERSION_LABEL_TEXT, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -5772,9 +5691,9 @@ BOOST_AUTO_TEST_CASE(verify_encrypted_smpte_dcp) { note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), note(VC::ALL_ENCRYPTED, cpl), VN(VC::MISSING_CPL_METADATA, canonical(cpl_file)).set_cpl_id(cpl->id()) }); @@ -5791,6 +5710,7 @@ BOOST_AUTO_TEST_CASE(verify_encrypted_smpte_dcp_without_kdm) path const pkl_file = find_file(dir, "pkl_"); path const cpl_file = find_file(dir, "cpl_"); + auto const subtitle_id = cpl->reels()[0]->main_subtitle()->asset()->id(); using VN = dcp::VerificationNote; using VC = VN::Code; @@ -5802,12 +5722,12 @@ BOOST_AUTO_TEST_CASE(verify_encrypted_smpte_dcp_without_kdm) note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::MATCHING_CPL_HASHES, cpl), note(VC::ALL_ENCRYPTED, cpl), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), - VN(VC::MISSED_CHECK_OF_ENCRYPTED).set_cpl_id(cpl->id()), - VN(VC::MISSED_CHECK_OF_ENCRYPTED).set_cpl_id(cpl->id()), - VN(VC::MISSED_CHECK_OF_ENCRYPTED).set_cpl_id(cpl->id()), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("trailer"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("hello"), + VN(VC::MISSED_CHECK_OF_ENCRYPTED).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subtitle_id), + VN(VC::MISSED_CHECK_OF_ENCRYPTED).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subtitle_id), + VN(VC::MISSED_CHECK_OF_ENCRYPTED).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id(subtitle_id), VN(VC::MISSING_CPL_METADATA, canonical(cpl_file)).set_cpl_id(cpl->id()), }); } @@ -5825,22 +5745,26 @@ BOOST_AUTO_TEST_CASE(verify_invalid_sound_bit_depth) vector<VN> notes = { note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::MATCHING_CPL_HASHES, cpl), - note(VC::VALID_CONTENT_KIND, string{"Advertisement"}, cpl), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"204794_Kitex_Scoobee_Day_Bags_30_Sec_Malayalam_220524_RADQR"}, cpl), + note(VC::VALID_CONTENT_KIND, cpl).set_content_kind("Advertisement"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl).set_content_version(cpl->content_version()->label_text), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpl->id()).set_annotation_text("204794_Kitex_Scoobee_Day_Bags_30_Sec_Malayalam_220524_RADQR"), note(VC::NONE_ENCRYPTED, cpl), - note(VC::CORRECT_PICTURE_HASH, canonical(dir / "Video.mxf"), cpl), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "Video.mxf"), cpl), - VN(VC::INVALID_SOUND_BIT_DEPTH, "16", canonical(dir / "Audio.mxf")).set_cpl_id(cpl->id()), - VN(VC::MISSING_HASH, string("fd4796c2-9c84-454c-91f4-13ad127cea8a")).set_cpl_id(cpl->id()), - VN(VC::MISSING_HASH, string("9d5e8bc4-676b-4306-a86d-03f70c73b457")).set_cpl_id(cpl->id()), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "Video.mxf"), cpl).set_reel_index(0).set_asset_id("fd4796c2-9c84-454c-91f4-13ad127cea8a"), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "Video.mxf"), cpl).set_reel_index(0).set_asset_id("fd4796c2-9c84-454c-91f4-13ad127cea8a"), + VN( + VC::INVALID_SOUND_BIT_DEPTH, canonical(dir / "Audio.mxf") + ).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id("9d5e8bc4-676b-4306-a86d-03f70c73b457").set_bit_depth(16), + VN(VC::MISSING_HASH).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id("fd4796c2-9c84-454c-91f4-13ad127cea8a"), + VN(VC::MISSING_HASH).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id("9d5e8bc4-676b-4306-a86d-03f70c73b457"), VN(VC::MISSING_CPL_METADATA, canonical(cpl->file().get())).set_cpl_id(cpl->id()), VN(VC::MISSING_FFOC).set_cpl_id(cpl->id()), VN(VC::MISSING_LFOC).set_cpl_id(cpl->id()), }; for (auto i = 0; i < 792; ++i) { - notes.push_back(VN(VC::INVALID_JPEG2000_GUARD_BITS_FOR_2K, string("2")).set_cpl_id(cpl->id())); + notes.push_back( + VN(VC::INVALID_JPEG2000_GUARD_BITS_FOR_2K).set_cpl_id(cpl->id()).set_reel_index(0).set_asset_id("fd4796c2-9c84-454c-91f4-13ad127cea8a").set_guard_bits(2) + ); } check_verify_result({ dir }, {}, notes); @@ -5940,10 +5864,12 @@ BOOST_AUTO_TEST_CASE(verify_dcp_with_two_cpls) auto const prefix = string{"build/test/verify_dcp_with_two_cpls"}; vector<shared_ptr<dcp::CPL>> cpls; + vector<string> picture_ids; for (auto i = 0; i < 2; ++i) { auto dcp_dir = dcp::String::compose("%1_%2", prefix, i); prepare_directory(dcp_dir); auto picture = simple_picture(dcp_dir, "foo"); + picture_ids.push_back(picture->id()); auto sound = simple_sound(dcp_dir, "foo", dcp::MXFMetadata{}, "de-DE", 24, 48000, boost::none, i == 0 ? 6 : 8); auto cpl = make_shared<dcp::CPL>("hello", dcp::ContentKind::TRAILER, dcp::Standard::SMPTE); auto reel = make_shared<dcp::Reel>(); @@ -5975,18 +5901,18 @@ BOOST_AUTO_TEST_CASE(verify_dcp_with_two_cpls) note(VC::MATCHING_CPL_HASHES, cpls[1]), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpls[0]), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpls[1]), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpls[0]), - note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpls[1]), + note(VC::VALID_CONTENT_KIND, cpls[0]).set_content_kind("trailer"), + note(VC::VALID_CONTENT_KIND, cpls[1]).set_content_kind("trailer"), note(VC::NONE_ENCRYPTED, cpls[0]), note(VC::NONE_ENCRYPTED, cpls[1]), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpls[0]), - note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpls[1]), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpls[0]->content_version()->label_text, cpls[0]), - note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpls[1]->content_version()->label_text, cpls[1]), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(combined / "videofoo.mxf"), cpls[0]), - note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(combined / "videofoo0.mxf"), cpls[1]), - note(VC::CORRECT_PICTURE_HASH, canonical(combined / "videofoo.mxf"), cpls[0]), - note(VC::CORRECT_PICTURE_HASH, canonical(combined / "videofoo0.mxf"), cpls[1]), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpls[0]->id()).set_annotation_text("hello"), + VN(VC::VALID_CPL_ANNOTATION_TEXT).set_cpl_id(cpls[1]->id()).set_annotation_text("hello"), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpls[0]).set_content_version(cpls[0]->content_version()->label_text), + note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpls[1]).set_content_version(cpls[1]->content_version()->label_text), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(combined / "videofoo.mxf"), cpls[0]).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(combined / "videofoo0.mxf"), cpls[1]).set_reel_index(0).set_asset_id(picture_ids[1]), + note(VC::CORRECT_PICTURE_HASH, canonical(combined / "videofoo.mxf"), cpls[0]).set_reel_index(0).set_asset_id(picture_ids[0]), + note(VC::CORRECT_PICTURE_HASH, canonical(combined / "videofoo0.mxf"), cpls[1]).set_reel_index(0).set_asset_id(picture_ids[1]), VN(VC::MISSING_CPL_METADATA, canonical(combined / cpls[0]->file()->filename())).set_cpl_id(cpls[0]->id()), VN(VC::MISSING_CPL_METADATA, canonical(combined / cpls[1]->file()->filename())).set_cpl_id(cpls[1]->id()) }); |
