46 unsigned s0,
unsigned s1,
unsigned s2,
unsigned s3);
48 unsigned d0,
unsigned d1,
unsigned d2,
unsigned d3);
55 if (x >= 0 && x < w && y >= 0 && y <
h)
61 unsigned s0,
unsigned s1,
unsigned s2,
unsigned s3)
74 unsigned s0,
unsigned s1,
unsigned s2,
unsigned s3)
87 unsigned s0,
unsigned s1,
unsigned s2,
unsigned s3)
99 unsigned s0,
unsigned s1,
unsigned s2,
unsigned s3)
111 unsigned s0,
unsigned s1,
unsigned s2,
unsigned s3)
121 unsigned s0,
unsigned s1,
unsigned s2,
unsigned s3)
131 unsigned d0,
unsigned d1,
unsigned d2,
unsigned d3)
137 unsigned d0,
unsigned d1,
unsigned d2,
unsigned d3)
143 unsigned d0,
unsigned d1,
unsigned d2,
unsigned d3)
151 unsigned d0,
unsigned d1,
unsigned d2,
unsigned d3)
159 unsigned d0,
unsigned d1,
unsigned d2,
unsigned d3)
168 unsigned d0,
unsigned d1,
unsigned d2,
unsigned d3)
246 depth =
desc->comp[0].depth;
248 switch (
s->nb_planes) {
260 switch (
s->nb_planes) {
273 s->front =
s->back = 0;
285 const unsigned d0 =
s->d[0];
286 const unsigned d1 =
s->d[1];
287 const unsigned d2 =
s->d[2];
288 const unsigned d3 =
s->d[3];
304 for (
i = 0;
i <
s->nb_planes;
i++) {
305 if (
s->S[
i] !=
s->d[
i])
309 if (
i ==
s->nb_planes)
313 s->points[
s->front].x =
s->x;
314 s->points[
s->front].y =
s->y;
321 while (
s->front >
s->back) {
325 x =
s->points[
s->front].x;
326 y =
s->points[
s->front].y;
329 s->set_pixel(
frame, x, y, d0, d1, d2, d3);
332 s->points[
s->front] .x = x + 1;
333 s->points[
s->front++].y = y;
337 s->points[
s->front] .x = x - 1;
338 s->points[
s->front++].y = y;
342 s->points[
s->front] .x = x;
343 s->points[
s->front++].y = y + 1;
347 s->points[
s->front] .x = x;
348 s->points[
s->front++].y = y - 1;
404 #define OFFSET(x) offsetof(FloodfillContext, x)
405 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
427 .priv_class = &floodfill_class,
static const AVFilterPad inputs[]
static const AVFilterPad outputs[]
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
Main libavfilter public API header.
#define flags(name, subs,...)
#define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC
Some filters support a generic "enable" expression option that can be used to enable or disable a fil...
int av_frame_make_writable(AVFrame *frame)
Ensure that the frame data is writable, avoiding data copy if possible.
void * av_calloc(size_t nmemb, size_t size)
Non-inlined equivalent of av_mallocz_array().
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt)
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
#define AV_PIX_FMT_GBRAP12
#define AV_PIX_FMT_YUV444P12
#define AV_PIX_FMT_YUV444P9
#define AV_PIX_FMT_GBRAP16
#define AV_PIX_FMT_YUVA444P10
#define AV_PIX_FMT_GBRP10
#define AV_PIX_FMT_GBRP12
AVPixelFormat
Pixel format.
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
@ AV_PIX_FMT_YUVA444P
planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
@ AV_PIX_FMT_GBRAP
planar GBRA 4:4:4:4 32bpp
@ AV_PIX_FMT_GBRP
planar GBR 4:4:4 24bpp
#define AV_PIX_FMT_GRAY10
#define AV_PIX_FMT_GRAY14
#define AV_PIX_FMT_GRAY16
#define AV_PIX_FMT_GBRAP10
#define AV_PIX_FMT_YUVA444P16
#define AV_PIX_FMT_GBRP16
#define AV_PIX_FMT_YUV444P14
#define AV_PIX_FMT_YUVA444P9
#define AV_PIX_FMT_GBRP14
#define AV_PIX_FMT_YUV444P16
#define AV_PIX_FMT_YUV444P10
typedef void(RENAME(mix_any_func_type))
Describe the class of an AVClass context structure.
A link between two filters.
int w
agreed upon image width
int h
agreed upon image height
AVFilterContext * dst
dest filter
int format
agreed upon media format
A filter pad used for either input or output.
const char * name
Pad name.
const char * name
Filter name.
This structure describes decoded (raw) audio or video data.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
void(* set_pixel)(AVFrame *frame, int x, int y, unsigned d0, unsigned d1, unsigned d2, unsigned d3)
int(* is_same)(AVFrame *frame, int x, int y, unsigned s0, unsigned s1, unsigned s2, unsigned s3)
void(* pick_pixel)(AVFrame *frame, int x, int y, int *s0, int *s1, int *s2, int *s3)
static const AVOption floodfill_options[]
static void set_pixel3_16(AVFrame *frame, int x, int y, unsigned d0, unsigned d1, unsigned d2, unsigned d3)
static void set_pixel3(AVFrame *frame, int x, int y, unsigned d0, unsigned d1, unsigned d2, unsigned d3)
AVFILTER_DEFINE_CLASS(floodfill)
static int is_same3(AVFrame *frame, int x, int y, unsigned s0, unsigned s1, unsigned s2, unsigned s3)
static int is_same4_16(AVFrame *frame, int x, int y, unsigned s0, unsigned s1, unsigned s2, unsigned s3)
static int is_inside(int x, int y, int w, int h)
static void pick_pixel1_16(AVFrame *frame, int x, int y, int *s0, int *s1, int *s2, int *s3)
static int is_same3_16(AVFrame *frame, int x, int y, unsigned s0, unsigned s1, unsigned s2, unsigned s3)
static void pick_pixel4(AVFrame *frame, int x, int y, int *s0, int *s1, int *s2, int *s3)
static void pick_pixel3(AVFrame *frame, int x, int y, int *s0, int *s1, int *s2, int *s3)
static int config_input(AVFilterLink *inlink)
static av_cold int query_formats(AVFilterContext *ctx)
static int is_same1_16(AVFrame *frame, int x, int y, unsigned s0, unsigned s1, unsigned s2, unsigned s3)
static void pick_pixel4_16(AVFrame *frame, int x, int y, int *s0, int *s1, int *s2, int *s3)
static const AVFilterPad floodfill_outputs[]
static void pick_pixel3_16(AVFrame *frame, int x, int y, int *s0, int *s1, int *s2, int *s3)
static int is_same1(AVFrame *frame, int x, int y, unsigned s0, unsigned s1, unsigned s2, unsigned s3)
static int is_same4(AVFrame *frame, int x, int y, unsigned s0, unsigned s1, unsigned s2, unsigned s3)
static int filter_frame(AVFilterLink *link, AVFrame *frame)
static void pick_pixel1(AVFrame *frame, int x, int y, int *s0, int *s1, int *s2, int *s3)
static void set_pixel1(AVFrame *frame, int x, int y, unsigned d0, unsigned d1, unsigned d2, unsigned d3)
static av_cold void uninit(AVFilterContext *ctx)
static const AVFilterPad floodfill_inputs[]
static void set_pixel4_16(AVFrame *frame, int x, int y, unsigned d0, unsigned d1, unsigned d2, unsigned d3)
static void set_pixel4(AVFrame *frame, int x, int y, unsigned d0, unsigned d1, unsigned d2, unsigned d3)
static void set_pixel1_16(AVFrame *frame, int x, int y, unsigned d0, unsigned d1, unsigned d2, unsigned d3)