X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fencoder.cc;h=8e61a0d60d7a303231d0e3f4ef85221e84d2c4f3;hb=9b240c6d5d4e2189401498a99f98f41d1b15ed31;hp=718ae55a4570773be52426e07e43230cb77e9bb8;hpb=5f1046a2164fff00a6fc74aecf4cacbca531d415;p=dcpomatic.git diff --git a/src/lib/encoder.cc b/src/lib/encoder.cc index 718ae55a4..8e61a0d60 100644 --- a/src/lib/encoder.cc +++ b/src/lib/encoder.cc @@ -52,10 +52,11 @@ Encoder::Encoder (shared_ptr f, shared_ptr j) : _film (f) , _job (j) , _video_frames_out (0) - , _have_a_real_frame (false) , _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 () @@ -117,7 +118,7 @@ Encoder::process_end () for (list >::iterator i = _queue.begin(); i != _queue.end(); ++i) { _film->log()->log (String::compose (N_("Encode left-over frame %1"), (*i)->frame ())); try { - _writer->write ((*i)->encode_locally(), (*i)->frame ()); + _writer->write ((*i)->encode_locally(), (*i)->frame (), (*i)->eyes ()); frame_done (); } catch (std::exception& e) { _film->log()->log (String::compose (N_("Local encode failed (%1)"), e.what ())); @@ -170,7 +171,7 @@ Encoder::frame_done () } void -Encoder::process_video (shared_ptr image, bool same) +Encoder::process_video (shared_ptr image, Eyes eyes, bool same) { boost::mutex::scoped_lock lock (_mutex); @@ -190,25 +191,25 @@ Encoder::process_video (shared_ptr image, bool same) } if (_writer->can_fake_write (_video_frames_out)) { - _writer->fake_write (_video_frames_out); - _have_a_real_frame = false; + _writer->fake_write (_video_frames_out, eyes); + _have_a_real_frame[eyes] = false; frame_done (); - } else if (same && _have_a_real_frame) { + } else if (same && _have_a_real_frame[eyes]) { /* Use the last frame that we encoded. */ - _writer->repeat (_video_frames_out); + _writer->repeat (_video_frames_out, 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, _video_frames_out, _film->dcp_video_frame_rate(), + image, _video_frames_out, eyes, _film->dcp_video_frame_rate(), _film->j2k_bandwidth(), _film->log() ) )); _condition.notify_all (); - _have_a_real_frame = true; + _have_a_real_frame[eyes] = true; } ++_video_frames_out; @@ -302,7 +303,7 @@ Encoder::encoder_thread (ServerDescription* server) } if (encoded) { - _writer->write (encoded, vf->frame ()); + _writer->write (encoded, vf->frame (), vf->eyes ()); frame_done (); } else { lock.lock ();