FFmpeg
Loading...
Searching...
No Matches
yuv2rgb_lsx.c File Reference

Go to the source code of this file.

Macros

#define YUV2RGB_LOAD_COE
 
#define LOAD_YUV_16
 
#define YUV2RGB(y1, y2, u, v, r1, g1, b1, r2, g2, b2)
 
#define RGB_PACK(r, g, b, rgb_l, rgb_h)
 
#define RGB32_PACK(a, r, g, b, rgb_l, rgb_h)
 
#define RGB_STORE(rgb_l, rgb_h, image)
 
#define RGB32_STORE(rgb_l, rgb_h, image)
 
#define YUV2RGBFUNC(func_name, dst_type, alpha)
 
#define YUV2RGBFUNC32(func_name, dst_type, alpha)
 
#define DEALYUV2RGBREMAIN
 
#define DEALYUV2RGBREMAIN32
 
#define PUTRGB24(dst, src)
 
#define PUTBGR24(dst, src)
 
#define PUTRGB(dst, src)
 
#define ENDRES
 
#define ENDRES32
 
#define END_FUNC()
 

Functions

LOAD_YUV_16 YUV2RGB (m_y1, m_y2, m_u, m_v, r1, g1, b1, r2, g2, b2)
 
 RGB_PACK (r1, g1, b1, rgb1_l, rgb1_h)
 
 RGB_PACK (r2, g2, b2, rgb2_l, rgb2_h)
 
 RGB_STORE (rgb1_l, rgb1_h, image1)
 
 RGB_STORE (rgb2_l, rgb2_h, image2)
 
 YUV2RGB (m_y1_h, m_y2_h, m_u_h, m_v_h, r1, g1, b1, r2, g2, b2)
 
 RGB_STORE (rgb1_l, rgb1_h, image1+24)
 
 RGB_STORE (rgb2_l, rgb2_h, image2+24)
 
DEALYUV2RGBREMAIN PUTRGB24 (image1, py_1)
 
 PUTRGB24 (image2, py_2)
 
 RGB_PACK (b1, g1, r1, rgb1_l, rgb1_h)
 
 RGB_PACK (b2, g2, r2, rgb2_l, rgb2_h)
 
DEALYUV2RGBREMAIN PUTBGR24 (image1, py_1)
 
 PUTBGR24 (image2, py_2)
 
 RGB32_PACK (r1, g1, b1, a, rgb1_l, rgb1_h)
 
 RGB32_PACK (r2, g2, b2, a, rgb2_l, rgb2_h)
 
 RGB32_STORE (rgb1_l, rgb1_h, image1)
 
 RGB32_STORE (rgb2_l, rgb2_h, image2)
 
 RGB32_STORE (rgb1_l, rgb1_h, image1+8)
 
 RGB32_STORE (rgb2_l, rgb2_h, image2+8)
 
DEALYUV2RGBREMAIN32 PUTRGB (image1, py_1)
 
 PUTRGB (image2, py_2)
 
 RGB32_PACK (b1, g1, r1, a, rgb1_l, rgb1_h)
 
 RGB32_PACK (b2, g2, r2, a, rgb2_l, rgb2_h)
 
 RGB32_PACK (a, r1, g1, b1, rgb1_l, rgb1_h)
 
 RGB32_PACK (a, r2, g2, b2, rgb2_l, rgb2_h)
 
 RGB32_PACK (a, b1, g1, r1, rgb1_l, rgb1_h)
 
 RGB32_PACK (a, b2, g2, r2, rgb2_l, rgb2_h)
 

Macro Definition Documentation

◆ YUV2RGB_LOAD_COE

#define YUV2RGB_LOAD_COE
Value:
/* Load x_offset */ \
__m128i y_offset = __lsx_vreplgr2vr_d(c->yOffset); \
__m128i u_offset = __lsx_vreplgr2vr_d(c->uOffset); \
__m128i v_offset = __lsx_vreplgr2vr_d(c->vOffset); \
/* Load x_coeff */ \
__m128i ug_coeff = __lsx_vreplgr2vr_d(c->ugCoeff); \
__m128i vg_coeff = __lsx_vreplgr2vr_d(c->vgCoeff); \
__m128i y_coeff = __lsx_vreplgr2vr_d(c->yCoeff); \
__m128i ub_coeff = __lsx_vreplgr2vr_d(c->ubCoeff); \
__m128i vr_coeff = __lsx_vreplgr2vr_d(c->vrCoeff); \
static double c[64]

Definition at line 26 of file yuv2rgb_lsx.c.

◆ LOAD_YUV_16

#define LOAD_YUV_16
Value:
m_y1 = __lsx_vld(py_1, 0); \
m_y2 = __lsx_vld(py_2, 0); \
m_u = __lsx_vldrepl_d(pu, 0); \
m_v = __lsx_vldrepl_d(pv, 0); \
DUP2_ARG2(__lsx_vilvl_b, m_u, m_u, m_v, m_v, m_u, m_v); \
DUP2_ARG2(__lsx_vilvh_b, zero, m_u, zero, m_v, m_u_h, m_v_h); \
DUP2_ARG2(__lsx_vilvl_b, zero, m_u, zero, m_v, m_u, m_v); \
DUP2_ARG2(__lsx_vilvh_b, zero, m_y1, zero, m_y2, m_y1_h, m_y2_h); \
DUP2_ARG2(__lsx_vilvl_b, zero, m_y1, zero, m_y2, m_y1, m_y2); \
static int zero(InterplayACMContext *s, unsigned ind, unsigned col)
py_2
Definition yuv2rgb.c:484
py_1
Definition yuv2rgb.c:483

Definition at line 38 of file yuv2rgb_lsx.c.

◆ YUV2RGB

#define YUV2RGB ( y1,
y2,
u,
v,
r1,
g1,
b1,
r2,
g2,
b2 )
Value:
{ \
y1 = __lsx_vslli_h(y1, 3); \
y2 = __lsx_vslli_h(y2, 3); \
u = __lsx_vslli_h(u, 3); \
v = __lsx_vslli_h(v, 3); \
y1 = __lsx_vsub_h(y1, y_offset); \
y2 = __lsx_vsub_h(y2, y_offset); \
u = __lsx_vsub_h(u, u_offset); \
v = __lsx_vsub_h(v, v_offset); \
y_1 = __lsx_vmuh_h(y1, y_coeff); \
y_2 = __lsx_vmuh_h(y2, y_coeff); \
u2g = __lsx_vmuh_h(u, ug_coeff); \
u2b = __lsx_vmuh_h(u, ub_coeff); \
v2r = __lsx_vmuh_h(v, vr_coeff); \
v2g = __lsx_vmuh_h(v, vg_coeff); \
r1 = __lsx_vsadd_h(y_1, v2r); \
v2g = __lsx_vsadd_h(v2g, u2g); \
g1 = __lsx_vsadd_h(y_1, v2g); \
b1 = __lsx_vsadd_h(y_1, u2b); \
r2 = __lsx_vsadd_h(y_2, v2r); \
g2 = __lsx_vsadd_h(y_2, v2g); \
b2 = __lsx_vsadd_h(y_2, u2b); \
DUP4_ARG1(__lsx_vclip255_h, r1, g1, b1, r2, r1, g1, b1, r2); \
DUP2_ARG1(__lsx_vclip255_h, g2, b2, g2, b2); \
}
#define u(width, name, range_min, range_max)
Definition cbs_apv.c:68
static double b1(void *priv, double x, double y)
Definition vf_xfade.c:2034
static double b2(void *priv, double x, double y)
Definition vf_xfade.c:2035

Definition at line 59 of file yuv2rgb_lsx.c.

◆ RGB_PACK

