[FFmpeg-cvslog] avfilter/af_biquads: do not abort filtering on bogus options

Paul B Mahol git at videolan.org
Tue Nov 24 13:04:08 EET 2020


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Tue Nov 24 11:49:19 2020 +0100| [040e989223f0b74c746635a7137e9f43fea28664] | committer: Paul B Mahol

avfilter/af_biquads: do not abort filtering on bogus options

Instead, continue returning unfiltered input.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=040e989223f0b74c746635a7137e9f43fea28664
---

 libavfilter/af_biquads.c | 38 +++++++++++++++-----------------------
 1 file changed, 15 insertions(+), 23 deletions(-)

diff --git a/libavfilter/af_biquads.c b/libavfilter/af_biquads.c
index d82eb420a7..549724ec4e 100644
--- a/libavfilter/af_biquads.c
+++ b/libavfilter/af_biquads.c
@@ -116,6 +116,8 @@ typedef struct BiquadsContext {
     int csg;
     int transform_type;
 
+    int bypass;
+
     double gain;
     double frequency;
     double width;
@@ -139,21 +141,6 @@ typedef struct BiquadsContext {
                    int disabled);
 } BiquadsContext;
 
-static av_cold int init(AVFilterContext *ctx)
-{
-    BiquadsContext *s = ctx->priv;
-
-    if (s->filter_type != biquad) {
-        if (s->frequency <= 0 || s->width <= 0) {
-            av_log(ctx, AV_LOG_ERROR, "Invalid frequency %f and/or width %f <= 0\n",
-                   s->frequency, s->width);
-            return AVERROR(EINVAL);
-        }
-    }
-
-    return 0;
-}
-
 static int query_formats(AVFilterContext *ctx)
 {
     AVFilterFormats *formats;
@@ -447,13 +434,15 @@ static int config_filter(AVFilterLink *outlink, int reset)
     double K = tan(w0 / 2.);
     double alpha, beta;
 
-    if (w0 > M_PI) {
-        av_log(ctx, AV_LOG_ERROR,
-               "Invalid frequency %f. Frequency must be less than half the sample-rate %d.\n",
-               s->frequency, inlink->sample_rate);
-        return AVERROR(EINVAL);
+    s->bypass = (((w0 > M_PI || w0 <= 0.) && reset) || (s->width <= 0.)) && (s->filter_type != biquad);
+    if (s->bypass) {
+        av_log(ctx, AV_LOG_WARNING, "Invalid frequency and/or width!\n");
+        return 0;
     }
 
+    if (w0 > M_PI || w0 <= 0.)
+        return AVERROR(EINVAL);
+
     switch (s->width_type) {
     case NONE:
         alpha = 0.0;
@@ -748,6 +737,9 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf)
     ThreadData td;
     int ch;
 
+    if (s->bypass)
+        return ff_filter_frame(outlink, buf);
+
     if (av_frame_is_writable(buf)) {
         out_buf = buf;
     } else {
@@ -820,15 +812,15 @@ static const AVFilterPad outputs[] = {
 
 #define DEFINE_BIQUAD_FILTER(name_, description_)                       \
 AVFILTER_DEFINE_CLASS(name_);                                           \
-static av_cold int name_##_init(AVFilterContext *ctx) \
+static av_cold int name_##_init(AVFilterContext *ctx)                   \
 {                                                                       \
     BiquadsContext *s = ctx->priv;                                      \
     s->class = &name_##_class;                                          \
     s->filter_type = name_;                                             \
-    return init(ctx);                                             \
+    return 0;                                                           \
 }                                                                       \
                                                          \
-AVFilter ff_af_##name_ = {                         \
+AVFilter ff_af_##name_ = {                               \
     .name          = #name_,                             \
     .description   = NULL_IF_CONFIG_SMALL(description_), \
     .priv_size     = sizeof(BiquadsContext),             \



More information about the ffmpeg-cvslog mailing list