Add mmx/mmxext/ssse3 4x4 TM intra pred functions for vp8
Originally committed as revision 23875 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
@@ -494,3 +494,81 @@ cglobal pred4x4_dc_mmxext, 3,5
|
|||||||
mov [r0+r2*1], r3d
|
mov [r0+r2*1], r3d
|
||||||
mov [r0+r2*2], r3d
|
mov [r0+r2*2], r3d
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
; void pred4x4_tm_vp8_mmxext(uint8_t *src, const uint8_t *topright, int stride)
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%macro PRED4x4_TM_MMX 1
|
||||||
|
cglobal pred4x4_tm_vp8_%1, 3,6
|
||||||
|
sub r0, r2
|
||||||
|
pxor mm7, mm7
|
||||||
|
movd mm0, [r0]
|
||||||
|
punpcklbw mm0, mm7
|
||||||
|
movzx r4d, byte [r0-1]
|
||||||
|
mov r5d, 2
|
||||||
|
.loop:
|
||||||
|
movzx r1d, byte [r0+r2*1-1]
|
||||||
|
movzx r3d, byte [r0+r2*2-1]
|
||||||
|
sub r1d, r4d
|
||||||
|
sub r3d, r4d
|
||||||
|
movd mm2, r1d
|
||||||
|
movd mm4, r3d
|
||||||
|
%ifidn %1, mmx
|
||||||
|
punpcklwd mm2, mm2
|
||||||
|
punpcklwd mm4, mm4
|
||||||
|
punpckldq mm2, mm2
|
||||||
|
punpckldq mm4, mm4
|
||||||
|
%else
|
||||||
|
pshufw mm2, mm2, 0
|
||||||
|
pshufw mm4, mm4, 0
|
||||||
|
%endif
|
||||||
|
paddw mm2, mm0
|
||||||
|
paddw mm4, mm0
|
||||||
|
packuswb mm2, mm2
|
||||||
|
packuswb mm4, mm4
|
||||||
|
movd [r0+r2*1], mm2
|
||||||
|
movd [r0+r2*2], mm4
|
||||||
|
lea r0, [r0+r2*2]
|
||||||
|
dec r5d
|
||||||
|
jg .loop
|
||||||
|
REP_RET
|
||||||
|
%endmacro
|
||||||
|
|
||||||
|
PRED4x4_TM_MMX mmx
|
||||||
|
PRED4x4_TM_MMX mmxext
|
||||||
|
|
||||||
|
cglobal pred4x4_tm_vp8_ssse3, 3,3
|
||||||
|
sub r0, r2
|
||||||
|
movq mm6, [tm_shuf]
|
||||||
|
pxor mm1, mm1
|
||||||
|
movd mm0, [r0]
|
||||||
|
punpcklbw mm0, mm1
|
||||||
|
movd mm7, [r0-4]
|
||||||
|
pshufb mm7, mm6
|
||||||
|
lea r1, [r0+r2*2]
|
||||||
|
movd mm2, [r0+r2*1-4]
|
||||||
|
movd mm3, [r0+r2*2-4]
|
||||||
|
movd mm4, [r1+r2*1-4]
|
||||||
|
movd mm5, [r1+r2*2-4]
|
||||||
|
pshufb mm2, mm6
|
||||||
|
pshufb mm3, mm6
|
||||||
|
pshufb mm4, mm6
|
||||||
|
pshufb mm5, mm6
|
||||||
|
psubw mm2, mm7
|
||||||
|
psubw mm3, mm7
|
||||||
|
psubw mm4, mm7
|
||||||
|
psubw mm5, mm7
|
||||||
|
paddw mm2, mm0
|
||||||
|
paddw mm3, mm0
|
||||||
|
paddw mm4, mm0
|
||||||
|
paddw mm5, mm0
|
||||||
|
packuswb mm2, mm2
|
||||||
|
packuswb mm3, mm3
|
||||||
|
packuswb mm4, mm4
|
||||||
|
packuswb mm5, mm5
|
||||||
|
movd [r0+r2*1], mm2
|
||||||
|
movd [r0+r2*2], mm3
|
||||||
|
movd [r1+r2*1], mm4
|
||||||
|
movd [r1+r2*2], mm5
|
||||||
|
RET
|
||||||
|
@@ -2345,6 +2345,9 @@ void ff_pred8x8_tm_vp8_mmxext (uint8_t *src, int stride);
|
|||||||
void ff_pred8x8_tm_vp8_sse2 (uint8_t *src, int stride);
|
void ff_pred8x8_tm_vp8_sse2 (uint8_t *src, int stride);
|
||||||
void ff_pred8x8_tm_vp8_ssse3 (uint8_t *src, int stride);
|
void ff_pred8x8_tm_vp8_ssse3 (uint8_t *src, int stride);
|
||||||
void ff_pred4x4_dc_mmxext (uint8_t *src, const uint8_t *topright, int stride);
|
void ff_pred4x4_dc_mmxext (uint8_t *src, const uint8_t *topright, int stride);
|
||||||
|
void ff_pred4x4_tm_vp8_mmx (uint8_t *src, const uint8_t *topright, int stride);
|
||||||
|
void ff_pred4x4_tm_vp8_mmxext (uint8_t *src, const uint8_t *topright, int stride);
|
||||||
|
void ff_pred4x4_tm_vp8_ssse3 (uint8_t *src, const uint8_t *topright, int stride);
|
||||||
|
|
||||||
#if CONFIG_H264DSP
|
#if CONFIG_H264DSP
|
||||||
void ff_h264_pred_init_x86(H264PredContext *h, int codec_id)
|
void ff_h264_pred_init_x86(H264PredContext *h, int codec_id)
|
||||||
@@ -2358,6 +2361,7 @@ void ff_h264_pred_init_x86(H264PredContext *h, int codec_id)
|
|||||||
if (codec_id == CODEC_ID_VP8) {
|
if (codec_id == CODEC_ID_VP8) {
|
||||||
h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_tm_vp8_mmx;
|
h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_tm_vp8_mmx;
|
||||||
h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_tm_vp8_mmx;
|
h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_tm_vp8_mmx;
|
||||||
|
h->pred4x4 [TM_VP8_PRED ] = ff_pred4x4_tm_vp8_mmx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2370,6 +2374,7 @@ void ff_h264_pred_init_x86(H264PredContext *h, int codec_id)
|
|||||||
h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_tm_vp8_mmxext;
|
h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_tm_vp8_mmxext;
|
||||||
h->pred8x8 [DC_PRED8x8 ] = ff_pred8x8_dc_rv40_mmxext;
|
h->pred8x8 [DC_PRED8x8 ] = ff_pred8x8_dc_rv40_mmxext;
|
||||||
h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_tm_vp8_mmxext;
|
h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_tm_vp8_mmxext;
|
||||||
|
h->pred4x4 [TM_VP8_PRED ] = ff_pred4x4_tm_vp8_mmxext;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2392,6 +2397,7 @@ void ff_h264_pred_init_x86(H264PredContext *h, int codec_id)
|
|||||||
h->pred8x8 [HOR_PRED8x8 ] = ff_pred8x8_horizontal_ssse3;
|
h->pred8x8 [HOR_PRED8x8 ] = ff_pred8x8_horizontal_ssse3;
|
||||||
if (codec_id == CODEC_ID_VP8) {
|
if (codec_id == CODEC_ID_VP8) {
|
||||||
h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_tm_vp8_ssse3;
|
h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_tm_vp8_ssse3;
|
||||||
|
h->pred4x4 [TM_VP8_PRED ] = ff_pred4x4_tm_vp8_ssse3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user