You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
lavfi/testsrc: add support for color interactive command
This commit is contained in:
@@ -7350,6 +7350,16 @@ the @code{geq} filter:
|
|||||||
nullsrc=s=256x256, geq=random(1)*255:128:128
|
nullsrc=s=256x256, geq=random(1)*255:128:128
|
||||||
@end example
|
@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
|
@c man end VIDEO SOURCES
|
||||||
|
|
||||||
@chapter Video Sinks
|
@chapter Video Sinks
|
||||||
|
@@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
#define LIBAVFILTER_VERSION_MAJOR 3
|
#define LIBAVFILTER_VERSION_MAJOR 3
|
||||||
#define LIBAVFILTER_VERSION_MINOR 63
|
#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, \
|
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
|
||||||
LIBAVFILTER_VERSION_MINOR, \
|
LIBAVFILTER_VERSION_MINOR, \
|
||||||
|
@@ -57,6 +57,7 @@ typedef struct {
|
|||||||
AVRational sar; ///< sample aspect ratio
|
AVRational sar; ///< sample aspect ratio
|
||||||
int nb_decimals;
|
int nb_decimals;
|
||||||
int draw_once; ///< draw only the first frame, always put out the same picture
|
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
|
AVFrame *picref; ///< cached reference containing the painted picture
|
||||||
|
|
||||||
void (* fill_picture_fn)(AVFilterContext *ctx, AVFrame *frame);
|
void (* fill_picture_fn)(AVFilterContext *ctx, AVFrame *frame);
|
||||||
@@ -166,6 +167,10 @@ static int request_frame(AVFilterLink *outlink)
|
|||||||
return AVERROR_EOF;
|
return AVERROR_EOF;
|
||||||
|
|
||||||
if (test->draw_once) {
|
if (test->draw_once) {
|
||||||
|
if (test->draw_once_reset) {
|
||||||
|
av_frame_free(&test->picref);
|
||||||
|
test->draw_once_reset = 0;
|
||||||
|
}
|
||||||
if (!test->picref) {
|
if (!test->picref) {
|
||||||
test->picref =
|
test->picref =
|
||||||
ff_get_video_buffer(outlink, test->w, test->h);
|
ff_get_video_buffer(outlink, test->w, test->h);
|
||||||
@@ -241,6 +246,34 @@ static int color_config_props(AVFilterLink *inlink)
|
|||||||
return 0;
|
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[] = {
|
static const AVFilterPad color_outputs[] = {
|
||||||
{
|
{
|
||||||
.name = "default",
|
.name = "default",
|
||||||
@@ -263,6 +296,7 @@ AVFilter avfilter_vsrc_color = {
|
|||||||
.query_formats = color_query_formats,
|
.query_formats = color_query_formats,
|
||||||
.inputs = NULL,
|
.inputs = NULL,
|
||||||
.outputs = color_outputs,
|
.outputs = color_outputs,
|
||||||
|
.process_command = color_process_command,
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* CONFIG_COLOR_FILTER */
|
#endif /* CONFIG_COLOR_FILTER */
|
||||||
|
Reference in New Issue
Block a user