summaryrefslogtreecommitdiff
path: root/src/lib/encoder.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-07-14 00:28:59 +0100
committerCarl Hetherington <cth@carlh.net>2015-07-14 00:28:59 +0100
commit6c3ce5b236a745c9eb9e652bacb2896a96254f81 (patch)
tree3a61430fb2c2673fa2b7c1861c7ff41f1a191734 /src/lib/encoder.cc
parentabf6ad9a8a499348c7f1c9faae341303ff7bf69e (diff)
Port 65514eea7705fb12985cef448f08ceb47db6acab from 1.x; failure to handle separate-eye 3D when R comes before L in the playlist.
Diffstat (limited to 'src/lib/encoder.cc')
-rw-r--r--src/lib/encoder.cc19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/lib/encoder.cc b/src/lib/encoder.cc
index 07c97c674..9b195bade 100644
--- a/src/lib/encoder.cc
+++ b/src/lib/encoder.cc
@@ -64,6 +64,8 @@ Encoder::Encoder (shared_ptr<const Film> film, weak_ptr<Job> j, shared_ptr<Write
: _film (film)
, _job (j)
, _video_frames_enqueued (0)
+ , _left_done (false)
+ , _right_done (false)
, _terminate (false)
, _writer (writer)
{
@@ -247,8 +249,23 @@ Encoder::enqueue (shared_ptr<PlayerVideo> pv)
_empty_condition.notify_all ();
}
- if (pv->eyes() != EYES_LEFT) {
+ switch (pv->eyes ()) {
+ case EYES_BOTH:
++_video_frames_enqueued;
+ break;
+ case EYES_LEFT:
+ _left_done = true;
+ break;
+ case EYES_RIGHT:
+ _right_done = true;
+ break;
+ default:
+ break;
+ }
+
+ if (_left_done && _right_done) {
+ ++_video_frames_enqueued;
+ _left_done = _right_done = false;
}
_last_player_video = pv;