#define RGB_PACK ( r,
g,
b,
rgb_l,
rgb_h )
Value:
{ \
__m128i rg; \
rg = __lsx_vpackev_b(g, r); \
DUP2_ARG3(__lsx_vshuf_b, b, rg, shuf2, b, rg, shuf3, rgb_l, rgb_h); \
}
#define r
Definition input.c:42
#define b
Definition input.c:43
const char * g
Definition vf_curves.c:128

Definition at line 86 of file yuv2rgb_lsx.c.

◆ RGB32_PACK

#define RGB32_PACK ( a,
r,
g,
b,
rgb_l,
rgb_h )
Value:
{ \
__m128i ra, bg; \
ra = __lsx_vpackev_b(r, a); \
bg = __lsx_vpackev_b(b, g); \
rgb_l = __lsx_vilvl_h(bg, ra); \
rgb_h = __lsx_vilvh_h(bg, ra); \
}
int a

Definition at line 93 of file yuv2rgb_lsx.c.

◆ RGB_STORE

#define RGB_STORE ( rgb_l,
rgb_h,
image )
Value:
{ \
__lsx_vstelm_d(rgb_l, image, 0, 0); \
__lsx_vstelm_d(rgb_l, image, 8, 1); \
__lsx_vstelm_d(rgb_h, image, 16, 0); \
}

Definition at line 102 of file yuv2rgb_lsx.c.

◆ RGB32_STORE

#define RGB32_STORE ( rgb_l,
rgb_h,
image )
Value:
{ \
__lsx_vst(rgb_l, image, 0); \
__lsx_vst(rgb_h, image, 16); \
}

Definition at line 109 of file yuv2rgb_lsx.c.

◆ YUV2RGBFUNC

#define YUV2RGBFUNC ( func_name,
dst_type,
alpha )
Value:
int func_name(SwsInternal *c, const uint8_t *const src[], \
const int srcStride[], int srcSliceY, int srcSliceH, \
uint8_t *const dst[], const int dstStride[]) \
{ \
int x, y, h_size, vshift, res; \
__m128i m_y1, m_y2, m_u, m_v; \
__m128i m_y1_h, m_y2_h, m_u_h, m_v_h; \
__m128i y_1, y_2, u2g, v2g, u2b, v2r, rgb1_l, rgb1_h; \
__m128i rgb2_l, rgb2_h, r1, g1, b1, r2, g2, b2; \
__m128i shuf2 = {0x0504120302100100, 0x0A18090816070614}; \
__m128i shuf3 = {0x1E0F0E1C0D0C1A0B, 0x0101010101010101}; \
__m128i zero = __lsx_vldi(0); \
\
\
h_size = c->opts.dst_w >> 4; \
res = (c->opts.dst_w & 15) >> 1; \
vshift = c->opts.src_format != AV_PIX_FMT_YUV422P; \
for (y = 0; y < srcSliceH; y += 2) { \
av_unused dst_type *r, *g, *b; \
dst_type *image1 = (dst_type *)(dst[0] + (y + srcSliceY) * dstStride[0]);\
dst_type *image2 = (dst_type *)(image1 + dstStride[0]);\
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 >> vshift) * srcStride[1]; \
const uint8_t *pv = src[2] + (y >> vshift) * srcStride[2]; \
for(x = 0; x < h_size; x++) { \
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition dsp.h:87
#define av_unused
Definition attributes.h:164
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition pixfmt.h:77
#define src
Definition vp8dsp.c:248
#define YUV2RGB_LOAD_COE

Definition at line 115 of file yuv2rgb_lsx.c.

◆ YUV2RGBFUNC32

#define YUV2RGBFUNC32 ( func_name,
dst_type,
alpha )
Value:
int func_name(SwsInternal *c, const uint8_t *const src[], \
const int srcStride[], int srcSliceY, int srcSliceH, \
uint8_t *const dst[], const int dstStride[]) \
{ \
int x, y, h_size, vshift, res; \
__m128i m_y1, m_y2, m_u, m_v; \
__m128i m_y1_h, m_y2_h, m_u_h, m_v_h; \
__m128i y_1, y_2, u2g, v2g, u2b, v2r, rgb1_l, rgb1_h; \
__m128i rgb2_l, rgb2_h, r1, g1, b1, r2, g2, b2; \
__m128i a = __lsx_vldi(0xFF); \
__m128i zero = __lsx_vldi(0); \
\
\
h_size = c->opts.dst_w >> 4; \
res = (c->opts.dst_w & 15) >> 1; \
vshift = c->opts.src_format != AV_PIX_FMT_YUV422P; \
for (y = 0; y < srcSliceH; y += 2) { \
int yd = y + srcSliceY; \
av_unused dst_type *r, *g, *b; \
dst_type *image1 = (dst_type *)(dst[0] + (yd) * dstStride[0]); \
dst_type *image2 = (dst_type *)(dst[0] + (yd + 1) * dstStride[0]); \
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 >> vshift) * srcStride[1]; \
const uint8_t *pv = src[2] + (y >> vshift) * srcStride[2]; \
for(x = 0; x < h_size; x++) { \

Definition at line 144 of file yuv2rgb_lsx.c.

◆ DEALYUV2RGBREMAIN

#define DEALYUV2RGBREMAIN
Value:
py_1 += 16; \
py_2 += 16; \
pu += 8; \
pv += 8; \
image1 += 48; \
image2 += 48; \
} \
for (x = 0; x < res; x++) { \
av_unused int U, V, Y; \
U = pu[0]; \
V = pv[0]; \
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];
#define U(x)
Definition vpx_arith.h:37
#define V
Definition avdct.c:32
#define Y
Definition boxblur.h:37
#define YUVRGB_TABLE_HEADROOM

Definition at line 173 of file yuv2rgb_lsx.c.

Referenced by RGB_PACK(), and RGB_STORE().

◆ DEALYUV2RGBREMAIN32

#define DEALYUV2RGBREMAIN32
Value:
py_1 += 16; \
py_2 += 16; \
pu += 8; \
pv += 8; \
image1 += 16; \
image2 += 16; \
} \
for (x = 0; x < res; x++) { \
av_unused int U, V, Y; \
U = pu[0]; \
V = pv[0]; \
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 190 of file yuv2rgb_lsx.c.

Referenced by RGB32_PACK(), RGB32_PACK(), RGB32_PACK(), and RGB32_STORE().

◆ PUTRGB24

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

Definition at line 207 of file yuv2rgb_lsx.c.

Referenced by if(), PUTRGB24(), and PUTRGB24().

◆ PUTBGR24

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

Definition at line 217 of file yuv2rgb_lsx.c.

Referenced by if(), PUTBGR24(), and PUTBGR24().

◆ PUTRGB

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

Definition at line 227 of file yuv2rgb_lsx.c.

Referenced by if(), PUTRGB(), PUTRGB(), RGB32_PACK(), RGB32_PACK(), and RGB32_PACK().

◆ ENDRES

#define ENDRES
Value:
pu += 1; \
pv += 1; \
py_1 += 2; \
py_2 += 2; \
image1 += 6; \
image2 += 6; \

Definition at line 233 of file yuv2rgb_lsx.c.

Referenced by PUTBGR24(), and PUTRGB24().

◆ ENDRES32

#define ENDRES32
Value:
pu += 1; \
pv += 1; \
py_1 += 2; \
py_2 += 2; \
image1 += 2; \
image2 += 2; \

Definition at line 241 of file yuv2rgb_lsx.c.

Referenced by PUTRGB(), RGB32_PACK(), RGB32_PACK(), and RGB32_PACK().

◆ END_FUNC

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

Definition at line 249 of file yuv2rgb_lsx.c.

Function Documentation

◆ YUV2RGB() [1/2]

ENDRES32 LOAD_YUV_16 YUV2RGB ( m_y1 ,
m_y2 ,
m_u ,
m_v ,
r1 ,
g1 ,
b1 ,
r2 ,
g2 ,
b2  )

◆ RGB_PACK() [1/4]

RGB_PACK ( r1 ,
g1 ,
b1 ,
rgb1_l ,
rgb1_h  )

◆ RGB_PACK() [2/4]

RGB_PACK ( r2 ,
g2 ,
b2 ,
rgb2_l ,
rgb2_h  )

◆ RGB_STORE() [1/4]

RGB_STORE ( rgb1_l ,
rgb1_h ,
image1  )

◆ RGB_STORE() [2/4]

RGB_STORE ( rgb2_l ,
rgb2_h ,
image2  )

◆ YUV2RGB() [2/2]

YUV2RGB ( m_y1_h ,
m_y2_h ,
m_u_h ,
m_v_h ,
r1 ,
g1 ,
b1 ,
r2 ,
g2 ,
b2  )

◆ RGB_STORE() [3/4]

RGB_STORE ( rgb1_l ,
rgb1_h ,
image1+ 24 )

◆ RGB_STORE() [4/4]

RGB_STORE ( rgb2_l ,
rgb2_h ,
image2+ 24 )

◆ PUTRGB24() [1/2]

DEALYUV2RGBREMAIN PUTRGB24 ( image1 ,
py_1  )

◆ PUTRGB24() [2/2]

PUTRGB24 ( image2 ,
py_2  )

◆ RGB_PACK() [3/4]

RGB_PACK ( b1 ,
g1 ,
r1 ,
rgb1_l ,
rgb1_h  )

◆ RGB_PACK() [4/4]

RGB_PACK ( b2 ,
g2 ,
r2 ,
rgb2_l ,
rgb2_h  )

◆ PUTBGR24() [1/2]

DEALYUV2RGBREMAIN PUTBGR24 ( image1 ,
py_1  )

◆ PUTBGR24() [2/2]

PUTBGR24 ( image2 ,
py_2  )

◆ RGB32_PACK() [1/8]

RGB32_PACK ( r1 ,
g1 ,
b1 ,
a ,
rgb1_l ,
rgb1_h  )

◆ RGB32_PACK() [2/8]

RGB32_PACK ( r2 ,
g2 ,
b2 ,
a ,
rgb2_l ,
rgb2_h  )

◆ RGB32_STORE() [1/4]

RGB32_STORE ( rgb1_l ,
rgb1_h ,
image1  )

◆ RGB32_STORE() [2/4]

RGB32_STORE ( rgb2_l ,
rgb2_h ,
image2  )

◆ RGB32_STORE() [3/4]

RGB32_STORE ( rgb1_l ,
rgb1_h ,
image1+ 8 )

◆ RGB32_STORE() [4/4]

RGB32_STORE ( rgb2_l ,
rgb2_h ,
image2+ 8 )

◆ PUTRGB() [1/2]

DEALYUV2RGBREMAIN32 PUTRGB ( image1 ,
py_1  )

◆ PUTRGB() [2/2]

PUTRGB ( image2 ,
py_2  )

◆ RGB32_PACK() [3/8]

RGB32_PACK ( b1 ,
g1 ,
r1 ,
a ,
rgb1_l ,
rgb1_h  )

◆ RGB32_PACK() [4/8]

RGB32_PACK ( b2 ,
g2 ,
r2 ,
a ,
rgb2_l ,
rgb2_h  )

◆ RGB32_PACK() [5/8]

RGB32_PACK ( a ,
r1 ,
g1 ,
b1 ,
rgb1_l ,
rgb1_h  )

◆ RGB32_PACK() [6/8]

RGB32_PACK ( a ,
r2 ,
g2 ,
b2 ,
rgb2_l ,
rgb2_h  )

◆ RGB32_PACK() [7/8]

RGB32_PACK ( a ,
b1 ,
g1 ,
r1 ,
rgb1_l ,
rgb1_h  )

◆ RGB32_PACK() [8/8]

RGB32_PACK ( a ,
b2 ,
g2 ,
r2 ,
rgb2_l ,
rgb2_h  )