diff options
| author | Carl Hetherington <cth@carlh.net> | 2026-03-21 22:43:01 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2026-03-21 22:43:01 +0100 |
| commit | 4700724da0aaf27aa43e4809d263c0fc00a8be9f (patch) | |
| tree | 1b3389344c35248914c636597fc7ee620bf1bbcb | |
| parent | bb029d678e370c210149d41a99537207caf9cdb5 (diff) | |
Store reel_index in VerificationNote in lots of cases.
| -rw-r--r-- | src/verify.cc | 32 | ||||
| -rw-r--r-- | src/verify.h | 83 | ||||
| -rw-r--r-- | src/verify_internal.h | 4 | ||||
| -rw-r--r-- | test/verify_test.cc | 478 |
4 files changed, 345 insertions, 252 deletions
diff --git a/src/verify.cc b/src/verify.cc index 6f958fa8..6c0ec96b 100644 --- a/src/verify.cc +++ b/src/verify.cc @@ -53,6 +53,7 @@ #include "reel_sound_asset.h" #include "reel_smpte_text_asset.h" #include "reel_text_asset.h" +#include "scope_guard.h" #include "smpte_text_asset.h" #include "stereo_j2k_picture_asset.h" #include "stereo_j2k_picture_frame.h" @@ -479,14 +480,14 @@ verify_picture_details( context.add_note( VerificationNote( VerificationNote::Code::INVALID_PICTURE_FRAME_SIZE_IN_BYTES, file - ).set_frame(start_frame + index).set_frame_rate(frame_rate) + ).set_frame(start_frame + index).set_frame_rate(frame_rate).set_reel_index(0) ); any_bad_frames_seen = true; } else if (size > risky_frame) { context.add_note( VerificationNote( VerificationNote::Code::NEARLY_INVALID_PICTURE_FRAME_SIZE_IN_BYTES, file - ).set_frame(start_frame + index).set_frame_rate(frame_rate) + ).set_frame(start_frame + index).set_frame_rate(frame_rate).set_reel_index(0) ); any_bad_frames_seen = true; } @@ -979,6 +980,9 @@ verify_text_details ( }; for (auto i = 0U; i < reels.size(); ++i) { + context.reel_index = i; + dcp::ScopeGuard sg = [&context]() { context.reel_index = boost::none; }; + if (!check(reels[i])) { continue; } @@ -1122,7 +1126,10 @@ verify_closed_caption_details(Context& context, vector<shared_ptr<Reel>> reels) } }; + int reel_index = 0; for (auto reel: reels) { + context.reel_index = reel_index; + dcp::ScopeGuard sg = [&context]() { context.reel_index = boost::none; }; for (auto ccap: reel->closed_captions()) { auto reel_xml = ccap->asset()->raw_xml(); if (!reel_xml) { @@ -1146,6 +1153,8 @@ verify_closed_caption_details(Context& context, vector<shared_ptr<Reel>> reels) } parse (doc); } + + ++reel_index; } if (mismatched_valign) { @@ -1652,7 +1661,10 @@ verify_cpl(Context& context, shared_ptr<const CPL> cpl) } int64_t frame = 0; + int reel_index = 0; for (auto reel: cpl->reels()) { + context.reel_index = reel_index; + dcp::ScopeGuard sg = [&context]() { context.reel_index = boost::none; }; context.stage("Checking reel", optional<boost::filesystem::path>()); verify_reel( context, @@ -1666,6 +1678,7 @@ verify_cpl(Context& context, shared_ptr<const CPL> cpl) &markers_seen ); frame += reel->duration(); + ++reel_index; } verify_text_details(context, cpl->reels()); @@ -1716,10 +1729,14 @@ verify_cpl(Context& context, shared_ptr<const CPL> cpl) } LinesCharactersResult result; + int reel_index = 0; for (auto reel: cpl->reels()) { + context.reel_index = reel_index; + dcp::ScopeGuard sg = [&context]() { context.reel_index = boost::none; }; if (reel->main_subtitle() && reel->main_subtitle()->asset_ref().resolved()) { verify_text_lines_and_characters(reel->main_subtitle()->asset(), 52, 79, &result); } + ++reel_index; } if (result.line_count_exceeded) { @@ -1732,12 +1749,16 @@ verify_cpl(Context& context, shared_ptr<const CPL> cpl) } result = LinesCharactersResult(); + reel_index = 0; for (auto reel: cpl->reels()) { + context.reel_index = reel_index; + dcp::ScopeGuard sg = [&context]() { context.reel_index = boost::none; }; for (auto i: reel->closed_captions()) { if (i->asset()) { verify_text_lines_and_characters(i->asset(), 32, 32, &result); } } + ++reel_index; } if (result.line_count_exceeded) { @@ -2340,7 +2361,8 @@ dcp::operator== (dcp::VerificationNote const& a, dcp::VerificationNote const& b) a.frame_rate() == b.frame_rate() && a.cpl_id() == b.cpl_id() && a.reference_hash() == b.reference_hash() && - a.calculated_hash() == b.calculated_hash(); + a.calculated_hash() == b.calculated_hash() && + a.reel_index() == b.reel_index(); } @@ -2398,6 +2420,10 @@ dcp::operator< (dcp::VerificationNote const& a, dcp::VerificationNote const& b) return a.cpl_id().get_value_or("") < b.cpl_id().get_value_or(""); } + if (a.reel_index() != b.reel_index()) { + return a.reel_index().get_value_or(-1) < b.reel_index().get_value_or(-1); + } + return a.frame_rate().get_value_or(0) != b.frame_rate().get_value_or(0); } diff --git a/src/verify.h b/src/verify.h index 14e7ef3b..ce097578 100644 --- a/src/verify.h +++ b/src/verify.h @@ -115,28 +115,35 @@ public: MISMATCHED_CPL_HASHES, /** The frame rate given in a reel for the main picture is not 24, 25, 30, 48, 50 or 60 * note contains the invalid frame rate as "<numerator>/<denominator>" + * reel_index contains the reel index (starting from 0) */ INVALID_PICTURE_FRAME_RATE, - /** The hash of a main picture asset agrees with the PKL file */ + /** The hash of a main picture asset agrees with the PKL file. + * reel_index contains the reel index (starting from 0) + */ CORRECT_PICTURE_HASH, /** The hash of a main picture asset does not agree with the PKL file * file contains the picture asset filename * calculated_hash contains the current hash of the picture MXF * reference_hash contains the hash from the PKL + * reel_index contains the reel index (starting from 0) */ INCORRECT_PICTURE_HASH, /** The hash of a main picture is different in the CPL and PKL * file contains the picture asset filename + * reel_index contains the reel index (starting from 0) */ MISMATCHED_PICTURE_HASHES, /** The hash of a main sound asset does not agree with the PKL file * file contains the sound asset filename * calculated_hash contains the current hash of the picture MXF * reference_hash contains the hash from the PKL + * reel_index contains the reel index (starting from 0) */ INCORRECT_SOUND_HASH, /** The hash of a main sound is different in the CPL and PKL * file contains the sound asset filename + * reel_index contains the reel index (starting from 0) */ MISMATCHED_SOUND_HASHES, /** An assetmap's _<Path>_ entry is empty */ @@ -151,26 +158,33 @@ public: * note contains the (probably technical) details * file contains the invalid filename * line contains the line number + * reel_index contains the reel index (starting from 0), if applicable */ INVALID_XML, /** No _ASSETMAP_ or _ASSETMAP.xml_ was found */ MISSING_ASSETMAP, /** An asset's _IntrinsicDuration_ is less than 1 second * note contains asset ID + * reel_index contains the reel index (starting from 0) */ INVALID_INTRINSIC_DURATION, /** An asset's _Duration_ is less than 1 second * note contains asset ID + * reel_index contains the reel index (starting from 0) */ INVALID_DURATION, - /** The JPEG2000 data in all picture frames of an asset is smaller than the maximum size */ + /** The JPEG2000 data in all picture frames of an asset is smaller than the maximum size. + * reel_index contains the reel index (starting from 0) + */ VALID_PICTURE_FRAME_SIZES_IN_BYTES, /** The JPEG2000 data in at least one picture frame is larger than the equivalent of 250Mbit/s * file contains the picture asset filename + * reel_index contains the reel index (starting from 0) */ INVALID_PICTURE_FRAME_SIZE_IN_BYTES, /** The JPEG2000 data in at least one picture frame is larger than the equivalent of 230Mbit/s * file contains the picture asset filename + * reel_index contains the reel index (starting from 0) */ NEARLY_INVALID_PICTURE_FRAME_SIZE_IN_BYTES, /** An asset that the CPL requires is not in this DCP; the DCP may be a VF @@ -185,6 +199,7 @@ public: INVALID_STANDARD, /** A language or territory does not conform to RFC 5646 [Bv2.1_6.2.1] * note contains the invalid language + * reel_index contains the reel index (starting from 0) */ INVALID_LANGUAGE, /** A CPL has a valid release territory */ @@ -192,16 +207,19 @@ public: /** A picture asset does not have one of the required Bv2.1 sizes (in pixels) [Bv2.1_7.1] * note contains the incorrect size as "<width>x<height>" * file contains the asset filename + * reel_index contains the reel index (starting from 0) */ INVALID_PICTURE_SIZE_IN_PIXELS, /** A picture asset is 2K but is not at 24, 25 or 48 fps as required by Bv2.1 [Bv2.1_7.1] * note contains the invalid frame rate as "<numerator>/<denominator>" * file contains the asset filename + * reel_index contains the reel index (starting from 0) */ INVALID_PICTURE_FRAME_RATE_FOR_2K, /** A picture asset is 4K but is not at 24fps as required by Bv2.1 [Bv2.1_7.1] * note contains the invalid frame rate as "<numerator>/<denominator>" * file contains the asset filename + * reel_index contains the reel index (starting from 0) */ INVALID_PICTURE_FRAME_RATE_FOR_4K, /** A picture asset is 4K but is 3D which is not allowed by Bv2.1 [Bv2.1_7.1] @@ -211,6 +229,7 @@ public: /** A closed caption's XML file is larger than 256KB [Bv2.1_7.2.1] * note contains the invalid size in bytes * file contains the asset filename + * reel_index contains the reel index (starting from 0) */ INVALID_CLOSED_CAPTION_XML_SIZE_IN_BYTES, /** Any timed text asset's total files is larger than 115MB [Bv2.1_7.2.1] @@ -225,16 +244,21 @@ public: INVALID_TIMED_TEXT_FONT_SIZE_IN_BYTES, /** Some SMPTE subtitle XML has no _<Language>_ tag [Bv2.1_7.2.2] * file contains the asset filename + * reel_index contains the reel index (starting from 0) */ MISSING_SUBTITLE_LANGUAGE, - /** Not all subtitle assets specify the same _<Language>_ tag [Bv2.1_7.2.2] */ + /** Not all subtitle assets specify the same _<Language>_ tag [Bv2.1_7.2.2] + * reel_index contains the reel index (starting from 0) + */ MISMATCHED_SUBTITLE_LANGUAGES, /** Some SMPTE subtitle XML has no _<StartTime>_ tag [Bv2.1_7.2.3] * file contains the asset filename + * reel_index contains the reel index (starting from 0) */ MISSING_SUBTITLE_START_TIME, /** Some SMPTE subtitle XML has a non-zero _<StartTime>_ tag [Bv2.1_7.2.3] * file contains the asset filename + * reel_index contains the reel index (starting from 0) */ INVALID_SUBTITLE_START_TIME, /** The first subtitle or closed caption happens before 4s into the first reel [Bv2.1_7.2.4] */ @@ -260,11 +284,13 @@ public: /** The audio sampling rate must be 48kHz [Bv2.1_7.3] * note contains the invalid frame rate * file contains the asset filename + * reel_index contains the reel index (starting from 0) */ INVALID_SOUND_FRAME_RATE, /** The audio bit depth must be 24 * note contains the invalid bit depth * file contains the asset filename + * reel_index contains the reel index (starting from 0) */ INVALID_SOUND_BIT_DEPTH, /** The CPL has no _<AnnotationText>_ tag [Bv2.1_8.1] @@ -279,7 +305,9 @@ public: MISMATCHED_CPL_ANNOTATION_TEXT, /** A CPL has an annotation text which matches the _<ContentTitleText>_ */ VALID_CPL_ANNOTATION_TEXT, - /** At least one asset in a reel does not have the same duration as the others */ + /** At least one asset in a reel does not have the same duration as the others. + * reel_index contains the reel index (starting from 0) + */ MISMATCHED_ASSET_DURATION, /** If one reel has a _MainSubtitle_, all must have them */ MISSING_MAIN_SUBTITLE_FROM_SOME_REELS, @@ -302,7 +330,8 @@ public: */ INCORRECT_CLOSED_CAPTION_ENTRY_POINT, /** _<Hash>_ must be present for assets in CPLs - * note contains the asset ID + * note contains the asset ID + * reel_index contains the reel index (starting from 0) */ MISSING_HASH, /** If _ContentKind_ is Feature there must be a FFEC marker */ @@ -367,14 +396,17 @@ public: /** General error during JPEG2000 codestream verification * frame contains the frame index (counted from 0) * note contains details + * reel_index contains the reel index (starting from 0) */ INVALID_JPEG2000_CODESTREAM, /** Invalid number of guard bits in a 2K JPEG2000 stream (should be 1) [Bv2.1_10.2.1] * note contains the number of guard bits + * reel_index contains the reel index (starting from 0) */ INVALID_JPEG2000_GUARD_BITS_FOR_2K, /** Invalid number of guard bits in a 4K JPEG2000 stream (should be 2) [Bv2.1_10.2.1] * note contains the number of guard bits + * reel_index contains the reel index (starting from 0) */ INVALID_JPEG2000_GUARD_BITS_FOR_4K, /** JPEG2000 tile size is not the same as the image size [Bv2.1_10.2.1] */ @@ -415,16 +447,23 @@ public: INVALID_JPEG2000_RSIZ_FOR_4K, /** No TLM marker was found [Bv2.1_10.2.1] */ MISSING_JPEG2000_TLM_MARKER, - /** The MXF _ResourceID_ of a timed text resource was not the same as that of the contained XML essence [Bv2.1_10.4.3] */ + /** The MXF _ResourceID_ of a timed text resource was not the same as that of the contained XML essence [Bv2.1_10.4.3] + * reel_index contains the reel index (starting from 0) + */ MISMATCHED_TIMED_TEXT_RESOURCE_ID, - /** The AssetID of a timed text MXF is the same as its _ResourceID_ or that of the contained XML essence [Bv2.1_10.4.2] */ + /** The AssetID of a timed text MXF is the same as its _ResourceID_ or that of the contained XML essence [Bv2.1_10.4.2] + * reel_index contains the reel index (starting from 0) + */ INCORRECT_TIMED_TEXT_ASSET_ID, /** The ContainerDuration of a timed text MXF is not the same as the _Duration_ in its reel [Bv2.1_10.4.3] * note contains the reel duration, followed by a space, followed by the MXF duration * file contains the asset filename + * reel_index contains the reel index (starting from 0) */ MISMATCHED_TIMED_TEXT_DURATION, - /** Something could not be verified because content is encrypted and no key is available */ + /** Something could not be verified because content is encrypted and no key is available + * reel_index contains the reel index (starting from 0) + */ MISSED_CHECK_OF_ENCRYPTED, /** Some timed-text XML has an empty _<Text>_ node */ EMPTY_TEXT, @@ -432,9 +471,13 @@ public: MISMATCHED_CLOSED_CAPTION_VALIGN, /** Some closed captions are not listed in the XML in the order of their vertical position */ INCORRECT_CLOSED_CAPTION_ORDERING, - /** Some _<MainMarkers>_ asset has an _<EntryPoint>_ that should not be there */ + /** Some _<MainMarkers>_ asset has an _<EntryPoint>_ that should not be there + * reel_index contains the reel index (starting from 0) + */ UNEXPECTED_ENTRY_POINT, - /** Some _<MainMarkers>_ asset has an _<Duration>_ that should not be there */ + /** Some _<MainMarkers>_ asset has an _<Duration>_ that should not be there + * reel_index contains the reel index (starting from 0) + */ UNEXPECTED_DURATION, /** A _<ContentKind>_ has been specified with either no scope or the SMPTE 429-7 scope, but which is not one of those allowed */ INVALID_CONTENT_KIND, @@ -443,6 +486,7 @@ public: /** Either the width or height of a _<MainPictureActiveArea>_ in a CPL is either not an even number, or bigger than the corresponding asset dimension * note contains details of what is wrong * file contains the CPL filename + * reel_index contains the reel index (starting from 0) */ INVALID_MAIN_PICTURE_ACTIVE_AREA, /** A valid _<MainPictureActiveArea>_ was seen */ @@ -460,16 +504,19 @@ public: /** An Interop subtitle asset has no subtitles * note contains the asset ID * file contains the asset filename + * reel_index contains the reel index (starting from 0) */ MISSING_SUBTITLE, /** A SMPTE subtitle asset as an _<IssueDate>_ which is not of the form yyyy-mm-ddThh:mm:ss * I can find no reference in a standard to this being required, but the Deluxe delivery * specifications require it and their QC will fail DCPs that don't have it. * note contains the incorrect <IssueDate> + * reel_index contains the reel index (starting from 0) */ INVALID_SUBTITLE_ISSUE_DATE, /** The sound assets in the CPL do not have the same audio channel count * file contains the filename of the first asset to differ + * reel_index contains the reel index (starting from 0) */ MISMATCHED_SOUND_CHANNEL_COUNTS, /** The CPL contains a _<MainSoundConfiguration>_ tag which does not describe the number of channels in the audio assets, or which is in some way badly formatted @@ -480,16 +527,19 @@ public: INVALID_MAIN_SOUND_CONFIGURATION, /** An interop subtitle file has a _<LoadFont>_ node which refers to a font file that is not found * note contains the <LoadFont> ID + * reel_index contains the reel index (starting from 0) */ MISSING_FONT, /** A tile part in a JPEG2000 frame is too big * frame contains the frame index (counted from 0) * component contains the component index (0, 1 or 2) * size contains the invalid size in bytes. + * reel_index contains the reel index (starting from 0) */ INVALID_JPEG2000_TILE_PART_SIZE, /** A subtitle XML root node has more than one namespace (xmlns) declaration. * note contains the asset ID + * reel_index contains the reel index (starting from 0) */ INCORRECT_SUBTITLE_NAMESPACE_COUNT, /** A subtitle or closed caption file has a _<Font>_ tag which refers to a font that is not first introduced with a _<LoadFont>_ @@ -498,6 +548,7 @@ public: MISSING_LOAD_FONT_FOR_FONT, /** A SMPTE subtitle asset has at least one _<Text>_ element but no <LoadFont> * id contains the ID of the subtitle asset. + * reel_index contains the reel index (starting from 0) */ MISSING_LOAD_FONT, /** An ID in an asset map does not match the ID obtained from reading the actual file @@ -578,7 +629,8 @@ private: FRAME_RATE, CPL_ID, CALCULATED_HASH, - REFERENCE_HASH + REFERENCE_HASH, + REEL_INDEX ///< reel index, counting from 0 }; template <class T> @@ -685,6 +737,15 @@ public: return data<std::string>(Data::CPL_ID); } + VerificationNote& set_reel_index(int index) { + _data[Data::REEL_INDEX] = index; + return *this; + } + + boost::optional<int> reel_index() const { + return data<int>(Data::REEL_INDEX); + } + private: Code _code; std::map<Data, boost::any> _data; diff --git a/src/verify_internal.h b/src/verify_internal.h index 6d30161c..34d34751 100644 --- a/src/verify_internal.h +++ b/src/verify_internal.h @@ -98,6 +98,9 @@ public: if (cpl) { note.set_cpl_id(cpl->id()); } + if (reel_index) { + note.set_reel_index(*reel_index); + } notes.push_back(std::move(note)); } @@ -124,6 +127,7 @@ public: std::vector<VerificationNote>& notes; std::shared_ptr<const DCP> dcp; std::shared_ptr<const CPL> cpl; + boost::optional<int> reel_index; boost::filesystem::path xsd_dtd_directory; std::function<void (std::string, boost::optional<boost::filesystem::path>)> stage; std::function<void (float)> progress; diff --git a/test/verify_test.cc b/test/verify_test.cc index dc5fa017..89981dbe 100644 --- a/test/verify_test.cc +++ b/test/verify_test.cc @@ -242,13 +242,14 @@ string to_string(dcp::VerificationNote const& note) { string s = note_to_string(note) + dcp::String::compose( - "\n [%1 %2 %3 %4 %5 %6 ", + "\n [%1 %2 %3 %4 %5 %6 %7 ", 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( @@ -537,13 +538,13 @@ BOOST_AUTO_TEST_CASE (verify_incorrect_picture_sound_hash) 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_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), 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), 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), }); } @@ -579,12 +580,12 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_picture_sound_hashes) 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_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), 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()), + VN(VC::MISMATCHED_PICTURE_HASHES, canonical(dir / "video.mxf")).set_cpl_id(dcp_test1_cpl_id()).set_reel_index(0), + VN(VC::MISMATCHED_SOUND_HASHES, canonical(dir / "audio.mxf")).set_cpl_id(dcp_test1_cpl_id()).set_reel_index(0), { 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 }, @@ -612,7 +613,7 @@ 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), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), VN( @@ -622,7 +623,7 @@ BOOST_AUTO_TEST_CASE (verify_failed_read_content_kind) ).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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), 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()), @@ -670,7 +671,7 @@ 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), note(VC::NONE_ENCRYPTED, cpl), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, @@ -681,11 +682,11 @@ BOOST_AUTO_TEST_CASE (verify_invalid_picture_frame_rate) 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_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), 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, string{"99/1"}).set_cpl_id(cpl->id()).set_reel_index(0), }; check_verify_result(dcp::verify({dir}, {}, &stage, &progress, {}, xsd_test).notes, expected); @@ -768,8 +769,8 @@ 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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), note(VC::NONE_ENCRYPTED, cpl), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, @@ -817,8 +818,8 @@ 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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), note(VC::NONE_ENCRYPTED, cpl), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, @@ -855,8 +856,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_issue_date) 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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), note(VC::NONE_ENCRYPTED, cpl), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, @@ -892,8 +893,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_pkl_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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), note(VC::NONE_ENCRYPTED, cpl), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, @@ -932,8 +933,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_asset_map_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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), note(VC::NONE_ENCRYPTED, cpl), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, @@ -1016,12 +1017,12 @@ BOOST_AUTO_TEST_CASE (verify_invalid_standard) note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "j2c_c6035f97-b07d-4e1c-944d-603fc2ddc242.mxf"), cpl).set_reel_index(0) }; 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, string("2")).set_cpl_id(cpl->id()).set_reel_index(0)); } check_verify_result(notes, expected); @@ -1045,18 +1046,18 @@ BOOST_AUTO_TEST_CASE (verify_invalid_duration) 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::CORRECT_PICTURE_HASH, canonical(dir / "j2c_d7576dcb-a361-4139-96b8-267f5f8d7f91.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "j2c_d7576dcb-a361-4139-96b8-267f5f8d7f91.mxf"), cpl).set_reel_index(0), { 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, string("d7576dcb-a361-4139-96b8-267f5f8d7f91")).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::INVALID_INTRINSIC_DURATION, string("d7576dcb-a361-4139-96b8-267f5f8d7f91")).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::INVALID_DURATION, string("a2a87f5d-b749-4a7e-8d0c-9d48a4abf626")).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::INVALID_INTRINSIC_DURATION, string("a2a87f5d-b749-4a7e-8d0c-9d48a4abf626")).set_cpl_id(cpl->id()).set_reel_index(0), 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, string("2")).set_cpl_id(cpl->id()).set_reel_index(0)); } check_verify_result({ dir }, {}, expected); @@ -1108,17 +1109,19 @@ BOOST_AUTO_TEST_CASE (verify_invalid_picture_frame_size_in_bytes) 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::CORRECT_PICTURE_HASH, canonical(dir / "pic.mxf"), cpl).set_reel_index(0), }; 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, string("missing marker start byte")).set_frame(i).set_frame_rate(24).set_cpl_id(cpl->id()).set_reel_index(0) + ); } 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(24).set_cpl_id(cpl->id()).set_reel_index(0) + ); } expected.push_back( @@ -1150,7 +1153,7 @@ BOOST_AUTO_TEST_CASE (verify_nearly_invalid_picture_frame_size_in_bytes) 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), note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), @@ -1161,13 +1164,13 @@ BOOST_AUTO_TEST_CASE (verify_nearly_invalid_picture_frame_size_in_bytes) 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, string("missing marker start byte")).set_frame(i).set_frame_rate(24).set_cpl_id(cpl->id()).set_reel_index(0) ); } 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(24).set_cpl_id(cpl->id()).set_reel_index(0) ); } @@ -1195,14 +1198,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), 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_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "pic.mxf"), cpl).set_reel_index(0), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -1230,7 +1233,7 @@ BOOST_AUTO_TEST_CASE (verify_valid_interop_subtitles) note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), { VC::INVALID_STANDARD }, - VN(VC::MISSING_FONT, string{"theFontId"}).set_cpl_id(cpl->id()) + VN(VC::MISSING_FONT, string{"theFontId"}).set_cpl_id(cpl->id()).set_reel_index(0), }); } @@ -1257,7 +1260,7 @@ BOOST_AUTO_TEST_CASE(verify_catch_missing_font_file_with_interop_ccap) note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), { VC::INVALID_STANDARD }, - VN(VC::MISSING_FONT, string{"theFontId"}).set_cpl_id(cpl->id()) + VN(VC::MISSING_FONT, string{"theFontId"}).set_cpl_id(cpl->id()).set_reel_index(0), }); } @@ -1291,14 +1294,14 @@ BOOST_AUTO_TEST_CASE (verify_invalid_interop_subtitles) note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), { 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("no declaration found for element 'Foo'"), path(), 5).set_cpl_id(cpl->id()).set_reel_index(0), 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()) + ).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::MISSING_FONT, string{"theFontId"}).set_cpl_id(cpl->id()).set_reel_index(0), }); } @@ -1325,8 +1328,8 @@ BOOST_AUTO_TEST_CASE(verify_interop_subtitle_asset_with_no_subtitles) note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), { 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, asset->id(), boost::filesystem::canonical(asset->file().get())).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::MISSING_FONT, string{"theFontId"}).set_cpl_id(cpl->id()).set_reel_index(0), }); } @@ -1353,7 +1356,7 @@ BOOST_AUTO_TEST_CASE(verify_interop_subtitle_asset_with_single_space_subtitle) note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), { VC::INVALID_STANDARD }, - VN(VC::MISSING_FONT, string{"Arial"}).set_cpl_id(cpl->id()) + VN(VC::MISSING_FONT, string{"Arial"}).set_cpl_id(cpl->id()).set_reel_index(0), }); } @@ -1381,8 +1384,8 @@ BOOST_AUTO_TEST_CASE (verify_valid_smpte_subtitles) 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_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, string{"2021-04-14T13:19:14.000+02:00"}).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::INCORRECT_SUBTITLE_NAMESPACE_COUNT, asset->id()).set_cpl_id(cpl->id()).set_reel_index(0), }); } @@ -1412,17 +1415,17 @@ BOOST_AUTO_TEST_CASE (verify_invalid_smpte_subtitles) 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("no declaration found for element 'Foo'"), path(), 2).set_cpl_id(cpl->id()).set_reel_index(0), 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()), + ).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::MISSING_SUBTITLE_START_TIME, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()).set_reel_index(0), 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, string{"2020-05-09T00:29:21.000+02:00"}).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::INCORRECT_SUBTITLE_NAMESPACE_COUNT, asset->id()).set_cpl_id(cpl->id()).set_reel_index(0), }); } @@ -1451,10 +1454,10 @@ BOOST_AUTO_TEST_CASE (verify_empty_text_node_in_subtitles) 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()), + VN(VC::MISSING_SUBTITLE_LANGUAGE, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()).set_reel_index(0), 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, string{"2021-08-09T18:34:46.000+02:00"}).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::INCORRECT_SUBTITLE_NAMESPACE_COUNT, asset->id()).set_cpl_id(cpl->id()).set_reel_index(0), }); } @@ -1482,7 +1485,7 @@ BOOST_AUTO_TEST_CASE (verify_empty_text_node_in_subtitles_with_child_nodes) note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), { VC::INVALID_STANDARD }, - VN(VC::MISSING_FONT, string{"font0"}).set_cpl_id(cpl->id()) + VN(VC::MISSING_FONT, string{"font0"}).set_cpl_id(cpl->id()).set_reel_index(0), }); } @@ -1509,10 +1512,10 @@ BOOST_AUTO_TEST_CASE (verify_empty_text_node_in_subtitles_with_empty_child_nodes 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()), + VN(VC::MISSING_SUBTITLE, asset->id(), boost::filesystem::canonical(asset->file().get())).set_cpl_id(cpl->id()).set_reel_index(0), { 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::MISSING_FONT, string{"font0"}).set_cpl_id(cpl->id()).set_reel_index(0), }); } @@ -1624,7 +1627,7 @@ 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), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), VN( @@ -1635,7 +1638,7 @@ BOOST_AUTO_TEST_CASE (verify_invalid_cpl_metadata_bad_tag) 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_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "pic.mxf"), cpl).set_reel_index(0), VN( VC::INVALID_XML, string("no declaration found for element 'meta:MainSoundXConfiguration'"), canonical(cpl->file().get()), 50 ).set_cpl_id(cpl->id()), @@ -1717,8 +1720,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_language1) 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()), + VN(VC::INVALID_LANGUAGE, string("badlang")).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::INVALID_LANGUAGE, string("wrong-andbad")).set_cpl_id(cpl->id()).set_reel_index(0), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -1750,8 +1753,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_language2) 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()), + VN(VC::INVALID_LANGUAGE, string("badlang")).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::INVALID_LANGUAGE, string("wrong-andbad")).set_cpl_id(cpl->id()).set_reel_index(0), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -1796,7 +1799,7 @@ 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), note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), @@ -1808,11 +1811,11 @@ BOOST_AUTO_TEST_CASE (verify_invalid_language3) 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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "videofoo.mxf"), cpl).set_reel_index(0), 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::INVALID_LANGUAGE, string("frobozz")).set_cpl_id(cpl->id()).set_reel_index(0), }); } @@ -1897,8 +1900,8 @@ check_picture_size_ok (int width, int height, int frame_rate, bool three_d) 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) + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0) }; check_verify_result(notes, expected); } @@ -1928,9 +1931,9 @@ check_picture_size_bad_frame_size (int width, int height, int frame_rate, bool t 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()) + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + VN(VC::INVALID_PICTURE_SIZE_IN_PIXELS, dcp::String::compose("%1x%2", width, height), canonical(dir / "video.mxf")).set_cpl_id(cpl->id()).set_reel_index(0) }; check_verify_result(notes, expected); } @@ -1960,10 +1963,10 @@ check_picture_size_bad_2k_frame_rate (int width, int height, int frame_rate, boo 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()) + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + VN(VC::INVALID_PICTURE_FRAME_RATE, dcp::String::compose("%1/1", frame_rate * (three_d ? 2 : 1))).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::INVALID_PICTURE_FRAME_RATE_FOR_2K, dcp::String::compose("%1/1", frame_rate), canonical(dir / "video.mxf")).set_cpl_id(cpl->id()).set_reel_index(0), }; check_verify_result(notes, expected); @@ -1994,9 +1997,9 @@ check_picture_size_bad_4k_frame_rate (int width, int height, int frame_rate, boo 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()) + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + VN(VC::INVALID_PICTURE_FRAME_RATE_FOR_4K, dcp::String::compose("%1/1", frame_rate), canonical(dir / "video.mxf")).set_cpl_id(cpl->id()).set_reel_index(0), }; check_verify_result(notes, expected); @@ -2065,8 +2068,8 @@ BOOST_AUTO_TEST_CASE (verify_picture_size) 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), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), { VC::INVALID_PICTURE_ASSET_RESOLUTION_FOR_3D }, }; } @@ -2133,8 +2136,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_closed_caption_xml_size_in_bytes) 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::MISSING_SUBTITLE_START_TIME, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::INVALID_CLOSED_CAPTION_XML_SIZE_IN_BYTES, string("419371"), canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()).set_reel_index(0), VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); @@ -2184,13 +2187,13 @@ verify_timed_text_asset_too_large (string name) note(VC::VALID_CPL_ANNOTATION_TEXT, string{"hello"}, cpl), VN( VC::INVALID_TIMED_TEXT_SIZE_IN_BYTES, string("121698284"), canonical(dir / "subs.mxf") - ).set_cpl_id(cpl->id()), + ).set_cpl_id(cpl->id()).set_reel_index(0), 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()), + ).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::MISSING_SUBTITLE_START_TIME, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()).set_reel_index(0), VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); @@ -2261,9 +2264,9 @@ BOOST_AUTO_TEST_CASE (verify_missing_subtitle_language) 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()), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + VN(VC::MISSING_SUBTITLE_LANGUAGE, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()).set_reel_index(0), VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()) }); } @@ -2305,8 +2308,8 @@ 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), + note(VC::CORRECT_PICTURE_HASH, canonical(path / "video1.mxf"), cpl).set_reel_index(1), note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), @@ -2318,11 +2321,11 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_subtitle_languages) 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()), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video0.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video1.mxf"), cpl).set_reel_index(1), + VN(VC::MISSING_SUBTITLE_START_TIME, canonical(path / "subs1.mxf")).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::MISSING_SUBTITLE_START_TIME, canonical(path / "subs2.mxf")).set_cpl_id(cpl->id()).set_reel_index(1), + VN(VC::MISMATCHED_SUBTITLE_LANGUAGES).set_cpl_id(cpl->id()).set_reel_index(1), }); } @@ -2374,12 +2377,12 @@ BOOST_AUTO_TEST_CASE (verify_multiple_closed_caption_languages_allowed) 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()) + note(VC::CORRECT_PICTURE_HASH, canonical(path / "video0.mxf"), cpl).set_reel_index(0), + note(VC::CORRECT_PICTURE_HASH, canonical(path / "video1.mxf"), cpl).set_reel_index(1), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video0.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video1.mxf"), cpl).set_reel_index(1), + VN(VC::MISSING_SUBTITLE_START_TIME, canonical(path / "subs1.mxf")).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::MISSING_SUBTITLE_START_TIME, canonical(path / "subs2.mxf")).set_cpl_id(cpl->id()).set_reel_index(1) }); } @@ -2430,7 +2433,7 @@ 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), note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), @@ -2442,8 +2445,8 @@ BOOST_AUTO_TEST_CASE (verify_missing_subtitle_start_time) 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()), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + VN(VC::MISSING_SUBTITLE_START_TIME, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()).set_reel_index(0), VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()) }); } @@ -2502,14 +2505,14 @@ BOOST_AUTO_TEST_CASE (verify_invalid_subtitle_start_time) 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), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), 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()), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + VN(VC::INVALID_SUBTITLE_START_TIME, canonical(dir / "subs.mxf")).set_cpl_id(cpl->id()).set_reel_index(0), VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()) }); } @@ -2854,7 +2857,7 @@ BOOST_AUTO_TEST_CASE (verify_subtitle_overlapping_reel_boundary) 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::MISMATCHED_TIMED_TEXT_DURATION , "72 96", boost::filesystem::canonical(asset->file().get())).set_cpl_id(cpl->id()).set_reel_index(0), VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()), VN(VC::SUBTITLE_OVERLAPS_REEL_BOUNDARY).set_cpl_id(cpl->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) @@ -3427,10 +3430,10 @@ BOOST_AUTO_TEST_CASE (verify_invalid_sound_frame_rate) 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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "videofoo.mxf"), cpl).set_reel_index(0), 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), + VN(VC::INVALID_SOUND_FRAME_RATE, string("96000"), canonical(dir / "audiofoo.mxf")).set_cpl_id(cpl->id()).set_reel_index(0), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -3462,7 +3465,7 @@ 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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, string{"1998x1080"}, @@ -3470,7 +3473,7 @@ BOOST_AUTO_TEST_CASE (verify_missing_cpl_annotation_text) ).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::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), 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( @@ -3507,8 +3510,8 @@ 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), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, string{"1998x1080"}, @@ -3556,11 +3559,11 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_asset_duration) note(VC::VALID_CPL_ANNOTATION_TEXT, string{"A Test DCP"}, cpl), 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_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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), + 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()) }); } @@ -3640,11 +3643,11 @@ BOOST_AUTO_TEST_CASE (verify_missing_main_subtitle_from_some_reels) 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_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video1.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video2.mxf"), cpl).set_reel_index(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), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video2.mxf"), cpl).set_reel_index(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()) }); @@ -3663,11 +3666,11 @@ BOOST_AUTO_TEST_CASE (verify_missing_main_subtitle_from_some_reels) 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_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video1.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video2.mxf"), cpl).set_reel_index(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), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video2.mxf"), cpl).set_reel_index(1), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -3684,11 +3687,11 @@ BOOST_AUTO_TEST_CASE (verify_missing_main_subtitle_from_some_reels) 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_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video1.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video2.mxf"), cpl).set_reel_index(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), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video2.mxf"), cpl).set_reel_index(1), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -3763,12 +3766,12 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_closed_caption_asset_counts) {}, { 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_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video1.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video2.mxf"), cpl).set_reel_index(1), note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), 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), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video2.mxf"), cpl).set_reel_index(1), 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::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), @@ -3785,14 +3788,14 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_closed_caption_asset_counts) {}, { 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_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video1.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video2.mxf"), cpl).set_reel_index(1), note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), 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), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video1.mxf"), cpl).set_reel_index(0), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video2.mxf"), cpl).set_reel_index(1), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); @@ -3806,14 +3809,14 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_closed_caption_asset_counts) {}, { 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_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video1.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video2.mxf"), cpl).set_reel_index(1), note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), 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), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video1.mxf"), cpl).set_reel_index(0), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video2.mxf"), cpl).set_reel_index(1), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); @@ -3864,13 +3867,13 @@ 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_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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), note(VC::MATCHING_CPL_HASHES, cpl), note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), - VN(code, subs->id()).set_cpl_id(cpl->id()), + VN(code, subs->id()).set_cpl_id(cpl->id()).set_reel_index(0), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -3957,13 +3960,13 @@ BOOST_AUTO_TEST_CASE (verify_missing_hash) 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), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), 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, asset_id).set_cpl_id(cpl->id()).set_reel_index(0) }); } @@ -3993,7 +3996,7 @@ verify_markers_test ( 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)); 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)); @@ -4007,7 +4010,7 @@ verify_markers_test ( 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(note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0)); check_verify_result({dir}, {}, test_notes); } @@ -4115,7 +4118,7 @@ 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), note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), @@ -4127,7 +4130,7 @@ BOOST_AUTO_TEST_CASE (verify_missing_cpl_metadata_version_number) 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_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), VN(VC::MISSING_CPL_METADATA_VERSION_NUMBER, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -4160,8 +4163,8 @@ BOOST_AUTO_TEST_CASE (verify_missing_extension_metadata1) note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, string{"1998x1080"}, @@ -4202,8 +4205,8 @@ BOOST_AUTO_TEST_CASE (verify_missing_extension_metadata2) note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, string{"1998x1080"}, @@ -4245,8 +4248,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata3) note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, string{"1998x1080"}, @@ -4291,8 +4294,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_extension_metadata1) note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, string{"1998x1080"}, @@ -4333,8 +4336,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_extension_metadata2) note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, string{"1998x1080"}, @@ -4378,8 +4381,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata6) note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, string{"1998x1080"}, @@ -4428,8 +4431,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata7) note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, string{"1998x1080"}, @@ -4473,8 +4476,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata8) note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), 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()), @@ -4517,8 +4520,8 @@ BOOST_AUTO_TEST_CASE (verify_invalid_xml_cpl_extension_metadata9) note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, string{"1998x1080"}, @@ -4567,11 +4570,11 @@ 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::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), 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::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), 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()), @@ -4611,11 +4614,11 @@ 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::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), 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::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), 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::MISSING_FFEC_IN_FEATURE).set_cpl_id(cpl->id()), @@ -4650,7 +4653,7 @@ 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), note(VC::MATCHING_CPL_HASHES, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::NONE_ENCRYPTED, cpl), @@ -4662,7 +4665,7 @@ BOOST_AUTO_TEST_CASE (verify_unsigned_pkl_with_unencrypted_content) 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_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), }); } @@ -4743,8 +4746,8 @@ BOOST_AUTO_TEST_CASE (verify_partially_encrypted) note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), VN(VC::PARTIALLY_ENCRYPTED).set_cpl_id(cpl->id()) }); } @@ -4854,8 +4857,8 @@ BOOST_AUTO_TEST_CASE (verify_mismatched_subtitle_resource_id) note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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::MISMATCHED_TIMED_TEXT_DURATION , "240 0", boost::filesystem::canonical(subs_mxf)).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::MISMATCHED_TIMED_TEXT_RESOURCE_ID).set_cpl_id(cpl->id()).set_reel_index(0), VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->id()), VN(VC::MISSING_CPL_METADATA, cpl->file().get()).set_cpl_id(cpl->id()) }); @@ -4929,11 +4932,11 @@ BOOST_AUTO_TEST_CASE (verify_incorrect_timed_text_id) note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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::MISMATCHED_TIMED_TEXT_DURATION , "240 0", boost::filesystem::canonical(subs_mxf)).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::INCORRECT_TIMED_TEXT_ASSET_ID).set_cpl_id(cpl->id()).set_reel_index(0), VN(VC::INVALID_SUBTITLE_FIRST_TEXT_TIME).set_cpl_id(cpl->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, string{"2018-10-02T12:25:14+02:00"}).set_cpl_id(cpl->id()).set_reel_index(0) }); } @@ -4954,8 +4957,8 @@ 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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "0d6f57e6-adac-4e1d-bfbe-d162bf13e2cd_j2c.mxf"), cpl).set_reel_index(0), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::MATCHING_CPL_HASHES, cpl), note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), @@ -4994,8 +4997,8 @@ 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), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, string{"1998x1080"}, @@ -5007,8 +5010,8 @@ BOOST_AUTO_TEST_CASE (verify_unexpected_things_in_main_markers) 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) }); } @@ -5045,8 +5048,8 @@ BOOST_AUTO_TEST_CASE(verify_invalid_content_kind) 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), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), 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()), @@ -5084,8 +5087,8 @@ BOOST_AUTO_TEST_CASE(verify_valid_content_kind) note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, string{"1998x1080"}, @@ -5131,8 +5134,8 @@ BOOST_AUTO_TEST_CASE(verify_invalid_main_picture_active_area_1) note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), 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()), @@ -5141,7 +5144,7 @@ BOOST_AUTO_TEST_CASE(verify_invalid_main_picture_active_area_1) ).set_cpl_id(cpl->id()), 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()), + ).set_cpl_id(cpl->id()).set_reel_index(0), }); } @@ -5179,8 +5182,8 @@ BOOST_AUTO_TEST_CASE(verify_invalid_main_picture_active_area_2) note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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), + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), 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()), @@ -5189,10 +5192,10 @@ BOOST_AUTO_TEST_CASE(verify_invalid_main_picture_active_area_2) ).set_cpl_id(cpl->id()), 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()), + ).set_cpl_id(cpl->id()).set_reel_index(0), 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()) + ).set_cpl_id(cpl->id()).set_reel_index(0) }); } @@ -5307,7 +5310,6 @@ BOOST_AUTO_TEST_CASE(verify_mismatched_sound_channel_counts) cpl->set_version_number(1); { - /* Reel with 2 channels of audio */ auto mp = simple_picture(path, "1", frames, {}); @@ -5364,14 +5366,14 @@ BOOST_AUTO_TEST_CASE(verify_mismatched_sound_channel_counts) ).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::CORRECT_PICTURE_HASH, canonical(path / "video1.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video1.mxf"), cpl).set_reel_index(0), + note(VC::CORRECT_PICTURE_HASH, canonical(path / "video2.mxf"), cpl).set_reel_index(1), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video2.mxf"), cpl).set_reel_index(1), note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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) }); } @@ -5430,8 +5432,8 @@ BOOST_AUTO_TEST_CASE(verify_invalid_main_sound_configuration) 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), + note(VC::CORRECT_PICTURE_HASH, canonical(path / "video1.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(path / "video1.mxf"), cpl).set_reel_index(0), VN( VC::VALID_MAIN_PICTURE_ACTIVE_AREA, string{"1998x1080"}, @@ -5507,7 +5509,7 @@ BOOST_AUTO_TEST_CASE(verify_invalid_tile_part_size) string{"1998x1080"}, cpl->file().get() ).set_cpl_id(cpl->id()), - note(VC::CORRECT_PICTURE_HASH, canonical(path / "video.mxf"), cpl), + note(VC::CORRECT_PICTURE_HASH, canonical(path / "video.mxf"), cpl).set_reel_index(0), note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), note(VC::MATCHING_PKL_ANNOTATION_TEXT_WITH_CPL, cpl), note(VC::VALID_CONTENT_KIND, string{"trailer"}, cpl), @@ -5520,7 +5522,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(24).set_cpl_id(cpl->id()).set_reel_index(0) ); } @@ -5535,7 +5537,7 @@ BOOST_AUTO_TEST_CASE(verify_invalid_tile_part_size) 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()) + ).set_frame(frame).set_frame_rate(24).set_component(component).set_size(component_sizes[component]).set_cpl_id(cpl->id()).set_reel_index(0) ); } } @@ -5564,15 +5566,15 @@ BOOST_AUTO_TEST_CASE(verify_too_many_subtitle_namespaces) 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::CORRECT_PICTURE_HASH, canonical(dir / "j2c_42b34dcd-caa5-4c7b-aa0f-66a590947ba1.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "j2c_42b34dcd-caa5-4c7b-aa0f-66a590947ba1.mxf"), cpl).set_reel_index(0), note(VC::VALID_CONTENT_VERSION_LABEL_TEXT, cpl->content_version()->label_text, cpl), 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::MISSING_SUBTITLE_LANGUAGE, canonical(find_file(dir, "sub_"))).set_cpl_id(cpl->id()).set_reel_index(0), 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, std::string{"315de731-1173-484c-9a35-bdacf5a9d99d"}).set_cpl_id(cpl->id()).set_reel_index(0) }); } @@ -5666,9 +5668,9 @@ BOOST_AUTO_TEST_CASE(verify_missing_load_font) 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()) + note(VC::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + VN(VC::MISSING_LOAD_FONT).set_id(reel_subs->id()).set_cpl_id(cpl->id()).set_reel_index(0) }); } @@ -5742,8 +5744,8 @@ BOOST_AUTO_TEST_CASE(verify_cpl_content_version_label_text_empty) 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::CORRECT_PICTURE_HASH, canonical(dir / "video.mxf"), cpl).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "video.mxf"), cpl).set_reel_index(0), VN(VC::EMPTY_CONTENT_VERSION_LABEL_TEXT, cpl->file().get()).set_cpl_id(cpl->id()) }); } @@ -5805,9 +5807,9 @@ BOOST_AUTO_TEST_CASE(verify_encrypted_smpte_dcp_without_kdm) 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()), + VN(VC::MISSED_CHECK_OF_ENCRYPTED).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::MISSED_CHECK_OF_ENCRYPTED).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::MISSED_CHECK_OF_ENCRYPTED).set_cpl_id(cpl->id()).set_reel_index(0), VN(VC::MISSING_CPL_METADATA, canonical(cpl_file)).set_cpl_id(cpl->id()), }); } @@ -5829,18 +5831,18 @@ BOOST_AUTO_TEST_CASE(verify_invalid_sound_bit_depth) 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::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), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(dir / "Video.mxf"), cpl).set_reel_index(0), + VN(VC::INVALID_SOUND_BIT_DEPTH, "16", canonical(dir / "Audio.mxf")).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::MISSING_HASH, string("fd4796c2-9c84-454c-91f4-13ad127cea8a")).set_cpl_id(cpl->id()).set_reel_index(0), + VN(VC::MISSING_HASH, string("9d5e8bc4-676b-4306-a86d-03f70c73b457")).set_cpl_id(cpl->id()).set_reel_index(0), 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, string("2")).set_cpl_id(cpl->id()).set_reel_index(0)); } check_verify_result({ dir }, {}, notes); @@ -5983,10 +5985,10 @@ BOOST_AUTO_TEST_CASE(verify_dcp_with_two_cpls) 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]), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(combined / "videofoo.mxf"), cpls[0]).set_reel_index(0), + note(VC::VALID_PICTURE_FRAME_SIZES_IN_BYTES, canonical(combined / "videofoo0.mxf"), cpls[1]).set_reel_index(0), + note(VC::CORRECT_PICTURE_HASH, canonical(combined / "videofoo.mxf"), cpls[0]).set_reel_index(0), + note(VC::CORRECT_PICTURE_HASH, canonical(combined / "videofoo0.mxf"), cpls[1]).set_reel_index(0), 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()) }); |
