128 double var_values[
VARS_NB], res;
156 s->
x = var_values[
VAR_X] = res;
163 s->
y = var_values[
VAR_Y] = res;
170 s->
w = var_values[
VAR_W] = res;
177 s->
h = var_values[
VAR_H] = res;
188 s->
w = (s->
w > 0) ? s->
w : inlink->
w;
189 s->
h = (s->
h > 0) ? s->
h : inlink->
h;
192 if (s->
w < 0 || s->
h < 0) {
198 s->
x, s->
y, s->
w, s->
h,
205 "Error when evaluating the expression '%s'.\n",
213 int plane, x, y, xb = s->
x, yb = s->
y;
214 unsigned char *row[4];
217 for (y =
FFMAX(yb, 0); y < frame->
height && y < (yb + s->
h); y++) {
221 for (plane = 1; plane < 3; plane++)
222 row[plane] = frame->
data[plane] +
226 for (x =
FFMAX(xb, 0); x < xb + s->
w && x < frame->
width; x++)
227 if ((y - yb < s->thickness) || (yb + s->
h - 1 - y < s->
thickness) ||
228 (x - xb < s->thickness) || (xb + s->
w - 1 - x < s->
thickness))
229 row[0][x] = 0xff - row[0][x];
231 for (x =
FFMAX(xb, 0); x < xb + s->
w && x < frame->
width; x++) {
232 if ((y - yb < s->thickness) || (yb + s->
h - 1 - y < s->
thickness) ||
233 (x - xb < s->thickness) || (xb + s->
w - 1 - x < s->
thickness)) {
243 for (y =
FFMAX(yb, 0); y < frame->
height && y < (yb + s->
h); y++) {
246 for (plane = 1; plane < 3; plane++)
247 row[plane] = frame->
data[plane] +
251 for (x =
FFMAX(xb, 0); x < xb + s->
w && x < frame->
width; x++)
252 if ((y - yb < s->thickness) || (yb + s->
h - 1 - y < s->
thickness) ||
253 (x - xb < s->thickness) || (xb + s->
w - 1 - x < s->
thickness))
254 row[0][x] = 0xff - row[0][x];
256 for (x =
FFMAX(xb, 0); x < xb + s->
w && x < frame->
width; x++) {
259 if ((y - yb < s->thickness) || (yb + s->
h - 1 - y < s->
thickness) ||
260 (x - xb < s->thickness) || (xb + s->
w - 1 - x < s->
thickness)) {
273 #define OFFSET(x) offsetof(DrawBoxContext, x)
274 #define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
276 #if CONFIG_DRAWBOX_FILTER
278 static const AVOption drawbox_options[] = {
317 .priv_class = &drawbox_class,
326 #if CONFIG_DRAWGRID_FILTER
338 x_modulo = x % drawgrid->
w;
339 y_modulo = y % drawgrid->
h;
343 x_modulo += drawgrid->
w;
345 y_modulo += drawgrid->
h;
358 for (y = 0; y < frame->
height; y++) {
362 for (plane = 1; plane < 3; plane++)
363 row[plane] = frame->
data[plane] +
367 for (x = 0; x < frame->
width; x++)
368 if (pixel_belongs_to_grid(drawgrid, x, y))
369 row[0][x] = 0xff - row[0][x];
371 for (x = 0; x < frame->
width; x++) {
372 if (pixel_belongs_to_grid(drawgrid, x, y)) {
382 for (y = 0; y < frame->
height; y++) {
385 for (plane = 1; plane < 3; plane++)
386 row[plane] = frame->
data[plane] +
390 for (x = 0; x < frame->
width; x++)
391 if (pixel_belongs_to_grid(drawgrid, x, y))
392 row[0][x] = 0xff - row[0][x];
394 for (x = 0; x < frame->
width; x++) {
397 if (pixel_belongs_to_grid(drawgrid, x, y)) {
398 row[0][x ] = (1 -
alpha) * row[0][x ] + alpha * drawgrid->
yuv_color[
Y];
399 row[1][x >> drawgrid->
hsub] = (1 - alpha) * row[1][x >> drawgrid->
hsub] + alpha * drawgrid->
yuv_color[
U];
410 static const AVOption drawgrid_options[] = {
431 .filter_frame = drawgrid_filter_frame,
449 .priv_class = &drawgrid_class,
452 .
inputs = drawgrid_inputs,
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
This structure describes decoded (raw) audio or video data.
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Main libavfilter public API header.
int h
agreed upon image height
Various defines for YUV<->RGB conversion.
static const char *const var_names[]
char * y_expr
expression for x and y
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
#define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC
Some filters support a generic "enable" expression option that can be used to enable or disable a fil...
const char * name
Pad name.
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
#define AV_PIX_FMT_FLAG_ALPHA
The pixel format has an alpha channel.
static int query_formats(AVFilterContext *ctx)
static double av_q2d(AVRational a)
Convert rational to double.
planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range...
planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting col...
#define AV_LOG_VERBOSE
Detailed information.
int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen, void *log_ctx)
Put the RGBA values that correspond to color_string in rgba_color.
int invert_color
invert luma color
A filter pad used for either input or output.
A link between two filters.
static int config_input(AVFilterLink *inlink)
int av_expr_parse_and_eval(double *d, const char *s, const char *const *const_names, const double *const_values, const char *const *func1_names, double(*const *funcs1)(void *, double), const char *const *func2_names, double(*const *funcs2)(void *, double, double), void *opaque, int log_offset, void *log_ctx)
Parse and evaluate an expression.
planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples)
static double alpha(void *priv, double x, double y)
int width
width and height of the video frame
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
void * priv
private data for use by the filter
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
int w
agreed upon image width
uint64_t flags
Combination of AV_PIX_FMT_FLAG_...
char * t_expr
expression for thickness
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
static const AVFilterPad outputs[]
char * h_expr
expression for width and height
int format
agreed upon media format
static const AVFilterPad inputs[]
static const int NUM_EXPR_EVALS
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
int hsub
chroma subsampling
planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
Describe the class of an AVClass context structure.
const char * name
Filter name.
AVRational sample_aspect_ratio
agreed upon sample aspect ratio
AVFilterLink ** outputs
array of pointers to output links
static enum AVPixelFormat pix_fmts[]
#define RGB_TO_U_CCIR(r1, g1, b1, shift)
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
#define RGB_TO_V_CCIR(r1, g1, b1, shift)
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
common internal and external API header
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
static av_cold int init(AVFilterContext *ctx)
#define RGB_TO_Y_CCIR(r, g, b)
AVFilterContext * dst
dest filter
#define AVFILTER_DEFINE_CLASS(fname)
static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
unsigned char yuv_color[4]
planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
AVPixelFormat
Pixel format.
simple arithmetic expression evaluator