summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-12-01 14:55:54 +0000
committerCarl Hetherington <cth@carlh.net>2015-12-01 14:55:54 +0000
commit6e9b1b0ca5e839bda7b567b609cebb92a1cb95a7 (patch)
treebf4dc5244f62e754dfbe84d45a508917f477d0e7
parent1a4b0d2c7978f45b415db2e9a0f1840aa114bcc9 (diff)
Check every picture frame when -k is passed to dcpdiff.
-rw-r--r--src/mono_picture_asset.cc9
-rw-r--r--src/stereo_picture_asset.cc14
-rw-r--r--src/types.h2
-rw-r--r--tools/dcpdiff.cc8
4 files changed, 24 insertions, 9 deletions
diff --git a/src/mono_picture_asset.cc b/src/mono_picture_asset.cc
index 91ab0d8a..f14e50c2 100644
--- a/src/mono_picture_asset.cc
+++ b/src/mono_picture_asset.cc
@@ -103,6 +103,8 @@ MonoPictureAsset::equals (shared_ptr<const Asset> other, EqualityOptions opt, No
shared_ptr<const MonoPictureAsset> other_picture = dynamic_pointer_cast<const MonoPictureAsset> (other);
DCP_ASSERT (other_picture);
+ bool result = true;
+
for (int i = 0; i < _intrinsic_duration; ++i) {
if (i >= other_picture->intrinsic_duration()) {
return false;
@@ -117,11 +119,14 @@ MonoPictureAsset::equals (shared_ptr<const Asset> other, EqualityOptions opt, No
frame_A->j2k_data(), frame_A->j2k_size(),
frame_B->j2k_data(), frame_B->j2k_size()
)) {
- return false;
+ result = false;
+ if (!opt.keep_going) {
+ return result;
+ }
}
}
- return true;
+ return result;
}
shared_ptr<PictureAssetWriter>
diff --git a/src/stereo_picture_asset.cc b/src/stereo_picture_asset.cc
index 76c353f1..e2494be6 100644
--- a/src/stereo_picture_asset.cc
+++ b/src/stereo_picture_asset.cc
@@ -105,6 +105,8 @@ StereoPictureAsset::equals (shared_ptr<const Asset> other, EqualityOptions opt,
shared_ptr<const StereoPictureAsset> other_picture = dynamic_pointer_cast<const StereoPictureAsset> (other);
DCP_ASSERT (other_picture);
+ bool result = true;
+
for (int i = 0; i < _intrinsic_duration; ++i) {
shared_ptr<const StereoPictureFrame> frame_A;
shared_ptr<const StereoPictureFrame> frame_B;
@@ -124,7 +126,10 @@ StereoPictureAsset::equals (shared_ptr<const Asset> other, EqualityOptions opt,
frame_A->left_j2k_data(), frame_A->left_j2k_size(),
frame_B->left_j2k_data(), frame_B->left_j2k_size()
)) {
- return false;
+ result = false;
+ if (!opt.keep_going) {
+ return result;
+ }
}
if (!frame_buffer_equals (
@@ -132,9 +137,12 @@ StereoPictureAsset::equals (shared_ptr<const Asset> other, EqualityOptions opt,
frame_A->right_j2k_data(), frame_A->right_j2k_size(),
frame_B->right_j2k_data(), frame_B->right_j2k_size()
)) {
- return false;
+ result = false;
+ if (!opt.keep_going) {
+ return result;
+ }
}
}
- return true;
+ return result;
}
diff --git a/src/types.h b/src/types.h
index 1cd116c9..16000daa 100644
--- a/src/types.h
+++ b/src/types.h
@@ -166,6 +166,7 @@ struct EqualityOptions
, reel_annotation_texts_can_differ (false)
, reel_hashes_can_differ (false)
, issue_dates_can_differ (false)
+ , keep_going (false)
{}
/** The maximum allowable mean difference in pixel value between two images */
@@ -182,6 +183,7 @@ struct EqualityOptions
bool reel_hashes_can_differ;
/** true if IssueDate nodes can differ */
bool issue_dates_can_differ;
+ bool keep_going;
};
/* I've been unable to make mingw happy with ERROR as a symbol, so
diff --git a/tools/dcpdiff.cc b/tools/dcpdiff.cc
index a820463f..473efa45 100644
--- a/tools/dcpdiff.cc
+++ b/tools/dcpdiff.cc
@@ -106,7 +106,7 @@ main (int argc, char* argv[])
options.max_std_dev_pixel_error = 5;
options.reel_hashes_can_differ = true;
options.reel_annotation_texts_can_differ = false;
- bool keep_going = false;
+ options.keep_going = false;
bool ignore_missing_assets = false;
optional<string> key;
@@ -150,7 +150,7 @@ main (int argc, char* argv[])
options.max_std_dev_pixel_error = atof (optarg);
break;
case 'k':
- keep_going = true;
+ options.keep_going = true;
break;
case 'A':
ignore_missing_assets = true;
@@ -183,8 +183,8 @@ main (int argc, char* argv[])
exit (EXIT_FAILURE);
}
- DCP* a = load_dcp (argv[optind], keep_going, ignore_missing_assets, key);
- DCP* b = load_dcp (argv[optind + 1], keep_going, ignore_missing_assets, key);
+ DCP* a = load_dcp (argv[optind], options.keep_going, ignore_missing_assets, key);
+ DCP* b = load_dcp (argv[optind + 1], options.keep_going, ignore_missing_assets, key);
/* I think this is just below the LSB at 16-bits (ie the 8th most significant bit at 24-bit) */
options.max_audio_sample_error = 255;