avfilter/af_adelay: make it possible to delay channels by exact number of samples
This commit is contained in:
parent
0ed5c3ce81
commit
b5314333de
@ -513,6 +513,7 @@ Set list of delays in milliseconds for each channel separated by '|'.
|
||||
At least one delay greater than 0 should be provided.
|
||||
Unused delays will be silently ignored. If number of given delays is
|
||||
smaller than number of channels all remaining channels will not be delayed.
|
||||
If you want to delay exact number of samples, append 'S' to number.
|
||||
@end table
|
||||
|
||||
@subsection Examples
|
||||
@ -524,6 +525,13 @@ the second channel (and any other channels that may be present) unchanged.
|
||||
@example
|
||||
adelay=1500|0|500
|
||||
@end example
|
||||
|
||||
@item
|
||||
Delay second channel by 500 samples, the third channel by 700 samples and leave
|
||||
the first channel (and any other channels that may be present) unchanged.
|
||||
@example
|
||||
adelay=0|500S|700S
|
||||
@end example
|
||||
@end itemize
|
||||
|
||||
@section aecho
|
||||
|
@ -138,14 +138,20 @@ static int config_input(AVFilterLink *inlink)
|
||||
for (i = 0; i < s->nb_delays; i++) {
|
||||
ChanDelay *d = &s->chandelay[i];
|
||||
float delay;
|
||||
char type = 0;
|
||||
int ret;
|
||||
|
||||
if (!(arg = av_strtok(p, "|", &saveptr)))
|
||||
break;
|
||||
|
||||
p = NULL;
|
||||
sscanf(arg, "%f", &delay);
|
||||
|
||||
d->delay = delay * inlink->sample_rate / 1000.0;
|
||||
ret = sscanf(arg, "%d%c", &d->delay, &type);
|
||||
if (ret != 2 || type != 'S') {
|
||||
sscanf(arg, "%f", &delay);
|
||||
d->delay = delay * inlink->sample_rate / 1000.0;
|
||||
}
|
||||
|
||||
if (d->delay < 0) {
|
||||
av_log(ctx, AV_LOG_ERROR, "Delay must be non negative number.\n");
|
||||
return AVERROR(EINVAL);
|
||||
|
Loading…
x
Reference in New Issue
Block a user