summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--src/lib/encoder.cc19
-rw-r--r--src/lib/encoder.h2
3 files changed, 23 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 6f3ed961c..14204b588 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2015-07-14 Carl Hetherington <cth@carlh.net>
+ * Fix failure to encode 3D from separate content
+ in some cases (from 1.x) (#634).
+
* Fix non-working 3D DCP creation when using separate
pieces of content for each eye (#635).
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;
diff --git a/src/lib/encoder.h b/src/lib/encoder.h
index 85bc6ae99..47eef823b 100644
--- a/src/lib/encoder.h
+++ b/src/lib/encoder.h
@@ -100,6 +100,8 @@ private:
/** Number of video frames enqueued so far */
int _video_frames_enqueued;
+ bool _left_done;
+ bool _right_done;
bool _terminate;
std::list<boost::shared_ptr<DCPVideo> > _queue;