summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-06-14 12:10:59 +0100
committerCarl Hetherington <cth@carlh.net>2016-06-14 12:10:59 +0100
commitb19543a036c389c9970a65f77606afb55d9fd11d (patch)
tree3a78d574e16a26717ba8d22c2c49bc9b867beba4 /src/lib
parent4b7b0edb359ae68f2dbcab90c7c10382f507fa5b (diff)
Fix some confusion with filling and VideoFrame.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/video_decoder.cc7
-rw-r--r--src/lib/video_frame.cc29
-rw-r--r--src/lib/video_frame.h1
3 files changed, 35 insertions, 2 deletions
diff --git a/src/lib/video_decoder.cc b/src/lib/video_decoder.cc
index ec5ae8884..fc3bcac39 100644
--- a/src/lib/video_decoder.cc
+++ b/src/lib/video_decoder.cc
@@ -282,7 +282,10 @@ VideoDecoder::give (shared_ptr<const ImageProxy> image, Frame frame)
optional<VideoFrame> from;
if (_decoded.empty() && _last_seek_time && _last_seek_accurate) {
- from = VideoFrame (_last_seek_time->frames_round (_content->active_video_frame_rate ()), EYES_LEFT);
+ from = VideoFrame (
+ _last_seek_time->frames_round (_content->active_video_frame_rate ()),
+ _content->video->frame_type() == VIDEO_FRAME_TYPE_2D ? EYES_BOTH : EYES_LEFT
+ );
} else if (!_decoded.empty ()) {
from = _decoded.back().frame;
++(*from);
@@ -292,7 +295,7 @@ VideoDecoder::give (shared_ptr<const ImageProxy> image, Frame frame)
(frames before the last seek time) which we can just ignore.
*/
- if (from && from->index() > to_push.front().frame.index()) {
+ if (from && (*from) > to_push.front().frame) {
return;
}
diff --git a/src/lib/video_frame.cc b/src/lib/video_frame.cc
index e2223ff9e..e7c6a226a 100644
--- a/src/lib/video_frame.cc
+++ b/src/lib/video_frame.cc
@@ -19,6 +19,7 @@
*/
#include "video_frame.h"
+#include "dcpomatic_assert.h"
VideoFrame &
VideoFrame::operator++ ()
@@ -46,3 +47,31 @@ operator!= (VideoFrame const & a, VideoFrame const & b)
{
return !(a == b);
}
+
+bool
+operator> (VideoFrame const & a, VideoFrame const & b)
+{
+ if (a.index() != b.index()) {
+ return a.index() > b.index();
+ }
+
+ /* indexes are the same */
+
+ if (a.eyes() == b.eyes()) {
+ return false;
+ }
+
+ /* eyes are not the same */
+
+ if (a.eyes() == EYES_LEFT && b.eyes() == EYES_RIGHT) {
+ return false;
+ }
+
+ if (a.eyes() == EYES_RIGHT && b.eyes() == EYES_LEFT) {
+ return true;
+ }
+
+ /* should never get here; we are comparing 2D with 3D */
+
+ DCPOMATIC_ASSERT (false);
+}
diff --git a/src/lib/video_frame.h b/src/lib/video_frame.h
index abb25ec37..ac9a345af 100644
--- a/src/lib/video_frame.h
+++ b/src/lib/video_frame.h
@@ -58,5 +58,6 @@ private:
extern bool operator== (VideoFrame const & a, VideoFrame const & b);
extern bool operator!= (VideoFrame const & a, VideoFrame const & b);
+extern bool operator> (VideoFrame const & a, VideoFrame const & b);
#endif