diff options
author | Jason Garrett-Glaser <darkshikari@gmail.com> | 2010-06-29 00:23:52 +0000 |
---|---|---|
committer | Jason Garrett-Glaser <darkshikari@gmail.com> | 2010-06-29 00:23:52 +0000 |
commit | bc14f04b2f04e00573fa3d0e3778dadd6fa4f466 (patch) | |
tree | 6e67c6f589c6b2aefa14c396e7fc79b11d41a6b8 /libavcodec/x86 | |
parent | fb9927ad7dca23d348fa4d915328e030c40f81de (diff) | |
download | ffmpeg-bc14f04b2f04e00573fa3d0e3778dadd6fa4f466.tar.gz |
MMXEXT version of vp8 4x4 vertical pred
Originally committed as revision 23876 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/x86')
-rw-r--r-- | libavcodec/x86/h264_intrapred.asm | 33 | ||||
-rw-r--r-- | libavcodec/x86/h264dsp_mmx.c | 2 |
2 files changed, 35 insertions, 0 deletions
diff --git a/libavcodec/x86/h264_intrapred.asm b/libavcodec/x86/h264_intrapred.asm index 2bd19f9ed4..d53b3d7f46 100644 --- a/libavcodec/x86/h264_intrapred.asm +++ b/libavcodec/x86/h264_intrapred.asm @@ -27,6 +27,7 @@ tm_shuf: times 8 db 0x03, 0x80 SECTION .text +cextern pb_1 cextern pb_3 ;----------------------------------------------------------------------------- @@ -572,3 +573,35 @@ cglobal pred4x4_tm_vp8_ssse3, 3,3 movd [r1+r2*1], mm4 movd [r1+r2*2], mm5 RET + +; dest, left, right, src, tmp +; output: %1 = (t[n-1] + t[n]*2 + t[n+1] + 2) >> 2 +%macro PRED4x4_LOWPASS 5 + mova %5, %2 + pavgb %2, %3 + pxor %3, %5 + mova %1, %4 + pand %3, [pb_1] + psubusb %2, %3 + pavgb %1, %2 +%endmacro + +;----------------------------------------------------------------------------- +; void pred4x4_vertical_vp8_mmxext(uint8_t *src, const uint8_t *topright, int stride) +;----------------------------------------------------------------------------- + +INIT_MMX +cglobal pred4x4_vertical_vp8_mmxext, 3,3 + sub r0, r2 + movd m1, [r0-1] + movd m0, [r0] + mova m2, m0 ;t0 t1 t2 t3 + punpckldq m0, [r1] ;t0 t1 t2 t3 t4 t5 t6 t7 + lea r1, [r0+r2*2] + psrlq m0, 8 ;t1 t2 t3 t4 + PRED4x4_LOWPASS m3, m1, m0, m2, m4 + movd [r0+r2*1], m3 + movd [r0+r2*2], m3 + movd [r1+r2*1], m3 + movd [r1+r2*2], m3 + RET diff --git a/libavcodec/x86/h264dsp_mmx.c b/libavcodec/x86/h264dsp_mmx.c index 60f81a64be..2b83c65596 100644 --- a/libavcodec/x86/h264dsp_mmx.c +++ b/libavcodec/x86/h264dsp_mmx.c @@ -2348,6 +2348,7 @@ void ff_pred4x4_dc_mmxext (uint8_t *src, const uint8_t *topright, int s 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); +void ff_pred4x4_vertical_vp8_mmxext(uint8_t *src, const uint8_t *topright, int stride); #if CONFIG_H264DSP void ff_h264_pred_init_x86(H264PredContext *h, int codec_id) @@ -2375,6 +2376,7 @@ void ff_h264_pred_init_x86(H264PredContext *h, int codec_id) h->pred8x8 [DC_PRED8x8 ] = ff_pred8x8_dc_rv40_mmxext; h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_tm_vp8_mmxext; h->pred4x4 [TM_VP8_PRED ] = ff_pred4x4_tm_vp8_mmxext; + h->pred4x4 [VERT_PRED ] = ff_pred4x4_vertical_vp8_mmxext; } } |