Improve butler error reporting during export. v2.15.88
authorCarl Hetherington <cth@carlh.net>
Sun, 5 Jul 2020 20:10:03 +0000 (22:10 +0200)
committerCarl Hetherington <cth@carlh.net>
Sun, 5 Jul 2020 20:10:03 +0000 (22:10 +0200)
src/lib/butler.cc
src/lib/butler.h
src/lib/ffmpeg_encoder.cc

index 20180330e5f68d2a048402328ccc32d7da64fd7b..595d98809be9d13b729d4c37e7d41667d551cfff 100644 (file)
@@ -238,7 +238,13 @@ Butler::get_video (bool blocking, Error* e)
 
        if (_video.empty()) {
                if (e) {
-                       *e = NONE;
+                       if (_died) {
+                               *e = DIED;
+                       } else if (_finished) {
+                               *e = FINISHED;
+                       } else {
+                               *e = NONE;
+                       }
                }
                return make_pair(shared_ptr<PlayerVideo>(), DCPTime());
        }
index ce3c9ae4859be430633ba6b629edafe94bde79e3..6263d61431d6e9fff81d7886d5e134d3a1a00c18 100644 (file)
@@ -51,7 +51,9 @@ public:
 
        enum Error {
                NONE,
-               AGAIN
+               AGAIN,
+               DIED,
+               FINISHED
        };
 
        std::pair<boost::shared_ptr<PlayerVideo>, dcpomatic::DCPTime> get_video (bool blocking, Error* e = 0);
index ee49a06461133e8d57dece989e5afb4572cdbc7a..15e27e63355f8e9dab5df0ef3859a2288b46d7d2 100644 (file)
@@ -166,6 +166,7 @@ FFmpegEncoder::go ()
                for (int j = 0; j < gets_per_frame; ++j) {
                        Butler::Error e;
                        pair<shared_ptr<PlayerVideo>, DCPTime> v = _butler->get_video (true, &e);
+                       _butler->rethrow ();
                        if (!v.first) {
                                throw ProgrammingError(__FILE__, __LINE__, String::compose("butler returned no video; error was %1", static_cast<int>(e)));
                        }