126 double var_values[
VARS_NB], res;
153 s->
x = var_values[
VAR_X] = res;
160 s->
y = var_values[
VAR_Y] = res;
167 s->
w = var_values[
VAR_W] = res;
174 s->
h = var_values[
VAR_H] = res;
185 s->
w = (s->
w > 0) ? s->
w : inlink->
w;
186 s->
h = (s->
h > 0) ? s->
h : inlink->
h;
189 if (s->
w < 0 || s->
h < 0) {
195 s->
x, s->
y, s->
w, s->
h,
202 "Error when evaluating the expression '%s'.\n",
210 int plane, x,
y, xb = s->
x, yb = s->
y;
211 unsigned char *row[4];
213 for (y =
FFMAX(yb, 0); y < frame->
height && y < (yb + s->
h); y++) {
216 for (plane = 1; plane < 3; plane++)
217 row[plane] = frame->
data[plane] +
221 for (x =
FFMAX(xb, 0); x < xb + s->
w && x < frame->
width; x++)
222 if ((y - yb < s->thickness) || (yb + s->
h - 1 - y < s->
thickness) ||
223 (x - xb < s->thickness) || (xb + s->
w - 1 - x < s->
thickness))
224 row[0][x] = 0xff - row[0][x];
226 for (x =
FFMAX(xb, 0); x < xb + s->
w && x < frame->
width; x++) {
229 if ((y - yb < s->thickness) || (yb + s->
h - 1 - y < s->
thickness) ||
230 (x - xb < s->thickness) || (xb + s->
w - 1 - x < s->
thickness)) {
242 #define OFFSET(x) offsetof(DrawBoxContext, x)
243 #define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
245 #if CONFIG_DRAWBOX_FILTER
247 static const AVOption drawbox_options[] = {
286 .priv_class = &drawbox_class,
295 #if CONFIG_DRAWGRID_FILTER
307 x_modulo = x % drawgrid->
w;
308 y_modulo = y % drawgrid->
h;
312 x_modulo += drawgrid->
w;
314 y_modulo += drawgrid->
h;
326 for (y = 0; y < frame->
height; y++) {
329 for (plane = 1; plane < 3; plane++)
330 row[plane] = frame->
data[plane] +
334 for (x = 0; x < frame->
width; x++)
335 if (pixel_belongs_to_grid(drawgrid, x, y))
336 row[0][x] = 0xff - row[0][x];
338 for (x = 0; x < frame->
width; x++) {
341 if (pixel_belongs_to_grid(drawgrid, x, y)) {
342 row[0][x ] = (1 -
alpha) * row[0][x ] + alpha * drawgrid->
yuv_color[
Y];
343 row[1][x >> drawgrid->
hsub] = (1 - alpha) * row[1][x >> drawgrid->
hsub] + alpha * drawgrid->
yuv_color[
U];
353 static const AVOption drawgrid_options[] = {
374 .filter_frame = drawgrid_filter_frame,
392 .priv_class = &drawgrid_class,
395 .
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)
static const AVFilterPad outputs[]
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.
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.
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
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...
char * h_expr
expression for width and height
int format
agreed upon media format
static const int NUM_EXPR_EVALS
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...
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.
static const AVFilterPad inputs[]
const char * name
Filter name.
AVRational sample_aspect_ratio
agreed upon sample aspect ratio
AVFilterLink ** outputs
array of pointers to output links
#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