X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fvideo_decoder.cc;h=e0a7576eeaf5c51670cf1702c6b7b4597467db15;hb=1104fed9f028f221f58bf1f7287d8cdf63835a47;hp=cb55b4d188a0af99baea677721b417269e628186;hpb=aabc7a911b874d8e5e0929c7c031d06029fe96b5;p=dcpomatic.git diff --git a/src/lib/video_decoder.cc b/src/lib/video_decoder.cc index cb55b4d18..e0a7576ee 100644 --- a/src/lib/video_decoder.cc +++ b/src/lib/video_decoder.cc @@ -31,43 +31,44 @@ using boost::optional; VideoDecoder::VideoDecoder (shared_ptr f, shared_ptr o, Job* j) : Decoder (f, o, j) , _video_frame (0) - , _last_source_frame (0) + , _last_source_time (0) { } /** Called by subclasses to tell the world that some video data is ready. * We find a subtitle then emit it for listeners. - * @param frame to emit. + * @param image frame to emit. + * @param t Time of the frame within the source, in seconds. */ void -VideoDecoder::emit_video (shared_ptr image, SourceFrame f) +VideoDecoder::emit_video (shared_ptr image, double t) { shared_ptr sub; - if (_timed_subtitle && _timed_subtitle->displayed_at (f / _film->frames_per_second())) { + if (_timed_subtitle && _timed_subtitle->displayed_at (t)) { sub = _timed_subtitle->subtitle (); } - signal_video (image, sub); - _last_source_frame = f; + signal_video (image, false, sub); + _last_source_time = t; } void VideoDecoder::repeat_last_video () { if (!_last_image) { - _last_image.reset (new CompactImage (pixel_format(), native_size())); + _last_image.reset (new SimpleImage (pixel_format(), native_size(), false)); _last_image->make_black (); } - signal_video (_last_image, _last_subtitle); + signal_video (_last_image, true, _last_subtitle); } void -VideoDecoder::signal_video (shared_ptr image, shared_ptr sub) +VideoDecoder::signal_video (shared_ptr image, bool same, shared_ptr sub) { TIMING ("Decoder emits %1", _video_frame); - Video (image, sub); + Video (image, same, sub); ++_video_frame; _last_image = image; @@ -94,7 +95,7 @@ VideoDecoder::set_subtitle_stream (shared_ptr s) void VideoDecoder::set_progress () const { - if (_job && _film->dcp_length()) { + if (_job && _film->length()) { _job->set_progress (float (_video_frame) / _film->length().get()); } }