From 3171c89fef95b19c8889996caaac73eea71cf388 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 16 Dec 2012 13:43:25 +0000 Subject: Decoder handles crop changing. --- src/lib/ffmpeg_decoder.cc | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/lib/ffmpeg_decoder.cc') diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc index b3b1acbbb..51afc461a 100644 --- a/src/lib/ffmpeg_decoder.cc +++ b/src/lib/ffmpeg_decoder.cc @@ -77,6 +77,8 @@ FFmpegDecoder::FFmpegDecoder (shared_ptr f, shared_ptrChanged.connect (bind (&FFmpegDecoder::film_changed, this, _1)); } FFmpegDecoder::~FFmpegDecoder () @@ -526,6 +528,8 @@ FFmpegDecoder::set_subtitle_stream (shared_ptr s) void FFmpegDecoder::filter_and_emit_video (AVFrame* frame) { + boost::mutex::scoped_lock lm (_filter_graphs_mutex); + shared_ptr graph; list >::iterator i = _filter_graphs.begin(); @@ -554,6 +558,11 @@ FFmpegDecoder::seek (SourceFrame f) int64_t const t = static_cast(f) / (av_q2d (_format_context->streams[_video_stream]->time_base) * frames_per_second()); int const r = av_seek_frame (_format_context, _video_stream, t, 0); avcodec_flush_buffers (_video_codec_context); + + if (r >= 0) { + OutputChanged (); + } + return r < 0; } @@ -655,3 +664,21 @@ FFmpegDecoder::out_careful () _film->log()->log (String::compose ("Frame removed at %1s", out_pts_seconds)); } } + +void +FFmpegDecoder::film_changed (Film::Property p) +{ + switch (p) { + case Film::CROP: + { + boost::mutex::scoped_lock lm (_filter_graphs_mutex); + _filter_graphs.clear (); + } + OutputChanged (); + break; + + default: + break; + } +} + -- cgit v1.2.3