mirror of https://git.ffmpeg.org/ffmpeg.git
avfilter/vf_decimate: fix broken logic with ppsrc handling
Make output bit exact with VIVTC VDecimate filter.
This commit is contained in:
parent
6d3b70c27e
commit
89dcef90af
|
@ -167,11 +167,11 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
|
|||
dm->got_frame[INPUT_MAIN] = dm->got_frame[INPUT_CLEANSRC] = 0;
|
||||
|
||||
if (dm->ppsrc)
|
||||
in = dm->clean_src[dm->fid];
|
||||
in = dm->queue[dm->fid].frame;
|
||||
|
||||
if (in) {
|
||||
/* update frame metrics */
|
||||
prv = dm->fid ? (dm->ppsrc ? dm->clean_src[dm->fid - 1] : dm->queue[dm->fid - 1].frame) : dm->last;
|
||||
prv = dm->fid ? dm->queue[dm->fid - 1].frame : dm->last;
|
||||
if (!prv) {
|
||||
dm->queue[dm->fid].maxbdiff = INT64_MAX;
|
||||
dm->queue[dm->fid].totdiff = INT64_MAX;
|
||||
|
@ -219,8 +219,6 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
|
|||
av_frame_free(&dm->queue[i].frame);
|
||||
} else {
|
||||
AVFrame *frame = dm->queue[i].frame;
|
||||
if (!frame)
|
||||
continue;
|
||||
dm->queue[i].frame = NULL;
|
||||
if (frame->pts != AV_NOPTS_VALUE && dm->start_pts == AV_NOPTS_VALUE)
|
||||
dm->start_pts = frame->pts;
|
||||
|
@ -367,8 +365,7 @@ static int config_output(AVFilterLink *outlink)
|
|||
{
|
||||
AVFilterContext *ctx = outlink->src;
|
||||
DecimateContext *dm = ctx->priv;
|
||||
const AVFilterLink *inlink =
|
||||
ctx->inputs[dm->ppsrc ? INPUT_CLEANSRC : INPUT_MAIN];
|
||||
const AVFilterLink *inlink = ctx->inputs[INPUT_MAIN];
|
||||
AVRational fps = inlink->frame_rate;
|
||||
int max_value;
|
||||
const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(inlink->format);
|
||||
|
@ -407,8 +404,13 @@ static int config_output(AVFilterLink *outlink)
|
|||
outlink->time_base = inlink->time_base;
|
||||
outlink->frame_rate = fps;
|
||||
outlink->sample_aspect_ratio = inlink->sample_aspect_ratio;
|
||||
outlink->w = inlink->w;
|
||||
outlink->h = inlink->h;
|
||||
if (dm->ppsrc) {
|
||||
outlink->w = ctx->inputs[INPUT_CLEANSRC]->w;
|
||||
outlink->h = ctx->inputs[INPUT_CLEANSRC]->h;
|
||||
} else {
|
||||
outlink->w = inlink->w;
|
||||
outlink->h = inlink->h;
|
||||
}
|
||||
dm->ts_unit = av_inv_q(av_mul_q(fps, outlink->time_base));
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue