summaryrefslogtreecommitdiff
path: root/src/lib/dcp_decoder.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/dcp_decoder.cc')
-rw-r--r--src/lib/dcp_decoder.cc22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/lib/dcp_decoder.cc b/src/lib/dcp_decoder.cc
index 9f1a80160..c00341bc7 100644
--- a/src/lib/dcp_decoder.cc
+++ b/src/lib/dcp_decoder.cc
@@ -228,6 +228,8 @@ DCPDecoder::pass ()
return PassResult::finished();
}
+ PassResult result = PassResult::ok();
+
auto const vfr = _dcp_content->active_video_frame_rate (film());
/* Frame within the (played part of the) reel that is coming up next */
@@ -242,15 +244,27 @@ DCPDecoder::pass ()
pass_texts (_next, picture_asset->size());
if ((_mono_reader || _stereo_reader) && (_decode_referenced || !_dcp_content->reference_video())) {
- pass_video(frame, picture_asset->size());
+ try {
+ pass_video(frame, picture_asset->size());
+ } catch (dcp::ReadError const &e) {
+ result = PassResult::error(e.what());
+ }
}
if (_sound_reader && (_decode_referenced || !_dcp_content->reference_audio())) {
- pass_audio(frame, vfr);
+ try {
+ pass_audio(frame, vfr);
+ } catch (dcp::ReadError const &e) {
+ result = PassResult::error(e.what());
+ }
}
if (_atmos_reader) {
- pass_atmos(frame);
+ try {
+ pass_atmos(frame);
+ } catch (dcp::ReadError const &e) {
+ result = PassResult::error(e.what());
+ }
}
_next += ContentTime::from_frames (1, vfr);
@@ -262,7 +276,7 @@ DCPDecoder::pass ()
}
}
- return PassResult::ok();
+ return result;
}