Discard right-eye images when using 3D sources to make 2D DCPs.
authorCarl Hetherington <cth@carlh.net>
Tue, 14 Jun 2016 11:58:57 +0000 (12:58 +0100)
committerCarl Hetherington <cth@carlh.net>
Tue, 14 Jun 2016 11:58:57 +0000 (12:58 +0100)
src/lib/encoder.cc
src/lib/player_video.h

index f766cccd90aad51e4395c04aa50cc1dc23566520..38bf4e290eafabf781d32d62e1b2f8544e7f96f8 100644 (file)
@@ -173,6 +173,17 @@ void
 Encoder::encode (list<shared_ptr<PlayerVideo> > pv)
 {
        BOOST_FOREACH (shared_ptr<PlayerVideo> i, pv) {
+               if (!_film->three_d()) {
+                       /* 2D DCP */
+                       if (i->eyes() == EYES_RIGHT) {
+                               /* Discard right-eye images */
+                               continue;
+                       } else if (i->eyes() == EYES_LEFT) {
+                               /* Use left-eye images for both eyes */
+                               i->set_eyes (EYES_BOTH);
+                       }
+               }
+
                enqueue (i);
        }
        ++_position;
@@ -191,8 +202,6 @@ Encoder::enqueue (shared_ptr<PlayerVideo> pv)
 
        boost::mutex::scoped_lock queue_lock (_queue_mutex);
 
-       /* XXX: discard 3D here if required */
-
        /* Wait until the queue has gone down a bit */
        while (_queue.size() >= threads * 2) {
                LOG_TIMING ("decoder-sleep queue=%1", _queue.size());
index 50848cde7d65a1c0121550bb654ef25116726780..b5acd9686ef1037ce80698e6cd24a1c0cb0f519e 100644 (file)
@@ -74,6 +74,10 @@ public:
                return _eyes;
        }
 
+       void set_eyes (Eyes e) {
+               _eyes = e;
+       }
+
        boost::optional<ColourConversion> colour_conversion () const {
                return _colour_conversion;
        }