libavcodec/x86/h264_qpel_mmx.c File Reference

#include "dsputil_mmx.h"

Go to the source code of this file.

Defines

#define QPEL_H264V_MM(A, B, C, D, E, F, OP, T, Z, d, q)
#define QPEL_H264HV_MM(A, B, C, D, E, F, OF, T, Z, d, q)
#define QPEL_H264V(A, B, C, D, E, F, OP)   QPEL_H264V_MM(A,B,C,D,E,F,OP,%%mm6,%%mm7,d,q)
#define QPEL_H264HV(A, B, C, D, E, F, OF)   QPEL_H264HV_MM(A,B,C,D,E,F,OF,%%mm6,%%mm7,d,q)
#define QPEL_H264V_XMM(A, B, C, D, E, F, OP)   QPEL_H264V_MM(A,B,C,D,E,F,OP,%%xmm6,%%xmm7,q,dqa)
#define QPEL_H264HV_XMM(A, B, C, D, E, F, OF)   QPEL_H264HV_MM(A,B,C,D,E,F,OF,%%xmm6,%%xmm7,q,dqa)
#define QPEL_H264(OPNAME, OP, MMX)
#define QPEL_H264_H16_XMM(OPNAME, OP, MMX)
#define QPEL_H264_H_XMM(OPNAME, OP, MMX)
#define QPEL_H264_V_XMM(OPNAME, OP, MMX)
#define QPEL_H264_HV2_XMM(OPNAME, OP, MMX)
#define QPEL_H264_HV_XMM(OPNAME, OP, MMX)
#define put_pixels8_l2_sse2   put_pixels8_l2_mmx2
#define avg_pixels8_l2_sse2   avg_pixels8_l2_mmx2
#define put_pixels16_l2_sse2   put_pixels16_l2_mmx2
#define avg_pixels16_l2_sse2   avg_pixels16_l2_mmx2
#define put_pixels8_l2_ssse3   put_pixels8_l2_mmx2
#define avg_pixels8_l2_ssse3   avg_pixels8_l2_mmx2
#define put_pixels16_l2_ssse3   put_pixels16_l2_mmx2
#define avg_pixels16_l2_ssse3   avg_pixels16_l2_mmx2
#define put_pixels8_l2_shift5_sse2   put_pixels8_l2_shift5_mmx2
#define avg_pixels8_l2_shift5_sse2   avg_pixels8_l2_shift5_mmx2
#define put_pixels16_l2_shift5_sse2   put_pixels16_l2_shift5_mmx2
#define avg_pixels16_l2_shift5_sse2   avg_pixels16_l2_shift5_mmx2
#define put_pixels8_l2_shift5_ssse3   put_pixels8_l2_shift5_mmx2
#define avg_pixels8_l2_shift5_ssse3   avg_pixels8_l2_shift5_mmx2
#define put_pixels16_l2_shift5_ssse3   put_pixels16_l2_shift5_mmx2
#define avg_pixels16_l2_shift5_ssse3   avg_pixels16_l2_shift5_mmx2
#define put_h264_qpel8_h_lowpass_l2_sse2   put_h264_qpel8_h_lowpass_l2_mmx2
#define avg_h264_qpel8_h_lowpass_l2_sse2   avg_h264_qpel8_h_lowpass_l2_mmx2
#define put_h264_qpel16_h_lowpass_l2_sse2   put_h264_qpel16_h_lowpass_l2_mmx2
#define avg_h264_qpel16_h_lowpass_l2_sse2   avg_h264_qpel16_h_lowpass_l2_mmx2
#define put_h264_qpel8_v_lowpass_ssse3   put_h264_qpel8_v_lowpass_sse2
#define avg_h264_qpel8_v_lowpass_ssse3   avg_h264_qpel8_v_lowpass_sse2
#define put_h264_qpel16_v_lowpass_ssse3   put_h264_qpel16_v_lowpass_sse2
#define avg_h264_qpel16_v_lowpass_ssse3   avg_h264_qpel16_v_lowpass_sse2
#define put_h264_qpel8or16_hv2_lowpass_sse2   put_h264_qpel8or16_hv2_lowpass_mmx2
#define avg_h264_qpel8or16_hv2_lowpass_sse2   avg_h264_qpel8or16_hv2_lowpass_mmx2
#define H264_MC(OPNAME, SIZE, MMX, ALIGN)
#define put_h264_qpel8_mc00_sse2   put_h264_qpel8_mc00_mmx2
#define avg_h264_qpel8_mc00_sse2   avg_h264_qpel8_mc00_mmx2
#define H264_MC_C(OPNAME, SIZE, MMX, ALIGN)
#define H264_MC_H(OPNAME, SIZE, MMX, ALIGN)
#define H264_MC_V(OPNAME, SIZE, MMX, ALIGN)
#define H264_MC_HV(OPNAME, SIZE, MMX, ALIGN)
#define H264_MC_4816(MMX)
#define H264_MC_816(QPEL, XMM)
#define AVG_3DNOW_OP(a, b, temp, size)
#define AVG_MMX2_OP(a, b, temp, size)
#define PAVGB   "pavgusb"
#define PAVGB   "pavgb"

