From f536156abbda531e8a3b504bebf52bfbe3582c48 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 6 Apr 2021 00:39:20 +0200 Subject: Call verify_j2k when verifying DCPs. --- src/verify.cc | 148 ++++++++++++++++++++++++---------------------------------- 1 file changed, 62 insertions(+), 86 deletions(-) (limited to 'src') diff --git a/src/verify.cc b/src/verify.cc index d8a4f37f..17f54e80 100644 --- a/src/verify.cc +++ b/src/verify.cc @@ -37,46 +37,47 @@ */ -#include "verify.h" -#include "dcp.h" +#include "compose.hpp" #include "cpl.h" +#include "dcp.h" +#include "exceptions.h" +#include "interop_subtitle_asset.h" +#include "mono_picture_asset.h" +#include "mono_picture_frame.h" +#include "raw_convert.h" #include "reel.h" #include "reel_closed_caption_asset.h" +#include "reel_markers_asset.h" #include "reel_picture_asset.h" #include "reel_sound_asset.h" #include "reel_subtitle_asset.h" -#include "interop_subtitle_asset.h" -#include "mono_picture_asset.h" -#include "mono_picture_frame.h" +#include "smpte_subtitle_asset.h" #include "stereo_picture_asset.h" #include "stereo_picture_frame.h" -#include "exceptions.h" -#include "compose.hpp" -#include "raw_convert.h" -#include "reel_markers_asset.h" -#include "smpte_subtitle_asset.h" -#include -#include -#include -#include +#include "verify.h" +#include "verify_j2k.h" +#include +#include +#include +#include +#include #include #include #include #include -#include -#include -#include -#include #include #include -#include -#include +#include #include #include +#include +#include +#include +#include #include +#include #include #include -#include using std::list; @@ -420,67 +421,56 @@ verify_language_tag (string tag, vector& notes) } -enum class VerifyPictureAssetResult -{ - GOOD, - FRAME_NEARLY_TOO_LARGE, - BAD, -}; - - -int -biggest_frame_size (shared_ptr frame) -{ - return frame->size (); -} - -int -biggest_frame_size (shared_ptr frame) +static void +verify_picture_asset (shared_ptr reel_file_asset, boost::filesystem::path file, vector& notes, function progress) { - return max(frame->left()->size(), frame->right()->size()); -} + int biggest_frame = 0; + auto asset = dynamic_pointer_cast(reel_file_asset->asset_ref().asset()); + auto const duration = asset->intrinsic_duration (); + auto check_and_add = [¬es](vector const& j2k_notes) { + for (auto i: j2k_notes) { + if (find(notes.begin(), notes.end(), i) == notes.end()) { + notes.push_back (i); + } + } + }; -template -optional -verify_picture_asset_type (shared_ptr reel_file_asset, function progress) -{ - auto asset = dynamic_pointer_cast(reel_file_asset->asset_ref().asset()); - if (!asset) { - return optional(); - } + if (auto mono_asset = dynamic_pointer_cast(reel_file_asset->asset_ref().asset())) { + auto reader = mono_asset->start_read (); + for (int64_t i = 0; i < duration; ++i) { + auto frame = reader->get_frame (i); + biggest_frame = max(biggest_frame, frame->size()); + vector j2k_notes; + verify_j2k (frame, j2k_notes); + check_and_add (j2k_notes); + progress (float(i) / duration); + } + } else if (auto stereo_asset = dynamic_pointer_cast(asset)) { + auto reader = stereo_asset->start_read (); + for (int64_t i = 0; i < duration; ++i) { + auto frame = reader->get_frame (i); + biggest_frame = max(biggest_frame, max(frame->left()->size(), frame->right()->size())); + vector j2k_notes; + verify_j2k (frame->left(), j2k_notes); + verify_j2k (frame->right(), j2k_notes); + check_and_add (j2k_notes); + progress (float(i) / duration); + } - int biggest_frame = 0; - auto reader = asset->start_read (); - auto const duration = asset->intrinsic_duration (); - for (int64_t i = 0; i < duration; ++i) { - shared_ptr frame = reader->get_frame (i); - biggest_frame = max(biggest_frame, biggest_frame_size(frame)); - progress (float(i) / duration); } 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 VerifyPictureAssetResult::BAD; + notes.push_back ({ + VerificationNote::Type::ERROR, VerificationNote::Code::INVALID_PICTURE_FRAME_SIZE_IN_BYTES, file + }); } else if (biggest_frame > risky_frame) { - return VerifyPictureAssetResult::FRAME_NEARLY_TOO_LARGE; - } - - return VerifyPictureAssetResult::GOOD; -} - - -static VerifyPictureAssetResult -verify_picture_asset (shared_ptr reel_file_asset, function progress) -{ - auto r = verify_picture_asset_type(reel_file_asset, progress); - if (!r) { - r = verify_picture_asset_type(reel_file_asset, progress); + notes.push_back ({ + VerificationNote::Type::WARNING, VerificationNote::Code::NEARLY_INVALID_PICTURE_FRAME_SIZE_IN_BYTES, file + }); } - - DCP_ASSERT (r); - return *r; } @@ -512,21 +502,7 @@ verify_main_picture_asset ( break; } stage ("Checking picture frame sizes", asset->file()); - auto const pr = verify_picture_asset (reel_asset, progress); - switch (pr) { - case VerifyPictureAssetResult::BAD: - notes.push_back ({ - VerificationNote::Type::ERROR, VerificationNote::Code::INVALID_PICTURE_FRAME_SIZE_IN_BYTES, file - }); - break; - case VerifyPictureAssetResult::FRAME_NEARLY_TOO_LARGE: - notes.push_back ({ - VerificationNote::Type::WARNING, VerificationNote::Code::NEARLY_INVALID_PICTURE_FRAME_SIZE_IN_BYTES, file - }); - break; - default: - break; - } + verify_picture_asset (reel_asset, file, notes, progress); /* Only flat/scope allowed by Bv2.1 */ if ( -- cgit v1.2.3