Hi, I have attached the patch.
Thanks, Ganesh
From 990253559e14d9075ab6a29cab0991ea2fe4fc3b Mon Sep 17 00:00:00 2001 From: Ganesh Ajjanagadde <gajjanaga...@gmail.com> Date: Sun, 4 Oct 2015 23:39:25 -0400 Subject: [PATCH 1/2] avfilter/all: propagate errors of functions from avfilter/formats Many of the functions from avfilter/formats can return errors, usually AVERROR(ENOMEM). This propagates the return values. All of these were found by using av_warn_unused_result, demonstrating its utility. The second patch in this series adds av_warn_unused_result to avfilter/formats. There are two reasons for this ordering: 1. Applying the other patch first will result in a huge number of noisy warnings. This patch first corrects the behavior, so that the second patch does not trigger any "warning regressions". 2. I have currently used av_warn_unused_result liberally in the second patch, since I see no loss and only benefits as outlined in its justification. However, a policy should be adopted regarding when to use av_warn_unused_result, and consensus may be difficult to achieve. Tested with FATE. I am least sure of the changes to avfilter/filtergraph, since I don't know what/how reduce_format is intended to behave and how it should react to errors. Signed-off-by: Ganesh Ajjanagadde <gajjanaga...@gmail.com> --- libavfilter/aeval.c | 33 ++++++++++++++++++++------- libavfilter/af_aformat.c | 14 +++++++----- libavfilter/af_agate.c | 3 ++- libavfilter/af_amerge.c | 33 ++++++++++++++++++++------- libavfilter/af_amix.c | 8 +++++-- libavfilter/af_aresample.c | 35 ++++++++++++++++++++++++----- libavfilter/af_astreamsync.c | 25 +++++++++++++++------ libavfilter/af_channelmap.c | 21 ++++++++++++----- libavfilter/af_channelsplit.c | 21 +++++++++++------ libavfilter/af_earwax.c | 20 ++++++++++++----- libavfilter/af_extrastereo.c | 17 ++++++++++---- libavfilter/af_join.c | 20 ++++++++++++----- libavfilter/af_pan.c | 26 ++++++++++++++++----- libavfilter/af_replaygain.c | 29 +++++++++++++++++------- libavfilter/af_resample.c | 46 ++++++++++++++++++++++++++++---------- libavfilter/af_sidechaincompress.c | 19 ++++++++++++---- libavfilter/af_stereotools.c | 17 ++++++++++---- libavfilter/af_stereowiden.c | 16 +++++++++---- libavfilter/asrc_anullsrc.c | 8 ++++--- libavfilter/asrc_flite.c | 23 ++++++++++++++----- libavfilter/avf_aphasemeter.c | 24 +++++++++++++++----- libavfilter/avf_avectorscope.c | 23 ++++++++++++++----- libavfilter/avf_concat.c | 32 +++++++++++++++++++++----- libavfilter/avf_showcqt.c | 21 +++++++++++++---- libavfilter/avf_showfreqs.c | 21 +++++++++++++---- libavfilter/avf_showspectrum.c | 21 +++++++++++++---- libavfilter/avf_showvolume.c | 21 +++++++++++++---- libavfilter/avf_showwaves.c | 21 +++++++++++++---- libavfilter/avfiltergraph.c | 29 +++++++++++++++++------- libavfilter/buffersink.c | 21 ++++++++++++----- libavfilter/buffersrc.c | 33 +++++++++++++++++++-------- libavfilter/drawutils.c | 6 +++-- libavfilter/f_drawgraph.c | 6 ++++- libavfilter/f_ebur128.c | 27 ++++++++++++++++------ libavfilter/formats.c | 15 ++++++++++--- libavfilter/src_movie.c | 16 ++++++++----- libavfilter/vf_alphamerge.c | 23 ++++++++++++++----- libavfilter/vf_boxblur.c | 13 +++++++---- libavfilter/vf_crop.c | 13 +++++++---- libavfilter/vf_detelecine.c | 13 +++++++---- libavfilter/vf_displace.c | 4 +++- libavfilter/vf_elbg.c | 6 +++-- libavfilter/vf_extractplanes.c | 8 ++++--- libavfilter/vf_fieldorder.c | 7 ++++-- libavfilter/vf_frei0r.c | 12 +++++++--- libavfilter/vf_hflip.c | 13 +++++++---- libavfilter/vf_histogram.c | 7 ++++-- libavfilter/vf_il.c | 14 ++++++++---- libavfilter/vf_maskedmerge.c | 3 +-- libavfilter/vf_mergeplanes.c | 22 +++++++++++++----- libavfilter/vf_neighbor.c | 3 +-- libavfilter/vf_noise.c | 11 ++++++--- libavfilter/vf_overlay.c | 36 ++++++++++++++++++++--------- libavfilter/vf_palettegen.c | 11 +++++++-- libavfilter/vf_paletteuse.c | 16 ++++++++++--- libavfilter/vf_scale.c | 9 ++++++-- libavfilter/vf_showpalette.c | 11 +++++++-- libavfilter/vf_stack.c | 13 +++++++---- libavfilter/vf_swapuv.c | 12 ++++++---- libavfilter/vf_telecine.c | 13 +++++++---- libavfilter/vf_transpose.c | 13 +++++++---- libavfilter/vf_vectorscope.c | 8 ++++--- libavfilter/vsrc_life.c | 6 ++++- 63 files changed, 812 insertions(+), 279 deletions(-) diff --git a/libavfilter/aeval.c b/libavfilter/aeval.c index b6c420a..c10e2af 100644 --- a/libavfilter/aeval.c +++ b/libavfilter/aeval.c @@ -350,36 +350,53 @@ static int aeval_query_formats(AVFilterContext *ctx) static const enum AVSampleFormat sample_fmts[] = { AV_SAMPLE_FMT_DBLP, AV_SAMPLE_FMT_NONE }; + int ret; // inlink supports any channel layout layouts = ff_all_channel_counts(); - ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts); + if (!layouts) + return AVERROR(ENOMEM); + if ((ret = ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } if (eval->same_chlayout) { layouts = ff_all_channel_counts(); if (!layouts) return AVERROR(ENOMEM); - ff_set_common_channel_layouts(ctx, layouts); + if ((ret = ff_set_common_channel_layouts(ctx, layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } } else { // outlink supports only requested output channel layout layouts = NULL; - ff_add_channel_layout(&layouts, + if ((ret = ff_add_channel_layout(&layouts, eval->out_channel_layout ? eval->out_channel_layout : - FF_COUNT2LAYOUT(eval->nb_channels)); - ff_channel_layouts_ref(layouts, &outlink->in_channel_layouts); + FF_COUNT2LAYOUT(eval->nb_channels))) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } + if ((ret = ff_channel_layouts_ref(layouts, &outlink->in_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } } formats = ff_make_format_list(sample_fmts); if (!formats) return AVERROR(ENOMEM); - ff_set_common_formats(ctx, formats); + if ((ret = ff_set_common_formats(ctx, formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } formats = ff_all_samplerates(); if (!formats) return AVERROR(ENOMEM); - ff_set_common_samplerates(ctx, formats); - return 0; + return ff_set_common_samplerates(ctx, formats); } static int aeval_config_output(AVFilterLink *outlink) diff --git a/libavfilter/af_aformat.c b/libavfilter/af_aformat.c index 4fdcb09..fbe09aa 100644 --- a/libavfilter/af_aformat.c +++ b/libavfilter/af_aformat.c @@ -57,9 +57,10 @@ static const AVOption aformat_options[] = { AVFILTER_DEFINE_CLASS(aformat); -#define PARSE_FORMATS(str, type, list, add_to_list, get_fmt, none, desc) \ +#define PARSE_FORMATS(str, type, list, add_to_list, unref, get_fmt, none, desc) \ do { \ char *next, *cur = str, sep; \ + int ret; \ \ if (str && strchr(str, ',')) { \ av_log(ctx, AV_LOG_WARNING, "This syntax is deprecated, use '|' to "\ @@ -78,7 +79,10 @@ do { \ av_log(ctx, AV_LOG_ERROR, "Error parsing " desc ": %s.\n", cur);\ return AVERROR(EINVAL); \ } \ - add_to_list(&list, fmt); \ + if ((ret = add_to_list(&list, fmt)) < 0) { \ + unref(&list); \ + return ret; \ + } \ \ cur = next; \ } \ @@ -95,11 +99,11 @@ static av_cold int init(AVFilterContext *ctx) AFormatContext *s = ctx->priv; PARSE_FORMATS(s->formats_str, enum AVSampleFormat, s->formats, - ff_add_format, av_get_sample_fmt, AV_SAMPLE_FMT_NONE, "sample format"); - PARSE_FORMATS(s->sample_rates_str, int, s->sample_rates, ff_add_format, + ff_add_format, ff_formats_unref, av_get_sample_fmt, AV_SAMPLE_FMT_NONE, "sample format"); + PARSE_FORMATS(s->sample_rates_str, int, s->sample_rates, ff_add_format, ff_formats_unref, get_sample_rate, 0, "sample rate"); PARSE_FORMATS(s->channel_layouts_str, uint64_t, s->channel_layouts, - ff_add_channel_layout, av_get_channel_layout, 0, + ff_add_channel_layout, ff_channel_layouts_unref, av_get_channel_layout, 0, "channel layout"); return 0; diff --git a/libavfilter/af_agate.c b/libavfilter/af_agate.c index 46ee226..a8dd161 100644 --- a/libavfilter/af_agate.c +++ b/libavfilter/af_agate.c @@ -77,7 +77,8 @@ static int query_formats(AVFilterContext *ctx) AVFilterChannelLayouts *layouts; int ret; - ff_add_format(&formats, AV_SAMPLE_FMT_DBL); + if ((ret = ff_add_format(&formats, AV_SAMPLE_FMT_DBL)) < 0) + return ret; ret = ff_set_common_formats(ctx, formats); if (ret < 0) return ret; diff --git a/libavfilter/af_amerge.c b/libavfilter/af_amerge.c index 410d613..cc26e3e 100644 --- a/libavfilter/af_amerge.c +++ b/libavfilter/af_amerge.c @@ -78,7 +78,7 @@ static int query_formats(AVFilterContext *ctx) int64_t inlayout[SWR_CH_MAX], outlayout = 0; AVFilterFormats *formats; AVFilterChannelLayouts *layouts; - int i, overlap = 0, nb_ch = 0; + int i, ret, overlap = 0, nb_ch = 0; for (i = 0; i < s->nb_inputs; i++) { if (!ctx->inputs[i]->in_channel_layouts || @@ -125,17 +125,34 @@ static int query_formats(AVFilterContext *ctx) *(route[i]++) = out_ch_number++; } formats = ff_make_format_list(ff_packed_sample_fmts_array); - ff_set_common_formats(ctx, formats); + if (!formats) + return AVERROR(ENOMEM); + if ((ret = ff_set_common_formats(ctx, formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } for (i = 0; i < s->nb_inputs; i++) { layouts = NULL; - ff_add_channel_layout(&layouts, inlayout[i]); - ff_channel_layouts_ref(layouts, &ctx->inputs[i]->out_channel_layouts); + if ((ret = ff_add_channel_layout(&layouts, inlayout[i])) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } + if ((ret = ff_channel_layouts_ref(layouts, &ctx->inputs[i]->out_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } } layouts = NULL; - ff_add_channel_layout(&layouts, outlayout); - ff_channel_layouts_ref(layouts, &ctx->outputs[0]->in_channel_layouts); - ff_set_common_samplerates(ctx, ff_all_samplerates()); - return 0; + if ((ret = ff_add_channel_layout(&layouts, outlayout)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } + if ((ret = ff_channel_layouts_ref(layouts, &ctx->outputs[0]->in_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } + + return ff_set_common_samplerates(ctx, ff_all_samplerates()); } static int config_output(AVFilterLink *outlink) diff --git a/libavfilter/af_amix.c b/libavfilter/af_amix.c index 9a3cbd4..4957577 100644 --- a/libavfilter/af_amix.c +++ b/libavfilter/af_amix.c @@ -541,8 +541,12 @@ static int query_formats(AVFilterContext *ctx) if (!layouts) return AVERROR(ENOMEM); - ff_add_format(&formats, AV_SAMPLE_FMT_FLT); - ff_add_format(&formats, AV_SAMPLE_FMT_FLTP); + if ((ret = ff_add_format(&formats, AV_SAMPLE_FMT_FLT)) < 0) + return ret; + if ((ret = ff_add_format(&formats, AV_SAMPLE_FMT_FLTP)) < 0) { + ff_formats_unref(&formats); + return ret; + } ret = ff_set_common_formats(ctx, formats); if (ret < 0) return ret; diff --git a/libavfilter/af_aresample.c b/libavfilter/af_aresample.c index f6fdd08..15c8624 100644 --- a/libavfilter/af_aresample.c +++ b/libavfilter/af_aresample.c @@ -89,6 +89,7 @@ static int query_formats(AVFilterContext *ctx) AVFilterFormats *in_formats, *out_formats; AVFilterFormats *in_samplerates, *out_samplerates; AVFilterChannelLayouts *in_layouts, *out_layouts; + int ret; av_opt_get_sample_fmt(aresample->swr, "osf", 0, &out_format); av_opt_get_int(aresample->swr, "osr", 0, &out_rate); @@ -97,17 +98,26 @@ static int query_formats(AVFilterContext *ctx) in_formats = ff_all_formats(AVMEDIA_TYPE_AUDIO); if (!in_formats) return AVERROR(ENOMEM); - ff_formats_ref (in_formats, &inlink->out_formats); + if ((ret = ff_formats_ref(in_formats, &inlink->out_formats)) < 0) { + ff_formats_unref(&in_formats); + return ret; + } in_samplerates = ff_all_samplerates(); if (!in_samplerates) return AVERROR(ENOMEM); - ff_formats_ref (in_samplerates, &inlink->out_samplerates); + if ((ret = ff_formats_ref(in_samplerates, &inlink->out_samplerates)) < 0) { + ff_formats_unref(&in_samplerates); + return ret; + } in_layouts = ff_all_channel_counts(); if (!in_layouts) return AVERROR(ENOMEM); - ff_channel_layouts_ref(in_layouts, &inlink->out_channel_layouts); + if ((ret = ff_channel_layouts_ref(in_layouts, &inlink->out_channel_layouts)) < 0) { + ff_channel_layouts_unref(&in_layouts); + return ret; + } if(out_rate > 0) { int ratelist[] = { out_rate, -1 }; @@ -120,21 +130,34 @@ static int query_formats(AVFilterContext *ctx) return AVERROR(ENOMEM); } - ff_formats_ref(out_samplerates, &outlink->in_samplerates); + if ((ret = ff_formats_ref(out_samplerates, &outlink->in_samplerates)) < 0) { + ff_formats_unref(&out_samplerates); + return ret; + } if(out_format != AV_SAMPLE_FMT_NONE) { int formatlist[] = { out_format, -1 }; out_formats = ff_make_format_list(formatlist); } else out_formats = ff_all_formats(AVMEDIA_TYPE_AUDIO); - ff_formats_ref(out_formats, &outlink->in_formats); + if (!out_formats) + return AVERROR(ENOMEM); + if ((ret = ff_formats_ref(out_formats, &outlink->in_formats)) < 0) { + ff_formats_unref(&out_formats); + return ret; + } if(out_layout) { int64_t layout_list[] = { out_layout, -1 }; out_layouts = avfilter_make_format64_list(layout_list); } else out_layouts = ff_all_channel_counts(); - ff_channel_layouts_ref(out_layouts, &outlink->in_channel_layouts); + if (!out_layouts) + return AVERROR(ENOMEM); + if ((ret = ff_channel_layouts_ref(out_layouts, &outlink->in_channel_layouts)) < 0) { + ff_channel_layouts_unref(&out_layouts); + return ret; + } return 0; } diff --git a/libavfilter/af_astreamsync.c b/libavfilter/af_astreamsync.c index becfe34..d260b41 100644 --- a/libavfilter/af_astreamsync.c +++ b/libavfilter/af_astreamsync.c @@ -89,20 +89,31 @@ static av_cold int init(AVFilterContext *ctx) static int query_formats(AVFilterContext *ctx) { - int i; + int i, ret; AVFilterFormats *formats, *rates; AVFilterChannelLayouts *layouts; for (i = 0; i < 2; i++) { formats = ctx->inputs[i]->in_formats; - ff_formats_ref(formats, &ctx->inputs[i]->out_formats); - ff_formats_ref(formats, &ctx->outputs[i]->in_formats); + if ((ret = ff_formats_ref(formats, &ctx->inputs[i]->out_formats)) < 0 || + (ret = ff_formats_ref(formats, &ctx->outputs[i]->in_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } rates = ff_all_samplerates(); - ff_formats_ref(rates, &ctx->inputs[i]->out_samplerates); - ff_formats_ref(rates, &ctx->outputs[i]->in_samplerates); + if (!rates) + return AVERROR(ENOMEM); + if ((ret = ff_formats_ref(rates, &ctx->inputs[i]->out_samplerates)) < 0 || + (ret = ff_formats_ref(rates, &ctx->outputs[i]->in_samplerates)) < 0) { + ff_formats_unref(&rates); + return ret; + } layouts = ctx->inputs[i]->in_channel_layouts; - ff_channel_layouts_ref(layouts, &ctx->inputs[i]->out_channel_layouts); - ff_channel_layouts_ref(layouts, &ctx->outputs[i]->in_channel_layouts); + if ((ret = ff_channel_layouts_ref(layouts, &ctx->inputs[i]->out_channel_layouts)) < 0 || + (ret = ff_channel_layouts_ref(layouts, &ctx->outputs[i]->in_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } } return 0; } diff --git a/libavfilter/af_channelmap.c b/libavfilter/af_channelmap.c index 37b47b2..b9504ff 100644 --- a/libavfilter/af_channelmap.c +++ b/libavfilter/af_channelmap.c @@ -289,18 +289,29 @@ static int channelmap_query_formats(AVFilterContext *ctx) ChannelMapContext *s = ctx->priv; AVFilterChannelLayouts *layouts; AVFilterChannelLayouts *channel_layouts = NULL; + int ret; layouts = ff_all_channel_layouts(); if (!layouts) return AVERROR(ENOMEM); - ff_add_channel_layout(&channel_layouts, s->output_layout); + if ((ret = ff_add_channel_layout(&channel_layouts, s->output_layout)) < 0) { + ff_channel_layouts_unref(&channel_layouts); + return ret; + } - ff_set_common_formats(ctx, ff_planar_sample_fmts()); - ff_set_common_samplerates(ctx, ff_all_samplerates()); + if ((ret = ff_set_common_formats(ctx, ff_planar_sample_fmts())) < 0 || + (ret = ff_set_common_samplerates(ctx, ff_all_samplerates())) < 0) + return ret; - ff_channel_layouts_ref(layouts, &ctx->inputs[0]->out_channel_layouts); - ff_channel_layouts_ref(channel_layouts, &ctx->outputs[0]->in_channel_layouts); + if ((ret = ff_channel_layouts_ref(layouts, &ctx->inputs[0]->out_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } + if ((ret = ff_channel_layouts_ref(channel_layouts, &ctx->outputs[0]->in_channel_layouts)) < 0) { + ff_channel_layouts_unref(&channel_layouts); + return ret; + } return 0; } diff --git a/libavfilter/af_channelsplit.c b/libavfilter/af_channelsplit.c index b3756e2..fa7fb64 100644 --- a/libavfilter/af_channelsplit.c +++ b/libavfilter/af_channelsplit.c @@ -82,20 +82,27 @@ static int query_formats(AVFilterContext *ctx) { ChannelSplitContext *s = ctx->priv; AVFilterChannelLayouts *in_layouts = NULL; - int i; + int i, ret; - ff_set_common_formats (ctx, ff_planar_sample_fmts()); - ff_set_common_samplerates(ctx, ff_all_samplerates()); + if ((ret = ff_set_common_formats(ctx, ff_planar_sample_fmts())) < 0 || + (ret = ff_set_common_samplerates(ctx, ff_all_samplerates())) < 0) + return ret; - ff_add_channel_layout(&in_layouts, s->channel_layout); - ff_channel_layouts_ref(in_layouts, &ctx->inputs[0]->out_channel_layouts); + if ((ret = ff_add_channel_layout(&in_layouts, s->channel_layout)) < 0 || + (ret = ff_channel_layouts_ref(in_layouts, &ctx->inputs[0]->out_channel_layouts)) < 0) { + ff_channel_layouts_unref(&in_layouts); + return ret; + } for (i = 0; i < ctx->nb_outputs; i++) { AVFilterChannelLayouts *out_layouts = NULL; uint64_t channel = av_channel_layout_extract_channel(s->channel_layout, i); - ff_add_channel_layout(&out_layouts, channel); - ff_channel_layouts_ref(out_layouts, &ctx->outputs[i]->in_channel_layouts); + if ((ret = ff_add_channel_layout(&out_layouts, channel)) < 0 || + (ret = ff_channel_layouts_ref(out_layouts, &ctx->outputs[i]->in_channel_layouts)) < 0) { + ff_channel_layouts_unref(&out_layouts); + return ret; + } } return 0; diff --git a/libavfilter/af_earwax.c b/libavfilter/af_earwax.c index c310997..3331e9c 100644 --- a/libavfilter/af_earwax.c +++ b/libavfilter/af_earwax.c @@ -78,15 +78,25 @@ typedef struct { static int query_formats(AVFilterContext *ctx) { static const int sample_rates[] = { 44100, -1 }; + int ret; AVFilterFormats *formats = NULL; AVFilterChannelLayouts *layout = NULL; - ff_add_format(&formats, AV_SAMPLE_FMT_S16); - ff_set_common_formats(ctx, formats); - ff_add_channel_layout(&layout, AV_CH_LAYOUT_STEREO); - ff_set_common_channel_layouts(ctx, layout); - ff_set_common_samplerates(ctx, ff_make_format_list(sample_rates)); + if ((ret = ff_add_format(&formats, AV_SAMPLE_FMT_S16)) < 0) + return ret; + if ((ret = ff_set_common_formats(ctx, formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } + if ((ret = ff_add_channel_layout(&layout, AV_CH_LAYOUT_STEREO)) < 0) + return ret; + if ((ret = ff_set_common_channel_layouts(ctx, layout)) < 0) { + ff_channel_layouts_unref(&layout); + return ret; + } + if ((ret = ff_set_common_samplerates(ctx, ff_make_format_list(sample_rates))) < 0) + return ret; return 0; } diff --git a/libavfilter/af_extrastereo.c b/libavfilter/af_extrastereo.c index b4f8c85..4742544 100644 --- a/libavfilter/af_extrastereo.c +++ b/libavfilter/af_extrastereo.c @@ -45,11 +45,20 @@ static int query_formats(AVFilterContext *ctx) { AVFilterFormats *formats = NULL; AVFilterChannelLayouts *layout = NULL; + int ret; - ff_add_format(&formats, AV_SAMPLE_FMT_FLT); - ff_set_common_formats(ctx, formats); - ff_add_channel_layout(&layout, AV_CH_LAYOUT_STEREO); - ff_set_common_channel_layouts(ctx, layout); + if ((ret = ff_add_format(&formats, AV_SAMPLE_FMT_FLT)) < 0) + return ret; + if ((ret = ff_set_common_formats(ctx, formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } + if ((ret = ff_add_channel_layout(&layout, AV_CH_LAYOUT_STEREO)) < 0) + return ret; + if ((ret = ff_set_common_channel_layouts(ctx, layout)) < 0) { + ff_channel_layouts_unref(&layout); + return ret; + } formats = ff_all_samplerates(); if (!formats) diff --git a/libavfilter/af_join.c b/libavfilter/af_join.c index 4c1f6a0..d6fd52a 100644 --- a/libavfilter/af_join.c +++ b/libavfilter/af_join.c @@ -245,20 +245,28 @@ static int join_query_formats(AVFilterContext *ctx) { JoinContext *s = ctx->priv; AVFilterChannelLayouts *layouts = NULL; - int i; + int i, ret; - ff_add_channel_layout(&layouts, s->channel_layout); - ff_channel_layouts_ref(layouts, &ctx->outputs[0]->in_channel_layouts); + if ((ret = ff_add_channel_layout(&layouts, s->channel_layout)) < 0) + return ret; + if ((ret = ff_channel_layouts_ref(layouts, &ctx->outputs[0]->in_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } for (i = 0; i < ctx->nb_inputs; i++) { layouts = ff_all_channel_layouts(); if (!layouts) return AVERROR(ENOMEM); - ff_channel_layouts_ref(layouts, &ctx->inputs[i]->out_channel_layouts); + if ((ret = ff_channel_layouts_ref(layouts, &ctx->inputs[i]->out_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } } - ff_set_common_formats (ctx, ff_planar_sample_fmts()); - ff_set_common_samplerates(ctx, ff_all_samplerates()); + if ((ret = ff_set_common_formats(ctx, ff_planar_sample_fmts())) < 0 || + (ret = ff_set_common_samplerates(ctx, ff_all_samplerates())) < 0) + return ret; return 0; } diff --git a/libavfilter/af_pan.c b/libavfilter/af_pan.c index 9117cc0..eb45061 100644 --- a/libavfilter/af_pan.c +++ b/libavfilter/af_pan.c @@ -227,26 +227,40 @@ static int query_formats(AVFilterContext *ctx) AVFilterLink *outlink = ctx->outputs[0]; AVFilterFormats *formats = NULL; AVFilterChannelLayouts *layouts; + int ret; pan->pure_gains = are_gains_pure(pan); /* libswr supports any sample and packing formats */ - ff_set_common_formats(ctx, ff_all_formats(AVMEDIA_TYPE_AUDIO)); + if ((ret = ff_set_common_formats(ctx, ff_all_formats(AVMEDIA_TYPE_AUDIO))) < 0) + return ret; formats = ff_all_samplerates(); if (!formats) return AVERROR(ENOMEM); - ff_set_common_samplerates(ctx, formats); + if ((ret = ff_set_common_samplerates(ctx, formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } // inlink supports any channel layout layouts = ff_all_channel_counts(); - ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts); + if (!layouts) + return AVERROR(ENOMEM); + if ((ret = ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } // outlink supports only requested output channel layout layouts = NULL; - ff_add_channel_layout(&layouts, + if ((ret = ff_add_channel_layout(&layouts, pan->out_channel_layout ? pan->out_channel_layout : - FF_COUNT2LAYOUT(pan->nb_output_channels)); - ff_channel_layouts_ref(layouts, &outlink->in_channel_layouts); + FF_COUNT2LAYOUT(pan->nb_output_channels))) < 0) + return ret; + if ((ret = ff_channel_layouts_ref(layouts, &outlink->in_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } return 0; } diff --git a/libavfilter/af_replaygain.c b/libavfilter/af_replaygain.c index c419857..20e2a6a 100644 --- a/libavfilter/af_replaygain.c +++ b/libavfilter/af_replaygain.c @@ -323,17 +323,30 @@ static int query_formats(AVFilterContext *ctx) { AVFilterFormats *formats = NULL; AVFilterChannelLayouts *layout = NULL; - int i; + int i, ret; - ff_add_format(&formats, AV_SAMPLE_FMT_FLT); - ff_set_common_formats(ctx, formats); - ff_add_channel_layout(&layout, AV_CH_LAYOUT_STEREO); - ff_set_common_channel_layouts(ctx, layout); + if ((ret = ff_add_format(&formats, AV_SAMPLE_FMT_FLT)) < 0) + return ret; + if ((ret = ff_set_common_formats(ctx, formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } + if ((ret = ff_add_channel_layout(&layout, AV_CH_LAYOUT_STEREO)) < 0) + return ret; + if ((ret = ff_set_common_channel_layouts(ctx, layout)) < 0) { + ff_channel_layouts_unref(&layout); + return ret; + } formats = NULL; - for (i = 0; i < FF_ARRAY_ELEMS(freqinfos); i++) - ff_add_format(&formats, freqinfos[i].sample_rate); - ff_set_common_samplerates(ctx, formats); + for (i = 0; i < FF_ARRAY_ELEMS(freqinfos); i++) { + if ((ret = ff_add_format(&formats, freqinfos[i].sample_rate)) < 0) { + ff_formats_unref(&formats); + return ret; + } + } + if ((ret = ff_set_common_samplerates(ctx, formats)) < 0) + return ret; return 0; } diff --git a/libavfilter/af_resample.c b/libavfilter/af_resample.c index 375f480..87f79e3 100644 --- a/libavfilter/af_resample.c +++ b/libavfilter/af_resample.c @@ -90,22 +90,44 @@ static int query_formats(AVFilterContext *ctx) { AVFilterLink *inlink = ctx->inputs[0]; AVFilterLink *outlink = ctx->outputs[0]; + AVFilterFormats *in_formats, *out_formats, *in_samplerates, *out_samplerates; + AVFilterChannelLayouts *in_layouts, *out_layouts; + int ret; - AVFilterFormats *in_formats = ff_all_formats(AVMEDIA_TYPE_AUDIO); - AVFilterFormats *out_formats = ff_all_formats(AVMEDIA_TYPE_AUDIO); - AVFilterFormats *in_samplerates = ff_all_samplerates(); - AVFilterFormats *out_samplerates = ff_all_samplerates(); - AVFilterChannelLayouts *in_layouts = ff_all_channel_layouts(); - AVFilterChannelLayouts *out_layouts = ff_all_channel_layouts(); + if (!(in_formats = ff_all_formats(AVMEDIA_TYPE_AUDIO)) || + !(out_formats = ff_all_formats(AVMEDIA_TYPE_AUDIO)) || + !(in_samplerates = ff_all_samplerates()) || + !(out_samplerates = ff_all_samplerates()) || + !(in_layouts = ff_all_channel_layouts()) || + !(out_layouts = ff_all_channel_layouts())) + return AVERROR(ENOMEM); - ff_formats_ref(in_formats, &inlink->out_formats); - ff_formats_ref(out_formats, &outlink->in_formats); + if ((ret = ff_formats_ref(in_formats, &inlink->out_formats)) < 0) { + ff_formats_unref(&in_formats); + return ret; + } + if ((ret = ff_formats_ref(out_formats, &outlink->in_formats)) < 0) { + ff_formats_unref(&out_formats); + return ret; + } - ff_formats_ref(in_samplerates, &inlink->out_samplerates); - ff_formats_ref(out_samplerates, &outlink->in_samplerates); + if ((ret = ff_formats_ref(in_samplerates, &inlink->out_samplerates)) < 0) { + ff_formats_unref(&in_samplerates); + return ret; + } + if ((ret = ff_formats_ref(out_samplerates, &outlink->in_samplerates)) < 0) { + ff_formats_unref(&out_samplerates); + return ret; + } - ff_channel_layouts_ref(in_layouts, &inlink->out_channel_layouts); - ff_channel_layouts_ref(out_layouts, &outlink->in_channel_layouts); + if ((ret = ff_channel_layouts_ref(in_layouts, &inlink->out_channel_layouts)) < 0) { + ff_channel_layouts_unref(&in_layouts); + return ret; + } + if ((ret = ff_channel_layouts_ref(out_layouts, &outlink->in_channel_layouts)) < 0) { + ff_channel_layouts_unref(&out_layouts); + return ret; + } return 0; } diff --git a/libavfilter/af_sidechaincompress.c b/libavfilter/af_sidechaincompress.c index b8a81fc..47e1f39 100644 --- a/libavfilter/af_sidechaincompress.c +++ b/libavfilter/af_sidechaincompress.c @@ -229,24 +229,35 @@ static int query_formats(AVFilterContext *ctx) return AVERROR(EAGAIN); } - ff_add_channel_layout(&layouts, ctx->inputs[0]->in_channel_layouts->channel_layouts[0]); + if ((ret = ff_add_channel_layout(&layouts, ctx->inputs[0]->in_channel_layouts->channel_layouts[0])) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } if (!layouts) return AVERROR(ENOMEM); - ff_channel_layouts_ref(layouts, &ctx->outputs[0]->in_channel_layouts); + if ((ret = ff_channel_layouts_ref(layouts, &ctx->outputs[0]->in_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } for (i = 0; i < 2; i++) { layouts = ff_all_channel_counts(); if (!layouts) return AVERROR(ENOMEM); - ff_channel_layouts_ref(layouts, &ctx->inputs[i]->out_channel_layouts); + if ((ret = ff_channel_layouts_ref(layouts, &ctx->inputs[i]->out_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } } formats = ff_make_format_list(sample_fmts); if (!formats) return AVERROR(ENOMEM); ret = ff_set_common_formats(ctx, formats); - if (ret < 0) + if (ret < 0) { + ff_formats_unref(&formats); return ret; + } formats = ff_all_samplerates(); if (!formats) diff --git a/libavfilter/af_stereotools.c b/libavfilter/af_stereotools.c index f4030b7..c926e4f 100644 --- a/libavfilter/af_stereotools.c +++ b/libavfilter/af_stereotools.c @@ -92,11 +92,20 @@ static int query_formats(AVFilterContext *ctx) { AVFilterFormats *formats = NULL; AVFilterChannelLayouts *layout = NULL; + int ret; - ff_add_format(&formats, AV_SAMPLE_FMT_DBL); - ff_set_common_formats(ctx, formats); - ff_add_channel_layout(&layout, AV_CH_LAYOUT_STEREO); - ff_set_common_channel_layouts(ctx, layout); + if ((ret = ff_add_format(&formats, AV_SAMPLE_FMT_DBL)) < 0) + return ret; + if ((ret = ff_set_common_formats(ctx, formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } + if ((ret = ff_add_channel_layout(&layout, AV_CH_LAYOUT_STEREO)) < 0) + return ret; + if ((ret = ff_set_common_channel_layouts(ctx, layout)) < 0) { + ff_channel_layouts_unref(&layout); + return ret; + } formats = ff_all_samplerates(); if (!formats) diff --git a/libavfilter/af_stereowiden.c b/libavfilter/af_stereowiden.c index 8f671ca..38f81f1 100644 --- a/libavfilter/af_stereowiden.c +++ b/libavfilter/af_stereowiden.c @@ -55,11 +55,19 @@ static int query_formats(AVFilterContext *ctx) { AVFilterFormats *formats = NULL; AVFilterChannelLayouts *layout = NULL; + int ret; - ff_add_format(&formats, AV_SAMPLE_FMT_FLT); - ff_set_common_formats(ctx, formats); - ff_add_channel_layout(&layout, AV_CH_LAYOUT_STEREO); - ff_set_common_channel_layouts(ctx, layout); + if ((ret = ff_add_format(&formats, AV_SAMPLE_FMT_FLT)) < 0) + return ret; + if ((ret = ff_set_common_formats(ctx, formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } + if ((ret = ff_add_channel_layout(&layout, AV_CH_LAYOUT_STEREO)) < 0) + return ret; + if ((ret = ff_set_common_channel_layouts(ctx, layout)) < 0) { + ff_channel_layouts_unref(&layout); + } formats = ff_all_samplerates(); if (!formats) diff --git a/libavfilter/asrc_anullsrc.c b/libavfilter/asrc_anullsrc.c index 28d4500..338464f 100644 --- a/libavfilter/asrc_anullsrc.c +++ b/libavfilter/asrc_anullsrc.c @@ -80,10 +80,12 @@ static int query_formats(AVFilterContext *ctx) ANullContext *null = ctx->priv; int64_t chlayouts[] = { null->channel_layout, -1 }; int sample_rates[] = { null->sample_rate, -1 }; + int ret; - ff_set_common_formats (ctx, ff_all_formats(AVMEDIA_TYPE_AUDIO)); - ff_set_common_channel_layouts(ctx, avfilter_make_format64_list(chlayouts)); - ff_set_common_samplerates (ctx, ff_make_format_list(sample_rates)); + if ((ret = ff_set_common_formats(ctx, ff_all_formats(AVMEDIA_TYPE_AUDIO))) < 0 || + (ret = ff_set_common_channel_layouts(ctx, avfilter_make_format64_list(chlayouts))) < 0 || + (ret = ff_set_common_samplerates(ctx, ff_make_format_list(sample_rates))) < 0) + return ret; return 0; } diff --git a/libavfilter/asrc_flite.c b/libavfilter/asrc_flite.c index a99f2dc..b5f202a 100644 --- a/libavfilter/asrc_flite.c +++ b/libavfilter/asrc_flite.c @@ -205,18 +205,29 @@ static av_cold void uninit(AVFilterContext *ctx) static int query_formats(AVFilterContext *ctx) { FliteContext *flite = ctx->priv; + int ret; AVFilterChannelLayouts *chlayouts = NULL; int64_t chlayout = av_get_default_channel_layout(flite->wave->num_channels); AVFilterFormats *sample_formats = NULL; AVFilterFormats *sample_rates = NULL; - ff_add_channel_layout(&chlayouts, chlayout); - ff_set_common_channel_layouts(ctx, chlayouts); - ff_add_format(&sample_formats, AV_SAMPLE_FMT_S16); - ff_set_common_formats(ctx, sample_formats); - ff_add_format(&sample_rates, flite->wave->sample_rate); - ff_set_common_samplerates (ctx, sample_rates); + if ((ret = ff_add_channel_layout(&chlayouts, chlayout)) < 0) + return ret; + if ((ret = ff_set_common_channel_layouts(ctx, chlayouts)) < 0) { + ff_channel_layouts_unref(&chlayouts); + return ret; + } + if ((ret = ff_add_format(&sample_formats, AV_SAMPLE_FMT_S16)) < 0) + return ret; + if ((ret = ff_set_common_formats(ctx, sample_formats)) < 0) { + ff_formats_unref(&sample_formats); + return ret; + } + if ((ret = ff_add_format(&sample_rates, flite->wave->sample_rate)) < 0) + return ret; + if ((ret = ff_set_common_samplerates (ctx, sample_rates)) < 0) + return ret; return 0; } diff --git a/libavfilter/avf_aphasemeter.c b/libavfilter/avf_aphasemeter.c index 5a470cf..941d948 100644 --- a/libavfilter/avf_aphasemeter.c +++ b/libavfilter/avf_aphasemeter.c @@ -70,24 +70,38 @@ static int query_formats(AVFilterContext *ctx) AVFilterLink *outlink = ctx->outputs[0]; static const enum AVSampleFormat sample_fmts[] = { AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_NONE }; static const enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_RGBA, AV_PIX_FMT_NONE }; + int ret; formats = ff_make_format_list(sample_fmts); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &inlink->out_formats); + if ((ret = ff_formats_ref(formats, &inlink->out_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } - ff_add_channel_layout(&layout, AV_CH_LAYOUT_STEREO); - ff_channel_layouts_ref(layout, &inlink->out_channel_layouts); + if ((ret = ff_add_channel_layout(&layout, AV_CH_LAYOUT_STEREO)) < 0) + return ret; + if ((ret = ff_channel_layouts_ref(layout, &inlink->out_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layout); + return ret; + } formats = ff_all_samplerates(); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &inlink->out_samplerates); + if ((ret = ff_formats_ref(formats, &inlink->out_samplerates)) < 0) { + ff_formats_unref(&formats); + return ret; + } formats = ff_make_format_list(pix_fmts); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &outlink->in_formats); + if ((ret = ff_formats_ref(formats, &outlink->in_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } return 0; } diff --git a/libavfilter/avf_avectorscope.c b/libavfilter/avf_avectorscope.c index bc9e235..a8f6371 100644 --- a/libavfilter/avf_avectorscope.c +++ b/libavfilter/avf_avectorscope.c @@ -126,24 +126,37 @@ static int query_formats(AVFilterContext *ctx) AVFilterLink *outlink = ctx->outputs[0]; static const enum AVSampleFormat sample_fmts[] = { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_NONE }; static const enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_RGBA, AV_PIX_FMT_NONE }; + int ret; formats = ff_make_format_list(sample_fmts); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &inlink->out_formats); + if ((ret = ff_formats_ref(formats, &inlink->out_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } - ff_add_channel_layout(&layout, AV_CH_LAYOUT_STEREO); - ff_channel_layouts_ref(layout, &inlink->out_channel_layouts); + if ((ret = ff_add_channel_layout(&layout, AV_CH_LAYOUT_STEREO)) < 0 || + (ret = ff_channel_layouts_ref(layout, &inlink->out_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layout); + return ret; + } formats = ff_all_samplerates(); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &inlink->out_samplerates); + if ((ret = ff_formats_ref(formats, &inlink->out_samplerates)) < 0) { + ff_formats_unref(&formats); + return ret; + } formats = ff_make_format_list(pix_fmts); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &outlink->in_formats); + if ((ret = ff_formats_ref(formats, &outlink->in_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } return 0; } diff --git a/libavfilter/avf_concat.c b/libavfilter/avf_concat.c index 8d736a4..46a250b 100644 --- a/libavfilter/avf_concat.c +++ b/libavfilter/avf_concat.c @@ -80,6 +80,7 @@ static int query_formats(AVFilterContext *ctx) unsigned type, nb_str, idx0 = 0, idx, str, seg; AVFilterFormats *formats, *rates = NULL; AVFilterChannelLayouts *layouts = NULL; + int ret; for (type = 0; type < TYPE_ALL; type++) { nb_str = cat->nb_streams[type]; @@ -90,24 +91,43 @@ static int query_formats(AVFilterContext *ctx) formats = ff_all_formats(type); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &ctx->outputs[idx]->in_formats); + if ((ret = ff_formats_ref(formats, &ctx->outputs[idx]->in_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } + if (type == AVMEDIA_TYPE_AUDIO) { rates = ff_all_samplerates(); if (!rates) return AVERROR(ENOMEM); - ff_formats_ref(rates, &ctx->outputs[idx]->in_samplerates); + if ((ret = ff_formats_ref(rates, &ctx->outputs[idx]->in_samplerates)) < 0) { + ff_formats_unref(&rates); + return ret; + } layouts = ff_all_channel_layouts(); if (!layouts) return AVERROR(ENOMEM); - ff_channel_layouts_ref(layouts, &ctx->outputs[idx]->in_channel_layouts); + if ((ret = ff_channel_layouts_ref(layouts, &ctx->outputs[idx]->in_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } } /* Set the same formats for each corresponding input */ for (seg = 0; seg < cat->nb_segments; seg++) { - ff_formats_ref(formats, &ctx->inputs[idx]->out_formats); + if ((ret = ff_formats_ref(formats, &ctx->inputs[idx]->out_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } if (type == AVMEDIA_TYPE_AUDIO) { - ff_formats_ref(rates, &ctx->inputs[idx]->out_samplerates); - ff_channel_layouts_ref(layouts, &ctx->inputs[idx]->out_channel_layouts); + if ((ret = ff_formats_ref(rates, &ctx->inputs[idx]->out_samplerates)) < 0) { + ff_formats_unref(&rates); + return ret; + } + if ((ret = ff_channel_layouts_ref(layouts, &ctx->inputs[idx]->out_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } } idx += ctx->nb_outputs; } diff --git a/libavfilter/avf_showcqt.c b/libavfilter/avf_showcqt.c index 7089758..d8c3f6c 100644 --- a/libavfilter/avf_showcqt.c +++ b/libavfilter/avf_showcqt.c @@ -137,28 +137,41 @@ static int query_formats(AVFilterContext *ctx) static const enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_RGB24, AV_PIX_FMT_NONE }; static const int64_t channel_layouts[] = { AV_CH_LAYOUT_STEREO, AV_CH_LAYOUT_STEREO_DOWNMIX, -1 }; static const int samplerates[] = { 44100, 48000, -1 }; + int ret; /* set input audio formats */ formats = ff_make_format_list(sample_fmts); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &inlink->out_formats); + if ((ret = ff_formats_ref(formats, &inlink->out_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } layouts = avfilter_make_format64_list(channel_layouts); if (!layouts) return AVERROR(ENOMEM); - ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts); + if ((ret = ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } formats = ff_make_format_list(samplerates); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &inlink->out_samplerates); + if ((ret = ff_formats_ref(formats, &inlink->out_samplerates)) < 0) { + ff_formats_unref(&formats); + return ret; + } /* set output video format */ formats = ff_make_format_list(pix_fmts); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &outlink->in_formats); + if ((ret = ff_formats_ref(formats, &outlink->in_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } return 0; } diff --git a/libavfilter/avf_showfreqs.c b/libavfilter/avf_showfreqs.c index 8961d3c..bf37b8f 100644 --- a/libavfilter/avf_showfreqs.c +++ b/libavfilter/avf_showfreqs.c @@ -128,28 +128,41 @@ static int query_formats(AVFilterContext *ctx) AVFilterLink *outlink = ctx->outputs[0]; static const enum AVSampleFormat sample_fmts[] = { AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_NONE }; static const enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_RGBA, AV_PIX_FMT_NONE }; + int ret; /* set input audio formats */ formats = ff_make_format_list(sample_fmts); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &inlink->out_formats); + if ((ret = ff_formats_ref(formats, &inlink->out_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } layouts = ff_all_channel_layouts(); if (!layouts) return AVERROR(ENOMEM); - ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts); + if ((ret = ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } formats = ff_all_samplerates(); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &inlink->out_samplerates); + if ((ret = ff_formats_ref(formats, &inlink->out_samplerates)) < 0) { + ff_formats_unref(&formats); + return ret; + } /* set output video format */ formats = ff_make_format_list(pix_fmts); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &outlink->in_formats); + if ((ret = ff_formats_ref(formats, &outlink->in_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } return 0; } diff --git a/libavfilter/avf_showspectrum.c b/libavfilter/avf_showspectrum.c index e29687d..e85b659 100644 --- a/libavfilter/avf_showspectrum.c +++ b/libavfilter/avf_showspectrum.c @@ -127,28 +127,41 @@ static int query_formats(AVFilterContext *ctx) AVFilterLink *outlink = ctx->outputs[0]; static const enum AVSampleFormat sample_fmts[] = { AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_NONE }; static const enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_NONE }; + int ret; /* set input audio formats */ formats = ff_make_format_list(sample_fmts); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &inlink->out_formats); + if ((ret = ff_formats_ref(formats, &inlink->out_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } layouts = ff_all_channel_layouts(); if (!layouts) return AVERROR(ENOMEM); - ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts); + if ((ret = ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } formats = ff_all_samplerates(); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &inlink->out_samplerates); + if ((ret = ff_formats_ref(formats, &inlink->out_samplerates)) < 0) { + ff_formats_unref(&formats); + return ret; + } /* set output video format */ formats = ff_make_format_list(pix_fmts); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &outlink->in_formats); + if ((ret = ff_formats_ref(formats, &outlink->in_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } return 0; } diff --git a/libavfilter/avf_showvolume.c b/libavfilter/avf_showvolume.c index 9accfb0..410f59e 100644 --- a/libavfilter/avf_showvolume.c +++ b/libavfilter/avf_showvolume.c @@ -85,26 +85,39 @@ static int query_formats(AVFilterContext *ctx) AVFilterLink *outlink = ctx->outputs[0]; static const enum AVSampleFormat sample_fmts[] = { AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_NONE }; static const enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_RGBA, AV_PIX_FMT_NONE }; + int ret; formats = ff_make_format_list(sample_fmts); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &inlink->out_formats); + if ((ret = ff_formats_ref(formats, &inlink->out_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } layouts = ff_all_channel_layouts(); if (!layouts) return AVERROR(ENOMEM); - ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts); + if ((ret = ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } formats = ff_all_samplerates(); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &inlink->out_samplerates); + if ((ret = ff_formats_ref(formats, &inlink->out_samplerates)) < 0) { + ff_formats_unref(&formats); + return ret; + } formats = ff_make_format_list(pix_fmts); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &outlink->in_formats); + if ((ret = ff_formats_ref(formats, &outlink->in_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } return 0; } diff --git a/libavfilter/avf_showwaves.c b/libavfilter/avf_showwaves.c index ec5291a..6b521c3 100644 --- a/libavfilter/avf_showwaves.c +++ b/libavfilter/avf_showwaves.c @@ -118,28 +118,41 @@ static int query_formats(AVFilterContext *ctx) AVFilterLink *outlink = ctx->outputs[0]; static const enum AVSampleFormat sample_fmts[] = { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE }; static const enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE }; + int ret; /* set input audio formats */ formats = ff_make_format_list(sample_fmts); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &inlink->out_formats); + if ((ret = ff_formats_ref(formats, &inlink->out_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } layouts = ff_all_channel_layouts(); if (!layouts) return AVERROR(ENOMEM); - ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts); + if ((ret = ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } formats = ff_all_samplerates(); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &inlink->out_samplerates); + if ((ret = ff_formats_ref(formats, &inlink->out_samplerates)) < 0) { + ff_formats_unref(&formats); + return ret; + } /* set output video format */ formats = ff_make_format_list(pix_fmts); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &outlink->in_formats); + if ((ret = ff_formats_ref(formats, &outlink->in_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } return 0; } diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c index b429831..92e75df 100644 --- a/libavfilter/avfiltergraph.c +++ b/libavfilter/avfiltergraph.c @@ -319,16 +319,23 @@ static int filter_query_formats(AVFilterContext *ctx) formats = ff_all_formats(type); if (!formats) return AVERROR(ENOMEM); - ff_set_common_formats(ctx, formats); + if ((ret = ff_set_common_formats(ctx, formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } if (type == AVMEDIA_TYPE_AUDIO) { samplerates = ff_all_samplerates(); if (!samplerates) return AVERROR(ENOMEM); - ff_set_common_samplerates(ctx, samplerates); + if ((ret = ff_set_common_samplerates(ctx, samplerates)) < 0) + return ret; chlayouts = ff_all_channel_layouts(); if (!chlayouts) return AVERROR(ENOMEM); - ff_set_common_channel_layouts(ctx, chlayouts); + if ((ret = ff_set_common_channel_layouts(ctx, chlayouts)) < 0) { + ff_channel_layouts_unref(&chlayouts); + return ret; + } } return 0; } @@ -728,7 +735,7 @@ static int pick_format(AVFilterLink *link, AVFilterLink *ref) return 0; } -#define REDUCE_FORMATS(fmt_type, list_type, list, var, nb, add_format) \ +#define REDUCE_FORMATS(fmt_type, list_type, list, var, nb, add_format, unref_format) \ do { \ for (i = 0; i < filter->nb_inputs; i++) { \ AVFilterLink *link = filter->inputs[i]; \ @@ -748,7 +755,9 @@ do { \ fmts = out_link->in_ ## list; \ \ if (!out_link->in_ ## list->nb) { \ - add_format(&out_link->in_ ##list, fmt); \ + if (add_format(&out_link->in_ ##list, fmt) < 0) { \ + unref_format(&out_link->in_ ##list); \ + } \ ret = 1; \ break; \ } \ @@ -769,9 +778,10 @@ static int reduce_formats_on_filter(AVFilterContext *filter) int i, j, k, ret = 0; REDUCE_FORMATS(int, AVFilterFormats, formats, formats, - nb_formats, ff_add_format); + nb_formats, ff_add_format, ff_formats_unref); +#define UNUSED(x) REDUCE_FORMATS(int, AVFilterFormats, samplerates, formats, - nb_formats, ff_add_format); + nb_formats, ff_add_format, UNUSED); /* reduce channel layouts */ for (i = 0; i < filter->nb_inputs; i++) { @@ -795,7 +805,10 @@ static int reduce_formats_on_filter(AVFilterContext *filter) (!FF_LAYOUT2COUNT(fmt) || fmts->all_counts)) { /* Turn the infinite list into a singleton */ fmts->all_layouts = fmts->all_counts = 0; - ff_add_channel_layout(&outlink->in_channel_layouts, fmt); + if (ff_add_channel_layout(&outlink->in_channel_layouts, fmt) < 0) { + ff_channel_layouts_unref(&outlink->in_channel_layouts); + ret = 1; + } break; } diff --git a/libavfilter/buffersink.c b/libavfilter/buffersink.c index 3206bd9..e6de61f 100644 --- a/libavfilter/buffersink.c +++ b/libavfilter/buffersink.c @@ -306,9 +306,13 @@ static int vsink_query_formats(AVFilterContext *ctx) ff_formats_unref(&formats); return ret; } - ff_set_common_formats(ctx, formats); + if ((ret = ff_set_common_formats(ctx, formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } } else { - ff_default_query_formats(ctx); + if ((ret = ff_default_query_formats(ctx)) < 0) + return ret; } return 0; @@ -350,7 +354,10 @@ static int asink_query_formats(AVFilterContext *ctx) ff_formats_unref(&formats); return ret; } - ff_set_common_formats(ctx, formats); + if ((ret = ff_set_common_formats(ctx, formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } } if (buf->channel_layouts_size || buf->channel_counts_size || @@ -372,7 +379,10 @@ static int asink_query_formats(AVFilterContext *ctx) else if (!(layouts = ff_all_channel_counts())) return AVERROR(ENOMEM); } - ff_set_common_channel_layouts(ctx, layouts); + if ((ret = ff_set_common_channel_layouts(ctx, layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } } if (buf->sample_rates_size) { @@ -382,7 +392,8 @@ static int asink_query_formats(AVFilterContext *ctx) ff_formats_unref(&formats); return ret; } - ff_set_common_samplerates(ctx, formats); + if ((ret = ff_set_common_samplerates(ctx, formats)) < 0) + return ret; } return 0; diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c index 45e219a..3801192 100644 --- a/libavfilter/buffersrc.c +++ b/libavfilter/buffersrc.c @@ -314,23 +314,38 @@ static int query_formats(AVFilterContext *ctx) AVFilterChannelLayouts *channel_layouts = NULL; AVFilterFormats *formats = NULL; AVFilterFormats *samplerates = NULL; + int ret; switch (ctx->outputs[0]->type) { case AVMEDIA_TYPE_VIDEO: - ff_add_format(&formats, c->pix_fmt); - ff_set_common_formats(ctx, formats); + if ((ret = ff_add_format(&formats, c->pix_fmt)) < 0) + return ret; + if ((ret = ff_set_common_formats(ctx, formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } break; case AVMEDIA_TYPE_AUDIO: - ff_add_format(&formats, c->sample_fmt); - ff_set_common_formats(ctx, formats); + if ((ret = ff_add_format(&formats, c->sample_fmt)) < 0) + return ret; + if ((ret = ff_set_common_formats(ctx, formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } - ff_add_format(&samplerates, c->sample_rate); - ff_set_common_samplerates(ctx, samplerates); + if ((ret = ff_add_format(&samplerates, c->sample_rate)) < 0) + return ret; + if ((ret = ff_set_common_samplerates(ctx, samplerates)) < 0) + return ret; - ff_add_channel_layout(&channel_layouts, + if ((ret = ff_add_channel_layout(&channel_layouts, c->channel_layout ? c->channel_layout : - FF_COUNT2LAYOUT(c->channels)); - ff_set_common_channel_layouts(ctx, channel_layouts); + FF_COUNT2LAYOUT(c->channels))) < 0) + return ret; + if ((ret = ff_set_common_channel_layouts(ctx, channel_layouts)) < 0) { + ff_channel_layouts_unref(&channel_layouts); + return ret; + } break; default: return AVERROR(EINVAL); diff --git a/libavfilter/drawutils.c b/libavfilter/drawutils.c index b65d57c..554736e 100644 --- a/libavfilter/drawutils.c +++ b/libavfilter/drawutils.c @@ -532,10 +532,12 @@ AVFilterFormats *ff_draw_supported_pixel_formats(unsigned flags) enum AVPixelFormat i; FFDrawContext draw; AVFilterFormats *fmts = NULL; + int ret; for (i = 0; av_pix_fmt_desc_get(i); i++) - if (ff_draw_init(&draw, i, flags) >= 0) - ff_add_format(&fmts, i); + if (ff_draw_init(&draw, i, flags) >= 0 + && (ret = ff_add_format(&fmts, i)) < 0) + ff_formats_unref(&fmts); return fmts; } diff --git a/libavfilter/f_drawgraph.c b/libavfilter/f_drawgraph.c index 2b9340b..5227183 100644 --- a/libavfilter/f_drawgraph.c +++ b/libavfilter/f_drawgraph.c @@ -110,11 +110,15 @@ static int query_formats(AVFilterContext *ctx) AV_PIX_FMT_RGBA, AV_PIX_FMT_NONE }; + int ret; AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts); if (!fmts_list) return AVERROR(ENOMEM); - ff_formats_ref(fmts_list, &outlink->in_formats); + if ((ret = ff_formats_ref(fmts_list, &outlink->in_formats)) < 0) { + ff_formats_unref(&fmts_list); + return ret; + } return 0; } diff --git a/libavfilter/f_ebur128.c b/libavfilter/f_ebur128.c index 20c9426..ffad432 100644 --- a/libavfilter/f_ebur128.c +++ b/libavfilter/f_ebur128.c @@ -826,6 +826,7 @@ static int query_formats(AVFilterContext *ctx) AVFilterChannelLayouts *layouts; AVFilterLink *inlink = ctx->inputs[0]; AVFilterLink *outlink = ctx->outputs[0]; + int ret; static const enum AVSampleFormat sample_fmts[] = { AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_NONE }; static const int input_srate[] = {48000, -1}; // ITU-R BS.1770 provides coeff only for 48kHz @@ -836,7 +837,10 @@ static int query_formats(AVFilterContext *ctx) formats = ff_make_format_list(pix_fmts); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &outlink->in_formats); + if ((ret = ff_formats_ref(formats, &outlink->in_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } outlink = ctx->outputs[1]; } @@ -846,20 +850,29 @@ static int query_formats(AVFilterContext *ctx) formats = ff_make_format_list(sample_fmts); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &inlink->out_formats); - ff_formats_ref(formats, &outlink->in_formats); + if ((ret = ff_formats_ref(formats, &inlink->out_formats)) < 0 || + (ret = ff_formats_ref(formats, &outlink->in_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } layouts = ff_all_channel_layouts(); if (!layouts) return AVERROR(ENOMEM); - ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts); - ff_channel_layouts_ref(layouts, &outlink->in_channel_layouts); + if ((ret = ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts)) < 0 || + (ret = ff_channel_layouts_ref(layouts, &outlink->in_channel_layouts)) < 0) { + ff_channel_layouts_unref(&layouts); + return ret; + } formats = ff_make_format_list(input_srate); if (!formats) return AVERROR(ENOMEM); - ff_formats_ref(formats, &inlink->out_samplerates); - ff_formats_ref(formats, &outlink->in_samplerates); + if ((ret = ff_formats_ref(formats, &inlink->out_samplerates)) < 0 || + (ret = ff_formats_ref(formats, &outlink->in_samplerates)) < 0) { + ff_formats_unref(&formats); + return ret; + } return 0; } diff --git a/libavfilter/formats.c b/libavfilter/formats.c index a28be60..f65cd10 100644 --- a/libavfilter/formats.c +++ b/libavfilter/formats.c @@ -340,12 +340,18 @@ AVFilterFormats *ff_all_formats(enum AVMediaType type) if (type == AVMEDIA_TYPE_VIDEO) { const AVPixFmtDescriptor *desc = NULL; while ((desc = av_pix_fmt_desc_next(desc))) { - ff_add_format(&ret, av_pix_fmt_desc_get_id(desc)); + if (ff_add_format(&ret, av_pix_fmt_desc_get_id(desc)) < 0) { + ff_formats_unref(&ret); + return NULL; + } } } else if (type == AVMEDIA_TYPE_AUDIO) { enum AVSampleFormat fmt = 0; while (av_get_sample_fmt_name(fmt)) { - ff_add_format(&ret, fmt); + if (ff_add_format(&ret, fmt) < 0) { + ff_formats_unref(&ret); + return NULL; + } fmt++; } } @@ -370,7 +376,10 @@ AVFilterFormats *ff_planar_sample_fmts(void) for (fmt = 0; av_get_bytes_per_sample(fmt)>0; fmt++) if (av_sample_fmt_is_planar(fmt)) - ff_add_format(&ret, fmt); + if (ff_add_format(&ret, fmt) < 0) { + ff_formats_unref(&ret); + return NULL; + } return ret; } diff --git a/libavfilter/src_movie.c b/libavfilter/src_movie.c index bbdcbc8..0c2ceed 100644 --- a/libavfilter/src_movie.c +++ b/libavfilter/src_movie.c @@ -333,7 +333,7 @@ static int movie_query_formats(AVFilterContext *ctx) MovieContext *movie = ctx->priv; int list[] = { 0, -1 }; int64_t list64[] = { 0, -1 }; - int i; + int i, ret; for (i = 0; i < ctx->nb_outputs; i++) { MovieStream *st = &movie->st[i]; @@ -343,16 +343,20 @@ static int movie_query_formats(AVFilterContext *ctx) switch (c->codec_type) { case AVMEDIA_TYPE_VIDEO: list[0] = c->pix_fmt; - ff_formats_ref(ff_make_format_list(list), &outlink->in_formats); + if ((ret = ff_formats_ref(ff_make_format_list(list), &outlink->in_formats)) < 0) + return ret; break; case AVMEDIA_TYPE_AUDIO: list[0] = c->sample_fmt; - ff_formats_ref(ff_make_format_list(list), &outlink->in_formats); + if ((ret = ff_formats_ref(ff_make_format_list(list), &outlink->in_formats)) < 0) + return ret; list[0] = c->sample_rate; - ff_formats_ref(ff_make_format_list(list), &outlink->in_samplerates); + if ((ret = ff_formats_ref(ff_make_format_list(list), &outlink->in_samplerates)) < 0) + return ret; list64[0] = c->channel_layout; - ff_channel_layouts_ref(avfilter_make_format64_list(list64), - &outlink->in_channel_layouts); + if ((ret = ff_channel_layouts_ref(avfilter_make_format64_list(list64), + &outlink->in_channel_layouts)) < 0) + return ret; break; } } diff --git a/libavfilter/vf_alphamerge.c b/libavfilter/vf_alphamerge.c index 5f0da35..2cc18b9 100644 --- a/libavfilter/vf_alphamerge.c +++ b/libavfilter/vf_alphamerge.c @@ -58,11 +58,24 @@ static int query_formats(AVFilterContext *ctx) AV_PIX_FMT_NONE }; static const enum AVPixelFormat alpha_fmts[] = { AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE }; - AVFilterFormats *main_formats = ff_make_format_list(main_fmts); - AVFilterFormats *alpha_formats = ff_make_format_list(alpha_fmts); - ff_formats_ref(main_formats, &ctx->inputs[0]->out_formats); - ff_formats_ref(alpha_formats, &ctx->inputs[1]->out_formats); - ff_formats_ref(main_formats, &ctx->outputs[0]->in_formats); + AVFilterFormats *main_formats, *alpha_formats; + int ret; + + if (!(main_formats = ff_make_format_list(main_fmts)) || + !(alpha_formats = ff_make_format_list(alpha_fmts))) + return AVERROR(ENOMEM); + if ((ret = ff_formats_ref(main_formats, &ctx->inputs[0]->out_formats)) < 0) { + ff_formats_unref(&main_formats); + return ret; + } + if ((ret = ff_formats_ref(alpha_formats, &ctx->inputs[1]->out_formats)) < 0) { + ff_formats_unref(&alpha_formats); + return ret; + } + if ((ret = ff_formats_ref(main_formats, &ctx->outputs[0]->in_formats)) < 0) { + ff_formats_unref(&main_formats); + return ret; + } return 0; } diff --git a/libavfilter/vf_boxblur.c b/libavfilter/vf_boxblur.c index 0e9bafd..a0234aa 100644 --- a/libavfilter/vf_boxblur.c +++ b/libavfilter/vf_boxblur.c @@ -118,17 +118,22 @@ static av_cold void uninit(AVFilterContext *ctx) static int query_formats(AVFilterContext *ctx) { AVFilterFormats *formats = NULL; - int fmt; + int fmt, ret; for (fmt = 0; av_pix_fmt_desc_get(fmt); fmt++) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt); if (!(desc->flags & (AV_PIX_FMT_FLAG_HWACCEL | AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_PAL)) && (desc->flags & AV_PIX_FMT_FLAG_PLANAR || desc->nb_components == 1) && - (!(desc->flags & AV_PIX_FMT_FLAG_BE) == !HAVE_BIGENDIAN || desc->comp[0].depth == 8)) - ff_add_format(&formats, fmt); + (!(desc->flags & AV_PIX_FMT_FLAG_BE) == !HAVE_BIGENDIAN || desc->comp[0].depth == 8) && + (ret = ff_add_format(&formats, fmt)) < 0) { + ff_formats_unref(&formats); + return ret; + } } - return ff_set_common_formats(ctx, formats); + if ((ret = ff_set_common_formats(ctx, formats)) < 0) + ff_formats_unref(&formats); + return ret; } static int config_input(AVFilterLink *inlink) diff --git a/libavfilter/vf_crop.c b/libavfilter/vf_crop.c index b695a6f..73ee0d5 100644 --- a/libavfilter/vf_crop.c +++ b/libavfilter/vf_crop.c @@ -93,16 +93,21 @@ typedef struct CropContext { static int query_formats(AVFilterContext *ctx) { AVFilterFormats *formats = NULL; - int fmt; + int fmt, ret; for (fmt = 0; av_pix_fmt_desc_get(fmt); fmt++) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt); if (!(desc->flags & (AV_PIX_FMT_FLAG_HWACCEL | AV_PIX_FMT_FLAG_BITSTREAM)) && - !((desc->log2_chroma_w || desc->log2_chroma_h) && !(desc->flags & AV_PIX_FMT_FLAG_PLANAR))) - ff_add_format(&formats, fmt); + !((desc->log2_chroma_w || desc->log2_chroma_h) && !(desc->flags & AV_PIX_FMT_FLAG_PLANAR)) && + (ret = ff_add_format(&formats, fmt)) < 0) { + ff_formats_unref(&formats); + return ret; + } } - return ff_set_common_formats(ctx, formats); + if ((ret = ff_set_common_formats(ctx, formats)) < 0) + ff_formats_unref(&formats); + return ret; } static av_cold void uninit(AVFilterContext *ctx) diff --git a/libavfilter/vf_detelecine.c b/libavfilter/vf_detelecine.c index 320e90d..bf877eb 100644 --- a/libavfilter/vf_detelecine.c +++ b/libavfilter/vf_detelecine.c @@ -116,17 +116,22 @@ static av_cold int init(AVFilterContext *ctx) static int query_formats(AVFilterContext *ctx) { AVFilterFormats *pix_fmts = NULL; - int fmt; + int fmt, ret; for (fmt = 0; av_pix_fmt_desc_get(fmt); fmt++) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt); if (!(desc->flags & AV_PIX_FMT_FLAG_HWACCEL || desc->flags & AV_PIX_FMT_FLAG_PAL || - desc->flags & AV_PIX_FMT_FLAG_BITSTREAM)) - ff_add_format(&pix_fmts, fmt); + desc->flags & AV_PIX_FMT_FLAG_BITSTREAM) && + (ret = ff_add_format(&pix_fmts, fmt)) < 0) { + ff_formats_unref(&pix_fmts); + return ret; + } } - return ff_set_common_formats(ctx, pix_fmts); + if ((ret = ff_set_common_formats(ctx, pix_fmts)) < 0) + ff_formats_unref(&pix_fmts); + return ret; } static int config_input(AVFilterLink *inlink) diff --git a/libavfilter/vf_displace.c b/libavfilter/vf_displace.c index 8c7b435..0005077 100644 --- a/libavfilter/vf_displace.c +++ b/libavfilter/vf_displace.c @@ -75,8 +75,10 @@ static int query_formats(AVFilterContext *ctx) AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP, AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE }; + int ret; - ff_set_common_formats(ctx, ff_make_format_list(pix_fmts)); + if ((ret = ff_set_common_formats(ctx, ff_make_format_list(pix_fmts))) < 0) + return ret; return 0; } diff --git a/libavfilter/vf_elbg.c b/libavfilter/vf_elbg.c index 9805ecc..b34136b 100644 --- a/libavfilter/vf_elbg.c +++ b/libavfilter/vf_elbg.c @@ -83,6 +83,7 @@ static av_cold int init(AVFilterContext *ctx) static int query_formats(AVFilterContext *ctx) { ELBGContext *elbg = ctx->priv; + int ret; static const enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_ARGB, AV_PIX_FMT_RGBA, AV_PIX_FMT_ABGR, AV_PIX_FMT_BGRA, @@ -99,8 +100,9 @@ static int query_formats(AVFilterContext *ctx) AV_PIX_FMT_PAL8, AV_PIX_FMT_NONE }; - ff_formats_ref(ff_make_format_list(pix_fmts), &ctx->inputs[0]->out_formats); - ff_formats_ref(ff_make_format_list(pal8_fmt), &ctx->outputs[0]->in_formats); + if ((ret = ff_formats_ref(ff_make_format_list(pix_fmts), &ctx->inputs[0]->out_formats)) < 0 || + (ret = ff_formats_ref(ff_make_format_list(pal8_fmt), &ctx->outputs[0]->in_formats)) < 0) + return ret; } return 0; } diff --git a/libavfilter/vf_extractplanes.c b/libavfilter/vf_extractplanes.c index 47a1748..1cb05e4 100644 --- a/libavfilter/vf_extractplanes.c +++ b/libavfilter/vf_extractplanes.c @@ -99,7 +99,7 @@ static int query_formats(AVFilterContext *ctx) const enum AVPixelFormat *out_pixfmts; const AVPixFmtDescriptor *desc; AVFilterFormats *avff; - int i, depth = 0, be = 0; + int i, ret, depth = 0, be = 0; if (!ctx->inputs[0]->in_formats || !ctx->inputs[0]->in_formats->nb_formats) { @@ -107,7 +107,8 @@ static int query_formats(AVFilterContext *ctx) } if (!ctx->inputs[0]->out_formats) - ff_formats_ref(ff_make_format_list(in_pixfmts), &ctx->inputs[0]->out_formats); + if ((ret = ff_formats_ref(ff_make_format_list(in_pixfmts), &ctx->inputs[0]->out_formats)) < 0) + return ret; avff = ctx->inputs[0]->in_formats; desc = av_pix_fmt_desc_get(avff->formats[0]); @@ -129,7 +130,8 @@ static int query_formats(AVFilterContext *ctx) out_pixfmts = out16le_pixfmts; for (i = 0; i < ctx->nb_outputs; i++) - ff_formats_ref(ff_make_format_list(out_pixfmts), &ctx->outputs[i]->in_formats); + if ((ret = ff_formats_ref(ff_make_format_list(out_pixfmts), &ctx->outputs[i]->in_formats)) < 0) + return ret; return 0; } diff --git a/libavfilter/vf_fieldorder.c b/libavfilter/vf_fieldorder.c index d0d6807..1c6f1e8 100644 --- a/libavfilter/vf_fieldorder.c +++ b/libavfilter/vf_fieldorder.c @@ -60,8 +60,11 @@ static int query_formats(AVFilterContext *ctx) return ret; } } - ff_formats_ref(formats, &ctx->inputs[0]->out_formats); - ff_formats_ref(formats, &ctx->outputs[0]->in_formats); + if ((ret = ff_formats_ref(formats, &ctx->inputs[0]->out_formats)) < 0 || + (ret = ff_formats_ref(formats, &ctx->outputs[0]->in_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } } return 0; diff --git a/libavfilter/vf_frei0r.c b/libavfilter/vf_frei0r.c index bbefe51..7d8d2eb 100644 --- a/libavfilter/vf_frei0r.c +++ b/libavfilter/vf_frei0r.c @@ -370,11 +370,14 @@ static int query_formats(AVFilterContext *ctx) { Frei0rContext *s = ctx->priv; AVFilterFormats *formats = NULL; + int ret; if (s->plugin_info.color_model == F0R_COLOR_MODEL_BGRA8888) { - ff_add_format(&formats, AV_PIX_FMT_BGRA); + if ((ret = ff_add_format(&formats, AV_PIX_FMT_BGRA)) < 0) + return ret; } else if (s->plugin_info.color_model == F0R_COLOR_MODEL_RGBA8888) { - ff_add_format(&formats, AV_PIX_FMT_RGBA); + if ((ret = ff_add_format(&formats, AV_PIX_FMT_RGBA)) < 0) + return ret; } else { /* F0R_COLOR_MODEL_PACKED32 */ static const enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_BGRA, AV_PIX_FMT_ARGB, AV_PIX_FMT_ABGR, AV_PIX_FMT_ARGB, AV_PIX_FMT_NONE @@ -385,7 +388,10 @@ static int query_formats(AVFilterContext *ctx) if (!formats) return AVERROR(ENOMEM); - return ff_set_common_formats(ctx, formats); + if ((ret = ff_set_common_formats(ctx, formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } } static int filter_frame(AVFilterLink *inlink, AVFrame *in) diff --git a/libavfilter/vf_hflip.c b/libavfilter/vf_hflip.c index 362bd01..98a1697 100644 --- a/libavfilter/vf_hflip.c +++ b/libavfilter/vf_hflip.c @@ -44,18 +44,23 @@ typedef struct FlipContext { static int query_formats(AVFilterContext *ctx) { AVFilterFormats *pix_fmts = NULL; - int fmt; + int fmt, ret; for (fmt = 0; av_pix_fmt_desc_get(fmt); fmt++) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt); if (!(desc->flags & AV_PIX_FMT_FLAG_HWACCEL || desc->flags & AV_PIX_FMT_FLAG_BITSTREAM || (desc->log2_chroma_w != desc->log2_chroma_h && - desc->comp[0].plane == desc->comp[1].plane))) - ff_add_format(&pix_fmts, fmt); + desc->comp[0].plane == desc->comp[1].plane)) && + (ret = ff_add_format(&pix_fmts, fmt)) < 0) { + ff_formats_unref(&pix_fmts); + return ret; + } } - return ff_set_common_formats(ctx, pix_fmts); + if ((ret = ff_set_common_formats(ctx, pix_fmts)) < 0) + ff_formats_unref(&pix_fmts); + return ret; } static int config_props(AVFilterLink *inlink) diff --git a/libavfilter/vf_histogram.c b/libavfilter/vf_histogram.c index d8e935a..12ab21c 100644 --- a/libavfilter/vf_histogram.c +++ b/libavfilter/vf_histogram.c @@ -155,6 +155,7 @@ static int query_formats(AVFilterContext *ctx) HistogramContext *h = ctx->priv; const enum AVPixelFormat *pix_fmts; AVFilterFormats *fmts_list; + int ret; switch (h->mode) { case MODE_WAVEFORM: @@ -173,7 +174,8 @@ static int query_formats(AVFilterContext *ctx) } if (!ctx->inputs[0]->out_formats) - ff_formats_ref(ff_make_format_list(levels_in_pix_fmts), &ctx->inputs[0]->out_formats); + if ((ret = ff_formats_ref(ff_make_format_list(levels_in_pix_fmts), &ctx->inputs[0]->out_formats)) < 0) + return ret; avff = ctx->inputs[0]->in_formats; desc = av_pix_fmt_desc_get(avff->formats[0]); rgb = desc->flags & AV_PIX_FMT_FLAG_RGB; @@ -197,7 +199,8 @@ static int query_formats(AVFilterContext *ctx) out_pix_fmts = levels_out_yuv9_pix_fmts; else // if (bits == 10) out_pix_fmts = levels_out_yuv10_pix_fmts; - ff_formats_ref(ff_make_format_list(out_pix_fmts), &ctx->outputs[0]->in_formats); + if ((ret = ff_formats_ref(ff_make_format_list(out_pix_fmts), &ctx->outputs[0]->in_formats)) < 0) + return ret; return 0; } diff --git a/libavfilter/vf_il.c b/libavfilter/vf_il.c index d370b52..2b8f881 100644 --- a/libavfilter/vf_il.c +++ b/libavfilter/vf_il.c @@ -84,15 +84,21 @@ AVFILTER_DEFINE_CLASS(il); static int query_formats(AVFilterContext *ctx) { AVFilterFormats *formats = NULL; - int fmt; + int fmt, ret; for (fmt = 0; av_pix_fmt_desc_get(fmt); fmt++) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt); - if (!(desc->flags & AV_PIX_FMT_FLAG_PAL) && !(desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) - ff_add_format(&formats, fmt); + if (!(desc->flags & AV_PIX_FMT_FLAG_PAL) && + !(desc->flags & AV_PIX_FMT_FLAG_HWACCEL) && + (ret = ff_add_format(&formats, fmt)) < 0) { + ff_formats_unref(&formats); + return ret; + } } - return ff_set_common_formats(ctx, formats); + if ((ret = ff_set_common_formats(ctx, formats)) < 0) + ff_formats_unref(&formats); + return ret; } static int config_input(AVFilterLink *inlink) diff --git a/libavfilter/vf_maskedmerge.c b/libavfilter/vf_maskedmerge.c index aa11d31..38a4663 100644 --- a/libavfilter/vf_maskedmerge.c +++ b/libavfilter/vf_maskedmerge.c @@ -58,8 +58,7 @@ static int query_formats(AVFilterContext *ctx) AV_PIX_FMT_NONE }; - ff_set_common_formats(ctx, ff_make_format_list(pix_fmts)); - return 0; + return ff_set_common_formats(ctx, ff_make_format_list(pix_fmts)); } static int process_frame(FFFrameSync *fs) diff --git a/libavfilter/vf_mergeplanes.c b/libavfilter/vf_mergeplanes.c index ea796be..9a91c98 100644 --- a/libavfilter/vf_mergeplanes.c +++ b/libavfilter/vf_mergeplanes.c @@ -116,22 +116,32 @@ static int query_formats(AVFilterContext *ctx) { MergePlanesContext *s = ctx->priv; AVFilterFormats *formats = NULL; - int i; + int i, ret; s->outdesc = av_pix_fmt_desc_get(s->out_fmt); for (i = 0; av_pix_fmt_desc_get(i); i++) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(i); if (desc->comp[0].depth == s->outdesc->comp[0].depth && - av_pix_fmt_count_planes(i) == desc->nb_components) - ff_add_format(&formats, i); + av_pix_fmt_count_planes(i) == desc->nb_components && + (ret = ff_add_format(&formats, i)) < 0) { + ff_formats_unref(&formats); + return ret; + } } for (i = 0; i < s->nb_inputs; i++) - ff_formats_ref(formats, &ctx->inputs[i]->out_formats); + if ((ret = ff_formats_ref(formats, &ctx->inputs[i]->out_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } formats = NULL; - ff_add_format(&formats, s->out_fmt); - ff_formats_ref(formats, &ctx->outputs[0]->in_formats); + if ((ret = ff_add_format(&formats, s->out_fmt)) < 0) + return ret; + if ((ret = ff_formats_ref(formats, &ctx->outputs[0]->in_formats)) < 0) { + ff_formats_unref(&formats); + return ret; + } return 0; } diff --git a/libavfilter/vf_neighbor.c b/libavfilter/vf_neighbor.c index c3c7f74..7e4f605 100644 --- a/libavfilter/vf_neighbor.c +++ b/libavfilter/vf_neighbor.c @@ -49,8 +49,7 @@ static int query_formats(AVFilterContext *ctx) AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP, AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE }; - ff_set_common_formats(ctx, ff_make_format_list(pix_fmts)); - return 0; + return ff_set_common_formats(ctx, ff_make_format_list(pix_fmts)); } static av_cold void uninit(AVFilterContext *ctx) diff --git a/libavfilter/vf_noise.c b/libavfilter/vf_noise.c index c658bba..6bce791 100644 --- a/libavfilter/vf_noise.c +++ b/libavfilter/vf_noise.c @@ -133,15 +133,20 @@ static av_cold int init_noise(NoiseContext *n, int comp) static int query_formats(AVFilterContext *ctx) { AVFilterFormats *formats = NULL; - int fmt; + int fmt, ret; for (fmt = 0; av_pix_fmt_desc_get(fmt); fmt++) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt); if (desc->flags & AV_PIX_FMT_FLAG_PLANAR && !(desc->comp[0].depth & 7)) - ff_add_format(&formats, fmt); + if ((ret = ff_add_format(&formats, fmt)) < 0) { + ff_formats_unref(&formats); + return ret; + } } - return ff_set_common_formats(ctx, formats); + if ((ret = ff_set_common_formats(ctx, formats)) < 0) + ff_formats_unref(&formats); + return ret; } static int config_input(AVFilterLink *inlink) diff --git a/libavfilter/vf_overlay.c b/libavfilter/vf_overlay.c index 81c9cc1..398e5d7 100644 --- a/libavfilter/vf_overlay.c +++ b/libavfilter/vf_overlay.c @@ -247,31 +247,45 @@ static int query_formats(AVFilterContext *ctx) AVFilterFormats *main_formats; AVFilterFormats *overlay_formats; + int ret; switch (s->format) { case OVERLAY_FORMAT_YUV420: - main_formats = ff_make_format_list(main_pix_fmts_yuv420); - overlay_formats = ff_make_format_list(overlay_pix_fmts_yuv420); + if (!(main_formats = ff_make_format_list(main_pix_fmts_yuv420)) || + !(overlay_formats = ff_make_format_list(overlay_pix_fmts_yuv420))) + return AVERROR(ENOMEM); break; case OVERLAY_FORMAT_YUV422: - main_formats = ff_make_format_list(main_pix_fmts_yuv422); - overlay_formats = ff_make_format_list(overlay_pix_fmts_yuv422); + if (!(main_formats = ff_make_format_list(main_pix_fmts_yuv422)) || + !(overlay_formats = ff_make_format_list(overlay_pix_fmts_yuv422))) + return AVERROR(ENOMEM); break; case OVERLAY_FORMAT_YUV444: - main_formats = ff_make_format_list(main_pix_fmts_yuv444); - overlay_formats = ff_make_format_list(overlay_pix_fmts_yuv444); + if (!(main_formats = ff_make_format_list(main_pix_fmts_yuv444)) || + !(overlay_formats = ff_make_format_list(overlay_pix_fmts_yuv444))) + return AVERROR(ENOMEM); break; case OVERLAY_FORMAT_RGB: - main_formats = ff_make_format_list(main_pix_fmts_rgb); - overlay_formats = ff_make_format_list(overlay_pix_fmts_rgb); + if (!(main_formats = ff_make_format_list(main_pix_fmts_rgb)) || + !(overlay_formats = ff_make_format_list(overlay_pix_fmts_rgb))) + return AVERROR(ENOMEM); break; default: av_assert0(0); } - ff_formats_ref(main_formats, &ctx->inputs [MAIN ]->out_formats); - ff_formats_ref(overlay_formats, &ctx->inputs [OVERLAY]->out_formats); - ff_formats_ref(main_formats, &ctx->outputs[MAIN ]->in_formats ); + if ((ret = ff_formats_ref(main_formats, &ctx->inputs[MAIN]->out_formats)) < 0) { + ff_formats_unref(&main_formats); + return ret; + } + if ((ret = ff_formats_ref(overlay_formats, &ctx->inputs[OVERLAY]->out_formats)) < 0) { + ff_formats_unref(&overlay_formats); + return ret; + } + if ((ret = ff_formats_ref(main_formats, &ctx->outputs[MAIN]->in_formats)) < 0) { + ff_formats_unref(&main_formats); + return ret; + } return 0; } diff --git a/libavfilter/vf_palettegen.c b/libavfilter/vf_palettegen.c index 025bb53..d58c51b 100644 --- a/libavfilter/vf_palettegen.c +++ b/libavfilter/vf_palettegen.c @@ -92,6 +92,7 @@ static int query_formats(AVFilterContext *ctx) { static const enum AVPixelFormat in_fmts[] = {AV_PIX_FMT_RGB32, AV_PIX_FMT_NONE}; static const enum AVPixelFormat out_fmts[] = {AV_PIX_FMT_RGB32, AV_PIX_FMT_NONE}; + int ret; AVFilterFormats *in = ff_make_format_list(in_fmts); AVFilterFormats *out = ff_make_format_list(out_fmts); if (!in || !out) { @@ -99,8 +100,14 @@ static int query_formats(AVFilterContext *ctx) av_freep(&out); return AVERROR(ENOMEM); } - ff_formats_ref(in, &ctx->inputs[0]->out_formats); - ff_formats_ref(out, &ctx->outputs[0]->in_formats); + if ((ret = ff_formats_ref(in, &ctx->inputs[0]->out_formats)) < 0) { + ff_formats_unref(&in); + return ret; + } + if ((ret = ff_formats_ref(out, &ctx->outputs[0]->in_formats)) < 0) { + ff_formats_unref(&out); + return ret; + } return 0; } diff --git a/libavfilter/vf_paletteuse.c b/libavfilter/vf_paletteuse.c index f8350ac..af79d99 100644 --- a/libavfilter/vf_paletteuse.c +++ b/libavfilter/vf_paletteuse.c @@ -132,6 +132,7 @@ static int query_formats(AVFilterContext *ctx) static const enum AVPixelFormat in_fmts[] = {AV_PIX_FMT_RGB32, AV_PIX_FMT_NONE}; static const enum AVPixelFormat inpal_fmts[] = {AV_PIX_FMT_RGB32, AV_PIX_FMT_NONE}; static const enum AVPixelFormat out_fmts[] = {AV_PIX_FMT_PAL8, AV_PIX_FMT_NONE}; + int ret; AVFilterFormats *in = ff_make_format_list(in_fmts); AVFilterFormats *inpal = ff_make_format_list(inpal_fmts); AVFilterFormats *out = ff_make_format_list(out_fmts); @@ -141,9 +142,18 @@ static int query_formats(AVFilterContext *ctx) av_freep(&out); return AVERROR(ENOMEM); } - ff_formats_ref(in, &ctx->inputs[0]->out_formats); - ff_formats_ref(inpal, &ctx->inputs[1]->out_formats); - ff_formats_ref(out, &ctx->outputs[0]->in_formats); + if ((ret = ff_formats_ref(in, &ctx->inputs[0]->out_formats)) < 0) { + ff_formats_unref(&in); + return ret; + } + if ((ret = ff_formats_ref(inpal, &ctx->inputs[1]->out_formats)) < 0) { + ff_formats_unref(&inpal); + return ret; + } + if ((ret = ff_formats_ref(out, &ctx->outputs[0]->in_formats)) < 0) { + ff_formats_unref(&out); + return ret; + } return 0; } diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index fd98abf..f669d38 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -192,7 +192,8 @@ static int query_formats(AVFilterContext *ctx) return ret; } } - ff_formats_ref(formats, &ctx->inputs[0]->out_formats); + if ((ret = ff_formats_ref(formats, &ctx->inputs[0]->out_formats)) < 0) + goto fail; } if (ctx->outputs[0]) { const AVPixFmtDescriptor *desc = NULL; @@ -206,10 +207,14 @@ static int query_formats(AVFilterContext *ctx) return ret; } } - ff_formats_ref(formats, &ctx->outputs[0]->in_formats); + if ((ret = ff_formats_ref(formats, &ctx->outputs[0]->in_formats)) < 0) + goto fail; } return 0; +fail: + ff_formats_unref(&formats); + return ret; } static const int *parse_yuv_type(const char *s, enum AVColorSpace colorspace) diff --git a/libavfilter/vf_showpalette.c b/libavfilter/vf_showpalette.c index e4d59b6..259d624 100644 --- a/libavfilter/vf_showpalette.c +++ b/libavfilter/vf_showpalette.c @@ -46,6 +46,7 @@ static int query_formats(AVFilterContext *ctx) { static const enum AVPixelFormat in_fmts[] = {AV_PIX_FMT_PAL8, AV_PIX_FMT_NONE}; static const enum AVPixelFormat out_fmts[] = {AV_PIX_FMT_RGB32, AV_PIX_FMT_NONE}; + int ret; AVFilterFormats *in = ff_make_format_list(in_fmts); AVFilterFormats *out = ff_make_format_list(out_fmts); if (!in || !out) { @@ -53,8 +54,14 @@ static int query_formats(AVFilterContext *ctx) av_freep(&out); return AVERROR(ENOMEM); } - ff_formats_ref(in, &ctx->inputs[0]->out_formats); - ff_formats_ref(out, &ctx->outputs[0]->in_formats); + if ((ret = ff_formats_ref(in, &ctx->inputs[0]->out_formats)) < 0) { + ff_formats_unref(&in); + return ret; + } + if ((ret = ff_formats_ref(out, &ctx->outputs[0]->in_formats)) < 0) { + ff_formats_unref(&out); + return ret; + } return 0; } diff --git a/libavfilter/vf_stack.c b/libavfilter/vf_stack.c index 8a90caa..d344840 100644 --- a/libavfilter/vf_stack.c +++ b/libavfilter/vf_stack.c @@ -43,17 +43,22 @@ typedef struct StackContext { static int query_formats(AVFilterContext *ctx) { AVFilterFormats *pix_fmts = NULL; - int fmt; + int fmt, ret; for (fmt = 0; av_pix_fmt_desc_get(fmt); fmt++) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt); if (!(desc->flags & AV_PIX_FMT_FLAG_PAL || desc->flags & AV_PIX_FMT_FLAG_HWACCEL || - desc->flags & AV_PIX_FMT_FLAG_BITSTREAM)) - ff_add_format(&pix_fmts, fmt); + desc->flags & AV_PIX_FMT_FLAG_BITSTREAM) && + (ret = ff_add_format(&pix_fmts, fmt)) < 0) { + ff_formats_unref(&pix_fmts); + return ret; + } } - return ff_set_common_formats(ctx, pix_fmts); + if ((ret = ff_set_common_formats(ctx, pix_fmts)) < 0) + ff_formats_unref(&pix_fmts); + return ret; } static int filter_frame(AVFilterLink *inlink, AVFrame *in) diff --git a/libavfilter/vf_swapuv.c b/libavfilter/vf_swapuv.c index 624e6b6..c9c98ac 100644 --- a/libavfilter/vf_swapuv.c +++ b/libavfilter/vf_swapuv.c @@ -77,15 +77,19 @@ static int is_planar_yuv(const AVPixFmtDescriptor *desc) static int query_formats(AVFilterContext *ctx) { AVFilterFormats *formats = NULL; - int fmt; + int fmt, ret; for (fmt = 0; av_pix_fmt_desc_get(fmt); fmt++) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt); - if (is_planar_yuv(desc)) - ff_add_format(&formats, fmt); + if (is_planar_yuv(desc) && (ret = ff_add_format(&formats, fmt)) < 0) { + ff_formats_unref(&formats); + return ret; + } } - return ff_set_common_formats(ctx, formats); + if ((ret = ff_set_common_formats(ctx, formats)) < 0) + ff_formats_unref(&formats); + return ret; } static const AVFilterPad swapuv_inputs[] = { diff --git a/libavfilter/vf_telecine.c b/libavfilter/vf_telecine.c index bb091e1..471a9cf 100644 --- a/libavfilter/vf_telecine.c +++ b/libavfilter/vf_telecine.c @@ -102,17 +102,22 @@ static av_cold int init(AVFilterContext *ctx) static int query_formats(AVFilterContext *ctx) { AVFilterFormats *pix_fmts = NULL; - int fmt; + int fmt, ret; for (fmt = 0; av_pix_fmt_desc_get(fmt); fmt++) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt); if (!(desc->flags & AV_PIX_FMT_FLAG_HWACCEL || desc->flags & AV_PIX_FMT_FLAG_PAL || - desc->flags & AV_PIX_FMT_FLAG_BITSTREAM)) - ff_add_format(&pix_fmts, fmt); + desc->flags & AV_PIX_FMT_FLAG_BITSTREAM) && + (ret = ff_add_format(&pix_fmts, fmt)) < 0) { + ff_formats_unref(&pix_fmts); + return ret; + } } - return ff_set_common_formats(ctx, pix_fmts); + if ((ret = ff_set_common_formats(ctx, pix_fmts)) < 0) + ff_formats_unref(&pix_fmts); + return ret; } static int config_input(AVFilterLink *inlink) diff --git a/libavfilter/vf_transpose.c b/libavfilter/vf_transpose.c index 484b8e8..a3b6933 100644 --- a/libavfilter/vf_transpose.c +++ b/libavfilter/vf_transpose.c @@ -63,19 +63,24 @@ typedef struct TransContext { static int query_formats(AVFilterContext *ctx) { AVFilterFormats *pix_fmts = NULL; - int fmt; + int fmt, ret; for (fmt = 0; av_pix_fmt_desc_get(fmt); fmt++) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt); if (!(desc->flags & AV_PIX_FMT_FLAG_PAL || desc->flags & AV_PIX_FMT_FLAG_HWACCEL || desc->flags & AV_PIX_FMT_FLAG_BITSTREAM || - desc->log2_chroma_w != desc->log2_chroma_h)) - ff_add_format(&pix_fmts, fmt); + desc->log2_chroma_w != desc->log2_chroma_h) && + (ret = ff_add_format(&pix_fmts, fmt)) < 0) { + ff_formats_unref(&pix_fmts); + return ret; + } } - return ff_set_common_formats(ctx, pix_fmts); + if ((ret = ff_set_common_formats(ctx, pix_fmts)) < 0) + ff_formats_unref(&pix_fmts); + return ret; } static int config_props_output(AVFilterLink *outlink) diff --git a/libavfilter/vf_vectorscope.c b/libavfilter/vf_vectorscope.c index 730f55f..5f7cd56 100644 --- a/libavfilter/vf_vectorscope.c +++ b/libavfilter/vf_vectorscope.c @@ -140,7 +140,7 @@ static int query_formats(AVFilterContext *ctx) const enum AVPixelFormat *out_pix_fmts; const AVPixFmtDescriptor *desc; AVFilterFormats *avff; - int depth, rgb, i; + int depth, rgb, i, ret; if (!ctx->inputs[0]->in_formats || !ctx->inputs[0]->in_formats->nb_formats) { @@ -154,7 +154,8 @@ static int query_formats(AVFilterContext *ctx) in_pix_fmts = in2_pix_fmts; else in_pix_fmts = in1_pix_fmts; - ff_formats_ref(ff_make_format_list(in_pix_fmts), &ctx->inputs[0]->out_formats); + if ((ret = ff_formats_ref(ff_make_format_list(in_pix_fmts), &ctx->inputs[0]->out_formats)) < 0) + return ret; } avff = ctx->inputs[0]->in_formats; @@ -180,7 +181,8 @@ static int query_formats(AVFilterContext *ctx) out_pix_fmts = out_yuv10_pix_fmts; else out_pix_fmts = out_yuv8_pix_fmts; - ff_formats_ref(ff_make_format_list(out_pix_fmts), &ctx->outputs[0]->in_formats); + if ((ret = ff_formats_ref(ff_make_format_list(out_pix_fmts), &ctx->outputs[0]->in_formats)) < 0) + return ret; return 0; } diff --git a/libavfilter/vsrc_life.c b/libavfilter/vsrc_life.c index 314746d..0fd4253 100644 --- a/libavfilter/vsrc_life.c +++ b/libavfilter/vsrc_life.c @@ -417,6 +417,7 @@ static int query_formats(AVFilterContext *ctx) LifeContext *life = ctx->priv; enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_NONE, AV_PIX_FMT_NONE }; AVFilterFormats *fmts_list; + int ret; if (life->mold || memcmp(life-> life_color, "\xff\xff\xff", 3) || memcmp(life->death_color, "\x00\x00\x00", 3)) { @@ -430,7 +431,10 @@ static int query_formats(AVFilterContext *ctx) fmts_list = ff_make_format_list(pix_fmts); if (!fmts_list) return AVERROR(ENOMEM); - ff_set_common_formats(ctx, fmts_list); + if ((ret = ff_set_common_formats(ctx, fmts_list)) < 0) { + ff_formats_unref(&fmts_list); + return ret; + } return 0; } -- 2.6.0
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel