FFmpeg  4.3
Macros | Functions | Variables
yuv2rgb.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include "libavutil/cpu.h"
#include "libavutil/bswap.h"
#include "config.h"
#include "rgb2rgb.h"
#include "swscale.h"
#include "swscale_internal.h"
#include "libavutil/pixdesc.h"

Go to the source code of this file.

Macros

#define LOADCHROMA(i)
 
#define PUTRGB(dst, src, i)
 
#define PUTRGB24(dst, src, i)
 
#define PUTBGR24(dst, src, i)
 
#define PUTRGBA(dst, ysrc, asrc, i, s)
 
#define PUTRGB48(dst, src, i)
 
#define PUTBGR48(dst, src, i)
 
#define YUV2RGBFUNC(func_name, dst_type, alpha)
 
#define ENDYUV2RGBLINE(dst_delta, ss)
 
#define ENDYUV2RGBFUNC()
 
#define CLOSEYUV2RGBFUNC(dst_delta)
 
#define PUTRGB16(dst, src, i, o)
 
#define PUTRGB15(dst, src, i, o)
 
#define PUTRGB12(dst, src, i, o)
 
#define PUTRGB8(dst, src, i, o)
 
#define PUTRGB4D(dst, src, i, o)
 
#define PUTRGB4DB(dst, src, i, o)
 
#define PUTRGB1(out, src, i, o)
 
#define ALLOC_YUV_TABLE(x)
 

Functions

const intsws_getCoefficients (int colorspace)
 Return a pointer to yuv<->rgb coefficients for the given colorspace suitable for sws_setColorspaceDetails(). More...
 
 LOADCHROMA (0)
 
 PUTRGB48 (dst_1, py_1, 0)
 
 PUTRGB48 (dst_2, py_2, 0)
 
 LOADCHROMA (1)
 
 PUTRGB48 (dst_2, py_2, 1)
 
 PUTRGB48 (dst_1, py_1, 1)
 
 LOADCHROMA (2)
 
 PUTRGB48 (dst_1, py_1, 2)
 
 PUTRGB48 (dst_2, py_2, 2)
 
 LOADCHROMA (3)
 
 PUTRGB48 (dst_2, py_2, 3)
 
 PUTRGB48 (dst_1, py_1, 3)
 
 PUTBGR48 (dst_1, py_1, 0)
 
 PUTBGR48 (dst_2, py_2, 0)
 
 PUTBGR48 (dst_2, py_2, 1)
 
 PUTBGR48 (dst_1, py_1, 1)
 
 PUTBGR48 (dst_1, py_1, 2)
 
 PUTBGR48 (dst_2, py_2, 2)
 
 PUTBGR48 (dst_2, py_2, 3)
 
 PUTBGR48 (dst_1, py_1, 3)
 
 PUTRGB (dst_1, py_1, 0)
 
 PUTRGB (dst_2, py_2, 0)
 
 PUTRGB (dst_2, py_2, 1)
 
 PUTRGB (dst_1, py_1, 1)
 
 PUTRGB (dst_1, py_1, 2)
 
 PUTRGB (dst_2, py_2, 2)
 
 PUTRGB (dst_2, py_2, 3)
 
 PUTRGB (dst_1, py_1, 3)
 
 PUTRGBA (dst_1, py_1, pa_1, 0, 24)
 
 PUTRGBA (dst_2, py_2, pa_2, 0, 24)
 
 PUTRGBA (dst_2, py_2, pa_2, 1, 24)
 
 PUTRGBA (dst_1, py_1, pa_1, 1, 24)
 
 PUTRGBA (dst_1, py_1, pa_1, 2, 24)
 
 PUTRGBA (dst_2, py_2, pa_2, 2, 24)
 
 PUTRGBA (dst_2, py_2, pa_2, 3, 24)
 
 PUTRGBA (dst_1, py_1, pa_1, 3, 24)
 
 PUTRGBA (dst_1, py_1, pa_1, 0, 0)
 
 PUTRGBA (dst_2, py_2, pa_2, 0, 0)
 
 PUTRGBA (dst_2, py_2, pa_2, 1, 0)
 
 PUTRGBA (dst_1, py_1, pa_1, 1, 0)
 
 PUTRGBA (dst_1, py_1, pa_1, 2, 0)
 
 PUTRGBA (dst_2, py_2, pa_2, 2, 0)
 
 PUTRGBA (dst_2, py_2, pa_2, 3, 0)
 
 PUTRGBA (dst_1, py_1, pa_1, 3, 0)
 
 PUTRGB24 (dst_1, py_1, 0)
 
 PUTRGB24 (dst_2, py_2, 0)
 
 PUTRGB24 (dst_2, py_2, 1)
 
 PUTRGB24 (dst_1, py_1, 1)
 
 PUTRGB24 (dst_1, py_1, 2)
 
 PUTRGB24 (dst_2, py_2, 2)
 
 PUTRGB24 (dst_2, py_2, 3)
 
 PUTRGB24 (dst_1, py_1, 3)
 
 PUTBGR24 (dst_1, py_1, 0)
 
 PUTBGR24 (dst_2, py_2, 0)
 
 PUTBGR24 (dst_2, py_2, 1)
 
 PUTBGR24 (dst_1, py_1, 1)
 
 PUTBGR24 (dst_1, py_1, 2)
 
 PUTBGR24 (dst_2, py_2, 2)
 
 PUTBGR24 (dst_2, py_2, 3)
 
 PUTBGR24 (dst_1, py_1, 3)
 
 PUTRGB16 (dst_1, py_1, 0, 0)
 
 PUTRGB16 (dst_2, py_2, 0, 0+8)
 
 PUTRGB16 (dst_2, py_2, 1, 2+8)
 
 PUTRGB16 (dst_1, py_1, 1, 2)
 
 PUTRGB16 (dst_1, py_1, 2, 4)
 
 PUTRGB16 (dst_2, py_2, 2, 4+8)
 
 PUTRGB16 (dst_2, py_2, 3, 6+8)
 
 PUTRGB16 (dst_1, py_1, 3, 6)
 
 PUTRGB15 (dst_1, py_1, 0, 0)
 
 PUTRGB15 (dst_2, py_2, 0, 0+8)
 
 PUTRGB15 (dst_2, py_2, 1, 2+8)
 
 PUTRGB15 (dst_1, py_1, 1, 2)
 
 PUTRGB15 (dst_1, py_1, 2, 4)
 
 PUTRGB15 (dst_2, py_2, 2, 4+8)
 
 PUTRGB15 (dst_2, py_2, 3, 6+8)
 
 PUTRGB15 (dst_1, py_1, 3, 6)
 
 PUTRGB12 (dst_1, py_1, 0, 0)
 
 PUTRGB12 (dst_2, py_2, 0, 0+8)
 
 PUTRGB12 (dst_2, py_2, 1, 2+8)
 
 PUTRGB12 (dst_1, py_1, 1, 2)
 
 PUTRGB12 (dst_1, py_1, 2, 4)
 
 PUTRGB12 (dst_2, py_2, 2, 4+8)
 
 PUTRGB12 (dst_2, py_2, 3, 6+8)
 
 PUTRGB12 (dst_1, py_1, 3, 6)
 
 PUTRGB8 (dst_1, py_1, 0, 0)
 
 PUTRGB8 (dst_2, py_2, 0, 0+8)
 
 PUTRGB8 (dst_2, py_2, 1, 2+8)
 
 PUTRGB8 (dst_1, py_1, 1, 2)
 
 PUTRGB8 (dst_1, py_1, 2, 4)
 
 PUTRGB8 (dst_2, py_2, 2, 4+8)
 
 PUTRGB8 (dst_2, py_2, 3, 6+8)
 
 PUTRGB8 (dst_1, py_1, 3, 6)
 
 PUTRGB4D (dst_1, py_1, 0, 0)
 
 PUTRGB4D (dst_2, py_2, 0, 0+8)
 
 PUTRGB4D (dst_2, py_2, 1, 2+8)
 
 PUTRGB4D (dst_1, py_1, 1, 2)
 
 PUTRGB4D (dst_1, py_1, 2, 4)
 
 PUTRGB4D (dst_2, py_2, 2, 4+8)
 
 PUTRGB4D (dst_2, py_2, 3, 6+8)
 
 PUTRGB4D (dst_1, py_1, 3, 6)
 
 PUTRGB4DB (dst_1, py_1, 0, 0)
 
 PUTRGB4DB (dst_2, py_2, 0, 0+8)
 
 PUTRGB4DB (dst_2, py_2, 1, 2+8)
 
 PUTRGB4DB (dst_1, py_1, 1, 2)
 
 PUTRGB4DB (dst_1, py_1, 2, 4)
 
 PUTRGB4DB (dst_2, py_2, 2, 4+8)
 
 PUTRGB4DB (dst_2, py_2, 3, 6+8)
 
 PUTRGB4DB (dst_1, py_1, 3, 6)
 
 PUTRGB1 (out_1, py_1, 0, 0)
 
 PUTRGB1 (out_2, py_2, 0, 0+8)
 
 PUTRGB1 (out_2, py_2, 1, 2+8)
 
 PUTRGB1 (out_1, py_1, 1, 2)
 
 PUTRGB1 (out_1, py_1, 2, 4)
 
 PUTRGB1 (out_2, py_2, 2, 4+8)
 
 PUTRGB1 (out_2, py_2, 3, 6+8)
 
 PUTRGB1 (out_1, py_1, 3, 6)
 
SwsFunc ff_yuv2rgb_get_func_ptr (SwsContext *c)
 
static void fill_table (uint8_t *table[256+2 *YUVRGB_TABLE_HEADROOM], const int elemsize, const int64_t inc, void *y_tab)
 
static void fill_gv_table (int table[256+2 *YUVRGB_TABLE_HEADROOM], const int elemsize, const int64_t inc)
 
static uint16_t roundToInt16 (int64_t f)
 
av_cold int ff_yuv2rgb_c_init_tables (SwsContext *c, const int inv_table[4], int fullRange, int brightness, int contrast, int saturation)
 

Variables

const int32_t ff_yuv2rgb_coeffs [11][4]
 
 pa_1 = 8
 
 pa_2 = 8
 
const uint8_td16 = ff_dither_2x2_8[y & 1]
 
const uint8_te16 = ff_dither_2x2_4[y & 1]
 
const uint8_tf16 = ff_dither_2x2_8[(y & 1)^1]
 
const uint8_td32 = ff_dither_8x8_32[yd & 7]
 
const uint8_td64 = ff_dither_8x8_73[yd & 7]
 
const uint8_td128 = ff_dither_8x8_220[yd & 7]
 
int acc
 
char out_1 = 0
 
char out_2 = 0
 
 g = c->table_gU[128 + YUVRGB_TABLE_HEADROOM] + c->table_gV[128 + YUVRGB_TABLE_HEADROOM]
 
 dst_1 [0] = out_1
 
 dst_2 [0] = out_2
 

Macro Definition Documentation

◆ LOADCHROMA

#define LOADCHROMA (   i)
Value:
U = pu[i]; \
V = pv[i]; \
r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \
g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \
b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM];

Definition at line 70 of file yuv2rgb.c.

◆ PUTRGB

#define PUTRGB (   dst,
  src,
  i 
)
Value:
Y = src[2 * i]; \
dst[2 * i] = r[Y] + g[Y] + b[Y]; \
Y = src[2 * i + 1]; \
dst[2 * i + 1] = r[Y] + g[Y] + b[Y];

Definition at line 77 of file yuv2rgb.c.

◆ PUTRGB24

#define PUTRGB24 (   dst,
  src,
  i 
)
Value:
Y = src[2 * i]; \
dst[6 * i + 0] = r[Y]; \
dst[6 * i + 1] = g[Y]; \
dst[6 * i + 2] = b[Y]; \
Y = src[2 * i + 1]; \
dst[6 * i + 3] = r[Y]; \
dst[6 * i + 4] = g[Y]; \
dst[6 * i + 5] = b[Y];

Definition at line 83 of file yuv2rgb.c.

◆ PUTBGR24

#define PUTBGR24 (   dst,
  src,
  i 
)
Value:
Y = src[2 * i]; \
dst[6 * i + 0] = b[Y]; \
dst[6 * i + 1] = g[Y]; \
dst[6 * i + 2] = r[Y]; \
Y = src[2 * i + 1]; \
dst[6 * i + 3] = b[Y]; \
dst[6 * i + 4] = g[Y]; \
dst[6 * i + 5] = r[Y];

Definition at line 93 of file yuv2rgb.c.

◆ PUTRGBA

#define PUTRGBA (   dst,
  ysrc,
  asrc,
  i,
  s 
)
Value:
Y = ysrc[2 * i]; \
dst[2 * i] = r[Y] + g[Y] + b[Y] + (asrc[2 * i] << s); \
Y = ysrc[2 * i + 1]; \
dst[2 * i + 1] = r[Y] + g[Y] + b[Y] + (asrc[2 * i + 1] << s);

Definition at line 103 of file yuv2rgb.c.

◆ PUTRGB48

#define PUTRGB48 (   dst,
  src,
  i 
)
Value:
Y = src[ 2 * i]; \
dst[12 * i + 0] = dst[12 * i + 1] = r[Y]; \
dst[12 * i + 2] = dst[12 * i + 3] = g[Y]; \
dst[12 * i + 4] = dst[12 * i + 5] = b[Y]; \
Y = src[ 2 * i + 1]; \
dst[12 * i + 6] = dst[12 * i + 7] = r[Y]; \
dst[12 * i + 8] = dst[12 * i + 9] = g[Y]; \
dst[12 * i + 10] = dst[12 * i + 11] = b[Y];

Definition at line 109 of file yuv2rgb.c.

◆ PUTBGR48

#define PUTBGR48 (   dst,
  src,
  i 
)
Value:
Y = src[2 * i]; \
dst[12 * i + 0] = dst[12 * i + 1] = b[Y]; \
dst[12 * i + 2] = dst[12 * i + 3] = g[Y]; \
dst[12 * i + 4] = dst[12 * i + 5] = r[Y]; \
Y = src[2 * i + 1]; \
dst[12 * i + 6] = dst[12 * i + 7] = b[Y]; \
dst[12 * i + 8] = dst[12 * i + 9] = g[Y]; \
dst[12 * i + 10] = dst[12 * i + 11] = r[Y];

Definition at line 119 of file yuv2rgb.c.

◆ YUV2RGBFUNC

#define YUV2RGBFUNC (   func_name,
  dst_type,
  alpha 
)
Value:
static int func_name(SwsContext *c, const uint8_t *src[], \
int srcStride[], int srcSliceY, int srcSliceH, \
uint8_t *dst[], int dstStride[]) \
{ \
int y; \
if (!alpha && c->srcFormat == AV_PIX_FMT_YUV422P) { \
srcStride[1] *= 2; \
srcStride[2] *= 2; \
} \
for (y = 0; y < srcSliceH; y += 2) { \
int yd = y + srcSliceY; \
dst_type *dst_1 = \
(dst_type *)(dst[0] + (yd) * dstStride[0]); \
dst_type *dst_2 = \
(dst_type *)(dst[0] + (yd + 1) * dstStride[0]); \
dst_type av_unused *r, *g, *b; \
const uint8_t *py_1 = src[0] + y * srcStride[0]; \
const uint8_t *py_2 = py_1 + srcStride[0]; \
const uint8_t *pu = src[1] + (y >> 1) * srcStride[1]; \
const uint8_t *pv = src[2] + (y >> 1) * srcStride[2]; \
const uint8_t av_unused *pa_1, *pa_2; \
unsigned int h_size = c->dstW >> 3; \
if (alpha) { \
pa_1 = src[3] + y * srcStride[3]; \
pa_2 = pa_1 + srcStride[3]; \
} \
while (h_size--) { \
int av_unused U, V, Y; \

Definition at line 129 of file yuv2rgb.c.

◆ ENDYUV2RGBLINE

#define ENDYUV2RGBLINE (   dst_delta,
  ss 
)
Value:
pu += 4 >> ss; \
pv += 4 >> ss; \
py_1 += 8 >> ss; \
py_2 += 8 >> ss; \
dst_1 += dst_delta >> ss; \
dst_2 += dst_delta >> ss; \
} \
if (c->dstW & (4 >> ss)) { \
int av_unused Y, U, V; \

Definition at line 160 of file yuv2rgb.c.

◆ ENDYUV2RGBFUNC

#define ENDYUV2RGBFUNC ( )
Value:
} \
} \
return srcSliceH; \
}

Definition at line 171 of file yuv2rgb.c.

◆ CLOSEYUV2RGBFUNC

#define CLOSEYUV2RGBFUNC (   dst_delta)
Value:
ENDYUV2RGBLINE(dst_delta, 0) \
ENDYUV2RGBFUNC()

Definition at line 177 of file yuv2rgb.c.

◆ PUTRGB16

#define PUTRGB16 (   dst,
  src,
  i,
 
)
Value:
Y = src[2 * i]; \
dst[2 * i] = r[Y + d16[0 + o]] + \
g[Y + e16[0 + o]] + \
b[Y + f16[0 + o]]; \
Y = src[2 * i + 1]; \
dst[2 * i + 1] = r[Y + d16[1 + o]] + \
g[Y + e16[1 + o]] + \
b[Y + f16[1 + o]];

Definition at line 413 of file yuv2rgb.c.

◆ PUTRGB15

#define PUTRGB15 (   dst,
  src,
  i,
 
)
Value:
Y = src[2 * i]; \
dst[2 * i] = r[Y + d16[0 + o]] + \
g[Y + d16[1 + o]] + \
b[Y + e16[0 + o]]; \
Y = src[2 * i + 1]; \
dst[2 * i + 1] = r[Y + d16[1 + o]] + \
g[Y + d16[0 + o]] + \
b[Y + e16[1 + o]];

Definition at line 443 of file yuv2rgb.c.

◆ PUTRGB12

#define PUTRGB12 (   dst,
  src,
  i,
 
)
Value:
Y = src[2 * i]; \
dst[2 * i] = r[Y + d16[0 + o]] + \
g[Y + d16[0 + o]] + \
b[Y + d16[0 + o]]; \
Y = src[2 * i + 1]; \
dst[2 * i + 1] = r[Y + d16[1 + o]] + \
g[Y + d16[1 + o]] + \
b[Y + d16[1 + o]];

Definition at line 473 of file yuv2rgb.c.

◆ PUTRGB8

#define PUTRGB8 (   dst,
  src,
  i,
 
)
Value:
Y = src[2 * i]; \
dst[2 * i] = r[Y + d32[0 + o]] + \
g[Y + d32[0 + o]] + \
b[Y + d64[0 + o]]; \
Y = src[2 * i + 1]; \
dst[2 * i + 1] = r[Y + d32[1 + o]] + \
g[Y + d32[1 + o]] + \
b[Y + d64[1 + o]];

Definition at line 505 of file yuv2rgb.c.

◆ PUTRGB4D

#define PUTRGB4D (   dst,
  src,
  i,
 
)
Value:
Y = src[2 * i]; \
acc = r[Y + d128[0 + o]] + \
g[Y + d64[0 + o]] + \
b[Y + d128[0 + o]]; \
Y = src[2 * i + 1]; \
acc |= (r[Y + d128[1 + o]] + \
g[Y + d64[1 + o]] + \
b[Y + d128[1 + o]]) << 4; \
dst[i] = acc;

Definition at line 557 of file yuv2rgb.c.

◆ PUTRGB4DB

#define PUTRGB4DB (   dst,
  src,
  i,
 
)
Value:
Y = src[2 * i]; \
dst[2 * i] = r[Y + d128[0 + o]] + \
g[Y + d64[0 + o]] + \
b[Y + d128[0 + o]]; \
Y = src[2 * i + 1]; \
dst[2 * i + 1] = r[Y + d128[1 + o]] + \
g[Y + d64[1 + o]] + \
b[Y + d128[1 + o]];

Definition at line 609 of file yuv2rgb.c.

◆ PUTRGB1

#define PUTRGB1 (   out,
  src,
  i,
 
)
Value:
Y = src[2 * i]; \
out += out + g[Y + d128[0 + o]]; \
Y = src[2 * i + 1]; \
out += out + g[Y + d128[1 + o]];

Definition at line 657 of file yuv2rgb.c.

◆ ALLOC_YUV_TABLE

#define ALLOC_YUV_TABLE (   x)
Value:
c->yuvTable = av_malloc(x); \
if (!c->yuvTable) \
return AVERROR(ENOMEM);

Function Documentation

◆ LOADCHROMA() [1/4]

LOADCHROMA ( )

◆ PUTRGB48() [1/8]

PUTRGB48 ( dst_1  ,
py_1  ,
 
)

◆ PUTRGB48() [2/8]

PUTRGB48 ( dst_2  ,
py_2  ,
 
)

◆ LOADCHROMA() [2/4]

LOADCHROMA ( )

◆ PUTRGB48() [3/8]

PUTRGB48 ( dst_2  ,
py_2  ,
 
)

◆ PUTRGB48() [4/8]

PUTRGB48 ( dst_1  ,
py_1  ,
 
)

◆ LOADCHROMA() [3/4]

LOADCHROMA ( )

◆ PUTRGB48() [5/8]

PUTRGB48 ( dst_1  ,
py_1  ,
 
)

◆ PUTRGB48() [6/8]

PUTRGB48 ( dst_2  ,
py_2  ,
 
)

◆ LOADCHROMA() [4/4]

LOADCHROMA ( )

◆ PUTRGB48() [7/8]

PUTRGB48 ( dst_2  ,
py_2  ,
 
)

◆ PUTRGB48() [8/8]

PUTRGB48 ( dst_1  ,
py_1  ,
 
)

◆ PUTBGR48() [1/8]

PUTBGR48 ( dst_1  ,
py_1  ,
 
)

◆ PUTBGR48() [2/8]

PUTBGR48 ( dst_2  ,
py_2  ,
 
)

◆ PUTBGR48() [3/8]

PUTBGR48 ( dst_2  ,
py_2  ,
 
)

◆ PUTBGR48() [4/8]

PUTBGR48 ( dst_1  ,
py_1  ,
 
)

◆ PUTBGR48() [5/8]

PUTBGR48 ( dst_1  ,
py_1  ,
 
)

◆ PUTBGR48() [6/8]

PUTBGR48 ( dst_2  ,
py_2  ,
 
)

◆ PUTBGR48() [7/8]

PUTBGR48 ( dst_2  ,
py_2  ,
 
)

◆ PUTBGR48() [8/8]

PUTBGR48 ( dst_1  ,
py_1  ,
 
)

◆ PUTRGB() [1/8]

PUTRGB ( dst_1  ,
py_1  ,
 
)

◆ PUTRGB() [2/8]

PUTRGB ( dst_2  ,
py_2  ,
 
)

◆ PUTRGB() [3/8]

PUTRGB ( dst_2  ,
py_2  ,
 
)

◆ PUTRGB() [4/8]

PUTRGB ( dst_1  ,
py_1  ,
 
)

◆ PUTRGB() [5/8]

PUTRGB ( dst_1  ,
py_1  ,
 
)

◆ PUTRGB() [6/8]

PUTRGB ( dst_2  ,
py_2  ,
 
)

◆ PUTRGB() [7/8]

PUTRGB ( dst_2  ,
py_2  ,
 
)

◆ PUTRGB() [8/8]

PUTRGB ( dst_1  ,
py_1  ,
 
)

◆ PUTRGBA() [1/16]

PUTRGBA ( dst_1  ,
py_1  ,
pa_1  ,
,
24   
)

◆ PUTRGBA() [2/16]

PUTRGBA ( dst_2  ,
py_2  ,
pa_2  ,
,
24   
)

◆ PUTRGBA() [3/16]

PUTRGBA ( dst_2  ,
py_2  ,
pa_2  ,
,
24   
)

◆ PUTRGBA() [4/16]

PUTRGBA ( dst_1  ,
py_1  ,
pa_1  ,
,
24   
)

◆ PUTRGBA() [5/16]

PUTRGBA ( dst_1  ,
py_1  ,
pa_1  ,
,
24   
)

◆ PUTRGBA() [6/16]

PUTRGBA ( dst_2  ,
py_2  ,
pa_2  ,
,
24   
)

◆ PUTRGBA() [7/16]

PUTRGBA ( dst_2  ,
py_2  ,
pa_2  ,
,
24   
)

◆ PUTRGBA() [8/16]

PUTRGBA ( dst_1  ,
py_1  ,
pa_1  ,
,
24   
)

◆ PUTRGBA() [9/16]

PUTRGBA ( dst_1  ,
py_1  ,
pa_1  ,
,
 
)

◆ PUTRGBA() [10/16]

PUTRGBA ( dst_2  ,
py_2  ,
pa_2  ,
,
 
)

◆ PUTRGBA() [11/16]

PUTRGBA ( dst_2  ,
py_2  ,
pa_2  ,
,
 
)

◆ PUTRGBA() [12/16]

PUTRGBA ( dst_1  ,
py_1  ,
pa_1  ,
,
 
)

◆ PUTRGBA() [13/16]

PUTRGBA ( dst_1  ,
py_1  ,
pa_1  ,
,
 
)

◆ PUTRGBA() [14/16]

PUTRGBA ( dst_2  ,
py_2  ,
pa_2  ,
,
 
)

◆ PUTRGBA() [15/16]

PUTRGBA ( dst_2  ,
py_2  ,
pa_2  ,
,
 
)

◆ PUTRGBA() [16/16]

PUTRGBA ( dst_1  ,
py_1  ,
pa_1  ,
,
 
)

◆ PUTRGB24() [1/8]

PUTRGB24 ( dst_1  ,
py_1  ,
 
)

◆ PUTRGB24() [2/8]

PUTRGB24 ( dst_2  ,
py_2  ,
 
)

◆ PUTRGB24() [3/8]

