mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-28 14:01:27 +00:00
avfilter/vf_fieldmatch: fix more leaks
This commit is contained in:
parent
0d05aa052c
commit
2962101e40
@ -679,7 +679,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
|
||||
AVFilterLink *outlink = ctx->outputs[0];
|
||||
FieldMatchContext *fm = ctx->priv;
|
||||
int combs[] = { -1, -1, -1, -1, -1 };
|
||||
int order, field, i, match, sc = 0;
|
||||
int order, field, i, match, sc = 0, ret = 0;
|
||||
const int *fxo;
|
||||
AVFrame *gen_frames[] = { NULL, NULL, NULL, NULL, NULL };
|
||||
AVFrame *dst;
|
||||
@ -725,16 +725,20 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
|
||||
if (i > mN && fm->combdbg == COMBDBG_PCN)
|
||||
break;
|
||||
gen_frames[i] = create_weave_frame(ctx, i, field, fm->prv, fm->src, fm->nxt);
|
||||
if (!gen_frames[i])
|
||||
return AVERROR(ENOMEM);
|
||||
if (!gen_frames[i]) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto fail;
|
||||
}
|
||||
combs[i] = calc_combed_score(fm, gen_frames[i]);
|
||||
}
|
||||
av_log(ctx, AV_LOG_INFO, "COMBS: %3d %3d %3d %3d %3d\n",
|
||||
combs[0], combs[1], combs[2], combs[3], combs[4]);
|
||||
} else {
|
||||
gen_frames[mC] = av_frame_clone(fm->src);
|
||||
if (!gen_frames[mC])
|
||||
return AVERROR(ENOMEM);
|
||||
if (!gen_frames[mC]) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
/* p/c selection and optional 3-way p/c/n matches */
|
||||
@ -801,10 +805,10 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
|
||||
gen_frames[match] = NULL;
|
||||
}
|
||||
}
|
||||
if (!dst)
|
||||
return AVERROR(ENOMEM);
|
||||
for (i = 0; i < FF_ARRAY_ELEMS(gen_frames); i++)
|
||||
av_frame_free(&gen_frames[i]);
|
||||
if (!dst) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* mark the frame we are unable to match properly as interlaced so a proper
|
||||
* de-interlacer can take the relay */
|
||||
@ -819,7 +823,13 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
|
||||
" match=%d combed=%s\n", sc, combs[0], combs[1], combs[2], combs[3], combs[4],
|
||||
fm->combpel, match, dst->interlaced_frame ? "YES" : "NO");
|
||||
|
||||
return ff_filter_frame(outlink, dst);
|
||||
fail:
|
||||
for (i = 0; i < FF_ARRAY_ELEMS(gen_frames); i++)
|
||||
av_frame_free(&gen_frames[i]);
|
||||
|
||||
if (ret >= 0)
|
||||
return ff_filter_frame(outlink, dst);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int activate(AVFilterContext *ctx)
|
||||
|
Loading…
Reference in New Issue
Block a user