54#define OFFSET(x) offsetof(SierpinskiContext, x)
55#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
74 int pos_x = x +
s->pos_x;
75 int pos_y = y +
s->pos_y;
77 while (pos_x != 0 && pos_y != 0) {
78 if (
FFABS(pos_x % 3) == 1 &&
FFABS(pos_y % 3) == 1)
94 const int start = (
height * job ) / nb_jobs;
95 const int end = (
height * (job+1)) / nb_jobs;
98 for (
int y = start; y < end; y++) {
99 for (
int x = 0; x <
width; x++) {
100 if ((
s->pos_x + x) & (
s->pos_y + y)) {
119 const int start = (
height * job ) / nb_jobs;
120 const int end = (
height * (job+1)) / nb_jobs;
123 for (
int y = start; y < end; y++) {
124 for (
int x = 0; x <
width; x++) {
166 if (
s->pos_x ==
s->dest_x &&
s->pos_y ==
s->dest_y) {
168 int mod = 2 *
s->jump + 1;
170 s->dest_x += (int)((
rnd & 0xffff) %
mod) -
s->jump;
171 s->dest_y += (int)((
rnd >> 16) %
mod) -
s->jump;
173 if (
s->pos_x <
s->dest_x)
175 else if (
s->pos_x >
s->dest_x)
178 if (
s->pos_y <
s->dest_y)
180 else if (
s->pos_y >
s->dest_y)
215 .p.name =
"sierpinski",
217 .p.priv_class = &sierpinski_class,
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
const FFFilter ff_vsrc_sierpinski
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
int ff_filter_execute(AVFilterContext *ctx, avfilter_action_func *func, void *arg, int *ret, int nb_jobs)
int ff_filter_get_nb_threads(AVFilterContext *ctx)
Get number of threads for current filter instance.
Main libavfilter public API header.
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
@ AV_OPT_TYPE_IMAGE_SIZE
Underlying C type is two consecutive integers.
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
@ AV_OPT_TYPE_VIDEO_RATE
Underlying C type is AVRational.
@ AV_OPT_TYPE_INT64
Underlying C type is int64_t.
@ AV_OPT_TYPE_INT
Underlying C type is int.
#define AVFILTER_FLAG_SLICE_THREADS
The filter supports multithreading by splitting frames into multiple parts and processing them concur...
uint32_t av_get_random_seed(void)
Get a seed to use in conjunction with random functions.
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of the image can be address...
static int config_output(AVBitStreamFilterLink *outlink)
av_cold void av_lfg_init(AVLFG *c, unsigned int seed)
static unsigned int av_lfg_get(AVLFG *c)
Get the next random unsigned 32-bit number using an ALFG.
#define FILTER_OUTPUTS(array)
static FilterLink * ff_filter_link(AVFilterLink *link)
#define FILTER_SINGLE_PIXFMT(pix_fmt_)
#define AVFILTER_DEFINE_CLASS(fname)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
#define AV_PIX_FMT_0BGR32
Describe the class of an AVClass context structure.
void * priv
private data for use by the filter
A link between two filters.
int w
agreed upon image width
int h
agreed upon image height
AVFilterContext * src
source filter
AVRational time_base
Define the time base used by the PTS of the frames/samples which will pass through this link.
AVRational sample_aspect_ratio
agreed upon sample aspect ratio
A filter pad used for either input or output.
This structure describes decoded (raw) audio or video data.
Context structure for the Lagged Fibonacci PRNG.
Rational number (pair of numerator and denominator).
Link properties exposed to filter code, but not external callers.
AVRational frame_rate
Frame rate of the stream on the link, or 1/0 if unknown or variable.
int(* draw_slice)(AVFilterContext *ctx, void *arg, int job, int nb_jobs)
static AVFormatContext * ctx
static int mod(int a, int b)
Modulo operation with only positive remainders.
AVFrame * ff_get_video_buffer(AVFilterLink *link, int w, int h)
Request a picture buffer with a specific set of permissions.
static int draw_carpet_slice(AVFilterContext *ctx, void *arg, int job, int nb_jobs)
static void draw_sierpinski(AVFilterContext *ctx, AVFrame *frame)
static int sierpinski_request_frame(AVFilterLink *link)
static int draw_triangle_slice(AVFilterContext *ctx, void *arg, int job, int nb_jobs)
static const AVFilterPad sierpinski_outputs[]
static int config_output(AVFilterLink *outlink)
static const AVOption sierpinski_options[]
static int fill_sierpinski(SierpinskiContext *s, int x, int y)