X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fvideo_decoder.cc;h=cf21f885a3fbc6af45ba2efde1cfc18ad645eb9b;hb=678dd30fea0434c6febe4badc47e7aa05ebe58bc;hp=18eb1acc15ff5d1f82ad5bc642ec941c1d233dae;hpb=2e13b6693de34174da11271485ffed59a6d66cae;p=dcpomatic.git diff --git a/src/lib/video_decoder.cc b/src/lib/video_decoder.cc index 18eb1acc1..cf21f885a 100644 --- a/src/lib/video_decoder.cc +++ b/src/lib/video_decoder.cc @@ -32,14 +32,9 @@ #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; @@ -101,7 +96,7 @@ VideoDecoder::emit (shared_ptr film, shared_ptr im if (!_position) { /* This is the first data we have received since initialisation or seek. Set the position based on the frame that was given. After this first time - we just cound frames, since (as with audio) it seems that ContentTimes + we just count frames, since (as with audio) it seems that ContentTimes are unreliable from FFmpegDecoder. They are much better than audio times but still we get the occasional one which is duplicated. In this case ffmpeg seems to carry on regardless, processing the video frame as normal. @@ -110,7 +105,7 @@ VideoDecoder::emit (shared_ptr film, shared_ptr 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 film, shared_ptr 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);