X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fencoder.cc;h=8f31b596eb8f4d972f38eb95c3b9e84c8e9d921f;hp=8e8da6229099002dc1cb6cfb61d5914532c46b58;hb=854f2e5bbb7ffb9758b823af87034033033f3cb8;hpb=931fa4ef2dbfb7c9f726c4dd41eea79621b49906 diff --git a/src/lib/encoder.cc b/src/lib/encoder.cc index 8e8da6229..8f31b596e 100644 --- a/src/lib/encoder.cc +++ b/src/lib/encoder.cc @@ -35,6 +35,7 @@ #include "writer.h" #include "server_finder.h" #include "player.h" +#include "dcp_video.h" #include "i18n.h" @@ -60,9 +61,7 @@ Encoder::Encoder (shared_ptr f, weak_ptr j) , _video_frames_out (0) , _terminate (false) { - _have_a_real_frame[EYES_BOTH] = false; - _have_a_real_frame[EYES_LEFT] = false; - _have_a_real_frame[EYES_RIGHT] = false; + } Encoder::~Encoder () @@ -179,7 +178,7 @@ Encoder::frame_done () } void -Encoder::process_video (shared_ptr image, Eyes eyes, ColourConversion conversion, bool same) +Encoder::process_video (shared_ptr frame) { _waker.nudge (); @@ -206,28 +205,28 @@ Encoder::process_video (shared_ptr image, Eyes eyes, ColourConversi rethrow (); if (_writer->can_fake_write (_video_frames_out)) { - _writer->fake_write (_video_frames_out, eyes); - _have_a_real_frame[eyes] = false; - frame_done (); - } else if (same && _have_a_real_frame[eyes]) { - /* Use the last frame that we encoded. */ - _writer->repeat (_video_frames_out, eyes); + _writer->fake_write (_video_frames_out, frame->eyes ()); frame_done (); } else { /* Queue this new frame for encoding */ TIMING ("adding to queue of %1", _queue.size ()); _queue.push_back (shared_ptr ( new DCPVideoFrame ( - image->image(), _video_frames_out, eyes, conversion, _film->video_frame_rate(), - _film->j2k_bandwidth(), _film->resolution(), _film->log() + frame->image(PIX_FMT_RGB24, false), + _video_frames_out, + frame->eyes(), + frame->conversion(), + _film->video_frame_rate(), + _film->j2k_bandwidth(), + _film->resolution(), + _film->log() ) )); _condition.notify_all (); - _have_a_real_frame[eyes] = true; } - if (eyes != EYES_LEFT) { + if (frame->eyes() != EYES_LEFT) { ++_video_frames_out; } }