summaryrefslogtreecommitdiff
path: root/libavfilter/sink_buffer.c
diff options
context:
space:
mode:
authorNicolas George <nicolas.george@normalesup.org>2012-06-24 23:28:29 +0200
committerNicolas George <nicolas.george@normalesup.org>2012-06-26 13:17:30 +0200
commit784675ca9146490035314a15abcd6b98887eb82d (patch)
tree5188eb8164cb59de4b01dedc94d2797e88c9e27e /libavfilter/sink_buffer.c
parenta2bd8a938427e6f7bee500575dd376084c7231f9 (diff)
sink_buffer: make opaque argument optional.
Diffstat (limited to 'libavfilter/sink_buffer.c')
-rw-r--r--libavfilter/sink_buffer.c36
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;
}