summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/verify.cc12
-rw-r--r--src/verify_internal.h10
2 files changed, 20 insertions, 2 deletions
diff --git a/src/verify.cc b/src/verify.cc
index b7ffeb0d..d3ab2c3f 100644
--- a/src/verify.cc
+++ b/src/verify.cc
@@ -533,7 +533,11 @@ verify_main_picture_asset(Context& context, shared_ptr<const ReelPictureAsset> r
auto asset = reel_asset->asset();
auto const file = *asset->file();
- if (context.options.check_asset_hashes && (!context.options.maximum_asset_size_for_hash_check || filesystem::file_size(file) < *context.options.maximum_asset_size_for_hash_check)) {
+ if (
+ context.options.check_asset_hashes &&
+ (!context.options.maximum_asset_size_for_hash_check || filesystem::file_size(file) < *context.options.maximum_asset_size_for_hash_check) &&
+ context.should_verify_asset(reel_asset->id())
+ ) {
context.stage("Checking picture asset hash", file);
string reference_hash;
string calculated_hash;
@@ -618,7 +622,11 @@ verify_main_sound_asset(Context& context, shared_ptr<const ReelSoundAsset> reel_
auto asset = reel_asset->asset();
auto const file = *asset->file();
- if (context.options.check_asset_hashes && (!context.options.maximum_asset_size_for_hash_check || filesystem::file_size(file) < *context.options.maximum_asset_size_for_hash_check)) {
+ if (
+ context.options.check_asset_hashes &&
+ (!context.options.maximum_asset_size_for_hash_check || filesystem::file_size(file) < *context.options.maximum_asset_size_for_hash_check) &&
+ context.should_verify_asset(reel_asset->id())
+ ) {
context.stage("Checking sound asset hash", file);
string reference_hash;
string calculated_hash;
diff --git a/src/verify_internal.h b/src/verify_internal.h
index 97c0e90f..d6e3c075 100644
--- a/src/verify_internal.h
+++ b/src/verify_internal.h
@@ -49,6 +49,7 @@
#include <boost/filesystem.hpp>
#include <boost/optional.hpp>
#include <memory>
+#include <unordered_set>
#include <vector>
@@ -131,6 +132,13 @@ public:
}
}
+ bool should_verify_asset(std::string const& id)
+ {
+ auto const should = verified_assets.find(id) == verified_assets.end();
+ verified_assets.insert(id);
+ return should;
+ }
+
std::vector<VerificationNote>& notes;
std::shared_ptr<const DCP> dcp;
std::shared_ptr<const CPL> cpl;
@@ -138,6 +146,8 @@ public:
std::function<void (std::string, boost::optional<boost::filesystem::path>)> stage;
std::function<void (float)> progress;
VerificationOptions options;
+ /** IDs of assets that have already been verified and need not be checked again */
+ std::unordered_set<std::string> verified_assets;
boost::optional<std::string> subtitle_language;
boost::optional<int> audio_channels;