Functions

static av_always_inline void put_h264_qpel8or16_hv1_lowpass_sse2 (int16_t *tmp, uint8_t *src, int tmpStride, int srcStride, int size)
static void put_h264_qpel16_mc00_sse2 (uint8_t *dst, uint8_t *src, int stride)
static void avg_h264_qpel16_mc00_sse2 (uint8_t *dst, uint8_t *src, int stride)


Define Documentation

#define AVG_3DNOW_OP ( a,
b,
temp,
size   ) 

Value:

"mov" #size " " #b ", " #temp "   \n\t"\
"pavgusb " #temp ", " #a "        \n\t"\
"mov" #size " " #a ", " #b "      \n\t"

Definition at line 1164 of file h264_qpel_mmx.c.

#define avg_h264_qpel16_h_lowpass_l2_sse2   avg_h264_qpel16_h_lowpass_l2_mmx2

Definition at line 1023 of file h264_qpel_mmx.c.

#define avg_h264_qpel16_v_lowpass_ssse3   avg_h264_qpel16_v_lowpass_sse2

Definition at line 1028 of file h264_qpel_mmx.c.

#define avg_h264_qpel8_h_lowpass_l2_sse2   avg_h264_qpel8_h_lowpass_l2_mmx2

Definition at line 1021 of file h264_qpel_mmx.c.

#define avg_h264_qpel8_mc00_sse2   avg_h264_qpel8_mc00_mmx2

Definition at line 1046 of file h264_qpel_mmx.c.

#define avg_h264_qpel8_v_lowpass_ssse3   avg_h264_qpel8_v_lowpass_sse2

Definition at line 1026 of file h264_qpel_mmx.c.

#define avg_h264_qpel8or16_hv2_lowpass_sse2   avg_h264_qpel8or16_hv2_lowpass_mmx2

Definition at line 1031 of file h264_qpel_mmx.c.

#define AVG_MMX2_OP ( a,
b,
temp,
size   ) 

Value:

"mov" #size " " #b ", " #temp "   \n\t"\
"pavgb " #temp ", " #a "          \n\t"\
"mov" #size " " #a ", " #b "      \n\t"

Definition at line 1168 of file h264_qpel_mmx.c.

#define avg_pixels16_l2_shift5_sse2   avg_pixels16_l2_shift5_mmx2

Definition at line 1014 of file h264_qpel_mmx.c.

#define avg_pixels16_l2_shift5_ssse3   avg_pixels16_l2_shift5_mmx2

Definition at line 1018 of file h264_qpel_mmx.c.

#define avg_pixels16_l2_sse2   avg_pixels16_l2_mmx2

Definition at line 1005 of file h264_qpel_mmx.c.

#define avg_pixels16_l2_ssse3   avg_pixels16_l2_mmx2

Definition at line 1009 of file h264_qpel_mmx.c.

#define avg_pixels8_l2_shift5_sse2   avg_pixels8_l2_shift5_mmx2

Definition at line 1012 of file h264_qpel_mmx.c.

#define avg_pixels8_l2_shift5_ssse3   avg_pixels8_l2_shift5_mmx2

Definition at line 1016 of file h264_qpel_mmx.c.

#define avg_pixels8_l2_sse2   avg_pixels8_l2_mmx2

Definition at line 1003 of file h264_qpel_mmx.c.

#define avg_pixels8_l2_ssse3   avg_pixels8_l2_mmx2

Definition at line 1007 of file h264_qpel_mmx.c.

#define H264_MC ( OPNAME,
SIZE,
MMX,
ALIGN   ) 

Value:

H264_MC_C(OPNAME, SIZE, MMX, ALIGN)\
H264_MC_V(OPNAME, SIZE, MMX, ALIGN)\
H264_MC_H(OPNAME, SIZE, MMX, ALIGN)\
H264_MC_HV(OPNAME, SIZE, MMX, ALIGN)\

Definition at line 1033 of file h264_qpel_mmx.c.

#define H264_MC_4816 ( MMX   ) 

Value:

H264_MC(put_, 4, MMX, 8)\
H264_MC(put_, 8, MMX, 8)\
H264_MC(put_, 16,MMX, 8)\
H264_MC(avg_, 4, MMX, 8)\
H264_MC(avg_, 8, MMX, 8)\
H264_MC(avg_, 16,MMX, 8)\

Definition at line 1149 of file h264_qpel_mmx.c.

#define H264_MC_816 ( QPEL,
XMM   ) 

Value:

QPEL(put_, 8, XMM, 16)\
QPEL(put_, 16,XMM, 16)\
QPEL(avg_, 8, XMM, 16)\
QPEL(avg_, 16,XMM, 16)\

Definition at line 1157 of file h264_qpel_mmx.c.

#define H264_MC_C ( OPNAME,
SIZE,
MMX,
ALIGN   ) 

Value:

static void OPNAME ## h264_qpel ## SIZE ## _mc00_ ## MMX (uint8_t *dst, uint8_t *src, int stride){\
    OPNAME ## pixels ## SIZE ## _ ## MMX(dst, src, stride, SIZE);\
}\

Definition at line 1048 of file h264_qpel_mmx.c.

#define H264_MC_H ( OPNAME,
SIZE,
MMX,
ALIGN   ) 

Value:

static void OPNAME ## h264_qpel ## SIZE ## _mc10_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\
    OPNAME ## h264_qpel ## SIZE ## _h_lowpass_l2_ ## MMX(dst, src, src, stride, stride);\
}\
\
static void OPNAME ## h264_qpel ## SIZE ## _mc20_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\
    OPNAME ## h264_qpel ## SIZE ## _h_lowpass_ ## MMX(dst, src, stride, stride);\
}\
\
static void OPNAME ## h264_qpel ## SIZE ## _mc30_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\
    OPNAME ## h264_qpel ## SIZE ## _h_lowpass_l2_ ## MMX(dst, src, src+1, stride, stride);\
}\

Definition at line 1053 of file h264_qpel_mmx.c.

#define H264_MC_HV ( OPNAME,
SIZE,
MMX,
ALIGN   ) 

Definition at line 1083 of file h264_qpel_mmx.c.

#define H264_MC_V ( OPNAME,
SIZE,
MMX,
ALIGN   ) 

Value:

static void OPNAME ## h264_qpel ## SIZE ## _mc01_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\
    DECLARE_ALIGNED(ALIGN, uint8_t, temp)[SIZE*SIZE];\
    put_h264_qpel ## SIZE ## _v_lowpass_ ## MMX(temp, src, SIZE, stride);\
    OPNAME ## pixels ## SIZE ## _l2_ ## MMX(dst, src, temp, stride, stride, SIZE);\
}\
\
static void OPNAME ## h264_qpel ## SIZE ## _mc02_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\
    OPNAME ## h264_qpel ## SIZE ## _v_lowpass_ ## MMX(dst, src, stride, stride);\
}\
\
static void OPNAME ## h264_qpel ## SIZE ## _mc03_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\
    DECLARE_ALIGNED(ALIGN, uint8_t, temp)[SIZE*SIZE];\
    put_h264_qpel ## SIZE ## _v_lowpass_ ## MMX(temp, src, SIZE, stride);\
    OPNAME ## pixels ## SIZE ## _l2_ ## MMX(dst, src+stride, temp, stride, stride, SIZE);\
}\

Definition at line 1066 of file h264_qpel_mmx.c.

#define PAVGB   "pavgb"

Definition at line 1177 of file h264_qpel_mmx.c.

#define PAVGB   "pavgusb"

Definition at line 1177 of file h264_qpel_mmx.c.

#define put_h264_qpel16_h_lowpass_l2_sse2   put_h264_qpel16_h_lowpass_l2_mmx2

Definition at line 1022 of file h264_qpel_mmx.c.

#define put_h264_qpel16_v_lowpass_ssse3   put_h264_qpel16_v_lowpass_sse2

Definition at line 1027 of file h264_qpel_mmx.c.

#define put_h264_qpel8_h_lowpass_l2_sse2   put_h264_qpel8_h_lowpass_l2_mmx2

Definition at line 1020 of file h264_qpel_mmx.c.

#define put_h264_qpel8_mc00_sse2   put_h264_qpel8_mc00_mmx2

Definition at line 1045 of file h264_qpel_mmx.c.

#define put_h264_qpel8_v_lowpass_ssse3   put_h264_qpel8_v_lowpass_sse2

Definition at line 1025 of file h264_qpel_mmx.c.

#define put_h264_qpel8or16_hv2_lowpass_sse2   put_h264_qpel8or16_hv2_lowpass_mmx2

Definition at line 1030 of file h264_qpel_mmx.c.

#define put_pixels16_l2_shift5_sse2   put_pixels16_l2_shift5_mmx2

Definition at line 1013 of file h264_qpel_mmx.c.

#define put_pixels16_l2_shift5_ssse3   put_pixels16_l2_shift5_mmx2

Definition at line 1017 of file h264_qpel_mmx.c.

#define put_pixels16_l2_sse2   put_pixels16_l2_mmx2

Definition at line 1004 of file h264_qpel_mmx.c.

#define put_pixels16_l2_ssse3   put_pixels16_l2_mmx2

Definition at line 1008 of file h264_qpel_mmx.c.

#define put_pixels8_l2_shift5_sse2   put_pixels8_l2_shift5_mmx2

Definition at line 1011 of file h264_qpel_mmx.c.

#define put_pixels8_l2_shift5_ssse3   put_pixels8_l2_shift5_mmx2

Definition at line 1015 of file h264_qpel_mmx.c.

#define put_pixels8_l2_sse2   put_pixels8_l2_mmx2

Definition at line 1002 of file h264_qpel_mmx.c.

#define put_pixels8_l2_ssse3   put_pixels8_l2_mmx2

Definition at line 1006 of file h264_qpel_mmx.c.

#define QPEL_H264 ( OPNAME,
OP,
MMX   ) 

Definition at line 65 of file h264_qpel_mmx.c.

#define QPEL_H264_H16_XMM ( OPNAME,
OP,
MMX   ) 

Value:

static av_noinline void OPNAME ## h264_qpel16_h_lowpass_l2_ ## MMX(uint8_t *dst, uint8_t *src, uint8_t *src2, int dstStride, int src2Stride){\
    OPNAME ## h264_qpel8_h_lowpass_l2_ ## MMX(dst  , src  , src2  , dstStride, src2Stride);\
    OPNAME ## h264_qpel8_h_lowpass_l2_ ## MMX(dst+8, src+8, src2+8, dstStride, src2Stride);\
    src += 8*dstStride;\
    dst += 8*dstStride;\
    src2 += 8*src2Stride;\
    OPNAME ## h264_qpel8_h_lowpass_l2_ ## MMX(dst  , src  , src2  , dstStride, src2Stride);\
    OPNAME ## h264_qpel8_h_lowpass_l2_ ## MMX(dst+8, src+8, src2+8, dstStride, src2Stride);\
}

Definition at line 675 of file h264_qpel_mmx.c.

#define QPEL_H264_H_XMM ( OPNAME,
OP,
MMX   ) 

Definition at line 687 of file h264_qpel_mmx.c.

#define QPEL_H264_HV2_XMM ( OPNAME,
OP,
MMX   ) 

Definition at line 891 of file h264_qpel_mmx.c.

#define QPEL_H264_HV_XMM ( OPNAME,
OP,
MMX   ) 

Value:

static av_noinline void OPNAME ## h264_qpel8or16_hv_lowpass_ ## MMX(uint8_t *dst, int16_t *tmp, uint8_t *src, int dstStride, int tmpStride, int srcStride, int size){\
          put_h264_qpel8or16_hv1_lowpass_sse2(tmp, src, tmpStride, srcStride, size);\
    OPNAME ## h264_qpel8or16_hv2_lowpass_ ## MMX(dst, tmp, dstStride, tmpStride, size);\
}\
static void OPNAME ## h264_qpel8_hv_lowpass_ ## MMX(uint8_t *dst, int16_t *tmp, uint8_t *src, int dstStride, int tmpStride, int srcStride){\
    OPNAME ## h264_qpel8or16_hv_lowpass_ ## MMX(dst, tmp, src, dstStride, tmpStride, srcStride, 8);\
}\
static void OPNAME ## h264_qpel16_hv_lowpass_ ## MMX(uint8_t *dst, int16_t *tmp, uint8_t *src, int dstStride, int tmpStride, int srcStride){\
    OPNAME ## h264_qpel8or16_hv_lowpass_ ## MMX(dst, tmp, src, dstStride, tmpStride, srcStride, 16);\
}\

Definition at line 990 of file h264_qpel_mmx.c.

#define QPEL_H264_V_XMM ( OPNAME,
OP,
MMX   ) 

Definition at line 784 of file h264_qpel_mmx.c.

#define QPEL_H264HV ( A,
B,
C,
D,
E,
F,
OF   )     QPEL_H264HV_MM(A,B,C,D,E,F,OF,%%mm6,%%mm7,d,q)

Definition at line 60 of file h264_qpel_mmx.c.

#define QPEL_H264HV_MM ( A,
B,
C,
D,
E,
F,
OF,
T,
Z,
d,
 ) 

Value:

"mov"#q" "#C", "#T"         \n\t"\
        "mov"#d" (%0), "#F"         \n\t"\
        "paddw "#D", "#T"           \n\t"\
        "psllw $2, "#T"             \n\t"\
        "paddw "MANGLE(ff_pw_16)", "#A"\n\t"\
        "psubw "#B", "#T"           \n\t"\
        "psubw "#E", "#T"           \n\t"\
        "punpcklbw "#Z", "#F"       \n\t"\
        "pmullw "MANGLE(ff_pw_5)", "#T"\n\t"\
        "paddw "#F", "#A"           \n\t"\
        "add %2, %0                 \n\t"\
        "paddw "#A", "#T"           \n\t"\
        "mov"#q" "#T", "#OF"(%1)    \n\t"

Definition at line 44 of file h264_qpel_mmx.c.

#define QPEL_H264HV_XMM ( A,
B,
C,
D,
E,
F,
OF   )     QPEL_H264HV_MM(A,B,C,D,E,F,OF,%%xmm6,%%xmm7,q,dqa)

Definition at line 62 of file h264_qpel_mmx.c.

Referenced by put_h264_qpel8or16_hv1_lowpass_sse2().

#define QPEL_H264V ( A,
B,
C,
D,
E,
F,
OP   )     QPEL_H264V_MM(A,B,C,D,E,F,OP,%%mm6,%%mm7,d,q)

Definition at line 59 of file h264_qpel_mmx.c.

#define QPEL_H264V_MM ( A,
B,
C,
D,
E,
F,
OP,
T,
Z,
d,
 ) 

Value:

"mov"#q" "#C", "#T"         \n\t"\
        "mov"#d" (%0), "#F"         \n\t"\
        "paddw "#D", "#T"           \n\t"\
        "psllw $2, "#T"             \n\t"\
        "psubw "#B", "#T"           \n\t"\
        "psubw "#E", "#T"           \n\t"\
        "punpcklbw "#Z", "#F"       \n\t"\
        "pmullw "MANGLE(ff_pw_5)", "#T"\n\t"\
        "paddw "MANGLE(ff_pw_16)", "#A"\n\t"\
        "add %2, %0                 \n\t"\
        "paddw "#F", "#A"           \n\t"\
        "paddw "#A", "#T"           \n\t"\
        "psraw $5, "#T"             \n\t"\
        "packuswb "#T", "#T"        \n\t"\
        OP(T, (%1), A, d)\
        "add %3, %1                 \n\t"

Definition at line 26 of file h264_qpel_mmx.c.

#define QPEL_H264V_XMM ( A,
B,
C,
D,
E,
F,
OP   )     QPEL_H264V_MM(A,B,C,D,E,F,OP,%%xmm6,%%xmm7,q,dqa)

Definition at line 61 of file h264_qpel_mmx.c.


Function Documentation

static void avg_h264_qpel16_mc00_sse2 ( uint8_t *  dst,
uint8_t *  src,
int  stride 
) [static]

Definition at line 1042 of file h264_qpel_mmx.c.

static void put_h264_qpel16_mc00_sse2 ( uint8_t *  dst,
uint8_t *  src,
int  stride 
) [static]

Definition at line 1039 of file h264_qpel_mmx.c.

static av_always_inline void put_h264_qpel8or16_hv1_lowpass_sse2 ( int16_t *  tmp,
uint8_t *  src,
int  tmpStride,
int  srcStride,
int  size 
) [static]

Definition at line 840 of file h264_qpel_mmx.c.


Generated on Fri Oct 26 02:39:47 2012 for FFmpeg by  doxygen 1.5.8