X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fffmpeg_encoder.cc;h=6b3118537694ba6e64dacaac0d9edf093789fd18;hb=3dfe3b92df03eee932f3c92336197559c11a5913;hp=6c006167028bb63fdf999c71bb48b24fdbf4c37a;hpb=052ec34bd487a3645013e87a7062738284d050df;p=dcpomatic.git diff --git a/src/lib/ffmpeg_encoder.cc b/src/lib/ffmpeg_encoder.cc index 6c0061670..6b3118537 100644 --- a/src/lib/ffmpeg_encoder.cc +++ b/src/lib/ffmpeg_encoder.cc @@ -59,7 +59,7 @@ FFmpegEncoder::FFmpegEncoder ( #endif ) : Encoder (film, job) - , _history (1000) + , _history (200) { int const files = split_reels ? film->reels().size() : 1; for (int i = 0; i < files; ++i) { @@ -153,7 +153,10 @@ FFmpegEncoder::go () for (int j = 0; j < gets_per_frame; ++j) { pair, DCPTime> v = _butler->get_video (true, 0); - encoder->get(v.first->eyes())->video(v.first, v.second); + shared_ptr fe = encoder->get (v.first->eyes()); + if (fe) { + fe->video(v.first, v.second); + } } _history.event (); @@ -247,6 +250,17 @@ FFmpegEncoder::FileEncoderSet::FileEncoderSet ( shared_ptr FFmpegEncoder::FileEncoderSet::get (Eyes eyes) const { + if (_encoders.size() == 1) { + /* We are doing a 2D export... */ + if (eyes == EYES_LEFT) { + /* ...but we got some 3D data; put the left eye into the output... */ + eyes = EYES_BOTH; + } else if (eyes == EYES_RIGHT) { + /* ...and ignore the right eye.*/ + return shared_ptr(); + } + } + map >::const_iterator i = _encoders.find (eyes); DCPOMATIC_ASSERT (i != _encoders.end()); return i->second;