summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2021-10-11 10:51:43 +0200
committerCarl Hetherington <cth@carlh.net>2021-10-11 12:34:47 +0200
commitc29de33e6f8b20219a957a0cd88d61fd8cba1ad9 (patch)
tree8a2f00c7f851b58271225cb18d9a85c98b489503
parent3fecd33dc2fd14ed487cb14bf9647ee5c0572868 (diff)
Don't throw an error when the Butler says it is finished (#2097).
-rw-r--r--src/lib/ffmpeg_encoder.cc15
-rw-r--r--test/ffmpeg_encoder_test.cc13
2 files changed, 21 insertions, 7 deletions
diff --git a/src/lib/ffmpeg_encoder.cc b/src/lib/ffmpeg_encoder.cc
index dd773168a..5db3e31a6 100644
--- a/src/lib/ffmpeg_encoder.cc
+++ b/src/lib/ffmpeg_encoder.cc
@@ -178,12 +178,15 @@ FFmpegEncoder::go ()
Butler::Error e;
auto v = _butler->get_video (true, &e);
_butler->rethrow ();
- if (!v.first) {
- throw DecodeError(String::compose("Error during decoding: %1", e.summary()));
- }
- auto fe = encoder->get (v.first->eyes());
- if (fe) {
- fe->video(v.first, v.second - reel->from);
+ if (v.first) {
+ auto fe = encoder->get (v.first->eyes());
+ if (fe) {
+ fe->video(v.first, v.second - reel->from);
+ }
+ } else {
+ if (e.code != Butler::Error::Code::FINISHED) {
+ throw DecodeError(String::compose("Error during decoding: %1", e.summary()));
+ }
}
}
diff --git a/test/ffmpeg_encoder_test.cc b/test/ffmpeg_encoder_test.cc
index d0bce0356..3d6276fcb 100644
--- a/test/ffmpeg_encoder_test.cc
+++ b/test/ffmpeg_encoder_test.cc
@@ -40,7 +40,6 @@
using std::string;
using std::shared_ptr;
using std::make_shared;
-using boost::optional;
using namespace dcpomatic;
@@ -455,3 +454,15 @@ BOOST_AUTO_TEST_CASE (ffmpeg_encoder_h264_with_reels)
check ("build/test/ffmpeg_encoder_h264_with_reels_reel2.mov");
}
+
+/** Regression test for "Error during decoding: Butler finished" (#2097) */
+BOOST_AUTO_TEST_CASE (ffmpeg_encoder_prores_regression_1)
+{
+ auto content = content_factory(TestPaths::private_data() / "arrietty_JP-EN.mkv").front();
+ auto film = new_test_film2 ("ffmpeg_encoder_prores_regression_1", { content });
+
+ auto job = make_shared<TranscodeJob>(film);
+ FFmpegEncoder encoder (film, job, "build/test/ffmpeg_encoder_prores_regression_1.mov", ExportFormat::PRORES, false, true, false, 23);
+ encoder.go ();
+}
+