diff options
| author | Carl Hetherington <cth@carlh.net> | 2021-10-11 10:51:43 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-10-11 12:34:47 +0200 |
| commit | c29de33e6f8b20219a957a0cd88d61fd8cba1ad9 (patch) | |
| tree | 8a2f00c7f851b58271225cb18d9a85c98b489503 | |
| parent | 3fecd33dc2fd14ed487cb14bf9647ee5c0572868 (diff) | |
Don't throw an error when the Butler says it is finished (#2097).
| -rw-r--r-- | src/lib/ffmpeg_encoder.cc | 15 | ||||
| -rw-r--r-- | test/ffmpeg_encoder_test.cc | 13 |
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 (); +} + |
