[FFmpeg-devel] lavfi/atempo: raise max tempo limit (v2)

Submitted by Pavel Koshevoy on June 8, 2018, 2:15 a.m.

Details

Message ID 20180608021558.23862-1-pkoshevoy@gmail.com
State Accepted
Commit 29cddc99cd8302e462bbae572e885e88f63d6dc3
Headers show

Commit Message

Pavel Koshevoy June 8, 2018, 2:15 a.m.
---
 doc/filters.texi        | 17 ++++++++++++++---
 libavfilter/af_atempo.c |  6 +++---
 2 files changed, 17 insertions(+), 6 deletions(-)

Comments

Pavel Koshevoy June 13, 2018, 1:39 p.m.
On Thu, Jun 7, 2018 at 8:16 PM Pavel Koshevoy <pkoshevoy@gmail.com> wrote:
>
> ---
>  doc/filters.texi        | 17 ++++++++++++++---
>  libavfilter/af_atempo.c |  6 +++---
>  2 files changed, 17 insertions(+), 6 deletions(-)
>
> diff --git a/doc/filters.texi b/doc/filters.texi
> index 256ab42b00..6b98b04774 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -1986,7 +1986,12 @@ Adjust audio tempo.
>
>  The filter accepts exactly one parameter, the audio tempo. If not
>  specified then the filter will assume nominal 1.0 tempo. Tempo must
> -be in the [0.5, 2.0] range.
> +be in the [0.5, 100.0] range.
> +
> +Note that tempo greater than 2 will skip some samples rather than
> +blend them in.  If for any reason this is a concern it is always
> +possible to daisy-chain several instances of atempo to achieve the
> +desired product tempo.
>
>  @subsection Examples
>
> @@ -1998,9 +2003,15 @@ atempo=0.8
>  @end example
>
>  @item
> -To speed up audio to 125% tempo:
> +To speed up audio to 300% tempo:
> +@example
> +atempo=3
> +@end example
> +
> +@item
> +To speed up audio to 300% tempo by daisy-chaining two atempo instances:
>  @example
> -atempo=1.25
> +atempo=sqrt(3),atempo=sqrt(3)
>  @end example
>  @end itemize
>
> diff --git a/libavfilter/af_atempo.c b/libavfilter/af_atempo.c
> index 8b214bccd7..52f15f2769 100644
> --- a/libavfilter/af_atempo.c
> +++ b/libavfilter/af_atempo.c
> @@ -153,7 +153,7 @@ typedef struct ATempoContext {
>
>  static const AVOption atempo_options[] = {
>      { "tempo", "set tempo scale factor",
> -      OFFSET(tempo), AV_OPT_TYPE_DOUBLE, { .dbl = 1.0 }, 0.5, 2.0,
> +      OFFSET(tempo), AV_OPT_TYPE_DOUBLE, { .dbl = 1.0 }, 0.5, 100.0,
>        AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_FILTERING_PARAM },
>      { NULL }
>  };
> @@ -439,8 +439,8 @@ static int yae_load_data(ATempoContext *atempo,
>          return 0;
>      }
>
> -    // samples are not expected to be skipped:
> -    av_assert0(read_size <= atempo->ring);
> +    // samples are not expected to be skipped, unless tempo is greater than 2:
> +    av_assert0(read_size <= atempo->ring || atempo->tempo > 2.0);
>
>      while (atempo->position[0] < stop_here && src < src_end) {
>          int src_samples = (src_end - src) / atempo->stride;
> --
> 2.16.4
>


Any objections if I apply this?

    Pavel.
Pavel Koshevoy June 15, 2018, 1:20 a.m.
On 06/13/2018 07:39 AM, Pavel Koshevoy wrote:
> On Thu, Jun 7, 2018 at 8:16 PM Pavel Koshevoy <pkoshevoy@gmail.com> wrote:
>> ---
>>   doc/filters.texi        | 17 ++++++++++++++---
>>   libavfilter/af_atempo.c |  6 +++---
>>   2 files changed, 17 insertions(+), 6 deletions(-)
>>
>> diff --git a/doc/filters.texi b/doc/filters.texi
>> index 256ab42b00..6b98b04774 100644
>> --- a/doc/filters.texi
>> +++ b/doc/filters.texi
>> @@ -1986,7 +1986,12 @@ Adjust audio tempo.
>>
>>   The filter accepts exactly one parameter, the audio tempo. If not
>>   specified then the filter will assume nominal 1.0 tempo. Tempo must
>> -be in the [0.5, 2.0] range.
>> +be in the [0.5, 100.0] range.
>> +
>> +Note that tempo greater than 2 will skip some samples rather than
>> +blend them in.  If for any reason this is a concern it is always
>> +possible to daisy-chain several instances of atempo to achieve the
>> +desired product tempo.
>>
>>   @subsection Examples
>>
>> @@ -1998,9 +2003,15 @@ atempo=0.8
>>   @end example
>>
>>   @item
>> -To speed up audio to 125% tempo:
>> +To speed up audio to 300% tempo:
>> +@example
>> +atempo=3
>> +@end example
>> +
>> +@item
>> +To speed up audio to 300% tempo by daisy-chaining two atempo instances:
>>   @example
>> -atempo=1.25
>> +atempo=sqrt(3),atempo=sqrt(3)
>>   @end example
>>   @end itemize
>>
>> diff --git a/libavfilter/af_atempo.c b/libavfilter/af_atempo.c
>> index 8b214bccd7..52f15f2769 100644
>> --- a/libavfilter/af_atempo.c
>> +++ b/libavfilter/af_atempo.c
>> @@ -153,7 +153,7 @@ typedef struct ATempoContext {
>>
>>   static const AVOption atempo_options[] = {
>>       { "tempo", "set tempo scale factor",
>> -      OFFSET(tempo), AV_OPT_TYPE_DOUBLE, { .dbl = 1.0 }, 0.5, 2.0,
>> +      OFFSET(tempo), AV_OPT_TYPE_DOUBLE, { .dbl = 1.0 }, 0.5, 100.0,
>>         AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_FILTERING_PARAM },
>>       { NULL }
>>   };
>> @@ -439,8 +439,8 @@ static int yae_load_data(ATempoContext *atempo,
>>           return 0;
>>       }
>>
>> -    // samples are not expected to be skipped:
>> -    av_assert0(read_size <= atempo->ring);
>> +    // samples are not expected to be skipped, unless tempo is greater than 2:
>> +    av_assert0(read_size <= atempo->ring || atempo->tempo > 2.0);
>>
>>       while (atempo->position[0] < stop_here && src < src_end) {
>>           int src_samples = (src_end - src) / atempo->stride;
>> --
>> 2.16.4
>>
>
> Any objections if I apply this?
>
>      Pavel.



Applied, pushed

     Pavel.

Patch hide | download patch | download mbox

diff --git a/doc/filters.texi b/doc/filters.texi
index 256ab42b00..6b98b04774 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -1986,7 +1986,12 @@  Adjust audio tempo.
 
 The filter accepts exactly one parameter, the audio tempo. If not
 specified then the filter will assume nominal 1.0 tempo. Tempo must
-be in the [0.5, 2.0] range.
+be in the [0.5, 100.0] range.
+
+Note that tempo greater than 2 will skip some samples rather than
+blend them in.  If for any reason this is a concern it is always
+possible to daisy-chain several instances of atempo to achieve the
+desired product tempo.
 
 @subsection Examples
 
@@ -1998,9 +2003,15 @@  atempo=0.8
 @end example
 
 @item
-To speed up audio to 125% tempo:
+To speed up audio to 300% tempo:
+@example
+atempo=3
+@end example
+
+@item
+To speed up audio to 300% tempo by daisy-chaining two atempo instances:
 @example
-atempo=1.25
+atempo=sqrt(3),atempo=sqrt(3)
 @end example
 @end itemize
 
diff --git a/libavfilter/af_atempo.c b/libavfilter/af_atempo.c
index 8b214bccd7..52f15f2769 100644
--- a/libavfilter/af_atempo.c
+++ b/libavfilter/af_atempo.c
@@ -153,7 +153,7 @@  typedef struct ATempoContext {
 
 static const AVOption atempo_options[] = {
     { "tempo", "set tempo scale factor",
-      OFFSET(tempo), AV_OPT_TYPE_DOUBLE, { .dbl = 1.0 }, 0.5, 2.0,
+      OFFSET(tempo), AV_OPT_TYPE_DOUBLE, { .dbl = 1.0 }, 0.5, 100.0,
       AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_FILTERING_PARAM },
     { NULL }
 };
@@ -439,8 +439,8 @@  static int yae_load_data(ATempoContext *atempo,
         return 0;
     }
 
-    // samples are not expected to be skipped:
-    av_assert0(read_size <= atempo->ring);
+    // samples are not expected to be skipped, unless tempo is greater than 2:
+    av_assert0(read_size <= atempo->ring || atempo->tempo > 2.0);
 
     while (atempo->position[0] < stop_here && src < src_end) {
         int src_samples = (src_end - src) / atempo->stride;