diff options
author | Nicolas George <nicolas.george@normalesup.org> | 2012-06-24 23:28:29 +0200 |
---|---|---|
committer | Nicolas George <nicolas.george@normalesup.org> | 2012-06-26 13:17:30 +0200 |
commit | 784675ca9146490035314a15abcd6b98887eb82d (patch) | |
tree | 5188eb8164cb59de4b01dedc94d2797e88c9e27e /libavfilter | |
parent | a2bd8a938427e6f7bee500575dd376084c7231f9 (diff) | |
download | ffmpeg-784675ca9146490035314a15abcd6b98887eb82d.tar.gz |
sink_buffer: make opaque argument optional.
Diffstat (limited to 'libavfilter')
-rw-r--r-- | libavfilter/sink_buffer.c | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/libavfilter/sink_buffer.c b/libavfilter/sink_buffer.c index b6410a23a6..c4f6118335 100644 --- a/libavfilter/sink_buffer.c +++ b/libavfilter/sink_buffer.c @@ -231,24 +231,25 @@ static void filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref) static av_cold int asink_init(AVFilterContext *ctx, const char *args, void *opaque) { BufferSinkContext *buf = ctx->priv; - AVABufferSinkParams *params; + AVABufferSinkParams *params = opaque; - if (!opaque) { - av_log(ctx, AV_LOG_ERROR, - "No opaque field provided, an AVABufferSinkParams struct is required\n"); - return AVERROR(EINVAL); - } else - params = (AVABufferSinkParams *)opaque; - - buf->sample_fmts = ff_copy_int_list (params->sample_fmts); - buf->channel_layouts = ff_copy_int64_list(params->channel_layouts); - if (!buf->sample_fmts || !buf->channel_layouts) { - av_freep(&buf->sample_fmts); - av_freep(&buf->channel_layouts); - return AVERROR(ENOMEM); + if (params && params->sample_fmts) { + buf->sample_fmts = ff_copy_int_list (params->sample_fmts); + if (!buf->sample_fmts) + goto fail_enomem; } + if (params && params->channel_layouts) { + buf->channel_layouts = ff_copy_int64_list(params->channel_layouts); + if (!buf->channel_layouts) + goto fail_enomem; + } + if (!common_init(ctx)) + return 0; - return common_init(ctx); +fail_enomem: + av_freep(&buf->sample_fmts); + av_freep(&buf->channel_layouts); + return AVERROR(ENOMEM); } static av_cold void asink_uninit(AVFilterContext *ctx) @@ -266,14 +267,17 @@ static int asink_query_formats(AVFilterContext *ctx) AVFilterFormats *formats = NULL; AVFilterChannelLayouts *layouts = NULL; + if (buf->sample_fmts) { if (!(formats = ff_make_format_list(buf->sample_fmts))) return AVERROR(ENOMEM); ff_set_common_formats(ctx, formats); + } + if (buf->channel_layouts) { if (!(layouts = avfilter_make_format64_list(buf->channel_layouts))) return AVERROR(ENOMEM); ff_set_common_channel_layouts(ctx, layouts); - ff_set_common_samplerates (ctx, ff_all_samplerates()); + } return 0; } |