X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fffmpeg_decoder.cc;fp=src%2Flib%2Fffmpeg_decoder.cc;h=119e82851ec5de9433d119e2409b1b951067104f;hp=047829d456395e8abd039dbe9aecf9616c256b31;hb=996b0c06e23bcb6b300d7b8799df94993692e07d;hpb=4f03da3aa12525cb8389ddefee629f5d0b2ac0aa diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc index 047829d45..119e82851 100644 --- a/src/lib/ffmpeg_decoder.cc +++ b/src/lib/ffmpeg_decoder.cc @@ -507,22 +507,6 @@ FFmpegDecoder::do_seek (Time t, bool backwards, bool accurate) return; } -void -FFmpegDecoder::film_changed (Film::Property p) -{ - switch (p) { - case Film::FILTERS: - { - boost::mutex::scoped_lock lm (_filter_graphs_mutex); - _filter_graphs.clear (); - } - break; - - default: - break; - } -} - /** @return Length (in video frames) according to our content's header */ ContentVideoFrame FFmpegDecoder::video_length () const @@ -582,27 +566,35 @@ FFmpegDecoder::decode_video_packet () } if (i == _filter_graphs.end ()) { - graph.reset (new FilterGraph (_film, this, libdcp::Size (_frame->width, _frame->height), (AVPixelFormat) _frame->format)); - _filter_graphs.push_back (graph); - shared_ptr film = _film.lock (); assert (film); + + graph.reset (new FilterGraph (_ffmpeg_content, libdcp::Size (_frame->width, _frame->height), (AVPixelFormat) _frame->format)); + _filter_graphs.push_back (graph); + film->log()->log (String::compose (N_("New graph for %1x%2, pixel format %3"), _frame->width, _frame->height, _frame->format)); } else { graph = *i; } - list > images = graph->process (_frame); + + string post_process = Filter::ffmpeg_strings (_ffmpeg_content->filters()).second; for (list >::iterator i = images.begin(); i != images.end(); ++i) { + + shared_ptr image = *i; + if (!post_process.empty ()) { + image = image->post_process (post_process, true); + } + int64_t const bet = av_frame_get_best_effort_timestamp (_frame); if (bet != AV_NOPTS_VALUE) { /* XXX: may need to insert extra frames / remove frames here ... (as per old Matcher) */ Time const t = bet * av_q2d (_format_context->streams[_video_stream]->time_base) * TIME_HZ; - video (*i, false, t); + video (image, false, t); } else { shared_ptr film = _film.lock (); assert (film);