Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2019-09-25 13:35:33 +0300
committerPaul B Mahol <onemda@gmail.com>2019-09-25 14:06:30 +0300
commit2962101e407e2d23b66b62579e844204fd93d708 (patch)
treeabc127fef97d3263c7514454fbd3a539109de1ff /libavfilter/vf_fieldmatch.c
parent0d05aa052cdd11706c4461b6b2e733e1d65525d6 (diff)
avfilter/vf_fieldmatch: fix more leaks
Diffstat (limited to 'libavfilter/vf_fieldmatch.c')
-rw-r--r--libavfilter/vf_fieldmatch.c30
1 files changed, 20 insertions, 10 deletions
diff --git a/libavfilter/vf_fieldmatch.c b/libavfilter/vf_fieldmatch.c
index 5a73eb43b8..af118c4f8e 100644
--- a/libavfilter/vf_fieldmatch.c
+++ b/libavfilter/vf_fieldmatch.c
@@ -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)