diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-06-01 23:58:47 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-06-01 23:58:47 +0100 |
| commit | 368832f2ff6837d9029020b41fb97fb148c3be31 (patch) | |
| tree | 7653ce59c8e5de15d746897efa7640f33a70a32f /src/lib/video_mxf_decoder.cc | |
| parent | 2da8a38e3cc9bebfe324a682d8e4da2e8856676a (diff) | |
Use new libdcp reader interface.
Diffstat (limited to 'src/lib/video_mxf_decoder.cc')
| -rw-r--r-- | src/lib/video_mxf_decoder.cc | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/src/lib/video_mxf_decoder.cc b/src/lib/video_mxf_decoder.cc index 70c884699..938d7deaf 100644 --- a/src/lib/video_mxf_decoder.cc +++ b/src/lib/video_mxf_decoder.cc @@ -23,7 +23,9 @@ #include "video_mxf_content.h" #include "j2k_image_proxy.h" #include <dcp/mono_picture_asset.h> +#include <dcp/mono_picture_asset_reader.h> #include <dcp/stereo_picture_asset.h> +#include <dcp/stereo_picture_asset_reader.h> #include <dcp/exceptions.h> using boost::shared_ptr; @@ -32,17 +34,6 @@ VideoMXFDecoder::VideoMXFDecoder (shared_ptr<const VideoMXFContent> content, sha : _content (content) { video.reset (new VideoDecoder (this, content, log)); -} - -bool -VideoMXFDecoder::pass (PassReason, bool) -{ - double const vfr = _content->active_video_frame_rate (); - int64_t const frame = _next.frames_round (vfr); - - if (frame >= _content->video->length()) { - return true; - } shared_ptr<dcp::MonoPictureAsset> mono; try { @@ -67,10 +58,29 @@ VideoMXFDecoder::pass (PassReason, bool) } if (mono) { - video->give (shared_ptr<ImageProxy> (new J2KImageProxy (mono->get_frame(frame), mono->size())), frame); + _mono_reader = mono->start_read (); + _size = mono->size (); + } else { + _stereo_reader = stereo->start_read (); + _size = stereo->size (); + } +} + +bool +VideoMXFDecoder::pass (PassReason, bool) +{ + double const vfr = _content->active_video_frame_rate (); + int64_t const frame = _next.frames_round (vfr); + + if (frame >= _content->video->length()) { + return true; + } + + if (_mono_reader) { + video->give (shared_ptr<ImageProxy> (new J2KImageProxy (_mono_reader->get_frame(frame), _size)), frame); } else { - video->give (shared_ptr<ImageProxy> (new J2KImageProxy (stereo->get_frame(frame), stereo->size(), dcp::EYE_LEFT)), frame); - video->give (shared_ptr<ImageProxy> (new J2KImageProxy (stereo->get_frame(frame), stereo->size(), dcp::EYE_RIGHT)), frame); + video->give (shared_ptr<ImageProxy> (new J2KImageProxy (_stereo_reader->get_frame(frame), _size, dcp::EYE_LEFT)), frame); + video->give (shared_ptr<ImageProxy> (new J2KImageProxy (_stereo_reader->get_frame(frame), _size, dcp::EYE_RIGHT)), frame); } _next += ContentTime::from_frames (1, vfr); |
