From patchwork Thu Oct 10 11:38:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 15685 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 96E4244932D for ; Thu, 10 Oct 2019 14:39:18 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8379A689241; Thu, 10 Oct 2019 14:39:18 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8FBFF6883BE for ; Thu, 10 Oct 2019 14:39:15 +0300 (EEST) Received: by mail-wr1-f67.google.com with SMTP id v8so7478324wrt.2 for ; Thu, 10 Oct 2019 04:39:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=29G2BxOh7uLmpUa3JuS8lot8zI92WSzi3SaiZuSh60A=; b=Dm83jTtOapHhRJH6sUhkfkyid06egDJWqV/t7Bpm9KIKlLrpsiutRM+2I9D655SOTV YBfG+lcpzn5JqsUynTMdfTWBiARyUebyVQBG6K/jPFcHXbNsSwo45InM6QH1LExQQ11x 6ZaEjNxK07qK7gzlcKSr1kz518KeF3UFkNwzU6iCG51aS0IBGGxteeZzd+SpLLkADOby R4NSX01KsYKQZy2r/wyuZubOjG9V/QDCtoXBSeMWWUV2ELv9XDn2JMWxB5ItZqHScVZA dcWqbWfINZJmt2xzehCBPRXNvPvIR+KkMHUzsGyaTLSb15w0UTRfdOCJHbOwmZyz51MW sdFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=29G2BxOh7uLmpUa3JuS8lot8zI92WSzi3SaiZuSh60A=; b=hk8mkKVJigVxSxTUi4UbhyDnijd49oPCqMI1eSbVzmpQ+nPiZYUxdu/sM7SKO4r5ou w5KovODQT+ypQkb6YwqW1/Df/HQqvLWkcYeLyssFvaomVxtRjRvR48vE6U8fLzwrMsb9 V0UaJHIRDP4zzgannv3a77D2wIEd/nAlkJzqqTQYZsy4PUu0G+JrnA5lSOUajtoP4Qo/ o2RQUek7YCDb+5McZACaF3dk8lF/3D1MRblpyCJ8Mwj4vfkU49uWJi+87BjOWqw7GazU xvf9p6LkFlOwsDCX4L0+RI2CXC/brt9kLf618WBxYlbxcKKJ4h0HJ2yimfVhUEZ95Zac AreQ== X-Gm-Message-State: APjAAAX17y8nBjcBRrWo+u2crjfBXob2X9Vsj0WVwCIU5tbMNO37l/DI QE0uE8717NBt7b/Z9SGQQ/uUeIjz X-Google-Smtp-Source: APXvYqzFf348s+AY1yPgX6geyPi93/DyqHRO5jBY0LQF8R5pIxQNWqh9hlF/3NiPFM0aRcFd+ynLJg== X-Received: by 2002:a5d:56ca:: with SMTP id m10mr8004680wrw.369.1570707554623; Thu, 10 Oct 2019 04:39:14 -0700 (PDT) Received: from localhost.localdomain ([37.244.241.148]) by smtp.gmail.com with ESMTPSA id w4sm5442214wrv.66.2019.10.10.04.39.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Oct 2019 04:39:13 -0700 (PDT) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Thu, 10 Oct 2019 13:38:50 +0200 Message-Id: <20191010113851.27196-13-onemda@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191010113851.27196-1-onemda@gmail.com> References: <20191010113851.27196-1-onemda@gmail.com> Subject: [FFmpeg-devel] [PATCH 13/14] avfilter/af_biquads: use ff_filter_process_command() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Paul B Mahol --- libavfilter/af_biquads.c | 134 +++------------------------------------ 1 file changed, 10 insertions(+), 124 deletions(-) diff --git a/libavfilter/af_biquads.c b/libavfilter/af_biquads.c index 247a47256f..c0b2d73351 100644 --- a/libavfilter/af_biquads.c +++ b/libavfilter/af_biquads.c @@ -503,127 +503,12 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf) static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, char *res, int res_len, int flags) { - BiquadsContext *s = ctx->priv; AVFilterLink *outlink = ctx->outputs[0]; + int ret; - if ((!strcmp(cmd, "frequency") || !strcmp(cmd, "f")) && - (s->filter_type == equalizer || - s->filter_type == lowshelf || - s->filter_type == highshelf || - s->filter_type == bass || - s->filter_type == treble || - s->filter_type == bandpass || - s->filter_type == bandreject|| - s->filter_type == lowpass || - s->filter_type == highpass || - s->filter_type == allpass)) { - double freq; - - if (sscanf(args, "%lf", &freq) != 1) { - av_log(ctx, AV_LOG_ERROR, "Invalid frequency value.\n"); - return AVERROR(EINVAL); - } - - s->frequency = freq; - } else if ((!strcmp(cmd, "gain") || !strcmp(cmd, "g")) && - (s->filter_type == equalizer || - s->filter_type == lowshelf || - s->filter_type == highshelf || - s->filter_type == bass || - s->filter_type == treble)) { - double gain; - - if (sscanf(args, "%lf", &gain) != 1) { - av_log(ctx, AV_LOG_ERROR, "Invalid gain value.\n"); - return AVERROR(EINVAL); - } - - s->gain = av_clipd(gain, -900, 900); - } else if (!strcmp(cmd, "mix") || !strcmp(cmd, "m")) { - double mix; - - if (sscanf(args, "%lf", &mix) != 1) { - av_log(ctx, AV_LOG_ERROR, "Invalid mix value.\n"); - return AVERROR(EINVAL); - } - - s->mix = av_clipd(mix, 0, 1); - } else if ((!strcmp(cmd, "width") || !strcmp(cmd, "w")) && - (s->filter_type == equalizer || - s->filter_type == lowshelf || - s->filter_type == highshelf || - s->filter_type == bass || - s->filter_type == treble || - s->filter_type == bandpass || - s->filter_type == bandreject|| - s->filter_type == lowpass || - s->filter_type == highpass || - s->filter_type == allpass)) { - double width; - - if (sscanf(args, "%lf", &width) != 1) { - av_log(ctx, AV_LOG_ERROR, "Invalid width value.\n"); - return AVERROR(EINVAL); - } - - s->width = width; - } else if ((!strcmp(cmd, "width_type") || !strcmp(cmd, "t")) && - (s->filter_type == equalizer || - s->filter_type == lowshelf || - s->filter_type == highshelf || - s->filter_type == bass || - s->filter_type == treble || - s->filter_type == bandpass || - s->filter_type == bandreject|| - s->filter_type == lowpass || - s->filter_type == highpass || - s->filter_type == allpass)) { - char width_type; - - if (sscanf(args, "%c", &width_type) != 1) { - av_log(ctx, AV_LOG_ERROR, "Invalid width_type value.\n"); - return AVERROR(EINVAL); - } - - switch (width_type) { - case 'h': width_type = HERTZ; break; - case 'q': width_type = QFACTOR; break; - case 'o': width_type = OCTAVE; break; - case 's': width_type = SLOPE; break; - case 'k': width_type = KHERTZ; break; - default: - av_log(ctx, AV_LOG_ERROR, "Invalid width_type value: %c\n", width_type); - return AVERROR(EINVAL); - } - - s->width_type = width_type; - } else if ((!strcmp(cmd, "a0") || - !strcmp(cmd, "a1") || - !strcmp(cmd, "a2") || - !strcmp(cmd, "b0") || - !strcmp(cmd, "b1") || - !strcmp(cmd, "b2")) && - s->filter_type == biquad) { - double value; - - if (sscanf(args, "%lf", &value) != 1) { - av_log(ctx, AV_LOG_ERROR, "Invalid biquad value.\n"); - return AVERROR(EINVAL); - } - - if (!strcmp(cmd, "a0")) - s->a0 = value; - else if (!strcmp(cmd, "a1")) - s->a1 = value; - else if (!strcmp(cmd, "a2")) - s->a2 = value; - else if (!strcmp(cmd, "b0")) - s->b0 = value; - else if (!strcmp(cmd, "b1")) - s->b1 = value; - else if (!strcmp(cmd, "b2")) - s->b2 = value; - } + ret = ff_filter_process_command(ctx, cmd, args, res, res_len, flags); + if (ret < 0) + return ret; return config_filter(outlink, 0); } @@ -654,7 +539,8 @@ static const AVFilterPad outputs[] = { }; #define OFFSET(x) offsetof(BiquadsContext, x) -#define FLAGS AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM +#define FLAGS AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_RUNTIME_PARAM +#define AF AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM #define DEFINE_BIQUAD_FILTER(name_, description_) \ AVFILTER_DEFINE_CLASS(name_); \ @@ -810,8 +696,8 @@ static const AVOption lowpass_options[] = { {"k", "kHz", 0, AV_OPT_TYPE_CONST, {.i64=KHERTZ}, 0, 0, FLAGS, "width_type"}, {"width", "set width", OFFSET(width), AV_OPT_TYPE_DOUBLE, {.dbl=0.707}, 0, 99999, FLAGS}, {"w", "set width", OFFSET(width), AV_OPT_TYPE_DOUBLE, {.dbl=0.707}, 0, 99999, FLAGS}, - {"poles", "set number of poles", OFFSET(poles), AV_OPT_TYPE_INT, {.i64=2}, 1, 2, FLAGS}, - {"p", "set number of poles", OFFSET(poles), AV_OPT_TYPE_INT, {.i64=2}, 1, 2, FLAGS}, + {"poles", "set number of poles", OFFSET(poles), AV_OPT_TYPE_INT, {.i64=2}, 1, 2, AF}, + {"p", "set number of poles", OFFSET(poles), AV_OPT_TYPE_INT, {.i64=2}, 1, 2, AF}, {"mix", "set mix", OFFSET(mix), AV_OPT_TYPE_DOUBLE, {.dbl=1}, 0, 1, FLAGS}, {"m", "set mix", OFFSET(mix), AV_OPT_TYPE_DOUBLE, {.dbl=1}, 0, 1, FLAGS}, {"channels", "set channels to filter", OFFSET(channels), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=-1}, INT64_MIN, INT64_MAX, FLAGS}, @@ -834,8 +720,8 @@ static const AVOption highpass_options[] = { {"k", "kHz", 0, AV_OPT_TYPE_CONST, {.i64=KHERTZ}, 0, 0, FLAGS, "width_type"}, {"width", "set width", OFFSET(width), AV_OPT_TYPE_DOUBLE, {.dbl=0.707}, 0, 99999, FLAGS}, {"w", "set width", OFFSET(width), AV_OPT_TYPE_DOUBLE, {.dbl=0.707}, 0, 99999, FLAGS}, - {"poles", "set number of poles", OFFSET(poles), AV_OPT_TYPE_INT, {.i64=2}, 1, 2, FLAGS}, - {"p", "set number of poles", OFFSET(poles), AV_OPT_TYPE_INT, {.i64=2}, 1, 2, FLAGS}, + {"poles", "set number of poles", OFFSET(poles), AV_OPT_TYPE_INT, {.i64=2}, 1, 2, AF}, + {"p", "set number of poles", OFFSET(poles), AV_OPT_TYPE_INT, {.i64=2}, 1, 2, AF}, {"mix", "set mix", OFFSET(mix), AV_OPT_TYPE_DOUBLE, {.dbl=1}, 0, 1, FLAGS}, {"m", "set mix", OFFSET(mix), AV_OPT_TYPE_DOUBLE, {.dbl=1}, 0, 1, FLAGS}, {"channels", "set channels to filter", OFFSET(channels), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=-1}, INT64_MIN, INT64_MAX, FLAGS},