#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;
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.
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) {
auto j2k = dynamic_pointer_cast<const J2KImageProxy>(image);
- /* At the moment only DCP decoders producers VideoFrameType::THREE_D, so only the J2KImagProxy
+ /* At the moment only DCP decoders producers VideoFrameType::THREE_D, so only the J2KImageProxy
* knows which eye it is.
*/
if (j2k && j2k->eye()) {
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);