summaryrefslogtreecommitdiff
path: root/src/lib/video_mxf_decoder.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-06-01 23:58:47 +0100
committerCarl Hetherington <cth@carlh.net>2016-06-01 23:58:47 +0100
commit368832f2ff6837d9029020b41fb97fb148c3be31 (patch)
tree7653ce59c8e5de15d746897efa7640f33a70a32f /src/lib/video_mxf_decoder.cc
parent2da8a38e3cc9bebfe324a682d8e4da2e8856676a (diff)
Use new libdcp reader interface.
Diffstat (limited to 'src/lib/video_mxf_decoder.cc')
-rw-r--r--src/lib/video_mxf_decoder.cc38
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);