aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavfilter/formats.c32
1 files changed, 10 insertions, 22 deletions
diff --git a/libavfilter/formats.c b/libavfilter/formats.c
index d2edf832e9..7410a306f2 100644
--- a/libavfilter/formats.c
+++ b/libavfilter/formats.c
@@ -314,7 +314,6 @@ AVFilterChannelLayouts *avfilter_make_format64_list(const int64_t *fmts)
#define ADD_FORMAT(f, fmt, unref_fn, type, list, nb) \
do { \
type *fmts; \
- void *oldf = *f; \
\
if (!(*f) && !(*f = av_mallocz(sizeof(**f)))) { \
return AVERROR(ENOMEM); \
@@ -324,8 +323,6 @@ do { \
sizeof(*(*f)->list)); \
if (!fmts) { \
unref_fn(f); \
- if (!oldf) \
- av_freep(f); \
return AVERROR(ENOMEM); \
} \
\
@@ -486,16 +483,17 @@ do { \
do { \
int idx = -1; \
\
- if (!ref || !*ref || !(*ref)->refs) \
+ if (!ref || !*ref) \
return; \
\
FIND_REF_INDEX(ref, idx); \
\
- if (idx >= 0) \
+ if (idx >= 0) { \
memmove((*ref)->refs + idx, (*ref)->refs + idx + 1, \
sizeof(*(*ref)->refs) * ((*ref)->refcount - idx - 1)); \
- \
- if(!--(*ref)->refcount) { \
+ --(*ref)->refcount; \
+ } \
+ if (!(*ref)->refcount) { \
av_free((*ref)->list); \
av_free((*ref)->refs); \
av_free(*ref); \
@@ -537,7 +535,7 @@ void ff_formats_changeref(AVFilterFormats **oldref, AVFilterFormats **newref)
FORMATS_CHANGEREF(oldref, newref);
}
-#define SET_COMMON_FORMATS(ctx, fmts, in_fmts, out_fmts, ref_fn, unref_fn, list) \
+#define SET_COMMON_FORMATS(ctx, fmts, in_fmts, out_fmts, ref_fn, unref_fn) \
int count = 0, i; \
\
if (!fmts) \
@@ -547,10 +545,6 @@ void ff_formats_changeref(AVFilterFormats **oldref, AVFilterFormats **newref)
if (ctx->inputs[i] && !ctx->inputs[i]->out_fmts) { \
int ret = ref_fn(fmts, &ctx->inputs[i]->out_fmts); \
if (ret < 0) { \
- unref_fn(&fmts); \
- if (fmts) \
- av_freep(&fmts->list); \
- av_freep(&fmts); \
return ret; \
} \
count++; \
@@ -560,10 +554,6 @@ void ff_formats_changeref(AVFilterFormats **oldref, AVFilterFormats **newref)
if (ctx->outputs[i] && !ctx->outputs[i]->in_fmts) { \
int ret = ref_fn(fmts, &ctx->outputs[i]->in_fmts); \
if (ret < 0) { \
- unref_fn(&fmts); \
- if (fmts) \
- av_freep(&fmts->list); \
- av_freep(&fmts); \
return ret; \
} \
count++; \
@@ -571,9 +561,7 @@ void ff_formats_changeref(AVFilterFormats **oldref, AVFilterFormats **newref)
} \
\
if (!count) { \
- av_freep(&fmts->list); \
- av_freep(&fmts->refs); \
- av_freep(&fmts); \
+ unref_fn(&fmts); \
} \
\
return 0;
@@ -582,14 +570,14 @@ int ff_set_common_channel_layouts(AVFilterContext *ctx,
AVFilterChannelLayouts *layouts)
{
SET_COMMON_FORMATS(ctx, layouts, in_channel_layouts, out_channel_layouts,
- ff_channel_layouts_ref, ff_channel_layouts_unref, channel_layouts);
+ ff_channel_layouts_ref, ff_channel_layouts_unref);
}
int ff_set_common_samplerates(AVFilterContext *ctx,
AVFilterFormats *samplerates)
{
SET_COMMON_FORMATS(ctx, samplerates, in_samplerates, out_samplerates,
- ff_formats_ref, ff_formats_unref, formats);
+ ff_formats_ref, ff_formats_unref);
}
/**
@@ -600,7 +588,7 @@ int ff_set_common_samplerates(AVFilterContext *ctx,
int ff_set_common_formats(AVFilterContext *ctx, AVFilterFormats *formats)
{
SET_COMMON_FORMATS(ctx, formats, in_formats, out_formats,
- ff_formats_ref, ff_formats_unref, formats);
+ ff_formats_ref, ff_formats_unref);
}
int ff_default_query_formats(AVFilterContext *ctx)