Commit 29cddc99 authored by Pavel Koshevoy's avatar Pavel Koshevoy

lavfi/atempo: raise max tempo limit (v2)

parent 78298bce
...@@ -1986,7 +1986,12 @@ Adjust audio tempo. ...@@ -1986,7 +1986,12 @@ Adjust audio tempo.
The filter accepts exactly one parameter, the audio tempo. If not The filter accepts exactly one parameter, the audio tempo. If not
specified then the filter will assume nominal 1.0 tempo. Tempo must 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 @subsection Examples
...@@ -1998,9 +2003,15 @@ atempo=0.8 ...@@ -1998,9 +2003,15 @@ atempo=0.8
@end example @end example
@item @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 @example
atempo=1.25 atempo=sqrt(3),atempo=sqrt(3)
@end example @end example
@end itemize @end itemize
......
...@@ -153,7 +153,7 @@ typedef struct ATempoContext { ...@@ -153,7 +153,7 @@ typedef struct ATempoContext {
static const AVOption atempo_options[] = { static const AVOption atempo_options[] = {
{ "tempo", "set tempo scale factor", { "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 }, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_FILTERING_PARAM },
{ NULL } { NULL }
}; };
...@@ -439,8 +439,8 @@ static int yae_load_data(ATempoContext *atempo, ...@@ -439,8 +439,8 @@ static int yae_load_data(ATempoContext *atempo,
return 0; return 0;
} }
// samples are not expected to be skipped: // samples are not expected to be skipped, unless tempo is greater than 2:
av_assert0(read_size <= atempo->ring); av_assert0(read_size <= atempo->ring || atempo->tempo > 2.0);
while (atempo->position[0] < stop_here && src < src_end) { while (atempo->position[0] < stop_here && src < src_end) {
int src_samples = (src_end - src) / atempo->stride; int src_samples = (src_end - src) / atempo->stride;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment