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 PAVGB   "pavgusb"
#define PAVGB   "pavgb"
#define LUMA_MC_OP(OP, NUM, DEPTH, TYPE, OPT)
#define LUMA_MC_ALL(DEPTH, TYPE, OPT)
#define LUMA_MC_816(DEPTH, TYPE, OPT)
#define QPEL16_OPMC(OP, MC, MMX)
#define QPEL16_OP(MC, MMX)
#define QPEL16(MMX)

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_h264_qpel16_h_lowpass_l2_sse2   avg_h264_qpel16_h_lowpass_l2_mmx2

Definition at line 1024 of file h264_qpel_mmx.c.

#define avg_h264_qpel16_v_lowpass_ssse3   avg_h264_qpel16_v_lowpass_sse2

Definition at line 1029 of file h264_qpel_mmx.c.

#define avg_h264_qpel8_h_lowpass_l2_sse2   avg_h264_qpel8_h_lowpass_l2_mmx2

Definition at line 1022 of file h264_qpel_mmx.c.

#define avg_h264_qpel8_mc00_sse2   avg_h264_qpel8_mc00_mmx2

Definition at line 1047 of file h264_qpel_mmx.c.

#define avg_h264_qpel8_v_lowpass_ssse3   avg_h264_qpel8_v_lowpass_sse2

Definition at line 1027 of file h264_qpel_mmx.c.

#define avg_h264_qpel8or16_hv2_lowpass_sse2   avg_h264_qpel8or16_hv2_lowpass_mmx2

Definition at line 1032 of file h264_qpel_mmx.c.

#define avg_pixels16_l2_shift5_sse2   avg_pixels16_l2_shift5_mmx2

Definition at line 1015 of file h264_qpel_mmx.c.

#define avg_pixels16_l2_shift5_ssse3   avg_pixels16_l2_shift5_mmx2

Definition at line 1019 of file h264_qpel_mmx.c.

#define avg_pixels16_l2_sse2   avg_pixels16_l2_mmx2

Definition at line 1006 of file h264_qpel_mmx.c.

#define avg_pixels16_l2_ssse3   avg_pixels16_l2_mmx2

Definition at line 1010 of file h264_qpel_mmx.c.

#define avg_pixels8_l2_shift5_sse2   avg_pixels8_l2_shift5_mmx2

Definition at line 1013 of file h264_qpel_mmx.c.

#define avg_pixels8_l2_shift5_ssse3   avg_pixels8_l2_shift5_mmx2

Definition at line 1017 of file h264_qpel_mmx.c.

#define avg_pixels8_l2_sse2   avg_pixels8_l2_mmx2

Definition at line 1004 of file h264_qpel_mmx.c.

#define avg_pixels8_l2_ssse3   avg_pixels8_l2_mmx2

Definition at line 1008 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 1034 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 1150 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 1158 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 1049 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 1054 of file h264_qpel_mmx.c.

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

Definition at line 1084 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 1067 of file h264_qpel_mmx.c.

#define LUMA_MC_816 ( DEPTH,
TYPE,
OPT   ) 

Value:

LUMA_MC_OP(put,  8, DEPTH, TYPE, OPT) \
    LUMA_MC_OP(avg,  8, DEPTH, TYPE, OPT) \
    LUMA_MC_OP(put, 16, DEPTH, TYPE, OPT) \
    LUMA_MC_OP(avg, 16, DEPTH, TYPE, OPT)

Definition at line 1209 of file h264_qpel_mmx.c.

#define LUMA_MC_ALL ( DEPTH,
TYPE,
OPT   ) 

Value:

LUMA_MC_OP(put,  4, DEPTH, TYPE, OPT) \
    LUMA_MC_OP(avg,  4, DEPTH, TYPE, OPT) \
    LUMA_MC_OP(put,  8, DEPTH, TYPE, OPT) \
    LUMA_MC_OP(avg,  8, DEPTH, TYPE, OPT) \
    LUMA_MC_OP(put, 16, DEPTH, TYPE, OPT) \
    LUMA_MC_OP(avg, 16, DEPTH, TYPE, OPT)

Definition at line 1201 of file h264_qpel_mmx.c.

#define LUMA_MC_OP ( OP,
NUM,
DEPTH,
TYPE,
OPT   ) 

Value:

void ff_ ## OP ## _h264_qpel ## NUM ## _ ## TYPE ## _ ## DEPTH ## _ ## OPT \
    (uint8_t *dst, uint8_t *src, int stride);

Definition at line 1197 of file h264_qpel_mmx.c.

#define PAVGB   "pavgb"

Definition at line 1168 of file h264_qpel_mmx.c.

#define PAVGB   "pavgusb"

Definition at line 1168 of file h264_qpel_mmx.c.

#define put_h264_qpel16_h_lowpass_l2_sse2   put_h264_qpel16_h_lowpass_l2_mmx2

Definition at line 1023 of file h264_qpel_mmx.c.

#define put_h264_qpel16_v_lowpass_ssse3   put_h264_qpel16_v_lowpass_sse2

Definition at line 1028 of file h264_qpel_mmx.c.

#define put_h264_qpel8_h_lowpass_l2_sse2   put_h264_qpel8_h_lowpass_l2_mmx2

Definition at line 1021 of file h264_qpel_mmx.c.

#define put_h264_qpel8_mc00_sse2   put_h264_qpel8_mc00_mmx2

Definition at line 1046 of file h264_qpel_mmx.c.

#define put_h264_qpel8_v_lowpass_ssse3   put_h264_qpel8_v_lowpass_sse2

Definition at line 1026 of file h264_qpel_mmx.c.

#define put_h264_qpel8or16_hv2_lowpass_sse2   put_h264_qpel8or16_hv2_lowpass_mmx2

Definition at line 1031 of file h264_qpel_mmx.c.

#define put_pixels16_l2_shift5_sse2   put_pixels16_l2_shift5_mmx2

Definition at line 1014 of file h264_qpel_mmx.c.

#define put_pixels16_l2_shift5_ssse3   put_pixels16_l2_shift5_mmx2

Definition at line 1018 of file h264_qpel_mmx.c.

#define put_pixels16_l2_sse2   put_pixels16_l2_mmx2

Definition at line 1005 of file h264_qpel_mmx.c.

#define put_pixels16_l2_ssse3   put_pixels16_l2_mmx2

Definition at line 1009 of file h264_qpel_mmx.c.

#define put_pixels8_l2_shift5_sse2   put_pixels8_l2_shift5_mmx2

Definition at line 1012 of file h264_qpel_mmx.c.

#define put_pixels8_l2_shift5_ssse3   put_pixels8_l2_shift5_mmx2

Definition at line 1016 of file h264_qpel_mmx.c.

#define put_pixels8_l2_sse2   put_pixels8_l2_mmx2

Definition at line 1003 of file h264_qpel_mmx.c.

#define put_pixels8_l2_ssse3   put_pixels8_l2_mmx2

Definition at line 1007 of file h264_qpel_mmx.c.

#define QPEL16 ( MMX   ) 

Value:

QPEL16_OP(mc00, MMX)\
QPEL16_OP(mc01, MMX)\
QPEL16_OP(mc02, MMX)\
QPEL16_OP(mc03, MMX)\
QPEL16_OP(mc10, MMX)\
QPEL16_OP(mc11, MMX)\
QPEL16_OP(mc12, MMX)\
QPEL16_OP(mc13, MMX)\
QPEL16_OP(mc20, MMX)\
QPEL16_OP(mc21, MMX)\
QPEL16_OP(mc22, MMX)\
QPEL16_OP(mc23, MMX)\
QPEL16_OP(mc30, MMX)\
QPEL16_OP(mc31, MMX)\
QPEL16_OP(mc32, MMX)\
QPEL16_OP(mc33, MMX)

Definition at line 1269 of file h264_qpel_mmx.c.

#define QPEL16_OP ( MC,
MMX   ) 

Value:

QPEL16_OPMC(put, MC, MMX)\
QPEL16_OPMC(avg, MC, MMX)

Definition at line 1265 of file h264_qpel_mmx.c.

#define QPEL16_OPMC ( OP,
MC,
MMX   ) 

Value:

void ff_ ## OP ## _h264_qpel16_ ## MC ## _10_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\
    ff_ ## OP ## _h264_qpel8_ ## MC ## _10_ ## MMX(dst   , src   , stride);\
    ff_ ## OP ## _h264_qpel8_ ## MC ## _10_ ## MMX(dst+16, src+16, stride);\
    src += 8*stride;\
    dst += 8*stride;\
    ff_ ## OP ## _h264_qpel8_ ## MC ## _10_ ## MMX(dst   , src   , stride);\
    ff_ ## OP ## _h264_qpel8_ ## MC ## _10_ ## MMX(dst+16, src+16, stride);\
}

Definition at line 1255 of file h264_qpel_mmx.c.

#define QPEL_H264 ( OPNAME,
OP,
MMX   ) 

Definition at line 66 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 676 of file h264_qpel_mmx.c.

#define QPEL_H264_H_XMM ( OPNAME,
OP,
MMX   ) 

Definition at line 688 of file h264_qpel_mmx.c.

#define QPEL_H264_HV2_XMM ( OPNAME,
OP,
MMX   ) 

Definition at line 892 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 991 of file h264_qpel_mmx.c.

#define QPEL_H264_V_XMM ( OPNAME,
OP,
MMX   ) 

Definition at line 785 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 61 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 45 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 63 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 60 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 27 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 62 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 1043 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 1040 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 841 of file h264_qpel_mmx.c.


Generated on Fri Oct 26 02:48:00 2012 for FFmpeg by  doxygen 1.5.8