From 73e1e60f822d2931de47a4bc9252416041d88efb Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Tue, 4 Oct 2022 20:52:56 -0700 Subject: [PATCH] Revert "ffmpegdecoder: removed conflicting deinterlacing code" This reverts commit 95851c065649ba3f22525ebd70916238093e317b. --- app/codec/ffmpeg/ffmpegdecoder.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/codec/ffmpeg/ffmpegdecoder.cpp b/app/codec/ffmpeg/ffmpegdecoder.cpp index a5ffa9842..3721d52ff 100644 --- a/app/codec/ffmpeg/ffmpegdecoder.cpp +++ b/app/codec/ffmpeg/ffmpegdecoder.cpp @@ -798,6 +798,10 @@ AVFramePtr FFmpegDecoder::RetrieveFrame(const rational& time, VideoParams::Inter { int64_t target_ts = GetTimeInTimebaseUnits(time, instance_.avstream()->time_base, instance_.avstream()->start_time); + if (interlacing != VideoParams::kInterlaceNone) { + target_ts *= 2; + } + const int64_t min_seek = -instance_.avstream()->start_time; int64_t seek_ts = std::max(min_seek, target_ts - MaximumQueueSize()); bool still_seeking = false; @@ -998,6 +1002,20 @@ bool FFmpegDecoder::InitScaler(AVFrame *input, const RetrieveVideoParams& params // Link filters as necessary AVFilterContext *last_filter = buffersrc_ctx_; + // Add deinterlace filter if necessary + if (filter_params_.src_interlacing != VideoParams::kInterlaceNone) { + AVFilterContext* deint_filter; + + snprintf(filter_args, kFilterArgSz, "mode=1:parity=%s", + filter_params_.src_interlacing == VideoParams::kInterlacedTopFirst ? "0" : "1"); + + avfilter_graph_create_filter(&deint_filter, avfilter_get_by_name("yadif"), "deint", filter_args, nullptr, filter_graph_); + + avfilter_link(last_filter, 0, deint_filter, 0); + + last_filter = deint_filter; + } + // Add scale filter if necessary if (filter_params_.divider > 1) { AVFilterContext* scale_filter;