Report errors passed back from DCP::read when exceptions aren't used.
[libdcp.git] / src / verify.cc
index 9ab9b15031209cd431e97b451942dd2f7ebf5396..809e9e11d5b032f0ef9439b2770571cf7e414210 100644 (file)
@@ -114,6 +114,10 @@ dcp::verify (vector<boost::filesystem::path> directories, function<void (string,
                        notes.push_back (VerificationNote(VerificationNote::VERIFY_ERROR, VerificationNote::GENERAL_READ, string(e.what())));
                }
 
+               BOOST_FOREACH (shared_ptr<DCPReadError> i, errors) {
+                       notes.push_back (VerificationNote(VerificationNote::VERIFY_ERROR, VerificationNote::GENERAL_READ, string(i->what())));
+               }
+
                BOOST_FOREACH (shared_ptr<CPL> cpl, dcp->cpls()) {
                        stage ("Checking CPL", cpl->file());
 
@@ -136,28 +140,31 @@ dcp::verify (vector<boost::filesystem::path> directories, function<void (string,
                                             frame_rate.numerator != 30 &&
                                             frame_rate.numerator != 48 &&
                                             frame_rate.numerator != 50 &&
-                                            frame_rate.numerator != 60)) {
+                                            frame_rate.numerator != 60 &&
+                                            frame_rate.numerator != 96)) {
                                                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, VerificationNote::PICTURE_HASH_INCORRECT, *reel->main_picture()->asset()->file()
-                                                               )
-                                                       );
-                                               break;
-                                       case RESULT_CPL_PKL_DIFFER:
-                                               notes.push_back (VerificationNote(VerificationNote::VERIFY_ERROR, VerificationNote::PKL_CPL_PICTURE_HASHES_DISAGREE));
-                                               break;
-                                       default:
-                                               break;
-                                       }
+                         if (reel->main_picture()->asset_ref().resolved()) {
+                             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, VerificationNote::PICTURE_HASH_INCORRECT, *reel->main_picture()->asset()->file()
+                                                 )
+                                             );
+                                     break;
+                                 case RESULT_CPL_PKL_DIFFER:
+                                     notes.push_back (VerificationNote(VerificationNote::VERIFY_ERROR, VerificationNote::PKL_CPL_PICTURE_HASHES_DISAGREE));
+                                     break;
+                                 default:
+                                     break;
+                             }
+                         }
                                }
-                               if (reel->main_sound()) {
+                               if (reel->main_sound() && reel->main_sound()->asset_ref().resolved()) {
                                        stage ("Checking sound asset hash", reel->main_sound()->asset()->file());
                                        Result const r = verify_asset (dcp, reel->main_sound(), progress);
                                        switch (r) {