diff --git a/doc/APIchanges b/doc/APIchanges index ca52aa4eef..8535d9fe36 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,9 @@ libavutil: 2012-10-22 API changes, most recent first: +2013-02-24 - xxxxxx - lavfi 3.41.100 - buffersink.h + Add sample_rates field to AVABufferSinkParams. + 2013-01-17 - a1a707f - lavf 54.61.100 Add av_codec_get_tag2(). diff --git a/libavfilter/buffersink.h b/libavfilter/buffersink.h index 825a36a0a4..6f8ac5cdf1 100644 --- a/libavfilter/buffersink.h +++ b/libavfilter/buffersink.h @@ -48,6 +48,7 @@ typedef struct { const int64_t *channel_layouts; ///< list of allowed channel layouts, terminated by -1 const int *channel_counts; ///< list of allowed channel counts, terminated by -1 int all_channel_counts; ///< if not 0, accept any channel count or layout + int *sample_rates; ///< list of allowed sample rates, terminated by -1 } AVABufferSinkParams; /** diff --git a/libavfilter/sink_buffer.c b/libavfilter/sink_buffer.c index 0edf9c5e0b..ea0cf06e93 100644 --- a/libavfilter/sink_buffer.c +++ b/libavfilter/sink_buffer.c @@ -62,6 +62,7 @@ typedef struct { enum AVSampleFormat *sample_fmts; ///< list of accepted sample formats, terminated by AV_SAMPLE_FMT_NONE int64_t *channel_layouts; ///< list of accepted channel layouts, terminated by -1 int all_channel_counts; + int *sample_rates; ///< list of accepted sample rates, terminated by -1 } BufferSinkContext; #define FIFO_INIT_SIZE 8 @@ -303,6 +304,11 @@ static av_cold int asink_init(AVFilterContext *ctx, const char *args, void *opaq if (!buf->sample_fmts) return AVERROR(ENOMEM); } + if (params && params->sample_rates) { + buf->sample_rates = ff_copy_int_list(params->sample_rates); + if (!buf->sample_rates) + return AVERROR(ENOMEM); + } if (params && (params->channel_layouts || params->channel_counts)) { if (params->all_channel_counts) { av_log(ctx, AV_LOG_ERROR, @@ -324,6 +330,7 @@ static av_cold void asink_uninit(AVFilterContext *ctx) BufferSinkContext *buf = ctx->priv; av_freep(&buf->sample_fmts); + av_freep(&buf->sample_rates); av_freep(&buf->channel_layouts); common_uninit(ctx); } @@ -348,6 +355,13 @@ static int asink_query_formats(AVFilterContext *ctx) ff_set_common_channel_layouts(ctx, layouts); } + if (buf->sample_rates) { + formats = ff_make_format_list(buf->sample_rates); + if (!formats) + return AVERROR(ENOMEM); + ff_set_common_samplerates(ctx, formats); + } + return 0; } diff --git a/libavfilter/version.h b/libavfilter/version.h index a6a2024a24..93bdf91d36 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -29,7 +29,7 @@ #include "libavutil/avutil.h" #define LIBAVFILTER_VERSION_MAJOR 3 -#define LIBAVFILTER_VERSION_MINOR 40 +#define LIBAVFILTER_VERSION_MINOR 41 #define LIBAVFILTER_VERSION_MICRO 100 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \