summaryrefslogtreecommitdiff
path: root/libavfilter
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2020-09-04 18:30:46 +0200
committerPaul B Mahol <onemda@gmail.com>2020-09-04 19:37:29 +0200
commit615d75f291c6cc3057074245ab83cbd48187dfbc (patch)
tree6ead9500c6d379f25565172fb8f7621747550eda /libavfilter
parent88db1745fc3b99cd8df000baa0b1af9ee2bac4ac (diff)
avfilter/asrc_anullsrc: add support to set output duration
Diffstat (limited to 'libavfilter')
-rw-r--r--libavfilter/asrc_anullsrc.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/libavfilter/asrc_anullsrc.c b/libavfilter/asrc_anullsrc.c
index 7093f08275..ab56d84424 100644
--- a/libavfilter/asrc_anullsrc.c
+++ b/libavfilter/asrc_anullsrc.c
@@ -40,6 +40,7 @@ typedef struct ANullContext {
uint64_t channel_layout;
char *sample_rate_str;
int sample_rate;
+ int64_t duration;
int nb_samples; ///< number of samples per requested frame
int64_t pts;
} ANullContext;
@@ -54,6 +55,8 @@ static const AVOption anullsrc_options[]= {
{ "r", "set sample rate", OFFSET(sample_rate_str) , AV_OPT_TYPE_STRING, {.str = "44100"}, 0, 0, FLAGS },
{ "nb_samples", "set the number of samples per requested frame", OFFSET(nb_samples), AV_OPT_TYPE_INT, {.i64 = 1024}, 0, INT_MAX, FLAGS },
{ "n", "set the number of samples per requested frame", OFFSET(nb_samples), AV_OPT_TYPE_INT, {.i64 = 1024}, 0, INT_MAX, FLAGS },
+ { "duration", "set the audio duration", OFFSET(duration), AV_OPT_TYPE_DURATION, {.i64 = -1}, -1, INT64_MAX, FLAGS },
+ { "d", "set the audio duration", OFFSET(duration), AV_OPT_TYPE_DURATION, {.i64 = -1}, -1, INT64_MAX, FLAGS },
{ NULL }
};
@@ -108,6 +111,10 @@ static int request_frame(AVFilterLink *outlink)
ANullContext *null = outlink->src->priv;
AVFrame *samplesref;
+ if (null->duration >= 0 &&
+ av_rescale_q(null->pts, outlink->time_base, AV_TIME_BASE_Q) >= null->duration)
+ return AVERROR_EOF;
+
samplesref = ff_get_audio_buffer(outlink, null->nb_samples);
if (!samplesref)
return AVERROR(ENOMEM);