summaryrefslogtreecommitdiff
path: root/libavfilter/af_aresample.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-05-17 13:10:14 +0200
committerMichael Niedermayer <michaelni@gmx.at>2012-05-17 13:10:14 +0200
commite3c6b612635b32d2de4ffac1c198fb5a76dd95d3 (patch)
treee67df33508542a07b6ccc7ecd66c4f8bb81c9461 /libavfilter/af_aresample.c
parent47c2e52bc684fd8b913a244ae35010b38ab9e2bf (diff)
downloadffmpeg-e3c6b612635b32d2de4ffac1c198fb5a76dd95d3.tar.gz
af_aresample: support all swresample parameters.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavfilter/af_aresample.c')
-rw-r--r--libavfilter/af_aresample.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/libavfilter/af_aresample.c b/libavfilter/af_aresample.c
index b9af42e6a5..aea5e5e75e 100644
--- a/libavfilter/af_aresample.c
+++ b/libavfilter/af_aresample.c
@@ -24,6 +24,8 @@
* resampling audio filter
*/
+#include "libavutil/avstring.h"
+#include "libavutil/opt.h"
#include "libswresample/swresample.h"
#include "avfilter.h"
#include "audio.h"
@@ -38,16 +40,33 @@ typedef struct {
static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
{
AResampleContext *aresample = ctx->priv;
- int ret;
+ int ret = 0;
+ char *argd = av_strdup(args);
+
+ aresample->swr = swr_alloc();
+ if (!aresample->swr)
+ return AVERROR(ENOMEM);
if (args) {
- if ((ret = ff_parse_sample_rate(&aresample->out_rate, args, ctx)) < 0)
- return ret;
+ char *ptr=argd, *token;
+
+ while(token = av_strtok(ptr, ":", &ptr)) {
+ char *value;
+ av_strtok(token, "=", &value);
+
+ if(value) {
+ if((ret=av_opt_set(aresample->swr, token, value, 0)) < 0)
+ goto end;
+ } else if ((ret = ff_parse_sample_rate(&aresample->out_rate, token, ctx)) < 0)
+ goto end;
+ }
+
} else {
aresample->out_rate = -1;
}
-
- return 0;
+end:
+ av_free(argd);
+ return ret;
}
static av_cold void uninit(AVFilterContext *ctx)
@@ -105,7 +124,6 @@ static int config_output(AVFilterLink *outlink)
outlink->sample_rate = aresample->out_rate;
outlink->time_base = (AVRational) {1, aresample->out_rate};
- //TODO: make the resampling parameters (filter size, phrase shift, linear, cutoff) configurable
aresample->swr = swr_alloc_set_opts(aresample->swr,
outlink->channel_layout, outlink->format, outlink->sample_rate,
inlink->channel_layout, inlink->format, inlink->sample_rate,