summaryrefslogtreecommitdiffstats
path: root/libavfilter/af_rubberband.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2015-09-30 21:40:54 +0200
committerPaul B Mahol <onemda@gmail.com>2015-10-02 10:37:44 +0200
commit1d7d8244943cfbfce21049453f56e0d72f2c6d8a (patch)
tree8850e9bd70700b55b848dc98595fadeec743a4a8 /libavfilter/af_rubberband.c
parent562ba4a827ceb9ed5b7d056484a9c2312a5458c5 (diff)
downloadffmpeg-streaming-1d7d8244943cfbfce21049453f56e0d72f2c6d8a.zip
ffmpeg-streaming-1d7d8244943cfbfce21049453f56e0d72f2c6d8a.tar.gz
avfilter/af_rubberband: add process_command()
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavfilter/af_rubberband.c')
-rw-r--r--libavfilter/af_rubberband.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/libavfilter/af_rubberband.c b/libavfilter/af_rubberband.c
index 0a15fdc..ded2544 100644
--- a/libavfilter/af_rubberband.c
+++ b/libavfilter/af_rubberband.c
@@ -207,6 +207,38 @@ static int request_frame(AVFilterLink *outlink)
return ret;
}
+static int process_command(AVFilterContext *ctx, const char *cmd, const char *args,
+ char *res, int res_len, int flags)
+{
+ RubberBandContext *s = ctx->priv;
+
+ if (!strcmp(cmd, "tempo")) {
+ double arg;
+
+ sscanf(args, "%lf", &arg);
+ if (arg < 0.01 || arg > 100) {
+ av_log(ctx, AV_LOG_ERROR,
+ "Tempo scale factor '%f' out of range\n", arg);
+ return AVERROR(EINVAL);
+ }
+ rubberband_set_time_ratio(s->rbs, 1. / arg);
+ }
+
+ if (!strcmp(cmd, "pitch")) {
+ double arg;
+
+ sscanf(args, "%lf", &arg);
+ if (arg < 0.01 || arg > 100) {
+ av_log(ctx, AV_LOG_ERROR,
+ "Pitch scale factor '%f' out of range\n", arg);
+ return AVERROR(EINVAL);
+ }
+ rubberband_set_pitch_scale(s->rbs, arg);
+ }
+
+ return 0;
+}
+
static const AVFilterPad rubberband_inputs[] = {
{
.name = "default",
@@ -235,4 +267,5 @@ AVFilter ff_af_rubberband = {
.uninit = uninit,
.inputs = rubberband_inputs,
.outputs = rubberband_outputs,
+ .process_command = process_command,
};
OpenPOWER on IntegriCloud