summaryrefslogtreecommitdiff
path: root/libavfilter/vsrc_gradients.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2020-08-31 10:46:42 +0200
committerPaul B Mahol <onemda@gmail.com>2020-08-31 11:09:53 +0200
commit64e93025f002c137c6b8baa8c7112482ce5df857 (patch)
treeb8c82c30dd0927fc7ae9d28ee63139902dce13b9 /libavfilter/vsrc_gradients.c
parent4a11a6f4ccc7c56ccc82adf0c3ab4054d4c22d1e (diff)
downloadffmpeg-64e93025f002c137c6b8baa8c7112482ce5df857.tar.gz
avfilter/vsrc_gradients: add duration option
Diffstat (limited to 'libavfilter/vsrc_gradients.c')
-rw-r--r--libavfilter/vsrc_gradients.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/libavfilter/vsrc_gradients.c b/libavfilter/vsrc_gradients.c
index 984227017e..410c3cb69b 100644
--- a/libavfilter/vsrc_gradients.c
+++ b/libavfilter/vsrc_gradients.c
@@ -36,7 +36,8 @@ typedef struct GradientsContext {
int w, h;
int type;
AVRational frame_rate;
- uint64_t pts;
+ int64_t pts;
+ int64_t duration; ///< duration expressed in microseconds
uint8_t color_rgba[8][4];
int nb_colors;
@@ -72,6 +73,8 @@ static const AVOption gradients_options[] = {
{"nb_colors", "set the number of colors", OFFSET(nb_colors), AV_OPT_TYPE_INT, {.i64=2}, 2, 8, FLAGS },
{"n", "set the number of colors", OFFSET(nb_colors), AV_OPT_TYPE_INT, {.i64=2}, 2, 8, FLAGS },
{"seed", "set the seed", OFFSET(seed), AV_OPT_TYPE_INT64, {.i64=-1}, -1, UINT32_MAX, FLAGS },
+ {"duration", "set video duration", OFFSET(duration), AV_OPT_TYPE_DURATION, {.i64=-1}, -1, INT64_MAX, FLAGS },\
+ {"d", "set video duration", OFFSET(duration), AV_OPT_TYPE_DURATION, {.i64=-1}, -1, INT64_MAX, FLAGS },\
{NULL},
};
@@ -251,6 +254,10 @@ static int gradients_request_frame(AVFilterLink *outlink)
const float w2 = s->w / 2.f;
const float h2 = s->h / 2.f;
+ if (s->duration >= 0 &&
+ av_rescale_q(s->pts, outlink->time_base, AV_TIME_BASE_Q) >= s->duration)
+ return AVERROR_EOF;
+
s->fx0 = (s->x0 - w2) * cosf(angle) - (s->y0 - h2) * sinf(angle) + w2;
s->fy0 = (s->x0 - w2) * sinf(angle) + (s->y0 - h2) * cosf(angle) + h2;
@@ -260,6 +267,9 @@ static int gradients_request_frame(AVFilterLink *outlink)
if (!frame)
return AVERROR(ENOMEM);
+ frame->key_frame = 1;
+ frame->interlaced_frame = 0;
+ frame->pict_type = AV_PICTURE_TYPE_I;
frame->sample_aspect_ratio = (AVRational) {1, 1};
frame->pts = s->pts++;