summaryrefslogtreecommitdiff
path: root/src/lib/video_decoder.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-07-09 09:36:58 +0100
committerCarl Hetherington <cth@carlh.net>2014-07-09 09:36:58 +0100
commit2cf3da72a017eebf741dfb9a5ec158df94a4e7b7 (patch)
tree2fcc142d132fb1de2228cfca201a4e0825415dc8 /src/lib/video_decoder.cc
parent02de0e70ffa175861fb4392e9df4e5a7c1579375 (diff)
Basics of DCP import.
Diffstat (limited to 'src/lib/video_decoder.cc')
-rw-r--r--src/lib/video_decoder.cc9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/lib/video_decoder.cc b/src/lib/video_decoder.cc
index bfd7a7e3e..5dd078553 100644
--- a/src/lib/video_decoder.cc
+++ b/src/lib/video_decoder.cc
@@ -35,6 +35,7 @@ VideoDecoder::VideoDecoder (shared_ptr<const VideoContent> c)
#else
: _video_content (c)
#endif
+ , _same (false)
{
}
@@ -123,8 +124,10 @@ VideoDecoder::get_video (VideoFrame frame, bool accurate)
void
VideoDecoder::video (shared_ptr<const ImageProxy> image, VideoFrame frame)
{
- /* We should not receive the same thing twice */
- assert (_decoded_video.empty() || frame != _decoded_video.back().frame);
+ /* We may receive the same frame index twice for 3D, and we need to know
+ when that happens.
+ */
+ _same = (!_decoded_video.empty() && frame == _decoded_video.back().frame);
/* Fill in gaps */
/* XXX: 3D */
@@ -148,7 +151,7 @@ VideoDecoder::video (shared_ptr<const ImageProxy> image, VideoFrame frame)
_decoded_video.push_back (ContentVideo (image, EYES_BOTH, PART_WHOLE, frame));
break;
case VIDEO_FRAME_TYPE_3D_ALTERNATE:
- _decoded_video.push_back (ContentVideo (image, (frame % 2) ? EYES_RIGHT : EYES_LEFT, PART_WHOLE, frame));
+ _decoded_video.push_back (ContentVideo (image, _same ? EYES_RIGHT : EYES_LEFT, PART_WHOLE, frame));
break;
case VIDEO_FRAME_TYPE_3D_LEFT_RIGHT:
_decoded_video.push_back (ContentVideo (image, EYES_LEFT, PART_LEFT_HALF, frame));