PUTRGB24 ( dst_2  ,
py_2  ,
 
)

◆ PUTRGB24() [4/8]

PUTRGB24 ( dst_1  ,
py_1  ,
 
)

◆ PUTRGB24() [5/8]

PUTRGB24 ( dst_1  ,
py_1  ,
 
)

◆ PUTRGB24() [6/8]

PUTRGB24 ( dst_2  ,
py_2  ,
 
)

◆ PUTRGB24() [7/8]

PUTRGB24 ( dst_2  ,
py_2  ,
 
)

◆ PUTRGB24() [8/8]

PUTRGB24 ( dst_1  ,
py_1  ,
 
)

◆ PUTBGR24() [1/8]

PUTBGR24 ( dst_1  ,
py_1  ,
 
)

◆ PUTBGR24() [2/8]

PUTBGR24 ( dst_2  ,
py_2  ,
 
)

◆ PUTBGR24() [3/8]

PUTBGR24 ( dst_2  ,
py_2  ,
 
)

◆ PUTBGR24() [4/8]

PUTBGR24 ( dst_1  ,
py_1  ,
 
)

◆ PUTBGR24() [5/8]

PUTBGR24 ( dst_1  ,
py_1  ,
 
)

◆ PUTBGR24() [6/8]

PUTBGR24 ( dst_2  ,
py_2  ,
 
)

◆ PUTBGR24() [7/8]

PUTBGR24 ( dst_2  ,
py_2  ,
 
)

◆ PUTBGR24() [8/8]

PUTBGR24 ( dst_1  ,
py_1  ,
 
)

◆ PUTRGB16() [1/8]

PUTRGB16 ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB16() [2/8]

PUTRGB16 ( dst_2  ,
py_2  ,
,
0+  8 
)

◆ PUTRGB16() [3/8]

PUTRGB16 ( dst_2  ,
py_2  ,
,
2+  8 
)

◆ PUTRGB16() [4/8]

PUTRGB16 ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB16() [5/8]

PUTRGB16 ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB16() [6/8]

PUTRGB16 ( dst_2  ,
py_2  ,
,
4+  8 
)

◆ PUTRGB16() [7/8]

PUTRGB16 ( dst_2  ,
py_2  ,
,
6+  8 
)

◆ PUTRGB16() [8/8]

PUTRGB16 ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB15() [1/8]

PUTRGB15 ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB15() [2/8]

PUTRGB15 ( dst_2  ,
py_2  ,
,
0+  8 
)

◆ PUTRGB15() [3/8]

PUTRGB15 ( dst_2  ,
py_2  ,
,
2+  8 
)

◆ PUTRGB15() [4/8]

PUTRGB15 ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB15() [5/8]

PUTRGB15 ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB15() [6/8]

PUTRGB15 ( dst_2  ,
py_2  ,
,
4+  8 
)

◆ PUTRGB15() [7/8]

PUTRGB15 ( dst_2  ,
py_2  ,
,
6+  8 
)

◆ PUTRGB15() [8/8]

PUTRGB15 ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB12() [1/8]

PUTRGB12 ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB12() [2/8]

PUTRGB12 ( dst_2  ,
py_2  ,
,
0+  8 
)

◆ PUTRGB12() [3/8]

PUTRGB12 ( dst_2  ,
py_2  ,
,
2+  8 
)

◆ PUTRGB12() [4/8]

PUTRGB12 ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB12() [5/8]

PUTRGB12 ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB12() [6/8]

PUTRGB12 ( dst_2  ,
py_2  ,
,
4+  8 
)

◆ PUTRGB12() [7/8]

PUTRGB12 ( dst_2  ,
py_2  ,
,
6+  8 
)

◆ PUTRGB12() [8/8]

PUTRGB12 ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB8() [1/8]

PUTRGB8 ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB8() [2/8]

PUTRGB8 ( dst_2  ,
py_2  ,
,
0+  8 
)

◆ PUTRGB8() [3/8]

PUTRGB8 ( dst_2  ,
py_2  ,
,
2+  8 
)

◆ PUTRGB8() [4/8]

PUTRGB8 ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB8() [5/8]

PUTRGB8 ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB8() [6/8]

PUTRGB8 ( dst_2  ,
py_2  ,
,
4+  8 
)

◆ PUTRGB8() [7/8]

PUTRGB8 ( dst_2  ,
py_2  ,
,
6+  8 
)

◆ PUTRGB8() [8/8]

PUTRGB8 ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB4D() [1/8]

PUTRGB4D ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB4D() [2/8]

PUTRGB4D ( dst_2  ,
py_2  ,
,
0+  8 
)

◆ PUTRGB4D() [3/8]

PUTRGB4D ( dst_2  ,
py_2  ,
,
2+  8 
)

◆ PUTRGB4D() [4/8]

PUTRGB4D ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB4D() [5/8]

PUTRGB4D ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB4D() [6/8]

PUTRGB4D ( dst_2  ,
py_2  ,
,
4+  8 
)

◆ PUTRGB4D() [7/8]

PUTRGB4D ( dst_2  ,
py_2  ,
,
6+  8 
)

◆ PUTRGB4D() [8/8]

PUTRGB4D ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB4DB() [1/8]

PUTRGB4DB ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB4DB() [2/8]

PUTRGB4DB ( dst_2  ,
py_2  ,
,
0+  8 
)

◆ PUTRGB4DB() [3/8]

