summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/filters.texi21
-rw-r--r--libavfilter/af_afade.c16
2 files changed, 24 insertions, 13 deletions
diff --git a/doc/filters.texi b/doc/filters.texi
index 43d736836a..4c702a9c26 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -612,15 +612,26 @@ volume as the input audio, at the end of the fade-out transition
the output audio will be silence. Default is 44100.
@item start_time, st
-Specify time in seconds for starting to apply the fade
-effect. Default is 0.
+Specify time for starting to apply the fade effect. Default is 0.
+The accepted syntax is:
+@example
+[-]HH[:MM[:SS[.m...]]]
+[-]S+[.m...]
+@end example
+See also the function @code{av_parse_time()}.
If set this option is used instead of @var{start_sample} one.
@item duration, d
-Specify the number of seconds for which the fade effect has to last. At
-the end of the fade-in effect the output audio will have the same
+Specify the duration for which the fade effect has to last. Default is 0.
+The accepted syntax is:
+@example
+[-]HH[:MM[:SS[.m...]]]
+[-]S+[.m...]
+@end example
+See also the function @code{av_parse_time()}.
+At the end of the fade-in effect the output audio will have the same
volume as the input audio, at the end of the fade-out transition
-the output audio will be silence. Default is 0.
+the output audio will be silence.
If set this option is used instead of @var{nb_samples} one.
@item curve
diff --git a/libavfilter/af_afade.c b/libavfilter/af_afade.c
index c64d9216ec..35c653746d 100644
--- a/libavfilter/af_afade.c
+++ b/libavfilter/af_afade.c
@@ -34,8 +34,8 @@ typedef struct {
int curve;
int nb_samples;
int64_t start_sample;
- double duration;
- double start_time;
+ int64_t duration;
+ int64_t start_time;
void (*fade_samples)(uint8_t **dst, uint8_t * const *src,
int nb_samples, int channels, int direction,
@@ -56,10 +56,10 @@ static const AVOption afade_options[] = {
{ "ss", "set expression of sample to start fading", OFFSET(start_sample), AV_OPT_TYPE_INT64, {.i64 = 0 }, 0, INT64_MAX, FLAGS },
{ "nb_samples", "set expression for fade duration in samples", OFFSET(nb_samples), AV_OPT_TYPE_INT, {.i64 = 44100}, 1, INT32_MAX, FLAGS },
{ "ns", "set expression for fade duration in samples", OFFSET(nb_samples), AV_OPT_TYPE_INT, {.i64 = 44100}, 1, INT32_MAX, FLAGS },
- { "start_time", "set expression of second to start fading", OFFSET(start_time), AV_OPT_TYPE_DOUBLE, {.dbl = 0. }, 0, 7*24*60*60,FLAGS },
- { "st", "set expression of second to start fading", OFFSET(start_time), AV_OPT_TYPE_DOUBLE, {.dbl = 0. }, 0, 7*24*60*60,FLAGS },
- { "duration", "set expression for fade duration in seconds", OFFSET(duration), AV_OPT_TYPE_DOUBLE, {.dbl = 0. }, 0, 24*60*60, FLAGS },
- { "d", "set expression for fade duration in seconds", OFFSET(duration), AV_OPT_TYPE_DOUBLE, {.dbl = 0. }, 0, 24*60*60, FLAGS },
+ { "start_time", "set expression of time to start fading", OFFSET(start_time), AV_OPT_TYPE_DURATION, {.i64 = 0. }, 0, INT32_MAX, FLAGS },
+ { "st", "set expression of time to start fading", OFFSET(start_time), AV_OPT_TYPE_DURATION, {.i64 = 0. }, 0, INT32_MAX, FLAGS },
+ { "duration", "set expression for fade duration", OFFSET(duration), AV_OPT_TYPE_DURATION, {.i64 = 0. }, 0, INT32_MAX, FLAGS },
+ { "d", "set expression for fade duration", OFFSET(duration), AV_OPT_TYPE_DURATION, {.i64 = 0. }, 0, INT32_MAX, FLAGS },
{ "curve", "set expression for fade curve", OFFSET(curve), AV_OPT_TYPE_INT, {.i64 = TRI }, TRI, CBR, FLAGS, "curve" },
{ "c", "set expression for fade curve", OFFSET(curve), AV_OPT_TYPE_INT, {.i64 = TRI }, TRI, CBR, FLAGS, "curve" },
{ "tri", "linear slope", 0, AV_OPT_TYPE_CONST, {.i64 = TRI }, 0, 0, FLAGS, "curve" },
@@ -218,9 +218,9 @@ static int config_output(AVFilterLink *outlink)
}
if (afade->duration)
- afade->nb_samples = afade->duration * inlink->sample_rate;
+ afade->nb_samples = afade->duration * inlink->sample_rate / AV_TIME_BASE;
if (afade->start_time)
- afade->start_sample = afade->start_time * inlink->sample_rate;
+ afade->start_sample = afade->start_time * inlink->sample_rate / AV_TIME_BASE;
return 0;
}