Commit 2962101e authored by Paul B Mahol's avatar Paul B Mahol

avfilter/vf_fieldmatch: fix more leaks

parent 0d05aa05
...@@ -679,7 +679,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -679,7 +679,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
AVFilterLink *outlink = ctx->outputs[0]; AVFilterLink *outlink = ctx->outputs[0];
FieldMatchContext *fm = ctx->priv; FieldMatchContext *fm = ctx->priv;
int combs[] = { -1, -1, -1, -1, -1 }; 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; const int *fxo;
AVFrame *gen_frames[] = { NULL, NULL, NULL, NULL, NULL }; AVFrame *gen_frames[] = { NULL, NULL, NULL, NULL, NULL };
AVFrame *dst; AVFrame *dst;
...@@ -725,16 +725,20 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -725,16 +725,20 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
if (i > mN && fm->combdbg == COMBDBG_PCN) if (i > mN && fm->combdbg == COMBDBG_PCN)
break; break;
gen_frames[i] = create_weave_frame(ctx, i, field, fm->prv, fm->src, fm->nxt); gen_frames[i] = create_weave_frame(ctx, i, field, fm->prv, fm->src, fm->nxt);
if (!gen_frames[i]) if (!gen_frames[i]) {
return AVERROR(ENOMEM); ret = AVERROR(ENOMEM);
goto fail;
}
combs[i] = calc_combed_score(fm, gen_frames[i]); combs[i] = calc_combed_score(fm, gen_frames[i]);
} }
av_log(ctx, AV_LOG_INFO, "COMBS: %3d %3d %3d %3d %3d\n", av_log(ctx, AV_LOG_INFO, "COMBS: %3d %3d %3d %3d %3d\n",
combs[0], combs[1], combs[2], combs[3], combs[4]); combs[0], combs[1], combs[2], combs[3], combs[4]);
} else { } else {
gen_frames[mC] = av_frame_clone(fm->src); gen_frames[mC] = av_frame_clone(fm->src);
if (!gen_frames[mC]) if (!gen_frames[mC]) {
return AVERROR(ENOMEM); ret = AVERROR(ENOMEM);
goto fail;
}
} }
/* p/c selection and optional 3-way p/c/n matches */ /* p/c selection and optional 3-way p/c/n matches */
...@@ -801,10 +805,10 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -801,10 +805,10 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
gen_frames[match] = NULL; gen_frames[match] = NULL;
} }
} }
if (!dst) if (!dst) {
return AVERROR(ENOMEM); ret = AVERROR(ENOMEM);
for (i = 0; i < FF_ARRAY_ELEMS(gen_frames); i++) goto fail;
av_frame_free(&gen_frames[i]); }
/* mark the frame we are unable to match properly as interlaced so a proper /* mark the frame we are unable to match properly as interlaced so a proper
* de-interlacer can take the relay */ * de-interlacer can take the relay */
...@@ -819,7 +823,13 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -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], " match=%d combed=%s\n", sc, combs[0], combs[1], combs[2], combs[3], combs[4],
fm->combpel, match, dst->interlaced_frame ? "YES" : "NO"); 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) static int activate(AVFilterContext *ctx)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment