lavfi/atempo: raise max tempo limit (v2)

This commit is contained in:
Pavel Koshevoy
2018-06-14 19:19:17 -06:00
parent 78298bce70
commit 29cddc99cd
2 changed files with 17 additions and 6 deletions

View File

@@ -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
@end example @end example
@item @item
To speed up audio to 125% tempo: To speed up audio to 300% tempo:
@example @example
atempo=1.25 atempo=3
@end example
@item
To speed up audio to 300% tempo by daisy-chaining two atempo instances:
@example
atempo=sqrt(3),atempo=sqrt(3)
@end example @end example
@end itemize @end itemize

View File

@@ -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,
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;