diff options
Diffstat (limited to 'src/picture_asset.cc')
| -rw-r--r-- | src/picture_asset.cc | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/src/picture_asset.cc b/src/picture_asset.cc index e9eff5b0..625a0dd7 100644 --- a/src/picture_asset.cc +++ b/src/picture_asset.cc @@ -96,7 +96,7 @@ PictureAsset::descriptor_equals ( // a.CodingStyleDefault != b.CodingStyleDefault || // a.QuantizationDefault != b.QuantizationDefault ) { - + note (DCP_ERROR, "video MXF picture descriptors differ"); return false; } @@ -104,7 +104,7 @@ PictureAsset::descriptor_equals ( if (a.ContainerDuration != b.ContainerDuration) { note (DCP_ERROR, "video container durations differ"); } - + // for (unsigned int j = 0; j < ASDCP::JP2K::MaxComponents; ++j) { // if (a.ImageComponents[j] != b.ImageComponents[j]) { // notes.pack_start ("video MXF picture descriptors differ"); @@ -125,24 +125,24 @@ PictureAsset::frame_buffer_equals ( /* Easy result; the J2K data is identical */ return true; } - + /* Decompress the images to bitmaps */ shared_ptr<OpenJPEGImage> image_A = decompress_j2k (const_cast<uint8_t*> (data_A), size_A, 0); shared_ptr<OpenJPEGImage> image_B = decompress_j2k (const_cast<uint8_t*> (data_B), size_B, 0); - + /* Compare them */ - + vector<int> abs_diffs (image_A->size().width * image_A->size().height * 3); int d = 0; int max_diff = 0; - + 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)); return false; } - + int const pixels = image_A->size().width * image_A->size().height; for (int j = 0; j < pixels; ++j) { int const t = abs (image_A->data(c)[j] - image_B->data(c)[j]); @@ -150,29 +150,29 @@ PictureAsset::frame_buffer_equals ( max_diff = max (max_diff, t); } } - + uint64_t total = 0; for (vector<int>::iterator j = abs_diffs.begin(); j != abs_diffs.end(); ++j) { total += *j; } - + double const mean = double (total) / abs_diffs.size (); - + uint64_t total_squared_deviation = 0; for (vector<int>::iterator j = abs_diffs.begin(); j != abs_diffs.end(); ++j) { total_squared_deviation += pow (*j - mean, 2); } - + double const std_dev = sqrt (double (total_squared_deviation) / abs_diffs.size()); - + note (DCP_NOTE, String::compose ("mean difference %1, deviation %2", mean, std_dev)); - + if (mean > opt.max_mean_pixel_error) { note ( DCP_ERROR, String::compose ("mean %1 out of range %2 in frame %3", mean, opt.max_mean_pixel_error, frame) ); - + return false; } @@ -181,7 +181,7 @@ PictureAsset::frame_buffer_equals ( DCP_ERROR, String::compose ("standard deviation %1 out of range %2 in frame %3", std_dev, opt.max_std_dev_pixel_error, frame) ); - + return false; } |
