FFmpeg
Enumerations | Functions
drawutils.c File Reference
#include <string.h>
#include "libavutil/avassert.h"
#include "libavutil/avutil.h"
#include "libavutil/csp.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/pixdesc.h"
#include "colorspace.h"
#include "drawutils.h"
#include "formats.h"

Go to the source code of this file.

Enumerations

enum  { RED = 0, GREEN, BLUE, ALPHA }
 

Functions

int ff_fill_rgba_map (uint8_t *rgba_map, enum AVPixelFormat pix_fmt)
 
int ff_draw_init2 (FFDrawContext *draw, enum AVPixelFormat format, enum AVColorSpace csp, enum AVColorRange range, unsigned flags)
 Init a draw context. More...
 
int ff_draw_init (FFDrawContext *draw, enum AVPixelFormat format, unsigned flags)
 
void ff_draw_color (FFDrawContext *draw, FFDrawColor *color, const uint8_t rgba[4])
 Prepare a color. More...
 
static uint8_t * pointer_at (FFDrawContext *draw, uint8_t *data[], int linesize[], int plane, int x, int y)
 
void ff_copy_rectangle2 (FFDrawContext *draw, uint8_t *dst[], int dst_linesize[], uint8_t *src[], int src_linesize[], int dst_x, int dst_y, int src_x, int src_y, int w, int h)
 Copy a rectangle from an image to another. More...
 
void ff_fill_rectangle (FFDrawContext *draw, FFDrawColor *color, uint8_t *dst[], int dst_linesize[], int dst_x, int dst_y, int w, int h)
 Fill a rectangle with an uniform color. More...
 
static void clip_interval (int wmax, int *x, int *w, int *dx)
 Clip interval [x; x+w[ within [0; wmax[. More...
 
static void subsampling_bounds (int sub, int *x, int *w, int *start, int *end)
 Decompose w pixels starting at x into start + (w starting at x) + end with x and w aligned on multiples of 1<<sub. More...
 
static void blend_line (uint8_t *dst, unsigned src, unsigned alpha, int dx, int w, unsigned hsub, int left, int right)
 
static void blend_line16 (uint8_t *dst, unsigned src, unsigned alpha, int dx, int w, unsigned hsub, int left, int right)
 
void ff_blend_rectangle (FFDrawContext *draw, FFDrawColor *color, uint8_t *dst[], int dst_linesize[], int dst_w, int dst_h, int x0, int y0, int w, int h)
 Blend a rectangle with an uniform color. More...
 
static void blend_pixel16 (uint8_t *dst, unsigned src, unsigned alpha, const uint8_t *mask, int mask_linesize, int l2depth, unsigned w, unsigned h, unsigned shift, unsigned xm0)
 
static void blend_pixel (uint8_t *dst, unsigned src, unsigned alpha, const uint8_t *mask, int mask_linesize, int l2depth, unsigned w, unsigned h, unsigned shift, unsigned xm0)
 
static void blend_line_hv16 (uint8_t *dst, int dst_delta, unsigned src, unsigned alpha, const uint8_t *mask, int mask_linesize, int l2depth, int w, unsigned hsub, unsigned vsub, int xm, int left, int right, int hband)
 
static void blend_line_hv (uint8_t *dst, int dst_delta, unsigned src, unsigned alpha, const uint8_t *mask, int mask_linesize, int l2depth, int w, unsigned hsub, unsigned vsub, int xm, int left, int right, int hband)
 
void ff_blend_mask (FFDrawContext *draw, FFDrawColor *color, uint8_t *dst[], int dst_linesize[], int dst_w, int dst_h, const uint8_t *mask, int mask_linesize, int mask_w, int mask_h, int l2depth, unsigned endianness, int x0, int y0)
 Blend an alpha mask with an uniform color. More...
 
int ff_draw_round_to_sub (FFDrawContext *draw, int sub_dir, int round_dir, int value)
 Round a dimension according to subsampling. More...
 
AVFilterFormatsff_draw_supported_pixel_formats (unsigned flags)
 Return the list of pixel formats supported by the draw functions. More...
 

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
RED 
GREEN 
BLUE 
ALPHA 

Definition at line 33 of file drawutils.c.

Function Documentation

◆ ff_fill_rgba_map()

int ff_fill_rgba_map ( uint8_t *  rgba_map,
enum AVPixelFormat  pix_fmt 
)

◆ ff_draw_init2()

int ff_draw_init2 ( FFDrawContext draw,
enum AVPixelFormat  format,
enum AVColorSpace  csp,
enum AVColorRange  range,
unsigned  flags 
)

Init a draw context.

Only a limited number of pixel formats are supported, if format is not supported the function will return an error.

Parameters
formatpixel format of the frames that will be drawn onto
cspcolor space of the frames that will be drawn onto, defaulting to BT601 or RGB depending on the specified format when AVCOL_SPC_UNSPECIFIED is passed.
rangesample value range of the frames that will be drawn onto, defaulting to TV-range unless using a legacy J format when AVCOL_RANGE_UNSPECIFIED is passed.
flagscombination of FF_DRAW_* flags.
Returns
0 for success, < 0 for error

Definition at line 80 of file drawutils.c.

Referenced by ff_draw_init().

◆ ff_draw_init()

int ff_draw_init ( FFDrawContext draw,
enum AVPixelFormat  format,
unsigned  flags 
)

◆ ff_draw_color()

void ff_draw_color ( FFDrawContext draw,
FFDrawColor color,
const uint8_t  rgba[4] 
)

Prepare a color.

The rgba value passed is always 8-bit full-range in the RGB space corresponding to the space set at initialization.

Definition at line 156 of file drawutils.c.

Referenced by config_input(), config_out_props(), config_output(), config_props(), draw_text(), main(), oscilloscope_config_input(), overlay_ass_image(), pixscope_config_input(), process_command(), update_color_with_alpha(), and update_oscilloscope().

◆ pointer_at()

static uint8_t* pointer_at ( FFDrawContext draw,
uint8_t *  data[],
int  linesize[],
int  plane,
int  x,
int  y 
)
static

◆ ff_copy_rectangle2()

void ff_copy_rectangle2 ( FFDrawContext draw,
uint8_t *  dst[],
int  dst_linesize[],
uint8_t *  src[],
int  src_linesize[],
int  dst_x,
int  dst_y,
int  src_x,
int  src_y,
int  w,
int  h 
)

Copy a rectangle from an image to another.

The coordinates must be as even as the subsampling requires.

Definition at line 209 of file drawutils.c.

Referenced by filter_frame().

◆ ff_fill_rectangle()

void ff_fill_rectangle ( FFDrawContext draw,
FFDrawColor color,
uint8_t *  dst[],
int  dst_linesize[],
int  dst_x,
int  dst_y,
int  w,
int  h 
)

Fill a rectangle with an uniform color.

The coordinates must be as even as the subsampling requires. The color needs to be inited with ff_draw_color.

Definition at line 231 of file drawutils.c.

Referenced by activate(), config_out_props(), draw_blank_frame(), filter_color2(), filter_frame(), oscilloscope_filter_frame(), pixscope_filter_frame(), process_frame(), and video_frame().

◆ clip_interval()

static void clip_interval ( int  wmax,
int x,
int w,
int dx 
)
static

Clip interval [x; x+w[ within [0; wmax[.

The resulting w may be negative if the final interval is empty. dx, if not null, return the difference between in and out value of x.

Definition at line 272 of file drawutils.c.

Referenced by ff_blend_mask(), and ff_blend_rectangle().

◆ subsampling_bounds()

static void subsampling_bounds ( int  sub,
int x,
int w,
int start,
int end 
)
static

Decompose w pixels starting at x into start + (w starting at x) + end with x and w aligned on multiples of 1<<sub.

Definition at line 291 of file drawutils.c.

Referenced by ff_blend_mask(), and ff_blend_rectangle().

◆ blend_line()

static void blend_line ( uint8_t *  dst,
unsigned  src,
unsigned  alpha,
int  dx,
int  w,
unsigned  hsub,
int  left,
int  right 
)
static

Definition at line 306 of file drawutils.c.

Referenced by ff_blend_rectangle().

◆ blend_line16()

static void blend_line16 ( uint8_t *  dst,
unsigned  src,
unsigned  alpha,
int  dx,
int  w,
unsigned  hsub,
int  left,
int  right 
)
static

Definition at line 328 of file drawutils.c.

Referenced by ff_blend_rectangle().

◆ ff_blend_rectangle()

void ff_blend_rectangle ( FFDrawContext draw,
FFDrawColor color,
uint8_t *  dst[],
int  dst_linesize[],
int  dst_w,
int  dst_h,
int  x0,
int  y0,
int  w,
int  h 
)

Blend a rectangle with an uniform color.

Definition at line 353 of file drawutils.c.

Referenced by draw_text(), oscilloscope_filter_frame(), and pixscope_filter_frame().

◆ blend_pixel16()

static void blend_pixel16 ( uint8_t *  dst,
unsigned  src,
unsigned  alpha,
const uint8_t *  mask,
int  mask_linesize,
int  l2depth,
unsigned  w,
unsigned  h,
unsigned  shift,
unsigned  xm0 
)
static

Definition at line 437 of file drawutils.c.

Referenced by blend_line_hv16().

◆ blend_pixel()

static void blend_pixel ( uint8_t *  dst,
unsigned  src,
unsigned  alpha,
const uint8_t *  mask,
int  mask_linesize,
int  l2depth,
unsigned  w,
unsigned  h,
unsigned  shift,
unsigned  xm0 
)
static

Definition at line 461 of file drawutils.c.

Referenced by blend_line_hv().

◆ blend_line_hv16()

static void blend_line_hv16 ( uint8_t *  dst,
int  dst_delta,
unsigned  src,
unsigned  alpha,
const uint8_t *  mask,
int  mask_linesize,
int  l2depth,
int  w,
unsigned  hsub,
unsigned  vsub,
int  xm,
int  left,
int  right,
int  hband 
)
static

Definition at line 484 of file drawutils.c.

Referenced by ff_blend_mask().

◆ blend_line_hv()

static void blend_line_hv ( uint8_t *  dst,
int  dst_delta,
unsigned  src,
unsigned  alpha,
const uint8_t *  mask,
int  mask_linesize,
int  l2depth,
int  w,
unsigned  hsub,
unsigned  vsub,
int  xm,
int  left,
int  right,
int  hband 
)
static

Definition at line 509 of file drawutils.c.

Referenced by ff_blend_mask().

◆ ff_blend_mask()

void ff_blend_mask ( FFDrawContext draw,
FFDrawColor color,
uint8_t *  dst[],
int  dst_linesize[],
int  dst_w,
int  dst_h,
const uint8_t *  mask,
int  mask_linesize,
int  mask_w,
int  mask_h,
int  l2depth,
unsigned  endianness,
int  x0,
int  y0 
)

Blend an alpha mask with an uniform color.

Parameters
drawdraw context
colorcolor for the overlay;
dstdestination image
dst_linesizeline stride of the destination
dst_wwidth of the destination image
dst_hheight of the destination image
maskmask
mask_linesizeline stride of the mask
mask_wwidth of the mask
mask_hheight of the mask
l2depthlog2 of depth of the mask (0 for 1bpp, 3 for 8bpp)
endiannessbit order of the mask (0: MSB to the left)
x0horizontal position of the overlay
y0vertical position of the overlay

Definition at line 534 of file drawutils.c.

Referenced by draw_glyphs(), draw_text(), and overlay_ass_image().

◆ ff_draw_round_to_sub()

int ff_draw_round_to_sub ( FFDrawContext draw,
int  sub_dir,
int  round_dir,
int  value 
)

Round a dimension according to subsampling.

Parameters
drawdraw context
sub_dir0 for horizontal, 1 for vertical
round_dir0 nearest, -1 round down, +1 round up
valuevalue to round
Returns
the rounded value

Definition at line 635 of file drawutils.c.

Referenced by config_input().

◆ ff_draw_supported_pixel_formats()

AVFilterFormats* ff_draw_supported_pixel_formats ( unsigned  flags)

Return the list of pixel formats supported by the draw functions.

The flags are the same as ff_draw_init, i.e., none currently.

Definition at line 647 of file drawutils.c.

Referenced by query_formats().