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

Go to the source code of this file.

Macros

#define SCALE_8_16(_sh)
 
#define SCALE_8_8(_sh)
 
#define SCALE_8_4(_sh)
 
#define SCALE_8_2(_sh)
 
#define SCALE_4_16(_sh)
 
#define SCALE_4_8(_sh)
 
#define SCALE_4_4(_sh)
 
#define SCALE_4_2(_sh)
 
#define SCALE_16
 
#define SCALE_8
 
#define SCALE_16
 

Functions

void ff_hscale_8_to_15_lasx (SwsInternal *c, int16_t *dst, int dstW, const uint8_t *src, const int16_t *filter, const int32_t *filterPos, int filterSize)
 
void ff_hscale_8_to_19_lasx (SwsInternal *c, int16_t *_dst, int dstW, const uint8_t *src, const int16_t *filter, const int32_t *filterPos, int filterSize)
 
void ff_hscale_16_to_15_lasx (SwsInternal *c, int16_t *dst, int dstW, const uint8_t *_src, const int16_t *filter, const int32_t *filterPos, int filterSize)
 
void ff_hscale_16_to_19_lasx (SwsInternal *c, int16_t *_dst, int dstW, const uint8_t *_src, const int16_t *filter, const int32_t *filterPos, int filterSize)
 

Macro Definition Documentation

◆ SCALE_8_16

#define SCALE_8_16 ( _sh)

Definition at line 26 of file swscale_lasx.c.

Referenced by ff_hscale_8_to_15_lasx().

◆ SCALE_8_8

#define SCALE_8_8 ( _sh)

Definition at line 91 of file swscale_lasx.c.

Referenced by ff_hscale_8_to_15_lasx(), and ff_hscale_8_to_19_lasx().

◆ SCALE_8_4

#define SCALE_8_4 ( _sh)
Value:
{ \
src0 = __lasx_xvldrepl_d(src + filterPos[0], 0); \
src1 = __lasx_xvldrepl_d(src + filterPos[1], 0); \
src2 = __lasx_xvldrepl_d(src + filterPos[2], 0); \
src3 = __lasx_xvldrepl_d(src + filterPos[3], 0); \
filter0 = __lasx_xvld(filter, 0); \
filter1 = __lasx_xvld(filter, 32); \
filterPos += 4; \
filter += 32; \
src0 = __lasx_xvilvl_d(src1, src0); \
src2 = __lasx_xvilvl_d(src3, src2); \
src0 = __lasx_vext2xv_hu_bu(src0); \
src2 = __lasx_vext2xv_hu_bu(src2); \
src0 = __lasx_xvdp2_w_h(src0, filter0); \
src1 = __lasx_xvdp2_w_h(src2, filter1); \
src0 = __lasx_xvhaddw_d_w(src0, src0); \
src1 = __lasx_xvhaddw_d_w(src1, src1); \
src0 = __lasx_xvpickev_w(src1, src0); \
src0 = __lasx_xvhaddw_d_w(src0, src0); \
src0 = __lasx_xvpickev_w(src0, src0); \
src0 = __lasx_xvsrai_w(src0, _sh); \
src0 = __lasx_xvmin_w(src0, vmax); \
src0 = __lasx_xvperm_w(src0, shuf); \
}
const pixel * src2
static void filter0(SUINT32 *dst, const int32_t *src, int32_t coeff, ptrdiff_t len)
Definition dcadsp.c:352
static void filter1(SUINT32 *dst, const int32_t *src, int32_t coeff, ptrdiff_t len)
Definition dcadsp.c:360
void(* filter)(uint8_t *src, ptrdiff_t stride, int qscale)
Definition h263dsp.c:29
#define src1
Definition h264pred.c:141
#define src0
Definition h264pred.c:140
#define src
Definition vp8dsp.c:248

Definition at line 125 of file swscale_lasx.c.

Referenced by ff_hscale_8_to_15_lasx(), and ff_hscale_8_to_19_lasx().

◆ SCALE_8_2

#define SCALE_8_2 ( _sh)
Value:
{ \
src0 = __lasx_xvldrepl_d(src + filterPos[0], 0); \
src1 = __lasx_xvldrepl_d(src + filterPos[1], 0); \
filter0 = __lasx_xvld(filter, 0); \
src0 = __lasx_xvilvl_d(src1, src0); \
src0 = __lasx_vext2xv_hu_bu(src0); \
src0 = __lasx_xvdp2_w_h(filter0, src0); \
src0 = __lasx_xvhaddw_d_w(src0, src0); \
src0 = __lasx_xvhaddw_q_d(src0, src0); \
src0 = __lasx_xvsrai_w(src0, _sh); \
src0 = __lasx_xvmin_w(src0, vmax); \
dst[0] = __lasx_xvpickve2gr_w(src0, 0); \
dst[1] = __lasx_xvpickve2gr_w(src0, 4); \
filterPos += 2; \
filter += 16; \
dst += 2; \
}
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition dsp.h:87

Definition at line 151 of file swscale_lasx.c.

Referenced by ff_hscale_8_to_15_lasx(), and ff_hscale_8_to_19_lasx().

◆ SCALE_4_16

#define SCALE_4_16 ( _sh)

Definition at line 170 of file swscale_lasx.c.

Referenced by ff_hscale_8_to_15_lasx().

◆ SCALE_4_8

#define SCALE_4_8 ( _sh)
Value:
{ \
src0 = __lasx_xvldrepl_w(src + filterPos[0], 0); \
src1 = __lasx_xvldrepl_w(src + filterPos[1], 0); \
src2 = __lasx_xvldrepl_w(src + filterPos[2], 0); \
src3 = __lasx_xvldrepl_w(src + filterPos[3], 0); \
src4 = __lasx_xvldrepl_w(src + filterPos[4], 0); \
src5 = __lasx_xvldrepl_w(src + filterPos[5], 0); \
src6 = __lasx_xvldrepl_w(src + filterPos[6], 0); \
src7 = __lasx_xvldrepl_w(src + filterPos[7], 0); \
filter0 = __lasx_xvld(filter, 0); \
filter1 = __lasx_xvld(filter, 32); \
filterPos += 8; \
filter += 32; \
DUP4_ARG2(__lasx_xvilvl_w, src1, src0, src3, src2, src5, \
src4, src7, src6, src0, src2, src4, src6); \
src0 = __lasx_xvilvl_d(src2, src0); \
src1 = __lasx_xvilvl_d(src6, src4); \
\
src0 = __lasx_vext2xv_hu_bu(src0); \
src1 = __lasx_vext2xv_hu_bu(src1); \
src0 = __lasx_xvdp2_w_h(filter0, src0); \
src1 = __lasx_xvdp2_w_h(filter1, src1); \
src0 = __lasx_xvhaddw_d_w(src0, src0); \
src1 = __lasx_xvhaddw_d_w(src1, src1); \
src0 = __lasx_xvpickev_w(src1, src0); \
src0 = __lasx_xvsrai_w(src0, _sh); \
src0 = __lasx_xvmin_w(src0, vmax); \
}

Definition at line 218 of file swscale_lasx.c.

Referenced by ff_hscale_8_to_15_lasx(), and ff_hscale_8_to_19_lasx().

◆ SCALE_4_4

#define SCALE_4_4 ( _sh)
Value:
{ \
src0 = __lasx_xvldrepl_w(src + filterPos[0], 0); \
src1 = __lasx_xvldrepl_w(src + filterPos[1], 0); \
src2 = __lasx_xvldrepl_w(src + filterPos[2], 0); \
src3 = __lasx_xvldrepl_w(src + filterPos[3], 0); \
filter0 = __lasx_xvld(filter, 0); \
filterPos += 4; \
filter += 16; \
src0 = __lasx_xvilvl_w(src1, src0); \
src1 = __lasx_xvilvl_w(src3, src2); \
\
src0 = __lasx_xvilvl_d(src1, src0); \
src0 = __lasx_vext2xv_hu_bu(src0); \
src0 = __lasx_xvdp2_w_h(filter0, src0); \
src0 = __lasx_xvhaddw_d_w(src0, src0); \
src0 = __lasx_xvsrai_w(src0, _sh); \
src0 = __lasx_xvmin_w(src0, vmax); \
src0 = __lasx_xvpickev_w(src0, src0); \
src0 = __lasx_xvpermi_d(src0, 0xd8); \
}

Definition at line 248 of file swscale_lasx.c.

Referenced by ff_hscale_8_to_15_lasx(), and ff_hscale_8_to_19_lasx().

◆ SCALE_4_2

#define SCALE_4_2 ( _sh)
Value:
{ \
src0 = __lasx_xvldrepl_w(src + filterPos[0], 0); \
src1 = __lasx_xvldrepl_w(src + filterPos[1], 0); \
filter0 = __lasx_xvld(filter, 0); \
src0 = __lasx_xvilvl_w(src1, src0); \
src0 = __lasx_vext2xv_hu_bu(src0); \
src0 = __lasx_xvdp2_w_h(filter0, src0); \
src0 = __lasx_xvhaddw_d_w(src0, src0); \
src0 = __lasx_xvsrai_w(src0, _sh); \
src0 = __lasx_xvmin_w(src0, vmax); \
dst[0] = __lasx_xvpickve2gr_w(src0, 0); \
dst[1] = __lasx_xvpickve2gr_w(src0, 2); \
filterPos += 2; \
filter += 8; \
dst += 2; \
}

Definition at line 270 of file swscale_lasx.c.

Referenced by ff_hscale_8_to_15_lasx(), and ff_hscale_8_to_19_lasx().

◆ SCALE_16 [1/2]

#define SCALE_16
Value:
{ \
int dex = j << 1; \
src0 = __lasx_xvldrepl_d((srcPos1 + j), 0); \
src1 = __lasx_xvldrepl_d((srcPos2 + j), 0); \
src2 = __lasx_xvldrepl_d((srcPos3 + j), 0); \
src3 = __lasx_xvldrepl_d((srcPos4 + j), 0); \
DUP4_ARG2(__lasx_xvldx, filterStart1, dex, filterStart2, dex, \
filterStart3, dex, filterStart4, dex, filter0, \
filter1, filter2, filter3); \
src0 = __lasx_xvpermi_q(src0, src1, 0x02); \
src1 = __lasx_xvpermi_q(src2, src3, 0x02); \
filter0 = __lasx_xvpermi_q(filter0, filter1, 0x02); \
filter1 = __lasx_xvpermi_q(filter2, filter3, 0x02); \
src0 = __lasx_xvilvl_b(zero, src0); \
src1 = __lasx_xvilvl_b(zero, src1); \
out0 = __lasx_xvdp2_w_h(filter0, src0); \
out1 = __lasx_xvdp2_w_h(filter1, src1); \
src0 = __lasx_xvhaddw_d_w(out0, out0); \
src1 = __lasx_xvhaddw_d_w(out1, out1); \
out0 = __lasx_xvpackev_d(src1, src0); \
out1 = __lasx_xvpackod_d(src1, src0); \
out0 = __lasx_xvadd_w(out0, out1); \
out = __lasx_xvadd_w(out, out0); \
}
static int zero(InterplayACMContext *s, unsigned ind, unsigned col)
static FILE * out
Definition movenc.c:55

Definition at line 288 of file swscale_lasx.c.

Referenced by ff_hscale_16_to_15_lasx(), ff_hscale_16_to_19_lasx(), ff_hscale_8_to_15_lasx(), and ff_hscale_8_to_19_lasx().

◆ SCALE_8

#define SCALE_8
Value:
{ \
__m256i src0, src1, src2, src3, filter0, filter1, out0, out1; \
DUP4_ARG2(__lasx_xvld, src + filterPos[0], 0, src + filterPos[1], 0, \
src + filterPos[2], 0, src + filterPos[3], 0, src0, src1, src2,\
src3); \
filter0 = __lasx_xvld(filter, 0); \
filter1 = __lasx_xvld(filter, 32); \
src0 = __lasx_xvpermi_q(src0, src1, 0x02); \
src2 = __lasx_xvpermi_q(src2, src3, 0x02); \
out0 = __lasx_xvdp2_w_hu_h(src0, filter0); \
out1 = __lasx_xvdp2_w_hu_h(src2, filter1); \
src0 = __lasx_xvhaddw_d_w(out0, out0); \
src1 = __lasx_xvhaddw_d_w(out1, out1); \
out0 = __lasx_xvpackev_d(src1, src0); \
out1 = __lasx_xvpackod_d(src1, src0); \
out0 = __lasx_xvadd_w(out0, out1); \
out0 = __lasx_xvsra_w(out0, shift); \
out0 = __lasx_xvmin_w(out0, v_max); \
dst[0] = __lasx_xvpickve2gr_w(out0, 0); \
dst[1] = __lasx_xvpickve2gr_w(out0, 4); \
dst[2] = __lasx_xvpickve2gr_w(out0, 2); \
dst[3] = __lasx_xvpickve2gr_w(out0, 6); \
filterPos += 4; \
filter += 32; \
dst += 4; \
}
static int shift(int a, int b)
Definition bonk.c:261

Definition at line 626 of file swscale_lasx.c.

Referenced by ff_hscale_16_to_15_lasx(), and ff_hscale_16_to_19_lasx().

◆ SCALE_16 [2/2]

#define SCALE_16
Value:
{ \
int dex = j << 1; \
DUP4_ARG2(__lasx_xvldx, srcPos1, dex, srcPos2, dex, srcPos3, dex, \
srcPos4, dex, src0, src1, src2, src3); \
DUP4_ARG2(__lasx_xvldx, filterStart1, dex, filterStart2, dex, \
filterStart3, dex, filterStart4, dex, filter0, \
filter1, filter2, filter3); \
src0 = __lasx_xvpermi_q(src0, src1, 0x02); \
src1 = __lasx_xvpermi_q(src2, src3, 0x02); \
filter0 = __lasx_xvpermi_q(filter0, filter1, 0x02); \
filter1 = __lasx_xvpermi_q(filter2, filter3, 0x02); \
out0 = __lasx_xvdp2_w_hu_h(src0, filter0); \
out1 = __lasx_xvdp2_w_hu_h(src1, filter1); \
src0 = __lasx_xvhaddw_d_w(out0, out0); \
src1 = __lasx_xvhaddw_d_w(out1, out1); \
out0 = __lasx_xvpackev_d(src1, src0); \
out1 = __lasx_xvpackod_d(src1, src0); \
out0 = __lasx_xvadd_w(out0, out1); \
out = __lasx_xvadd_w(out, out0); \
}

Definition at line 288 of file swscale_lasx.c.

Function Documentation

◆ ff_hscale_8_to_15_lasx()

void ff_hscale_8_to_15_lasx ( SwsInternal * c,
int16_t * dst,
int dstW,
const uint8_t * src,
const int16_t * filter,
const int32_t * filterPos,
int filterSize )

Definition at line 314 of file swscale_lasx.c.

Referenced by ff_sws_init_swscale_loongarch().

◆ ff_hscale_8_to_19_lasx()

void ff_hscale_8_to_19_lasx ( SwsInternal * c,
int16_t * _dst,
int dstW,
const uint8_t * src,
const int16_t * filter,
const int32_t * filterPos,
int filterSize )

Definition at line 474 of file swscale_lasx.c.

Referenced by ff_sws_init_swscale_loongarch().

◆ ff_hscale_16_to_15_lasx()

void ff_hscale_16_to_15_lasx ( SwsInternal * c,
int16_t * dst,
int dstW,
const uint8_t * _src,
const int16_t * filter,
const int32_t * filterPos,
int filterSize )

Definition at line 676 of file swscale_lasx.c.

Referenced by ff_sws_init_swscale_loongarch().

◆ ff_hscale_16_to_19_lasx()

void ff_hscale_16_to_19_lasx ( SwsInternal * c,
int16_t * _dst,
int dstW,
const uint8_t * _src,
const int16_t * filter,
const int32_t * filterPos,
int filterSize )

Definition at line 823 of file swscale_lasx.c.

Referenced by ff_sws_init_swscale_loongarch().