diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-07-14 00:28:59 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-07-14 00:28:59 +0100 |
| commit | 6c3ce5b236a745c9eb9e652bacb2896a96254f81 (patch) | |
| tree | 3a61430fb2c2673fa2b7c1861c7ff41f1a191734 /src/lib/encoder.cc | |
| parent | abf6ad9a8a499348c7f1c9faae341303ff7bf69e (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.cc | 19 |
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; |
