+ static const int max_frame = rint(250 * 1000000 / (8 * asset->edit_rate().as_float()));
+ static const int risky_frame = rint(230 * 1000000 / (8 * asset->edit_rate().as_float()));
+ if (biggest_frame > max_frame) {
+ return VERIFY_PICTURE_ASSET_RESULT_BAD;
+ } else if (biggest_frame > risky_frame) {
+ return VERIFY_PICTURE_ASSET_RESULT_FRAME_NEARLY_TOO_BIG;
+ }
+
+ return VERIFY_PICTURE_ASSET_RESULT_GOOD;
+}
+
+
+static VerifyPictureAssetResult
+verify_picture_asset (shared_ptr<ReelMXF> reel_mxf, function<void (float)> progress)
+{
+ optional<VerifyPictureAssetResult> r = verify_picture_asset_type<MonoPictureAsset, MonoPictureAssetReader, MonoPictureFrame>(reel_mxf, progress);
+ if (!r) {
+ r = verify_picture_asset_type<StereoPictureAsset, StereoPictureAssetReader, StereoPictureFrame>(reel_mxf, progress);
+ }
+
+ DCP_ASSERT (r);
+ return *r;
+}
+
+
+static void
+verify_main_picture_asset (
+ shared_ptr<const DCP> dcp,
+ shared_ptr<const Reel> reel,
+ function<void (string, optional<boost::filesystem::path>)> stage,
+ function<void (float)> progress,
+ list<VerificationNote>& notes
+ )
+{
+ boost::filesystem::path const file = *reel->main_picture()->asset()->file();
+ stage ("Checking picture asset hash", file);
+ VerifyAssetResult const r = verify_asset (dcp, reel->main_picture(), progress);
+ switch (r) {
+ case VERIFY_ASSET_RESULT_BAD:
+ notes.push_back (
+ VerificationNote(
+ VerificationNote::VERIFY_ERROR, VerificationNote::PICTURE_HASH_INCORRECT, file
+ )
+ );
+ break;
+ case VERIFY_ASSET_RESULT_CPL_PKL_DIFFER:
+ notes.push_back (
+ VerificationNote(
+ VerificationNote::VERIFY_ERROR, VerificationNote::PKL_CPL_PICTURE_HASHES_DISAGREE, file
+ )
+ );
+ break;
+ default:
+ break;
+ }
+ stage ("Checking picture frame sizes", reel->main_picture()->asset()->file());
+ VerifyPictureAssetResult const pr = verify_picture_asset (reel->main_picture(), progress);
+ switch (pr) {
+ case VERIFY_PICTURE_ASSET_RESULT_BAD:
+ notes.push_back (
+ VerificationNote(
+ VerificationNote::VERIFY_ERROR, VerificationNote::PICTURE_FRAME_TOO_LARGE, file
+ )
+ );
+ break;
+ case VERIFY_PICTURE_ASSET_RESULT_FRAME_NEARLY_TOO_BIG:
+ notes.push_back (
+ VerificationNote(
+ VerificationNote::VERIFY_WARNING, VerificationNote::PICTURE_FRAME_NEARLY_TOO_LARGE, file
+ )
+ );
+ break;
+ default:
+ break;
+ }
+}
+
+
+static void
+verify_main_sound_asset (
+ shared_ptr<const DCP> dcp,
+ shared_ptr<const Reel> reel,
+ function<void (string, optional<boost::filesystem::path>)> stage,
+ function<void (float)> progress,
+ list<VerificationNote>& notes
+ )
+{
+ stage ("Checking sound asset hash", reel->main_sound()->asset()->file());
+ VerifyAssetResult const r = verify_asset (dcp, reel->main_sound(), progress);
+ switch (r) {
+ case VERIFY_ASSET_RESULT_BAD:
+ notes.push_back (
+ VerificationNote(
+ VerificationNote::VERIFY_ERROR, VerificationNote::SOUND_HASH_INCORRECT, *reel->main_sound()->asset()->file()
+ )
+ );
+ break;
+ case VERIFY_ASSET_RESULT_CPL_PKL_DIFFER:
+ notes.push_back (
+ VerificationNote(
+ VerificationNote::VERIFY_ERROR, VerificationNote::PKL_CPL_SOUND_HASHES_DISAGREE, *reel->main_sound()->asset()->file()
+ )
+ );
+ break;
+ default:
+ break;
+ }