lavfi/abuffersink: add sample_rates field to AVABufferSinkParams
authorStefano Sabatini <stefasab@gmail.com>
Sun, 3 Feb 2013 18:33:58 +0000 (19:33 +0100)
committerStefano Sabatini <stefasab@gmail.com>
Sun, 24 Feb 2013 22:21:28 +0000 (23:21 +0100)
Allow to select sample rates.

doc/APIchanges
libavfilter/buffersink.h
libavfilter/sink_buffer.c
libavfilter/version.h

index ca52aa4..8535d9f 100644 (file)
@@ -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().
 
index 825a36a..6f8ac5c 100644 (file)
@@ -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;
 
 /**
index 0edf9c5..ea0cf06 100644 (file)
@@ -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;
 }
 
index a6a2024..93bdf91 100644 (file)
@@ -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, \