avfilter/af_adelay: make it possible to delay channels by exact number of samples

pull/230/head
Paul B Mahol 8 years ago
parent 0ed5c3ce81
commit b5314333de
  1. 8
      doc/filters.texi
  2. 10
      libavfilter/af_adelay.c

@ -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…
Cancel
Save