Go to the source code of this file.
|
#define | OFFSET(x) offsetof(XFadeContext, x) |
|
#define | FLAGS (AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_VIDEO_PARAM) |
|
#define | CUSTOM_TRANSITION(name, type, div) |
|
#define | FADE_TRANSITION(name, type, div) |
|
#define | WIPELEFT_TRANSITION(name, type, div) |
|
#define | WIPERIGHT_TRANSITION(name, type, div) |
|
#define | WIPEUP_TRANSITION(name, type, div) |
|
#define | WIPEDOWN_TRANSITION(name, type, div) |
|
#define | SLIDELEFT_TRANSITION(name, type, div) |
|
#define | SLIDERIGHT_TRANSITION(name, type, div) |
|
#define | SLIDEUP_TRANSITION(name, type, div) |
|
#define | SLIDEDOWN_TRANSITION(name, type, div) |
|
#define | CIRCLECROP_TRANSITION(name, type, div) |
|
#define | RECTCROP_TRANSITION(name, type, div) |
|
#define | DISTANCE_TRANSITION(name, type, div) |
|
#define | FADEBLACK_TRANSITION(name, type, div) |
|
#define | FADEWHITE_TRANSITION(name, type, div) |
|
#define | RADIAL_TRANSITION(name, type, div) |
|
#define | SMOOTHLEFT_TRANSITION(name, type, div) |
|
#define | SMOOTHRIGHT_TRANSITION(name, type, div) |
|
#define | SMOOTHUP_TRANSITION(name, type, div) |
|
#define | SMOOTHDOWN_TRANSITION(name, type, div) |
|
#define | CIRCLEOPEN_TRANSITION(name, type, div) |
|
#define | CIRCLECLOSE_TRANSITION(name, type, div) |
|
#define | VERTOPEN_TRANSITION(name, type, div) |
|
#define | VERTCLOSE_TRANSITION(name, type, div) |
|
#define | HORZOPEN_TRANSITION(name, type, div) |
|
#define | HORZCLOSE_TRANSITION(name, type, div) |
|
#define | DISSOLVE_TRANSITION(name, type, div) |
|
#define | PIXELIZE_TRANSITION(name, type, div) |
|
#define | DIAGTL_TRANSITION(name, type, div) |
|
#define | DIAGTR_TRANSITION(name, type, div) |
|
#define | DIAGBL_TRANSITION(name, type, div) |
|
#define | DIAGBR_TRANSITION(name, type, div) |
|
#define | HLSLICE_TRANSITION(name, type, div) |
|
#define | HRSLICE_TRANSITION(name, type, div) |
|
#define | VUSLICE_TRANSITION(name, type, div) |
|
#define | VDSLICE_TRANSITION(name, type, div) |
|
|
enum | XFadeTransitions {
CUSTOM = -1,
FADE,
WIPELEFT,
WIPERIGHT,
WIPEUP,
WIPEDOWN,
SLIDELEFT,
SLIDERIGHT,
SLIDEUP,
SLIDEDOWN,
CIRCLECROP,
RECTCROP,
DISTANCE,
FADEBLACK,
FADEWHITE,
RADIAL,
SMOOTHLEFT,
SMOOTHRIGHT,
SMOOTHUP,
SMOOTHDOWN,
CIRCLEOPEN,
CIRCLECLOSE,
VERTOPEN,
VERTCLOSE,
HORZOPEN,
HORZCLOSE,
DISSOLVE,
PIXELIZE,
DIAGTL,
DIAGTR,
DIAGBL,
DIAGBR,
HLSLICE,
HRSLICE,
VUSLICE,
VDSLICE,
NB_TRANSITIONS,
CUSTOM,
FADE,
WIPELEFT,
WIPERIGHT,
WIPEUP,
WIPEDOWN,
SLIDELEFT,
SLIDERIGHT,
SLIDEUP,
SLIDEDOWN,
NB_TRANSITIONS
} |
|
enum | {
VAR_X,
VAR_Y,
VAR_W,
VAR_H,
VAR_A,
VAR_B,
VAR_PLANE,
VAR_PROGRESS,
VAR_VARS_NB
} |
|
|
static int | query_formats (AVFilterContext *ctx) |
|
static av_cold void | uninit (AVFilterContext *ctx) |
|
| AVFILTER_DEFINE_CLASS (xfade) |
|
static float | mix (float a, float b, float mix) |
|
static float | fract (float a) |
|
static float | smoothstep (float edge0, float edge1, float x) |
|
static float | frand (int x, int y) |
|
static double | getpix (void *priv, double x, double y, int plane, int nb) |
|
static double | a0 (void *priv, double x, double y) |
|
static double | a1 (void *priv, double x, double y) |
|
static double | a2 (void *priv, double x, double y) |
|
static double | a3 (void *priv, double x, double y) |
|
static double | b0 (void *priv, double x, double y) |
|
static double | b1 (void *priv, double x, double y) |
|
static double | b2 (void *priv, double x, double y) |
|
static double | b3 (void *priv, double x, double y) |
|
static int | config_output (AVFilterLink *outlink) |
|
static int | xfade_slice (AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) |
|
static int | xfade_frame (AVFilterContext *ctx, AVFrame *a, AVFrame *b) |
|
static int | xfade_activate (AVFilterContext *ctx) |
|
◆ OFFSET
◆ FLAGS
◆ CUSTOM_TRANSITION
#define CUSTOM_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
◆ FADE_TRANSITION
#define FADE_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + slice_start *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + slice_start *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + slice_start *
out->linesize[p]);
\
for (
int x = 0; x <
out->width; x++) { \
dst[x] =
mix(xf0[x], xf1[x], progress); \
} \
\
dst +=
out->linesize[p] / div; \
xf0 +=
a->linesize[p] / div; \
xf1 +=
b->linesize[p] / div; \
} \
} \
}
Definition at line 252 of file vf_xfade.c.
◆ WIPELEFT_TRANSITION
#define WIPELEFT_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
int z =
out->width * progress;
\
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + slice_start *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + slice_start *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + slice_start *
out->linesize[p]);
\
for (
int x = 0; x <
out->width; x++) { \
dst[x] = x > z ? xf1[x] : xf0[x]; \
} \
\
dst +=
out->linesize[p] / div; \
xf0 +=
a->linesize[p] / div; \
xf1 +=
b->linesize[p] / div; \
} \
} \
}
Definition at line 281 of file vf_xfade.c.
◆ WIPERIGHT_TRANSITION
#define WIPERIGHT_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
int z =
out->width * (1.f - progress);
\
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + slice_start *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + slice_start *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + slice_start *
out->linesize[p]);
\
for (
int x = 0; x <
out->width; x++) { \
dst[x] = x > z ? xf0[x] : xf1[x]; \
} \
\
dst +=
out->linesize[p] / div; \
xf0 +=
a->linesize[p] / div; \
xf1 +=
b->linesize[p] / div; \
} \
} \
}
Definition at line 311 of file vf_xfade.c.
◆ WIPEUP_TRANSITION
#define WIPEUP_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
int z =
out->height * progress;
\
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + slice_start *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + slice_start *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + slice_start *
out->linesize[p]);
\
for (
int x = 0; x <
out->width; x++) { \
dst[x] = slice_start + y > z ? xf1[x] : xf0[x]; \
} \
\
dst +=
out->linesize[p] / div; \
xf0 +=
a->linesize[p] / div; \
xf1 +=
b->linesize[p] / div; \
} \
} \
}
Definition at line 341 of file vf_xfade.c.
◆ WIPEDOWN_TRANSITION
#define WIPEDOWN_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
int z =
out->height * (1.f - progress);
\
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + slice_start *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + slice_start *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + slice_start *
out->linesize[p]);
\
for (
int x = 0; x <
out->width; x++) { \
dst[x] = slice_start + y > z ? xf0[x] : xf1[x]; \
} \
\
dst +=
out->linesize[p] / div; \
xf0 +=
a->linesize[p] / div; \
xf1 +=
b->linesize[p] / div; \
} \
} \
}
Definition at line 371 of file vf_xfade.c.
◆ SLIDELEFT_TRANSITION
#define SLIDELEFT_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
int z = -progress *
width;
\
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + slice_start *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + slice_start *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + slice_start *
out->linesize[p]);
\
for (
int x = 0; x <
width; x++) { \
const int zx = z + x; \
dst[x] = (zx > 0) && (zx <
width) ? xf1[zz] : xf0[zz]; \
} \
\
dst +=
out->linesize[p] / div; \
xf0 +=
a->linesize[p] / div; \
xf1 +=
b->linesize[p] / div; \
} \
} \
}
Definition at line 401 of file vf_xfade.c.
◆ SLIDERIGHT_TRANSITION
#define SLIDERIGHT_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
int z = progress *
width;
\
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + slice_start *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + slice_start *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + slice_start *
out->linesize[p]);
\
for (
int x = 0; x <
out->width; x++) { \
const int zx = z + x; \
dst[x] = (zx > 0) && (zx <
width) ? xf1[zz] : xf0[zz]; \
} \
\
dst +=
out->linesize[p] / div; \
xf0 +=
a->linesize[p] / div; \
xf1 +=
b->linesize[p] / div; \
} \
} \
}
Definition at line 434 of file vf_xfade.c.
◆ SLIDEUP_TRANSITION
#define SLIDEUP_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
int z = -progress *
height;
\
for (
int p = 0; p <
s->nb_planes; p++) { \
type *dst = (
type *)(
out->data[p] + slice_start *
out->linesize[p]);
\
const int zy = z + y; \
const
type *xf0 = (
const type *)(
a->data[p] + zz *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + zz *
b->linesize[p]);
\
for (
int x = 0; x <
out->width; x++) { \
dst[x] = (zy > 0) && (zy <
height) ? xf1[x] : xf0[x]; \
} \
\
dst +=
out->linesize[p] / div; \
} \
} \
}
Definition at line 467 of file vf_xfade.c.
◆ SLIDEDOWN_TRANSITION
#define SLIDEDOWN_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
for (
int p = 0; p <
s->nb_planes; p++) { \
type *dst = (
type *)(
out->data[p] + slice_start *
out->linesize[p]);
\
const int zy = z + y; \
const
type *xf0 = (
const type *)(
a->data[p] + zz *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + zz *
b->linesize[p]);
\
for (
int x = 0; x <
out->width; x++) { \
dst[x] = (zy > 0) && (zy <
height) ? xf1[x] : xf0[x]; \
} \
\
dst +=
out->linesize[p] / div; \
} \
} \
}
Definition at line 498 of file vf_xfade.c.
◆ CIRCLECROP_TRANSITION
#define CIRCLECROP_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
int bg =
s->black[p]; \
type *dst = (
type *)(
out->data[p] + slice_start *
out->linesize[p]);
\
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]);
\
int
val = progress < 0.5f ? xf1[x] : xf0[x]; \
dst[x] = (z < dist) ? bg :
val; \
} \
\
dst +=
out->linesize[p] / div; \
} \
} \
}
Definition at line 529 of file vf_xfade.c.
◆ RECTCROP_TRANSITION
#define RECTCROP_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
int zh = fabsf(progress - 0.5
f) *
height; \
int zw = fabsf(progress - 0.5
f) *
width;
\
for (
int p = 0; p <
s->nb_planes; p++) { \
const
int bg =
s->black[p]; \
type *dst = (
type *)(
out->data[p] + slice_start *
out->linesize[p]);
\
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]);
\
int
val = progress < 0.5f ? xf1[x] : xf0[x]; \
dst[x] = !dist ? bg :
val; \
} \
\
dst +=
out->linesize[p] / div; \
} \
} \
}
Definition at line 562 of file vf_xfade.c.
◆ DISTANCE_TRANSITION
#define DISTANCE_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
float max =
s->max_value;
\
for (
int x = 0; x <
width; x++) { \
float dist = 0.f; \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
\
dist += (xf0[x] /
max - xf1[x] /
max) * \
(xf0[x] /
max - xf1[x] /
max); \
} \
\
dist = sqrtf(dist) <= progress; \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
dst[x] =
mix(
mix(xf0[x], xf1[x], dist), xf1[x], progress); \
} \
} \
} \
}
Definition at line 597 of file vf_xfade.c.
◆ FADEBLACK_TRANSITION
#define FADEBLACK_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
float phase = 0.2f;
\
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + slice_start *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + slice_start *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + slice_start *
out->linesize[p]); \
const
int bg =
s->black[p];
\
for (
int x = 0; x <
out->width; x++) { \
progress); \
} \
\
dst +=
out->linesize[p] / div; \
xf0 +=
a->linesize[p] / div; \
xf1 +=
b->linesize[p] / div; \
} \
} \
}
Definition at line 632 of file vf_xfade.c.
◆ FADEWHITE_TRANSITION
#define FADEWHITE_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
float phase = 0.2f;
\
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + slice_start *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + slice_start *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + slice_start *
out->linesize[p]); \
const
int bg =
s->white[p];
\
for (
int x = 0; x <
out->width; x++) { \
progress); \
} \
\
dst +=
out->linesize[p] / div; \
xf0 +=
a->linesize[p] / div; \
xf1 +=
b->linesize[p] / div; \
} \
} \
}
Definition at line 665 of file vf_xfade.c.
◆ RADIAL_TRANSITION
#define RADIAL_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
for (
int x = 0; x <
width; x++) { \
(progress - 0.5f) * (
M_PI * 2.5
f); \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
} \
} \
} \
}
Definition at line 698 of file vf_xfade.c.
◆ SMOOTHLEFT_TRANSITION
#define SMOOTHLEFT_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
for (
int x = 0; x <
width; x++) { \
const
float smooth = 1.f + x /
w - progress * 2.f;
\
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
} \
} \
} \
}
Definition at line 726 of file vf_xfade.c.
◆ SMOOTHRIGHT_TRANSITION
#define SMOOTHRIGHT_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
for (
int x = 0; x <
width; x++) { \
const
float smooth = 1.f + (
w - 1 - x) /
w - progress * 2.
f;
\
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
} \
} \
} \
}
Definition at line 754 of file vf_xfade.c.
◆ SMOOTHUP_TRANSITION
#define SMOOTHUP_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
float h =
out->height;
\
const
float smooth = 1.f + y /
h - progress * 2.f; \
for (
int x = 0; x <
width; x++) { \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
} \
} \
} \
}
Definition at line 782 of file vf_xfade.c.
◆ SMOOTHDOWN_TRANSITION
#define SMOOTHDOWN_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
float h =
out->height;
\
const
float smooth = 1.f + (
h - 1 - y) /
h - progress * 2.
f; \
for (
int x = 0; x <
width; x++) { \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
} \
} \
} \
}
Definition at line 809 of file vf_xfade.c.
◆ CIRCLEOPEN_TRANSITION
#define CIRCLEOPEN_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
float p = (progress - 0.5f) * 3.
f;
\
for (
int x = 0; x <
width; x++) { \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
} \
} \
} \
}
Definition at line 836 of file vf_xfade.c.
◆ CIRCLECLOSE_TRANSITION
#define CIRCLECLOSE_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
float p = (1.f - progress - 0.5f) * 3.
f;
\
for (
int x = 0; x <
width; x++) { \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
} \
} \
} \
}
Definition at line 865 of file vf_xfade.c.
◆ VERTOPEN_TRANSITION
#define VERTOPEN_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
float w2 =
out->width / 2;
\
for (
int x = 0; x <
width; x++) { \
const
float smooth = 2.f - fabsf((x - w2) / w2) - progress * 2.f; \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
} \
} \
} \
}
Definition at line 894 of file vf_xfade.c.
◆ VERTCLOSE_TRANSITION
#define VERTCLOSE_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
float w2 =
out->width / 2;
\
for (
int x = 0; x <
width; x++) { \
const
float smooth = 1.f + fabsf((x - w2) / w2) - progress * 2.f; \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
} \
} \
} \
}
Definition at line 921 of file vf_xfade.c.
◆ HORZOPEN_TRANSITION
#define HORZOPEN_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
float h2 =
out->height / 2;
\
const
float smooth = 2.f - fabsf((y - h2) / h2) - progress * 2.f; \
for (
int x = 0; x <
width; x++) { \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
} \
} \
} \
}
Definition at line 948 of file vf_xfade.c.
◆ HORZCLOSE_TRANSITION
#define HORZCLOSE_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
float h2 =
out->height / 2;
\
const
float smooth = 1.f + fabsf((y - h2) / h2) - progress * 2.f; \
for (
int x = 0; x <
width; x++) { \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
} \
} \
} \
}
Definition at line 975 of file vf_xfade.c.
◆ DISSOLVE_TRANSITION
#define DISSOLVE_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
for (
int x = 0; x <
width; x++) { \
const
float smooth =
frand(x, y) * 2.f + progress * 2.f - 1.5f; \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
dst[x] =
smooth >= 0.5f ? xf0[x] : xf1[x]; \
} \
} \
} \
}
Definition at line 1009 of file vf_xfade.c.
◆ PIXELIZE_TRANSITION
#define PIXELIZE_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
int w =
out->width; \
const
int h =
out->height; \
const
float d =
fminf(progress, 1.
f - progress); \
const
float dist = ceilf(d * 50.
f) / 50.f; \
const
float sqx = 2.f * dist *
FFMIN(
w,
h) / 20.f; \
const
float sqy = 2.f * dist *
FFMIN(
w,
h) / 20.f;
\
for (
int x = 0; x <
w; x++) { \
int sx = dist > 0.f ?
FFMIN((floorf(x / sqx) + .5
f) * sqx,
w - 1) : x; \
int sy = dist > 0.f ?
FFMIN((floorf(y / sqy) + .5
f) * sqy,
h - 1) : y; \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + sy *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + sy *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
dst[x] =
mix(xf0[sx], xf1[sx], progress); \
} \
} \
} \
}
Definition at line 1035 of file vf_xfade.c.
◆ DIAGTL_TRANSITION
#define DIAGTL_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
float h =
out->height;
\
for (
int x = 0; x <
width; x++) { \
const
float smooth = 1.f + x /
w * y /
h - progress * 2.f;
\
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
} \
} \
} \
}
Definition at line 1067 of file vf_xfade.c.
◆ DIAGTR_TRANSITION
#define DIAGTR_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
float h =
out->height;
\
for (
int x = 0; x <
width; x++) { \
const
float smooth = 1.f + (
w - 1 - x) /
w * y /
h - progress * 2.
f;
\
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
} \
} \
} \
}
Definition at line 1096 of file vf_xfade.c.
◆ DIAGBL_TRANSITION
#define DIAGBL_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
float h =
out->height;
\
for (
int x = 0; x <
width; x++) { \
const
float smooth = 1.f + x /
w * (
h - 1 - y) /
h - progress * 2.
f;
\
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
} \
} \
} \
}
Definition at line 1125 of file vf_xfade.c.
◆ DIAGBR_TRANSITION
#define DIAGBR_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
float h =
out->height;
\
for (
int x = 0; x <
width; x++) { \
const
float smooth = 1.f + (
w - 1 - x) /
w * (
h - 1 - y) /
h - \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
} \
} \
} \
}
Definition at line 1154 of file vf_xfade.c.
◆ HLSLICE_TRANSITION
#define HLSLICE_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
for (
int x = 0; x <
width; x++) { \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
dst[x] =
mix(xf1[x], xf0[x],
ss); \
} \
} \
} \
}
Definition at line 1184 of file vf_xfade.c.
◆ HRSLICE_TRANSITION
#define HRSLICE_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
for (
int x = 0; x <
width; x++) { \
const
float xx = (
w - 1 - x) /
w; \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
dst[x] =
mix(xf1[x], xf0[x],
ss); \
} \
} \
} \
}
Definition at line 1213 of file vf_xfade.c.
◆ VUSLICE_TRANSITION
#define VUSLICE_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
float h =
out->height;
\
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
dst[x] =
mix(xf1[x], xf0[x],
ss); \
} \
} \
} \
}
Definition at line 1243 of file vf_xfade.c.
◆ VDSLICE_TRANSITION
#define VDSLICE_TRANSITION |
( |
|
name, |
|
|
|
type, |
|
|
|
div |
|
) |
| |
Value:
float progress, \
{ \
XFadeContext *
s =
ctx->priv; \
const
float h =
out->height;
\
const
float yy = (
h - 1 - y) /
h; \
for (
int p = 0; p <
s->nb_planes; p++) { \
const
type *xf0 = (
const type *)(
a->data[p] + y *
a->linesize[p]); \
const
type *xf1 = (
const type *)(
b->data[p] + y *
b->linesize[p]); \
type *dst = (
type *)(
out->data[p] + y *
out->linesize[p]); \
\
dst[x] =
mix(xf1[x], xf0[x],
ss); \
} \
} \
} \
}
Definition at line 1272 of file vf_xfade.c.
◆ XFadeTransitions
Enumerator |
---|
CUSTOM | |
FADE | |
WIPELEFT | |
WIPERIGHT | |
WIPEUP | |
WIPEDOWN | |
SLIDELEFT | |
SLIDERIGHT | |
SLIDEUP | |
SLIDEDOWN | |
CIRCLECROP | |
RECTCROP | |
DISTANCE | |
FADEBLACK | |
FADEWHITE | |
RADIAL | |
SMOOTHLEFT | |
SMOOTHRIGHT | |
SMOOTHUP | |
SMOOTHDOWN | |
CIRCLEOPEN | |
CIRCLECLOSE | |
VERTOPEN | |
VERTCLOSE | |
HORZOPEN | |
HORZCLOSE | |
DISSOLVE | |
PIXELIZE | |
DIAGTL | |
DIAGTR | |
DIAGBL | |
DIAGBR | |
HLSLICE | |
HRSLICE | |
VUSLICE | |
VDSLICE | |
NB_TRANSITIONS | |
CUSTOM | |
FADE | |
WIPELEFT | |
WIPERIGHT | |
WIPEUP | |
WIPEDOWN | |
SLIDELEFT | |
SLIDERIGHT | |
SLIDEUP | |
SLIDEDOWN | |
NB_TRANSITIONS | |
Definition at line 31 of file vf_xfade.c.
◆ anonymous enum
Enumerator |
---|
VAR_X | |
VAR_Y | |
VAR_W | |
VAR_H | |
VAR_A | |
VAR_B | |
VAR_PLANE | |
VAR_PROGRESS | |
VAR_VARS_NB | |
Definition at line 102 of file vf_xfade.c.
◆ query_formats()
◆ uninit()
◆ AVFILTER_DEFINE_CLASS()
AVFILTER_DEFINE_CLASS |
( |
xfade |
| ) |
|
◆ mix()
static float mix |
( |
float |
a, |
|
|
float |
b, |
|
|
float |
mix |
|
) |
| |
|
inlinestatic |
◆ fract()
static float fract |
( |
float |
a | ) |
|
|
inlinestatic |
◆ smoothstep()
static float smoothstep |
( |
float |
edge0, |
|
|
float |
edge1, |
|
|
float |
x |
|
) |
| |
|
inlinestatic |
◆ frand()
static float frand |
( |
int |
x, |
|
|
int |
y |
|
) |
| |
|
static |
◆ getpix()
static double getpix |
( |
void * |
priv, |
|
|
double |
x, |
|
|
double |
y, |
|
|
int |
plane, |
|
|
int |
nb |
|
) |
| |
|
inlinestatic |
◆ a0()
static double a0 |
( |
void * |
priv, |
|
|
double |
x, |
|
|
double |
y |
|
) |
| |
|
static |
◆ a1()
static double a1 |
( |
void * |
priv, |
|
|
double |
x, |
|
|
double |
y |
|
) |
| |
|
static |
◆ a2()
static double a2 |
( |
void * |
priv, |
|
|
double |
x, |
|
|
double |
y |
|
) |
| |
|
static |
◆ a3()
static double a3 |
( |
void * |
priv, |
|
|
double |
x, |
|
|
double |
y |
|
) |
| |
|
static |
◆ b0()
static double b0 |
( |
void * |
priv, |
|
|
double |
x, |
|
|
double |
y |
|
) |
| |
|
static |
Definition at line 1331 of file vf_xfade.c.
Referenced by av_rescale_rnd(), calc_lowcomp(), calc_lowcomp1(), cavs_idct8_add_c(), checkasm_check_synth_filter(), config_output(), extract_color(), ff_h264_idct8_add(), ff_ivi_recompose_haar(), ff_put_no_rnd_pixels_l2_msa(), ff_snow_vertical_compose97i(), filter_frame(), filter_horizontally(), generate_noise(), horizontal_compose_daub97i_TMPL(), idct_col(), idct_row(), idctRowCondDC(), idctSparseCol(), idctSparseColAdd(), idctSparseColPut(), kaiser_beta(), set_highshelf_rbj(), spatial_compose53i_dy(), spatial_compose53i_dy_buffered(), spatial_compose97i_dy(), spatial_compose97i_dy_buffered(), spatial_compose_haari_dy_TMPL(), spatial_decompose53i(), spatial_decompose97i(), vertical_compose53iH0(), vertical_compose53iL0(), vertical_compose53iL0_TMPL(), vertical_compose97iH0(), vertical_compose97iH1(), vertical_compose97iL0(), vertical_compose97iL1(), vertical_compose_daub97iH0_TMPL(), vertical_compose_daub97iH1_TMPL(), vertical_compose_daub97iL0_TMPL(), vertical_compose_daub97iL1_TMPL(), vertical_compose_dd137iL0_TMPL(), vertical_compose_dd97iH0_TMPL(), vertical_compose_dirac53iH0_TMPL(), vertical_compose_fidelityiH0_TMPL(), vertical_compose_fidelityiL0_TMPL(), vertical_compose_haar_TMPL(), vertical_decompose53iH0(), vertical_decompose53iL0(), vertical_decompose97iH0(), vertical_decompose97iH1(), vertical_decompose97iL0(), and vertical_decompose97iL1().
◆ b1()
static double b1 |
( |
void * |
priv, |
|
|
double |
x, |
|
|
double |
y |
|
) |
| |
|
static |
Definition at line 1332 of file vf_xfade.c.
Referenced by av_adler32_update(), av_rescale_rnd(), calc_lowcomp(), calc_lowcomp1(), cavs_idct8_add_c(), checkasm_check_synth_filter(), config_input(), config_output(), dct4x4(), decode_dlta(), decode_hq_slice(), decode_move(), decode_predictor_coeffs(), decode_subband(), extract_color(), ff_eval_coefs(), ff_h264_idct8_add(), ff_ivi_recompose_haar(), ff_put_no_rnd_pixels_l2_msa(), ff_snow_vertical_compose97i(), ff_vp8_luma_dc_wht_msa(), filter_frame(), filter_horizontally(), horizontal_compose_daub97i_TMPL(), idct_col(), idct_row(), idctRowCondDC(), idctSparseCol(), idctSparseColAdd(), idctSparseColPut(), kaiser_beta(), parse_chunk_headers(), residue_encode(), rgb24_to_yuv420p(), run_test(), search_for_ms(), spatial_compose53i_dy(), spatial_compose53i_dy_buffered(), spatial_compose97i_dy(), spatial_compose97i_dy_buffered(), spatial_compose_haari_dy_TMPL(), spatial_decompose53i(), spatial_decompose97i(), vertical_compose53iH0(), vertical_compose53iL0(), vertical_compose53iL0_TMPL(), vertical_compose97iH0(), vertical_compose97iH1(), vertical_compose97iL0(), vertical_compose97iL1(), vertical_compose_daub97iH0_TMPL(), vertical_compose_daub97iH1_TMPL(), vertical_compose_daub97iL0_TMPL(), vertical_compose_daub97iL1_TMPL(), vertical_compose_dd137iL0_TMPL(), vertical_compose_dd97iH0_TMPL(), vertical_compose_dirac53iH0_TMPL(), vertical_compose_fidelityiH0_TMPL(), vertical_compose_fidelityiL0_TMPL(), vertical_compose_haar_TMPL(), vertical_decompose53iH0(), vertical_decompose53iL0(), vertical_decompose97iH0(), vertical_decompose97iH1(), vertical_decompose97iL0(), vertical_decompose97iL1(), and wht4x4().
◆ b2()
static double b2 |
( |
void * |
priv, |
|
|
double |
x, |
|
|
double |
y |
|
) |
| |
|
static |
Definition at line 1333 of file vf_xfade.c.
Referenced by av_adler32_update(), cavs_idct8_add_c(), config_input(), config_output(), decode_dlta(), decode_move(), decode_predictor_coeffs(), decode_subband(), ff_eval_coefs(), ff_h264_idct8_add(), ff_ivi_recompose_haar(), ff_put_no_rnd_pixels_l2_msa(), ff_snow_vertical_compose97i(), filter_frame(), horizontal_compose_daub97i_TMPL(), idct_col(), idct_row(), idctRowCondDC(), idctSparseCol(), idctSparseColAdd(), idctSparseColPut(), parse_chunk_headers(), qpel_motion_search(), residue_encode(), run_test(), search_for_ms(), spatial_compose53i_dy(), spatial_compose53i_dy_buffered(), spatial_compose97i_dy(), spatial_compose97i_dy_buffered(), spatial_decompose53i(), spatial_decompose97i(), vertical_compose53iH0(), vertical_compose53iL0(), vertical_compose53iL0_TMPL(), vertical_compose97iH0(), vertical_compose97iH1(), vertical_compose97iL0(), vertical_compose97iL1(), vertical_compose_daub97iH0_TMPL(), vertical_compose_daub97iH1_TMPL(), vertical_compose_daub97iL0_TMPL(), vertical_compose_daub97iL1_TMPL(), vertical_compose_dd137iL0_TMPL(), vertical_compose_dd97iH0_TMPL(), vertical_compose_dirac53iH0_TMPL(), vertical_compose_fidelityiH0_TMPL(), vertical_compose_fidelityiL0_TMPL(), vertical_decompose53iH0(), vertical_decompose53iL0(), vertical_decompose97iH0(), vertical_decompose97iH1(), vertical_decompose97iL0(), and vertical_decompose97iL1().
◆ b3()
static double b3 |
( |
void * |
priv, |
|
|
double |
x, |
|
|
double |
y |
|
) |
| |
|
static |
Definition at line 1334 of file vf_xfade.c.
Referenced by cavs_idct8_add_c(), config_output(), ff_h264_idct8_add(), ff_ivi_recompose_haar(), ff_put_no_rnd_pixels_l2_msa(), ff_snow_vertical_compose97i(), idct_col(), idct_row(), idctRowCondDC(), idctSparseCol(), idctSparseColAdd(), idctSparseColPut(), search_for_ms(), spatial_compose53i_dy(), spatial_compose53i_dy_buffered(), spatial_compose97i_dy(), spatial_compose97i_dy_buffered(), spatial_decompose53i(), spatial_decompose97i(), vertical_compose_dd137iL0_TMPL(), vertical_compose_dd97iH0_TMPL(), vertical_compose_fidelityiH0_TMPL(), and vertical_compose_fidelityiL0_TMPL().
◆ config_output()
◆ xfade_slice()
◆ xfade_frame()
◆ xfade_activate()
◆ var_names
const char* const var_names[] = { "X", "Y", "W", "H", "A", "B", "PLANE", "P", NULL } |
|
static |
◆ xfade_options
◆ xfade_inputs
Initial value:= {
{
.name = "main",
},
{
.name = "xfade",
},
}
Definition at line 1574 of file vf_xfade.c.
◆ xfade_outputs
Initial value:= {
{
.name = "default",
},
}
Definition at line 1586 of file vf_xfade.c.
◆ ff_vf_xfade
Initial value:= {
.name = "xfade",
.priv_class = &xfade_class,
}
Definition at line 1595 of file vf_xfade.c.
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option name
static int xfade_activate(AVFilterContext *ctx)
This structure describes decoded (raw) audio or video data.
static float mix(float a, float b, float mix)
static double val(void *priv, double ch)
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
#define ss(width, name, subs,...)
static float smoothstep(float edge0, float edge1, float x)
static int slice_end(AVCodecContext *avctx, AVFrame *pict)
Handle slice ends.
float fminf(float, float)
static const AVFilterPad outputs[]
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
filter_frame For filters that do not use the activate() callback
static const AVFilterPad xfade_inputs[]
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several inputs
static const AVFilterPad xfade_outputs[]
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
static av_cold void uninit(AVFilterContext *ctx)
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
static float frand(int x, int y)
static int config_output(AVFilterLink *outlink)
static void fade(uint8_t *dst, ptrdiff_t dst_linesize, const uint8_t *src, ptrdiff_t src_linesize, int width, int height, int alpha, int beta)
static float fract(float a)
static float smooth(DeshakeOpenCLContext *deshake_ctx, float *gauss_kernel, int length, float max_val, AVFifoBuffer *values)
#define AVFILTER_FLAG_SLICE_THREADS
The filter supports multithreading by splitting frames into multiple parts and processing them concur...
static float distance(float x, float y, int band)
#define flags(name, subs,...)
static int query_formats(AVFilterContext *ctx)