diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/verify.cc | 27 | ||||
| -rw-r--r-- | src/verify.h | 48 |
2 files changed, 61 insertions, 14 deletions
diff --git a/src/verify.cc b/src/verify.cc index 2288200b..4a656874 100644 --- a/src/verify.cc +++ b/src/verify.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2018 Carl Hetherington <cth@carlh.net> + Copyright (C) 2018-2019 Carl Hetherington <cth@carlh.net> This file is part of libdcp. @@ -38,6 +38,7 @@ #include "reel_picture_asset.h" #include "reel_sound_asset.h" #include "exceptions.h" +#include "compose.hpp" #include <boost/foreach.hpp> #include <list> #include <vector> @@ -108,9 +109,9 @@ dcp::verify (vector<boost::filesystem::path> directories, function<void (string, try { dcp->read (true, &errors); } catch (DCPReadError& e) { - notes.push_back (VerificationNote (VerificationNote::VERIFY_ERROR, e.what ())); + notes.push_back (VerificationNote(VerificationNote::VERIFY_ERROR, VerificationNote::GENERAL_READ, string(e.what()))); } catch (XMLError& e) { - notes.push_back (VerificationNote (VerificationNote::VERIFY_ERROR, e.what ())); + notes.push_back (VerificationNote(VerificationNote::VERIFY_ERROR, VerificationNote::GENERAL_READ, string(e.what()))); } BOOST_FOREACH (shared_ptr<CPL> cpl, dcp->cpls()) { @@ -120,7 +121,7 @@ dcp::verify (vector<boost::filesystem::path> directories, function<void (string, BOOST_FOREACH (shared_ptr<PKL> i, dcp->pkls()) { optional<string> h = i->hash(cpl->id()); if (h && make_digest(Data(*cpl->file())) != *h) { - notes.push_back (VerificationNote(VerificationNote::VERIFY_ERROR, "CPL hash is incorrect.")); + notes.push_back (VerificationNote(VerificationNote::VERIFY_ERROR, VerificationNote::CPL_HASH_INCORRECT)); } } @@ -136,17 +137,21 @@ dcp::verify (vector<boost::filesystem::path> directories, function<void (string, frame_rate.numerator != 48 && frame_rate.numerator != 50 && frame_rate.numerator != 60)) { - notes.push_back (VerificationNote (VerificationNote::VERIFY_ERROR, "Invalid frame rate for picture")); + notes.push_back (VerificationNote(VerificationNote::VERIFY_ERROR, VerificationNote::INVALID_PICTURE_FRAME_RATE)); } /* Check asset */ stage ("Checking picture asset hash", reel->main_picture()->asset()->file()); Result const r = verify_asset (dcp, reel->main_picture(), progress); switch (r) { case RESULT_BAD: - notes.push_back (VerificationNote (VerificationNote::VERIFY_ERROR, "Picture asset hash is incorrect.")); + notes.push_back ( + VerificationNote( + VerificationNote::VERIFY_ERROR, VerificationNote::PICTURE_HASH_INCORRECT, *reel->main_picture()->asset()->file() + ) + ); break; case RESULT_CPL_PKL_DIFFER: - notes.push_back (VerificationNote (VerificationNote::VERIFY_ERROR, "PKL and CPL hashes differ for picture asset.")); + notes.push_back (VerificationNote(VerificationNote::VERIFY_ERROR, VerificationNote::PKL_CPL_PICTURE_HASHES_DISAGREE)); break; default: break; @@ -157,10 +162,14 @@ dcp::verify (vector<boost::filesystem::path> directories, function<void (string, Result const r = verify_asset (dcp, reel->main_sound(), progress); switch (r) { case RESULT_BAD: - notes.push_back (VerificationNote (VerificationNote::VERIFY_ERROR, "Sound asset hash is incorrect.")); + notes.push_back ( + VerificationNote( + VerificationNote::VERIFY_ERROR, VerificationNote::SOUND_HASH_INCORRECT, *reel->main_sound()->asset()->file() + ) + ); break; case RESULT_CPL_PKL_DIFFER: - notes.push_back (VerificationNote (VerificationNote::VERIFY_ERROR, "PKL and CPL hashes differ for sound asset.")); + notes.push_back (VerificationNote (VerificationNote::VERIFY_ERROR, VerificationNote::PKL_CPL_SOUND_HASHES_DISAGREE)); break; default: break; diff --git a/src/verify.h b/src/verify.h index f5b21763..4b967d1d 100644 --- a/src/verify.h +++ b/src/verify.h @@ -51,26 +51,64 @@ public: */ enum Type { VERIFY_ERROR, - VERIFY_WARNING, - VERIFY_NOTE + VERIFY_WARNING }; - VerificationNote (Type type, std::string note) + enum Code { + /** An error when reading the DCP. note contains (probably technical) details. */ + GENERAL_READ, + /** The hash of the CPL in the PKL does not agree with the CPL file */ + CPL_HASH_INCORRECT, + /** Frame rate given in a reel for the main picture is not 24, 25, 30, 48, 50 or 60 */ + INVALID_PICTURE_FRAME_RATE, + /** The hash of a main picture asset does not agree with the PKL file. file contains the picture asset filename. */ + PICTURE_HASH_INCORRECT, + /** The hash of a main picture is different in the CPL and PKL */ + PKL_CPL_PICTURE_HASHES_DISAGREE, + /** The hash of a main sound asset does not agree with the PKL file. file contains the sound asset filename. */ + SOUND_HASH_INCORRECT, + /** The hash of a main sound is different in the CPL and PKL */ + PKL_CPL_SOUND_HASHES_DISAGREE, + }; + + VerificationNote (Type type, Code code) + : _type (type) + , _code (code) + {} + + VerificationNote (Type type, Code code, std::string note) : _type (type) + , _code (code) , _note (note) {} + VerificationNote (Type type, Code code, boost::filesystem::path file) + : _type (type) + , _code (code) + , _file (file) + {} + Type type () const { return _type; } - std::string note () const { + Code code () const { + return _code; + } + + boost::optional<std::string> note () const { return _note; } + boost::optional<boost::filesystem::path> file () const { + return _file; + } + private: Type _type; - std::string _note; + Code _code; + boost::optional<std::string> _note; + boost::optional<boost::filesystem::path> _file; }; std::list<VerificationNote> verify ( |
