diff options
| author | Carl Hetherington <cth@carlh.net> | 2021-10-11 10:51:43 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-10-12 10:18:55 +0200 |
| commit | c9d6036eaf3cff693d3661167f84b29be4e4e3ae (patch) | |
| tree | 219b38c57f6296895b993d17a7895c31e1d9c9e7 | |
| parent | 8044bcbf5ec36ced1d507742c6c3d654dd961ed9 (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 e3a37677b..f8309048c 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 (); +} + |
