@@ -42,6 +42,7 @@
typedef struct BufferSinkContext {
const AVClass *class;
unsigned warning_limit;
+ unsigned frame_size;
/* only used for video */
enum AVPixelFormat *pixel_fmts; ///< list of accepted pixel formats
@@ -162,11 +163,25 @@ static int activate(AVFilterContext *ctx)
return 0;
}
+static int config_input_audio(AVFilterLink *inlink)
+{
+ BufferSinkContext *buf = inlink->dst->priv;
+ FilterLink *l = ff_filter_link(inlink);
+
+ l->min_samples = l->max_samples = buf->frame_size;
+
+ return 0;
+}
+
void av_buffersink_set_frame_size(AVFilterContext *ctx, unsigned frame_size)
{
- FilterLink *inlink = ff_filter_link(ctx->inputs[0]);
+ BufferSinkContext *buf = ctx->priv;
+ buf->frame_size = frame_size;
- inlink->min_samples = inlink->max_samples = frame_size;
+ if (ctx->inputs && ctx->inputs[0]) {
+ FilterLink *l = ff_filter_link(ctx->inputs[0]);
+ l->min_samples = l->max_samples = buf->frame_size;
+ }
}
#define MAKE_AVFILTERLINK_ACCESSOR(type, field) \
@@ -368,6 +383,14 @@ const AVFilter ff_vsink_buffer = {
FILTER_QUERY_FUNC(vsink_query_formats),
};
+static const AVFilterPad inputs_audio[] = {
+ {
+ .name = "default",
+ .type = AVMEDIA_TYPE_AUDIO,
+ .config_props = config_input_audio,
+ },
+};
+
const AVFilter ff_asink_abuffer = {
.name = "abuffersink",
.description = NULL_IF_CONFIG_SMALL("Buffer audio frames, and make them available to the end of the filter graph."),
@@ -376,7 +399,7 @@ const AVFilter ff_asink_abuffer = {
.init = common_init,
.uninit = uninit,
.activate = activate,
- FILTER_INPUTS(ff_audio_default_filterpad),
+ FILTER_INPUTS(inputs_audio),
.outputs = NULL,
FILTER_QUERY_FUNC(asink_query_formats),
};