X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fpicture_asset.cc;h=86d85d464e45d725c9886790ccd7514f22f84a99;hb=dce3761b0f82a9273aca8a0d39743aee6740c8e4;hp=a0a7d7d7dbc5f1211be9a926a7c887fcd34a43f5;hpb=e4d5298e7a179d4103581cba05cbc516f94acf60;p=libdcp.git diff --git a/src/picture_asset.cc b/src/picture_asset.cc index a0a7d7d7..86d85d46 100644 --- a/src/picture_asset.cc +++ b/src/picture_asset.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2015 Carl Hetherington + Copyright (C) 2012-2021 Carl Hetherington This file is part of libdcp. @@ -31,6 +31,12 @@ files in the program, then also delete it here. */ + +/** @file src/picture_asset.cc + * @brief PictureAsset class + */ + + #include "picture_asset.h" #include "util.h" #include "exceptions.h" @@ -46,15 +52,17 @@ #include #include + using std::string; using std::list; using std::vector; using std::max; using std::pair; using std::make_pair; -using boost::shared_ptr; +using std::shared_ptr; using namespace dcp; + PictureAsset::PictureAsset (boost::filesystem::path file) : Asset (file) , _intrinsic_duration (0) @@ -62,13 +70,16 @@ PictureAsset::PictureAsset (boost::filesystem::path file) } -PictureAsset::PictureAsset (Fraction edit_rate) - : _edit_rate (edit_rate) + +PictureAsset::PictureAsset (Fraction edit_rate, Standard standard) + : MXF (standard) + , _edit_rate (edit_rate) , _intrinsic_duration (0) { } + void PictureAsset::read_picture_descriptor (ASDCP::JP2K::PictureDescriptor const & desc) { @@ -80,6 +91,7 @@ PictureAsset::read_picture_descriptor (ASDCP::JP2K::PictureDescriptor const & de _screen_aspect_ratio = Fraction (desc.AspectRatio.Numerator, desc.AspectRatio.Denominator); } + bool PictureAsset::descriptor_equals ( ASDCP::JP2K::PictureDescriptor const & a, ASDCP::JP2K::PictureDescriptor const & b, NoteHandler note @@ -105,12 +117,12 @@ PictureAsset::descriptor_equals ( // a.QuantizationDefault != b.QuantizationDefault ) { - note (DCP_ERROR, "video MXF picture descriptors differ"); + note (NoteType::ERROR, "video MXF picture descriptors differ"); return false; } if (a.ContainerDuration != b.ContainerDuration) { - note (DCP_ERROR, "video container durations differ"); + note (NoteType::ERROR, "video container durations differ"); } // for (unsigned int j = 0; j < ASDCP::JP2K::MaxComponents; ++j) { @@ -122,6 +134,7 @@ PictureAsset::descriptor_equals ( return true; } + bool PictureAsset::frame_buffer_equals ( int frame, EqualityOptions opt, NoteHandler note, @@ -129,14 +142,14 @@ PictureAsset::frame_buffer_equals ( ) const { if (size_A == size_B && memcmp (data_A, data_B, size_A) == 0) { - note (DCP_NOTE, "J2K identical"); + note (NoteType::NOTE, "J2K identical"); /* Easy result; the J2K data is identical */ return true; } /* Decompress the images to bitmaps */ - shared_ptr image_A = decompress_j2k (const_cast (data_A), size_A, 0); - shared_ptr image_B = decompress_j2k (const_cast (data_B), size_B, 0); + auto image_A = decompress_j2k (const_cast(data_A), size_A, 0); + auto image_B = decompress_j2k (const_cast(data_B), size_B, 0); /* Compare them */ @@ -147,7 +160,7 @@ PictureAsset::frame_buffer_equals ( for (int c = 0; c < 3; ++c) { if (image_A->size() != image_B->size()) { - note (DCP_ERROR, String::compose ("image sizes for frame %1 differ", frame)); + note (NoteType::ERROR, String::compose ("image sizes for frame %1 differ", frame)); return false; } @@ -167,17 +180,17 @@ PictureAsset::frame_buffer_equals ( double const mean = double (total) / abs_diffs.size (); uint64_t total_squared_deviation = 0; - for (vector::iterator j = abs_diffs.begin(); j != abs_diffs.end(); ++j) { - total_squared_deviation += pow (*j - mean, 2); + for (auto j: abs_diffs) { + total_squared_deviation += pow (j - mean, 2); } - double const std_dev = sqrt (double (total_squared_deviation) / abs_diffs.size()); + auto const std_dev = sqrt (double (total_squared_deviation) / abs_diffs.size()); - note (DCP_NOTE, String::compose ("mean difference %1 deviation %2", mean, std_dev)); + note (NoteType::NOTE, String::compose("mean difference %1 deviation %2", mean, std_dev)); if (mean > opt.max_mean_pixel_error) { note ( - DCP_ERROR, + NoteType::ERROR, String::compose ("mean %1 out of range %2 in frame %3", mean, opt.max_mean_pixel_error, frame) ); @@ -186,7 +199,7 @@ PictureAsset::frame_buffer_equals ( if (std_dev > opt.max_std_dev_pixel_error) { note ( - DCP_ERROR, + NoteType::ERROR, String::compose ("standard deviation %1 out of range %2 in frame %3", std_dev, opt.max_std_dev_pixel_error, frame) ); @@ -196,15 +209,23 @@ PictureAsset::frame_buffer_equals ( return true; } + string -PictureAsset::pkl_type (Standard standard) const +PictureAsset::static_pkl_type (Standard standard) { switch (standard) { - case INTEROP: + case Standard::INTEROP: return "application/x-smpte-mxf;asdcpKind=Picture"; - case SMPTE: + case Standard::SMPTE: return "application/mxf"; default: DCP_ASSERT (false); } } + + +string +PictureAsset::pkl_type (Standard standard) const +{ + return static_pkl_type (standard); +}