avfilter/vsrc_gradients: add speed option

This commit is contained in:
Paul B Mahol 2020-08-31 11:04:38 +02:00
parent 823eb009cb
commit eb9fa00bcc
2 changed files with 6 additions and 1 deletions

View File

@ -22577,6 +22577,9 @@ for the accepted syntax.
If not specified, or the expressed duration is negative, the video is If not specified, or the expressed duration is negative, the video is
supposed to be generated forever. supposed to be generated forever.
@item speed
Set speed of gradients rotation.
@end table @end table

View File

@ -38,6 +38,7 @@ typedef struct GradientsContext {
AVRational frame_rate; AVRational frame_rate;
int64_t pts; int64_t pts;
int64_t duration; ///< duration expressed in microseconds int64_t duration; ///< duration expressed in microseconds
float speed;
uint8_t color_rgba[8][4]; uint8_t color_rgba[8][4];
int nb_colors; int nb_colors;
@ -75,6 +76,7 @@ static const AVOption gradients_options[] = {
{"seed", "set the seed", OFFSET(seed), AV_OPT_TYPE_INT64, {.i64=-1}, -1, UINT32_MAX, 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 },\ {"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 },\ {"d", "set video duration", OFFSET(duration), AV_OPT_TYPE_DURATION, {.i64=-1}, -1, INT64_MAX, FLAGS },\
{"speed", "set gradients rotation speed", OFFSET(speed), AV_OPT_TYPE_FLOAT,{.dbl=0.01}, 0.00001, 1, FLAGS },\
{NULL}, {NULL},
}; };
@ -250,7 +252,7 @@ static int gradients_request_frame(AVFilterLink *outlink)
AVFilterContext *ctx = outlink->src; AVFilterContext *ctx = outlink->src;
GradientsContext *s = ctx->priv; GradientsContext *s = ctx->priv;
AVFrame *frame = ff_get_video_buffer(outlink, s->w, s->h); AVFrame *frame = ff_get_video_buffer(outlink, s->w, s->h);
float angle = fmodf(s->pts / 100.f, 2.f * M_PI); float angle = fmodf(s->pts * s->speed, 2.f * M_PI);
const float w2 = s->w / 2.f; const float w2 = s->w / 2.f;
const float h2 = s->h / 2.f; const float h2 = s->h / 2.f;