diff mbox

[FFmpeg-devel] avfilter/acrossfade: allow skipping fade on inputs

Message ID f3262f3a-8b9b-6358-6780-17ee10187613@gyani.pro
State Superseded
Headers show

Commit Message

Gyan Doshi Jan. 23, 2019, 8:11 a.m. UTC
From 1aa1db056e1e9887e6467a0c9e10276be78ff623 Mon Sep 17 00:00:00 2001
From: Gyan Doshi <ffmpeg@gyani.pro>
Date: Wed, 23 Jan 2019 13:35:23 +0530
Subject: [PATCH] avfilter/acrossfade: allow skipping fade on inputs

---
 doc/filters.texi       |  2 ++
 libavfilter/af_afade.c | 10 +++++++---
 2 files changed, 9 insertions(+), 3 deletions(-)

Comments

Paul B Mahol Jan. 23, 2019, 9:30 a.m. UTC | #1
On 1/23/19, Gyan <ffmpeg@gyani.pro> wrote:
>
>

Why? afade needs change too.
Gyan Doshi Jan. 23, 2019, 10:14 a.m. UTC | #2
On 23-01-2019 03:00 PM, Paul B Mahol wrote:
> On 1/23/19, Gyan <ffmpeg@gyani.pro> wrote:
>>
> Why? afade needs change too.

If a user doesn't want to apply fade, then they can simply not add afade 
filter. This change is meant for users who want to combine two audio 
streams with overlap but don't want to apply fade to audio during overlap.

Gyan
Paul B Mahol Jan. 23, 2019, 2:10 p.m. UTC | #3
On 1/23/19, Gyan <ffmpeg@gyani.pro> wrote:
>
>
> On 23-01-2019 03:00 PM, Paul B Mahol wrote:
>> On 1/23/19, Gyan <ffmpeg@gyani.pro> wrote:
>>>
>> Why? afade needs change too.
>
> If a user doesn't want to apply fade, then they can simply not add afade
> filter. This change is meant for users who want to combine two audio
> streams with overlap but don't want to apply fade to audio during overlap.
>

I do not like such reasoning, also you changed afade too with this approach.
diff mbox

Patch

diff --git a/doc/filters.texi b/doc/filters.texi
index d06dfe089f..9e805bc1cd 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -475,6 +475,8 @@  Set curve for cross fade transition for first stream.
 Set curve for cross fade transition for second stream.
 
 For description of available curve types see @ref{afade} filter description.
+In addition, acrossfade supports skipping application of fade to an input,
+if curve value is set to @code{nofade}.
 @end table
 
 @subsection Examples
diff --git a/libavfilter/af_afade.c b/libavfilter/af_afade.c
index 751db7da4d..f1e80013d9 100644
--- a/libavfilter/af_afade.c
+++ b/libavfilter/af_afade.c
@@ -51,7 +51,7 @@  typedef struct AudioFadeContext {
                               int curve0, int curve1);
 } AudioFadeContext;
 
-enum CurveType { TRI, QSIN, ESIN, HSIN, LOG, IPAR, QUA, CUB, SQU, CBR, PAR, EXP, IQSIN, IHSIN, DESE, DESI, LOSI, NB_CURVES };
+enum CurveType { TRI, QSIN, ESIN, HSIN, LOG, IPAR, QUA, CUB, SQU, CBR, PAR, EXP, IQSIN, IHSIN, DESE, DESI, LOSI, NONE, NB_CURVES };
 
 #define OFFSET(x) offsetof(AudioFadeContext, x)
 #define FLAGS AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
@@ -153,6 +153,9 @@  static double fade_gain(int curve, int64_t index, int64_t range)
                    gain = (A - B) / (C - B);
                }
         break;
+    case NONE:
+        gain = 1.0;
+        break;
     }
 
     return gain;
@@ -241,8 +244,8 @@  static const AVOption afade_options[] = {
     { "st",           "set time to start fading",                    OFFSET(start_time),   AV_OPT_TYPE_DURATION, {.i64 = 0. }, 0, INT64_MAX, FLAGS },
     { "duration",     "set fade duration",                           OFFSET(duration),     AV_OPT_TYPE_DURATION, {.i64 = 0. }, 0, INT64_MAX, FLAGS },
     { "d",            "set fade duration",                           OFFSET(duration),     AV_OPT_TYPE_DURATION, {.i64 = 0. }, 0, INT64_MAX, FLAGS },
-    { "curve",        "set fade curve type",                         OFFSET(curve),        AV_OPT_TYPE_INT,    {.i64 = TRI  }, 0, NB_CURVES - 1, FLAGS, "curve" },
-    { "c",            "set fade curve type",                         OFFSET(curve),        AV_OPT_TYPE_INT,    {.i64 = TRI  }, 0, NB_CURVES - 1, FLAGS, "curve" },
+    { "curve",        "set fade curve type",                         OFFSET(curve),        AV_OPT_TYPE_INT,    {.i64 = TRI  }, 0, NB_CURVES - 2, FLAGS, "curve" },
+    { "c",            "set fade curve type",                         OFFSET(curve),        AV_OPT_TYPE_INT,    {.i64 = TRI  }, 0, NB_CURVES - 2, FLAGS, "curve" },
     { "tri",          "linear slope",                                0,                    AV_OPT_TYPE_CONST,  {.i64 = TRI  }, 0, 0, FLAGS, "curve" },
     { "qsin",         "quarter of sine wave",                        0,                    AV_OPT_TYPE_CONST,  {.i64 = QSIN }, 0, 0, FLAGS, "curve" },
     { "esin",         "exponential sine wave",                       0,                    AV_OPT_TYPE_CONST,  {.i64 = ESIN }, 0, 0, FLAGS, "curve" },
@@ -380,6 +383,7 @@  static const AVOption acrossfade_options[] = {
     {     "dese",     "double-exponential seat",                       0,                    AV_OPT_TYPE_CONST,  {.i64 = DESE }, 0, 0, FLAGS, "curve" },
     {     "desi",     "double-exponential sigmoid",                    0,                    AV_OPT_TYPE_CONST,  {.i64 = DESI }, 0, 0, FLAGS, "curve" },
     {     "losi",     "logistic sigmoid",                              0,                    AV_OPT_TYPE_CONST,  {.i64 = LOSI }, 0, 0, FLAGS, "curve" },
+    {     "nofade",   "no fade; keep audio as-is",                     0,                    AV_OPT_TYPE_CONST,  {.i64 = NONE }, 0, 0, FLAGS, "curve" },
     { "curve2",       "set fade curve type for 2nd stream",            OFFSET(curve2),       AV_OPT_TYPE_INT,    {.i64 = TRI  }, 0, NB_CURVES - 1, FLAGS, "curve" },
     { "c2",           "set fade curve type for 2nd stream",            OFFSET(curve2),       AV_OPT_TYPE_INT,    {.i64 = TRI  }, 0, NB_CURVES - 1, FLAGS, "curve" },
     { NULL }