mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-05-13 21:26:33 +02:00
avfilter/af_adelay: add option which changes how unset channels are delayed
Fixes #8032.
This commit is contained in:
parent
9a53e01252
commit
0633d87ae6
@ -688,6 +688,10 @@ Unused delays will be silently ignored. If number of given delays is
|
|||||||
smaller than number of channels all remaining channels will not be delayed.
|
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.
|
If you want to delay exact number of samples, append 'S' to number.
|
||||||
If you want instead to delay in seconds, append 's' to number.
|
If you want instead to delay in seconds, append 's' to number.
|
||||||
|
|
||||||
|
@item all
|
||||||
|
Use last set delay for all remaining channels. By default is disabled.
|
||||||
|
This option if enabled changes how option @code{delays} is interpreted.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@subsection Examples
|
@subsection Examples
|
||||||
@ -706,6 +710,12 @@ the first channel (and any other channels that may be present) unchanged.
|
|||||||
@example
|
@example
|
||||||
adelay=0|500S|700S
|
adelay=0|500S|700S
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
@item
|
||||||
|
Delay all channels by same number of samples:
|
||||||
|
@example
|
||||||
|
adelay=delays=64S:all=1
|
||||||
|
@end example
|
||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
@section aderivative, aintegral
|
@section aderivative, aintegral
|
||||||
|
@ -36,6 +36,7 @@ typedef struct ChanDelay {
|
|||||||
|
|
||||||
typedef struct AudioDelayContext {
|
typedef struct AudioDelayContext {
|
||||||
const AVClass *class;
|
const AVClass *class;
|
||||||
|
int all;
|
||||||
char *delays;
|
char *delays;
|
||||||
ChanDelay *chandelay;
|
ChanDelay *chandelay;
|
||||||
int nb_delays;
|
int nb_delays;
|
||||||
@ -54,6 +55,7 @@ typedef struct AudioDelayContext {
|
|||||||
|
|
||||||
static const AVOption adelay_options[] = {
|
static const AVOption adelay_options[] = {
|
||||||
{ "delays", "set list of delays for each channel", OFFSET(delays), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, A },
|
{ "delays", "set list of delays for each channel", OFFSET(delays), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, A },
|
||||||
|
{ "all", "use last available delay for remained channels", OFFSET(all), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, A },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -163,6 +165,11 @@ static int config_input(AVFilterLink *inlink)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (s->all) {
|
||||||
|
for (int j = i + 1; j < s->nb_delays; j++)
|
||||||
|
s->chandelay[j].delay = s->chandelay[i].delay;
|
||||||
|
}
|
||||||
|
|
||||||
s->padding = s->chandelay[0].delay;
|
s->padding = s->chandelay[0].delay;
|
||||||
for (i = 1; i < s->nb_delays; i++) {
|
for (i = 1; i < s->nb_delays; i++) {
|
||||||
ChanDelay *d = &s->chandelay[i];
|
ChanDelay *d = &s->chandelay[i];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user