PUTRGB4DB ( dst_2  ,
py_2  ,
,
2+  8 
)

◆ PUTRGB4DB() [4/8]

PUTRGB4DB ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB4DB() [5/8]

PUTRGB4DB ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB4DB() [6/8]

PUTRGB4DB ( dst_2  ,
py_2  ,
,
4+  8 
)

◆ PUTRGB4DB() [7/8]

PUTRGB4DB ( dst_2  ,
py_2  ,
,
6+  8 
)

◆ PUTRGB4DB() [8/8]

PUTRGB4DB ( dst_1  ,
py_1  ,
,
 
)

◆ PUTRGB1() [1/8]

PUTRGB1 ( out_1  ,
py_1  ,
,
 
)

◆ PUTRGB1() [2/8]

PUTRGB1 ( out_2  ,
py_2  ,
,
0+  8 
)

◆ PUTRGB1() [3/8]

PUTRGB1 ( out_2  ,
py_2  ,
,
2+  8 
)

◆ PUTRGB1() [4/8]

PUTRGB1 ( out_1  ,
py_1  ,
,
 
)

◆ PUTRGB1() [5/8]

PUTRGB1 ( out_1  ,
py_1  ,
,
 
)

◆ PUTRGB1() [6/8]

PUTRGB1 ( out_2  ,
py_2  ,
,
4+  8 
)

◆ PUTRGB1() [7/8]

PUTRGB1 ( out_2  ,
py_2  ,
,
6+  8 
)

◆ PUTRGB1() [8/8]

PUTRGB1 ( out_1  ,
py_1  ,
,
 
)

◆ ff_yuv2rgb_get_func_ptr()

SwsFunc ff_yuv2rgb_get_func_ptr ( SwsContext c)

Definition at line 679 of file yuv2rgb.c.

Referenced by ff_get_unscaled_swscale().

◆ fill_table()

static void fill_table ( uint8_t table[256+2 *YUVRGB_TABLE_HEADROOM],
const int  elemsize,
const int64_t  inc,
void y_tab 
)
static

Definition at line 737 of file yuv2rgb.c.

Referenced by ff_yuv2rgb_c_init_tables().

◆ fill_gv_table()

static void fill_gv_table ( int  table[256+2 *YUVRGB_TABLE_HEADROOM],
const int  elemsize,
const int64_t  inc 
)
static

Definition at line 751 of file yuv2rgb.c.

Referenced by ff_yuv2rgb_c_init_tables().

◆ roundToInt16()

static uint16_t roundToInt16 ( int64_t  f)
static

Definition at line 762 of file yuv2rgb.c.

Referenced by ff_yuv2rgb_c_init_tables().

◆ ff_yuv2rgb_c_init_tables()

av_cold int ff_yuv2rgb_c_init_tables ( SwsContext c,
const int  inv_table[4],
int  fullRange,
int  brightness,
int  contrast,
int  saturation 
)

Definition at line 774 of file yuv2rgb.c.

Referenced by sws_setColorspaceDetails().

Variable Documentation

◆ ff_yuv2rgb_coeffs

const int32_t ff_yuv2rgb_coeffs[11][4]
Initial value:
= {
{ 117489, 138438, 13975, 34925 },
{ 117489, 138438, 13975, 34925 },
{ 104597, 132201, 25675, 53279 },
{ 104597, 132201, 25675, 53279 },
{ 104448, 132798, 24759, 53109 },
{ 104597, 132201, 25675, 53279 },
{ 104597, 132201, 25675, 53279 },
{ 117579, 136230, 16907, 35559 },
{ 0 },
{ 110013, 140363, 12277, 42626 },
{ 110013, 140363, 12277, 42626 },
}

Definition at line 49 of file yuv2rgb.c.

Referenced by sws_getCoefficients(), and sws_init_context().

◆ pa_1

pa_1 = 8

Definition at line 291 of file yuv2rgb.c.

◆ pa_2

pa_2 = 8

Definition at line 292 of file yuv2rgb.c.

◆ d16

const uint8_t * d16 = ff_dither_2x2_8[y & 1]

Definition at line 409 of file yuv2rgb.c.

◆ e16

const uint8_t * e16 = ff_dither_2x2_4[y & 1]

Definition at line 410 of file yuv2rgb.c.

◆ f16

const uint8_t* f16 = ff_dither_2x2_8[(y & 1)^1]

Definition at line 411 of file yuv2rgb.c.

◆ d32

const uint8_t * d32 = ff_dither_8x8_32[yd & 7]

Definition at line 502 of file yuv2rgb.c.

Referenced by av_image_copy_to_buffer(), and yuv2rgb_write().

◆ d64

const uint8_t * d64 = ff_dither_8x8_73[yd & 7]

Definition at line 503 of file yuv2rgb.c.

Referenced by yuv2rgb_write().

◆ d128

const uint8_t * d128 = ff_dither_8x8_220[yd & 7]

◆ acc

int acc

◆ out_1

char out_1 = 0

Definition at line 654 of file yuv2rgb.c.

◆ out_2

char out_2 = 0

Definition at line 654 of file yuv2rgb.c.

◆ g

g = c->table_gU[128 + YUVRGB_TABLE_HEADROOM] + c->table_gV[128 + YUVRGB_TABLE_HEADROOM]

Definition at line 655 of file yuv2rgb.c.

◆ dst_1

dst_1[0] = out_1

Definition at line 675 of file yuv2rgb.c.

◆ dst_2

dst_2[0] = out_2

Definition at line 676 of file yuv2rgb.c.

acc
int acc
Definition: yuv2rgb.c:555
AVERROR
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
out
FILE * out
Definition: movenc.c:54
av_unused
#define av_unused
Definition: attributes.h:131
b
#define b
Definition: input.c:41
e16
const uint8_t * e16
Definition: yuv2rgb.c:410
av_malloc
#define av_malloc(s)
Definition: tableprint_vlc.h:31
pa_1
pa_1
Definition: yuv2rgb.c:291
U
#define U(x)
Definition: vp56_arith.h:37
x
FFmpeg Automated Testing Environment ************************************Introduction Using FATE from your FFmpeg source directory Submitting the results to the FFmpeg result aggregation server Uploading new samples to the fate suite FATE makefile targets and variables Makefile targets Makefile variables Examples Introduction **************FATE is an extended regression suite on the client side and a means for results aggregation and presentation on the server side The first part of this document explains how you can use FATE from your FFmpeg source directory to test your ffmpeg binary The second part describes how you can run FATE to submit the results to FFmpeg’s FATE server In any way you can have a look at the publicly viewable FATE results by visiting this as it can be seen if some test on some platform broke with their recent contribution This usually happens on the platforms the developers could not test on The second part of this document describes how you can run FATE to submit your results to FFmpeg’s FATE server If you want to submit your results be sure to check that your combination of OS and compiler is not already listed on the above mentioned website In the third part you can find a comprehensive listing of FATE makefile targets and variables Using FATE from your FFmpeg source directory **********************************************If you want to run FATE on your machine you need to have the samples in place You can get the samples via the build target fate rsync Use this command from the top level source this will cause FATE to fail NOTE To use a custom wrapper to run the pass ‘ target exec’ to ‘configure’ or set the TARGET_EXEC Make variable Submitting the results to the FFmpeg result aggregation server ****************************************************************To submit your results to the server you should run fate through the shell script ‘tests fate sh’ from the FFmpeg sources This script needs to be invoked with a configuration file as its first argument tests fate sh path to fate_config A configuration file template with comments describing the individual configuration variables can be found at ‘doc fate_config sh template’ Create a configuration that suits your based on the configuration template The ‘slot’ configuration variable can be any string that is not yet but it is suggested that you name it adhering to the following pattern ‘ARCH OS COMPILER COMPILER VERSION’ The configuration file itself will be sourced in a shell therefore all shell features may be used This enables you to setup the environment as you need it for your build For your first test runs the ‘fate_recv’ variable should be empty or commented out This will run everything as normal except that it will omit the submission of the results to the server The following files should be present in $workdir as specified in the configuration it may help to try out the ‘ssh’ command with one or more ‘ v’ options You should get detailed output concerning your SSH configuration and the authentication process The only thing left is to automate the execution of the fate sh script and the synchronisation of the samples directory Uploading new samples to the fate suite *****************************************If you need a sample uploaded send a mail to samples request This is for developers who have an account on the fate suite server If you upload new please make sure they are as small as space on each network bandwidth and so on benefit from smaller test cases Also keep in mind older checkouts use existing sample that means in practice generally do not remove or overwrite files as it likely would break older checkouts or releases Also all needed samples for a commit should be ideally before the push If you need an account for frequently uploading samples or you wish to help others by doing that send a mail to ffmpeg devel rsync vauL Duo x
Definition: fate.txt:150
ss
#define ss(width, name, subs,...)
Definition: cbs_vp9.c:261
YUVRGB_TABLE_HEADROOM
#define YUVRGB_TABLE_HEADROOM
Definition: swscale_internal.h:38
s
#define s(width, name)
Definition: cbs_vp9.c:257
if
if(ret)
Definition: filter_design.txt:179
d16
const uint8_t * d16
Definition: yuv2rgb.c:409
V
#define V
Definition: avdct.c:30
src
#define src
Definition: vp8dsp.c:254
c
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
Definition: undefined.txt:32
d64
const uint8_t * d64
Definition: yuv2rgb.c:503
g
g
Definition: yuv2rgb.c:655
srcSliceH
return srcSliceH
Definition: yuv2rgb_template.c:87
Y
#define Y
Definition: boxblur.h:38
r
#define r
Definition: input.c:40
f16
const uint8_t * f16
Definition: yuv2rgb.c:411
pa_2
pa_2
Definition: yuv2rgb.c:292
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:269
uint8_t
uint8_t
Definition: audio_convert.c:194
pv
#define pv
Definition: regdef.h:60
d128
const uint8_t * d128
Definition: yuv2rgb.c:554
d32
const uint8_t * d32
Definition: yuv2rgb.c:502
AV_PIX_FMT_YUV422P
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:70
dst_2
dst_2[0]
Definition: yuv2rgb.c:676
ENDYUV2RGBLINE
#define ENDYUV2RGBLINE(dst_delta, ss)
Definition: yuv2rgb.c:160
alpha
static const int16_t alpha[]
Definition: ilbcdata.h:55
dst_1
dst_1[0]
Definition: yuv2rgb.c:675
SwsContext
Definition: swscale_internal.h:280