diff options
author | Stefano Sabatini <stefasab@gmail.com> | 2013-04-24 11:14:27 +0200 |
---|---|---|
committer | Stefano Sabatini <stefasab@gmail.com> | 2013-05-03 18:37:54 +0200 |
commit | f51aa92b0f165a24c4bd8c3b0b85c159048195d6 (patch) | |
tree | 140ab651ba21ad5042c561f9611fc6ceeb4e8a70 | |
parent | ce322f4c191f0262066698ea08084dd79b6228cb (diff) | |
download | ffmpeg-f51aa92b0f165a24c4bd8c3b0b85c159048195d6.tar.gz |
lavfi/testsrc: add support for color interactive command
-rw-r--r-- | doc/filters.texi | 10 | ||||
-rw-r--r-- | libavfilter/version.h | 2 | ||||
-rw-r--r-- | libavfilter/vsrc_testsrc.c | 34 |
3 files changed, 45 insertions, 1 deletions
diff --git a/doc/filters.texi b/doc/filters.texi index f80df081eb..157b79371d 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -7350,6 +7350,16 @@ the @code{geq} filter: nullsrc=s=256x256, geq=random(1)*255:128:128 @end example +@subsection Commands + +The @code{color} source supports the following commands: + +@table @option +@item c, color +Set the color of the created image. Accepts the same syntax of the +corresponding @option{color} option. +@end table + @c man end VIDEO SOURCES @chapter Video Sinks diff --git a/libavfilter/version.h b/libavfilter/version.h index fed57614f0..0773ff7a05 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -30,7 +30,7 @@ #define LIBAVFILTER_VERSION_MAJOR 3 #define LIBAVFILTER_VERSION_MINOR 63 -#define LIBAVFILTER_VERSION_MICRO 100 +#define LIBAVFILTER_VERSION_MICRO 101 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ LIBAVFILTER_VERSION_MINOR, \ diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c index 1b474a2941..dc8984a19f 100644 --- a/libavfilter/vsrc_testsrc.c +++ b/libavfilter/vsrc_testsrc.c @@ -57,6 +57,7 @@ typedef struct { AVRational sar; ///< sample aspect ratio int nb_decimals; int draw_once; ///< draw only the first frame, always put out the same picture + int draw_once_reset; ///< draw only the first frame or in case of reset AVFrame *picref; ///< cached reference containing the painted picture void (* fill_picture_fn)(AVFilterContext *ctx, AVFrame *frame); @@ -166,6 +167,10 @@ static int request_frame(AVFilterLink *outlink) return AVERROR_EOF; if (test->draw_once) { + if (test->draw_once_reset) { + av_frame_free(&test->picref); + test->draw_once_reset = 0; + } if (!test->picref) { test->picref = ff_get_video_buffer(outlink, test->w, test->h); @@ -241,6 +246,34 @@ static int color_config_props(AVFilterLink *inlink) return 0; } +static int color_process_command(AVFilterContext *ctx, const char *cmd, const char *args, + char *res, int res_len, int flags) +{ + TestSourceContext *test = ctx->priv; + int ret; + + if (!strcmp(cmd, "color") || !strcmp(cmd, "c")) { + char *color_str; + uint8_t color_rgba[4]; + + ret = av_parse_color(color_rgba, args, -1, ctx); + if (ret < 0) + return ret; + color_str = av_strdup(args); + if (!color_str) + return AVERROR(ENOMEM); + av_free(test->color_str); + test->color_str = color_str; + + memcpy(test->color_rgba, color_rgba, sizeof(color_rgba)); + ff_draw_color(&test->draw, &test->color, test->color_rgba); + test->draw_once_reset = 1; + return 0; + } + + return AVERROR(ENOSYS); +} + static const AVFilterPad color_outputs[] = { { .name = "default", @@ -263,6 +296,7 @@ AVFilter avfilter_vsrc_color = { .query_formats = color_query_formats, .inputs = NULL, .outputs = color_outputs, + .process_command = color_process_command, }; #endif /* CONFIG_COLOR_FILTER */ |