Fix possible incorrect eye mapping with 3D-alternate sources.
[dcpomatic.git] / src / lib / video_decoder.cc
index 18eb1acc15ff5d1f82ad5bc642ec941c1d233dae..8d6f7e6c77651af66ebe4a46235274e47531f5d8 100644 (file)
 #include "i18n.h"
 
 
-using std::back_inserter;
 using std::cout;
 using std::dynamic_pointer_cast;
-using std::list;
-using std::make_shared;
-using std::max;
 using std::shared_ptr;
-using boost::optional;
 using namespace dcpomatic;
 
 
@@ -110,7 +105,7 @@ VideoDecoder::emit (shared_ptr<const Film> film, shared_ptr<const ImageProxy> im
 
                if (vft == VideoFrameType::THREE_D_ALTERNATE) {
                        frame = decoder_frame / 2;
-                       eyes = (decoder_frame % 1) ? Eyes::RIGHT : Eyes::LEFT;
+                       eyes = (decoder_frame % 2) ? Eyes::RIGHT : Eyes::LEFT;
                } else {
                        frame = decoder_frame;
                        if (vft == VideoFrameType::THREE_D) {
@@ -136,6 +131,9 @@ VideoDecoder::emit (shared_ptr<const Film> film, shared_ptr<const ImageProxy> im
                                        frame = _position->frames_round(afr);
                                        eyes = Eyes::RIGHT;
                                }
+                       } else {
+                               /* This should not happen; see above */
+                               frame = _position->frames_round(afr) + 1;
                        }
                } else if (vft == VideoFrameType::THREE_D_ALTERNATE) {
                        DCPOMATIC_ASSERT (_last_emitted_eyes);