Commit b48d8fa3 authored by Clément Bœsch's avatar Clément Bœsch

avfilter: add allrgb

Signed-off-by: 's avatarNicolas George <george@nsup.org>
Signed-off-by: 's avatarClément Bœsch <u@pkh.me>
parent 8323d9b8
......@@ -27,7 +27,7 @@ version <next>:
- sidechaincompress audio filter
- bitstream filter for converting HEVC from MP4 to Annex B
- acrossfade audio filter
- allyuv video source
- allyuv and allrgb video sources
- atadenoise video filter
- OS X VideoToolbox support
- aphasemeter filter
......
......@@ -11722,6 +11722,7 @@ ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_c
@end example
@end itemize
@anchor{allrgb}
@anchor{allyuv}
@anchor{color}
@anchor{haldclutsrc}
......@@ -11730,7 +11731,9 @@ ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_c
@anchor{smptebars}
@anchor{smptehdbars}
@anchor{testsrc}
@section allyuv, color, haldclutsrc, nullsrc, rgbtestsrc, smptebars, smptehdbars, testsrc
@section allrgb, allyuv, color, haldclutsrc, nullsrc, rgbtestsrc, smptebars, smptehdbars, testsrc
The @code{allrgb} source returns frames of size 4096x4096 of all rgb colors.
The @code{allyuv} source returns frames of size 4096x4096 of all yuv colors.
......
......@@ -241,6 +241,7 @@ OBJS-$(CONFIG_YADIF_FILTER) += vf_yadif.o
OBJS-$(CONFIG_ZMQ_FILTER) += f_zmq.o
OBJS-$(CONFIG_ZOOMPAN_FILTER) += vf_zoompan.o
OBJS-$(CONFIG_ALLRGB_FILTER) += vsrc_testsrc.o
OBJS-$(CONFIG_ALLYUV_FILTER) += vsrc_testsrc.o
OBJS-$(CONFIG_CELLAUTO_FILTER) += vsrc_cellauto.o
OBJS-$(CONFIG_COLOR_FILTER) += vsrc_testsrc.o
......
......@@ -256,6 +256,7 @@ void avfilter_register_all(void)
REGISTER_FILTER(ZMQ, zmq, vf);
REGISTER_FILTER(ZOOMPAN, zoompan, vf);
REGISTER_FILTER(ALLRGB, allrgb, vsrc);
REGISTER_FILTER(ALLYUV, allyuv, vsrc);
REGISTER_FILTER(CELLAUTO, cellauto, vsrc);
REGISTER_FILTER(COLOR, color, vsrc);
......
......@@ -30,7 +30,7 @@
#include "libavutil/version.h"
#define LIBAVFILTER_VERSION_MAJOR 5
#define LIBAVFILTER_VERSION_MINOR 39
#define LIBAVFILTER_VERSION_MINOR 40
#define LIBAVFILTER_VERSION_MICRO 100
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
......
......@@ -1170,3 +1170,84 @@ AVFilter ff_vsrc_allyuv = {
};
#endif /* CONFIG_ALLYUV_FILTER */
#if CONFIG_ALLRGB_FILTER
static const AVOption allrgb_options[] = {
COMMON_OPTIONS_NOSIZE
{ NULL }
};
AVFILTER_DEFINE_CLASS(allrgb);
static void allrgb_fill_picture(AVFilterContext *ctx, AVFrame *frame)
{
unsigned x, y;
const int linesize = frame->linesize[0];
uint8_t *line = frame->data[0];
for (y = 0; y < 4096; y++) {
uint8_t *dst = line;
for (x = 0; x < 4096; x++) {
*dst++ = x;
*dst++ = y;
*dst++ = (x >> 8) | ((y >> 8) << 4);
}
line += linesize;
}
}
static av_cold int allrgb_init(AVFilterContext *ctx)
{
TestSourceContext *test = ctx->priv;
test->w = test->h = 4096;
test->draw_once = 1;
test->fill_picture_fn = allrgb_fill_picture;
return init(ctx);
}
static int allrgb_config_props(AVFilterLink *outlink)
{
TestSourceContext *test = outlink->src->priv;
ff_fill_rgba_map(test->rgba_map, outlink->format);
return config_props(outlink);
}
static int allrgb_query_formats(AVFilterContext *ctx)
{
static const enum AVPixelFormat pix_fmts[] = {
AV_PIX_FMT_RGB24, AV_PIX_FMT_NONE
};
AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
if (!fmts_list)
return AVERROR(ENOMEM);
return ff_set_common_formats(ctx, fmts_list);
}
static const AVFilterPad avfilter_vsrc_allrgb_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.request_frame = request_frame,
.config_props = allrgb_config_props,
},
{ NULL }
};
AVFilter ff_vsrc_allrgb = {
.name = "allrgb",
.description = NULL_IF_CONFIG_SMALL("Generate all RGB colors."),
.priv_size = sizeof(TestSourceContext),
.priv_class = &allrgb_class,
.init = allrgb_init,
.uninit = uninit,
.query_formats = allrgb_query_formats,
.inputs = NULL,
.outputs = avfilter_vsrc_allrgb_outputs,
};
#endif /* CONFIG_ALLRGB_FILTER */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment