88 unsigned i, nb_planes = 0;
92 if (!desc || !desc->
name)
111 if (pixelstep[c->
plane] != 0 &&
114 if (pixelstep[c->
plane] == 6 &&
118 if (pixelstep[c->
plane] >= 8)
122 memset(draw, 0,
sizeof(*draw));
142 if (rgba != color->
rgba)
143 memcpy(color->
rgba, rgba,
sizeof(color->
rgba));
147 for (i = 0; i < 4; i++) {
148 color->
comp[0].
u8[rgba_map[
i]] = rgba[
i];
154 for (i = 0; i < 4; i++) {
155 color->
comp[rgba_map[
i]].
u8[0] = rgba[
i];
166 color->
comp[3].
u8[0] = rgba[3];
167 #define EXPAND(compn) \ 168 if (desc->comp[compn].depth > 8) \ 169 color->comp[desc->comp[compn].plane].u16[desc->comp[compn].offset] = \ 170 color->comp[desc->comp[compn].plane].u8[desc->comp[compn].offset] << \ 171 (draw->desc->comp[compn].depth + draw->desc->comp[compn].shift - 8) 185 color->
comp[1].
u8[0] = rgba[3];
189 "Color conversion not implemented for %s\n", draw->
desc->
name);
190 memset(color, 128,
sizeof(*color));
195 int plane,
int x,
int y)
198 (y >> draw->
vsub[plane]) * linesize[plane] +
203 uint8_t *dst[],
int dst_linesize[],
205 int dst_x,
int dst_y,
int src_x,
int src_y,
208 int plane, y, wp, hp;
211 for (plane = 0; plane < draw->
nb_planes; plane++) {
212 p =
pointer_at(draw, src, src_linesize, plane, src_x, src_y);
213 q =
pointer_at(draw, dst, dst_linesize, plane, dst_x, dst_y);
216 for (y = 0; y < hp; y++) {
218 p += src_linesize[plane];
219 q += dst_linesize[plane];
225 uint8_t *dst[],
int dst_linesize[],
226 int dst_x,
int dst_y,
int w,
int h)
228 int plane, x, y, wp, hp;
232 for (plane = 0; plane < draw->
nb_planes; plane++) {
233 p0 =
pointer_at(draw, dst, dst_linesize, plane, dst_x, dst_y);
241 for (x = 0; 2*x < draw->
pixelstep[plane]; x++)
246 for (x = 0; x < wp; x++) {
252 p = p0 + dst_linesize[plane];
253 for (y = 1; y < hp; y++) {
255 p += dst_linesize[plane];
288 *start = (-*x) & mask;
290 *start =
FFMIN(*start, *w);
298 return (draw->
comp_mask[plane] >> comp) & 1;
305 int dx,
int w,
unsigned hsub,
int left,
int right)
307 unsigned asrc = alpha *
src;
308 unsigned tau = 0x1010101 -
alpha;
312 unsigned suba = (left *
alpha) >> hsub;
313 *dst = (*dst * (0x1010101 - suba) + src * suba) >> 24;
316 for (x = 0; x <
w; x++) {
317 *dst = (*dst * tau + asrc) >> 24;
321 unsigned suba = (right *
alpha) >> hsub;
322 *dst = (*dst * (0x1010101 - suba) + src * suba) >> 24;
327 int dx,
int w,
unsigned hsub,
int left,
int right)
329 unsigned asrc = alpha *
src;
330 unsigned tau = 0x10001 -
alpha;
334 unsigned suba = (left *
alpha) >> hsub;
336 AV_WL16(dst, (value * (0x10001 - suba) + src * suba) >> 16);
339 for (x = 0; x <
w; x++) {
341 AV_WL16(dst, (value * tau + asrc) >> 16);
345 unsigned suba = (right *
alpha) >> hsub;
347 AV_WL16(dst, (value * (0x10001 - suba) + src * suba) >> 16);
352 uint8_t *dst[],
int dst_linesize[],
353 int dst_w,
int dst_h,
354 int x0,
int y0,
int w,
int h)
356 unsigned alpha, nb_planes, nb_comp, plane,
comp;
357 int w_sub, h_sub, x_sub, y_sub,
left, right, top, bottom, y;
363 if (w <= 0 || h <= 0 || !color->rgba[3])
367 alpha = 0x10203 * color->
rgba[3] + 0x2;
370 alpha = 0x101 * color->
rgba[3] + 0x2;
373 nb_planes += !nb_planes;
374 for (plane = 0; plane < nb_planes; plane++) {
376 p0 =
pointer_at(draw, dst, dst_linesize, plane, x0, y0);
383 for (comp = 0; comp < nb_comp; comp++) {
393 draw->
hsub[plane], left, right);
397 draw->
hsub[plane], left, right);
399 p += dst_linesize[plane];
402 for (y = 0; y < h_sub; y++) {
405 draw->
hsub[plane], left, right);
406 p += dst_linesize[plane];
409 for (y = 0; y < h_sub; y++) {
412 draw->
hsub[plane], left, right);
413 p += dst_linesize[plane];
420 draw->
hsub[plane], left, right);
424 draw->
hsub[plane], left, right);
432 const uint8_t *
mask,
int mask_linesize,
int l2depth,
433 unsigned w,
unsigned h,
unsigned shift,
unsigned xm0)
435 unsigned xm, x, y, t = 0;
436 unsigned xmshf = 3 - l2depth;
437 unsigned xmmod = 7 >> l2depth;
438 unsigned mbits = (1 << (1 << l2depth)) - 1;
439 unsigned mmult = 255 / mbits;
442 for (y = 0; y <
h; y++) {
444 for (x = 0; x <
w; x++) {
445 t += ((mask[xm >> xmshf] >> ((~xm & xmmod) << l2depth)) & mbits)
449 mask += mask_linesize;
451 alpha = (t >>
shift) * alpha;
452 AV_WL16(dst, ((0x10001 - alpha) * value + alpha * src) >> 16);
456 const uint8_t *
mask,
int mask_linesize,
int l2depth,
457 unsigned w,
unsigned h,
unsigned shift,
unsigned xm0)
459 unsigned xm, x, y, t = 0;
460 unsigned xmshf = 3 - l2depth;
461 unsigned xmmod = 7 >> l2depth;
462 unsigned mbits = (1 << (1 << l2depth)) - 1;
463 unsigned mmult = 255 / mbits;
465 for (y = 0; y <
h; y++) {
467 for (x = 0; x <
w; x++) {
468 t += ((mask[xm >> xmshf] >> ((~xm & xmmod) << l2depth)) & mbits)
472 mask += mask_linesize;
474 alpha = (t >>
shift) * alpha;
475 *dst = ((0x1010101 -
alpha) * *dst + alpha * src) >> 24;
480 const uint8_t *
mask,
int mask_linesize,
int l2depth,
int w,
481 unsigned hsub,
unsigned vsub,
482 int xm,
int left,
int right,
int hband)
488 left, hband, hsub + vsub, xm);
492 for (x = 0; x <
w; x++) {
494 1 << hsub, hband, hsub + vsub, xm);
500 right, hband, hsub + vsub, xm);
505 const uint8_t *
mask,
int mask_linesize,
int l2depth,
int w,
506 unsigned hsub,
unsigned vsub,
507 int xm,
int left,
int right,
int hband)
512 blend_pixel(dst, src, alpha, mask, mask_linesize, l2depth,
513 left, hband, hsub + vsub, xm);
517 for (x = 0; x <
w; x++) {
518 blend_pixel(dst, src, alpha, mask, mask_linesize, l2depth,
519 1 << hsub, hband, hsub + vsub, xm);
524 blend_pixel(dst, src, alpha, mask, mask_linesize, l2depth,
525 right, hband, hsub + vsub, xm);
529 uint8_t *dst[],
int dst_linesize[],
int dst_w,
int dst_h,
530 const uint8_t *
mask,
int mask_linesize,
int mask_w,
int mask_h,
531 int l2depth,
unsigned endianness,
int x0,
int y0)
533 unsigned alpha, nb_planes, nb_comp, plane,
comp;
534 int xm0, ym0, w_sub, h_sub, x_sub, y_sub,
left, right, top, bottom, y;
540 mask += ym0 * mask_linesize;
541 if (mask_w <= 0 || mask_h <= 0 || !color->rgba[3])
546 alpha = (0x10307 * color->
rgba[3] + 0x3) >> 8;
548 alpha = (0x101 * color->
rgba[3] + 0x2) >> 8;
551 nb_planes += !nb_planes;
552 for (plane = 0; plane < nb_planes; plane++) {
554 p0 =
pointer_at(draw, dst, dst_linesize, plane, x0, y0);
561 for (comp = 0; comp < nb_comp; comp++) {
571 color->
comp[plane].
u8[comp], alpha,
572 m, mask_linesize, l2depth, w_sub,
573 draw->
hsub[plane], draw->
vsub[plane],
574 xm0, left, right, top);
577 color->
comp[plane].
u16[comp], alpha,
578 m, mask_linesize, l2depth, w_sub,
579 draw->
hsub[plane], draw->
vsub[plane],
580 xm0, left, right, top);
582 p += dst_linesize[plane];
583 m += top * mask_linesize;
586 for (y = 0; y < h_sub; y++) {
588 color->
comp[plane].
u8[comp], alpha,
589 m, mask_linesize, l2depth, w_sub,
590 draw->
hsub[plane], draw->
vsub[plane],
591 xm0, left, right, 1 << draw->
vsub[plane]);
592 p += dst_linesize[plane];
593 m += mask_linesize << draw->
vsub[plane];
596 for (y = 0; y < h_sub; y++) {
598 color->
comp[plane].
u16[comp], alpha,
599 m, mask_linesize, l2depth, w_sub,
600 draw->
hsub[plane], draw->
vsub[plane],
601 xm0, left, right, 1 << draw->
vsub[plane]);
602 p += dst_linesize[plane];
603 m += mask_linesize << draw->
vsub[plane];
609 color->
comp[plane].
u8[comp], alpha,
610 m, mask_linesize, l2depth, w_sub,
611 draw->
hsub[plane], draw->
vsub[plane],
612 xm0, left, right, bottom);
615 color->
comp[plane].
u16[comp], alpha,
616 m, mask_linesize, l2depth, w_sub,
617 draw->
hsub[plane], draw->
vsub[plane],
618 xm0, left, right, bottom);
633 value += round_dir ? (1 <<
shift) - 1 : 1 << (shift - 1);
634 return (value >> shift) <<
shift;
AVFilterFormats * ff_draw_supported_pixel_formats(unsigned flags)
Return the list of pixel formats supported by the draw functions.
planar GBR 4:4:4:4 40bpp, little-endian
int plane
Which of the 4 planes contains the component.
static enum AVPixelFormat pix_fmt
static int shift(int a, int b)
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
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.
ptrdiff_t const GLvoid * data
packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is st...
#define AV_LOG_WARNING
Something somehow does not look correct.
packed RGB 8:8:8, 24bpp, RGBRGB...
Memory handling functions.
packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is st...
Convenience header that includes libavutil's core.
planar GBR 4:4:4 36bpp, little-endian
static void blend_line(uint8_t *dst, unsigned src, unsigned alpha, int dx, int w, unsigned hsub, int left, int right)
packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined
#define RGB_TO_U_JPEG(r1, g1, b1)
Y , 12bpp, little-endian.
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample format(the sample packing is implied by the sample format) and sample rate.The lists are not just lists
planar GBR 4:4:4 36bpp, big-endian
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_RL16
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
static void clip_interval(int wmax, int *x, int *w, int *dx)
Clip interval [x; x+w[ within [0; wmax[.
int ff_draw_round_to_sub(FFDrawContext *draw, int sub_dir, int round_dir, int value)
Round a dimension according to subsampling.
planar GBRA 4:4:4:4 64bpp, big-endian
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
#define AV_PIX_FMT_FLAG_ALPHA
The pixel format has an alpha channel.
packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined
packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as lit...
static const uint32_t color[16+AV_CLASS_CATEGORY_NB]
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is st...
GLsizei GLboolean const GLfloat * value
packed ABGR 8:8:8:8, 32bpp, ABGRABGR...
uint8_t comp_mask[MAX_PLANES]
planar GBR 4:4:4 48bpp, big-endian
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...
Y , 10bpp, little-endian.
union FFDrawColor::@204 comp[MAX_PLANES]
planar GBR 4:4:4 27bpp, big-endian
Various defines for YUV<->RGB conversion.
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
static const uint16_t mask[17]
like NV12, with 16bpp per component, big-endian
#define AV_PIX_FMT_FLAG_RGB
The pixel format contains RGB-like data (as opposed to YUV/grayscale).
packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
#define RGB_TO_U_CCIR(r1, g1, b1, shift)
static void blend_line16(uint8_t *dst, unsigned src, unsigned alpha, int dx, int w, unsigned hsub, int left, int right)
void ff_draw_color(FFDrawContext *draw, FFDrawColor *color, const uint8_t rgba[4])
Prepare a color.
simple assert() macros that are a bit more flexible than ISO C assert().
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)
like NV12, with 16bpp per component, little-endian
like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, big-endian
packed ARGB 8:8:8:8, 32bpp, ARGBARGB...
#define RGB_TO_V_JPEG(r1, g1, b1)
packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as lit...
packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
uint64_t flags
Combination of AV_PIX_FMT_FLAG_...
planar GBR 4:4:4:4 48bpp, big-endian
uint8_t nb_components
The number of components each pixel has, (1-4)
planar GBR 4:4:4:4 40bpp, big-endian
IEEE-754 single precision planar GBR 4:4:4, 96bpp, little-endian.
#define FF_DRAW_PROCESS_ALPHA
Process alpha pixel component.
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)
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
packed RGB 8:8:8, 24bpp, BGRBGR...
like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, little-endian
packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big...
static uint8_t * pointer_at(FFDrawContext *draw, uint8_t *data[], int linesize[], int plane, int x, int y)
int ff_fill_rgba_map(uint8_t *rgba_map, enum AVPixelFormat pix_fmt)
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 multipl...
static void comp(unsigned char *dst, ptrdiff_t dst_stride, unsigned char *src, ptrdiff_t src_stride, int add)
planar GBR 4:4:4:4 48bpp, little-endian
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.
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)
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
static const int16_t alpha[]
planar GBR 4:4:4 30bpp, big-endian
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2]...the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so...,+,-,+,-,+,+,-,+,-,+,...hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32-hcoeff[1]-hcoeff[2]-...a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2}an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||.........intra?||||:Block01:yes no||||:Block02:.................||||:Block03::y DC::ref index:||||:Block04::cb DC::motion x:||||.........:cr DC::motion y:||||.................|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------------------------------|||Y subbands||Cb subbands||Cr subbands||||------||------||------|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||------||------||------||||------||------||------|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||------||------||------||||------||------||------|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||------||------||------||||------||------||------|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------------------------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction------------|\Dequantization-------------------\||Reference frames|\IDWT|--------------|Motion\|||Frame 0||Frame 1||Compensation.OBMC v-------|--------------|--------------.\------> Frame n output Frame Frame<----------------------------------/|...|-------------------Range Coder:============Binary Range Coder:-------------------The implemented range coder is an adapted version based upon"Range encoding: an algorithm for removing redundancy from a digitised message."by G.N.N.Martin.The symbols encoded by the Snow range coder are bits(0|1).The associated probabilities are not fix but change depending on the symbol mix seen so far.bit seen|new state---------+-----------------------------------------------0|256-state_transition_table[256-old_state];1|state_transition_table[old_state];state_transition_table={0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:-------------------------FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1.the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled left
planar GBR 4:4:4 42bpp, little-endian
IEEE-754 single precision planar GBR 4:4:4, 96bpp, big-endian.
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.
packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined
int ff_draw_init(FFDrawContext *draw, enum AVPixelFormat format, unsigned flags)
Init a draw context.
planar GBR 4:4:4 42bpp, big-endian
#define RGB_TO_Y_JPEG(r, g, b)
Y , 14bpp, little-endian.
static int component_used(FFDrawContext *draw, int plane, int comp)
int offset
Number of elements before the component of the first pixel.
#define flags(name, subs,...)
planar GBRA 4:4:4:4 32bpp
IEEE-754 single precision planar GBRA 4:4:4:4, 128bpp, little-endian.
planar GBR 4:4:4 27bpp, little-endian
packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big...
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)
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
#define AV_PIX_FMT_FLAG_BE
Pixel format is big-endian.
IEEE-754 single precision planar GBRA 4:4:4:4, 128bpp, big-endian.
Y , 16bpp, little-endian.
int pixelstep[MAX_PLANES]
#define RGB_TO_V_CCIR(r1, g1, b1, shift)
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor ...
16 bits gray, 16 bits alpha (little-endian)
const struct AVPixFmtDescriptor * desc
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.
static float sub(float src0, float src1)
planar GBR 4:4:4 48bpp, little-endian
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Frame references ownership and permissions
int depth
Number of bits in the component.
#define RGB_TO_Y_CCIR(r, g, b)
planar GBRA 4:4:4:4 64bpp, little-endian
packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined
AVPixelFormat
Pixel format.
#define AV_PIX_FMT_FLAG_PLANAR
At least one pixel component is not in the first data plane.
enum AVPixelFormat format
planar GBR 4:4:4 30bpp, little-endian
packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is st...
int step
Number of elements between 2 horizontally consecutive pixels.
#define AV_CEIL_RSHIFT(a, b)