[FFmpeg-cvslog] r24013 - in trunk/libavcodec/x86: vp8dsp-init.c vp8dsp.asm

darkshikari subversion
Sat Jul 3 02:48:12 CEST 2010


Author: darkshikari
Date: Sat Jul  3 02:48:12 2010
New Revision: 24013

Log:
SSSE3 versions of vp8 width4 bilinear MC functions

Modified:
   trunk/libavcodec/x86/vp8dsp-init.c
   trunk/libavcodec/x86/vp8dsp.asm

Modified: trunk/libavcodec/x86/vp8dsp-init.c
==============================================================================
--- trunk/libavcodec/x86/vp8dsp-init.c	Sat Jul  3 01:39:02 2010	(r24012)
+++ trunk/libavcodec/x86/vp8dsp-init.c	Sat Jul  3 02:48:12 2010	(r24013)
@@ -85,6 +85,12 @@ extern void ff_put_vp8_bilinear4_h_mmxex
 extern void ff_put_vp8_bilinear8_h_sse2  (uint8_t *dst, int dststride,
                                           uint8_t *src, int srcstride,
                                           int height, int mx, int my);
+extern void ff_put_vp8_bilinear4_h_ssse3 (uint8_t *dst, int dststride,
+                                          uint8_t *src, int srcstride,
+                                          int height, int mx, int my);
+extern void ff_put_vp8_bilinear8_h_ssse3 (uint8_t *dst, int dststride,
+                                          uint8_t *src, int srcstride,
+                                          int height, int mx, int my);
 
 extern void ff_put_vp8_bilinear4_v_mmxext(uint8_t *dst, int dststride,
                                           uint8_t *src, int srcstride,
@@ -92,13 +98,14 @@ extern void ff_put_vp8_bilinear4_v_mmxex
 extern void ff_put_vp8_bilinear8_v_sse2  (uint8_t *dst, int dststride,
                                           uint8_t *src, int srcstride,
                                           int height, int mx, int my);
-extern void ff_put_vp8_bilinear8_v_ssse3 (uint8_t *dst, int dststride,
+extern void ff_put_vp8_bilinear4_v_ssse3 (uint8_t *dst, int dststride,
                                           uint8_t *src, int srcstride,
                                           int height, int mx, int my);
-extern void ff_put_vp8_bilinear8_h_ssse3 (uint8_t *dst, int dststride,
+extern void ff_put_vp8_bilinear8_v_ssse3 (uint8_t *dst, int dststride,
                                           uint8_t *src, int srcstride,
                                           int height, int mx, int my);
 
+
 extern void ff_put_vp8_pixels8_mmx (uint8_t *dst, int dststride,
                                     uint8_t *src, int srcstride,
                                     int height, int mx, int my);
@@ -207,6 +214,7 @@ HVBILIN(mmxext, 8,  8, 16)
 HVBILIN(mmxext, 8, 16, 16)
 HVBILIN(sse2,   8,  8, 16)
 HVBILIN(sse2,   8, 16, 16)
+HVBILIN(ssse3,  8,  4,  8)
 HVBILIN(ssse3,  8,  8, 16)
 HVBILIN(ssse3,  8, 16, 16)
 
@@ -284,6 +292,7 @@ av_cold void ff_vp8dsp_init_x86(VP8DSPCo
         VP8_MC_FUNC(2, 4, ssse3);
         VP8_BILINEAR_MC_FUNC(0, 16, ssse3);
         VP8_BILINEAR_MC_FUNC(1, 8, ssse3);
+        VP8_BILINEAR_MC_FUNC(2, 4, ssse3);
     }
 
     if (mm_flags & FF_MM_SSE4) {

Modified: trunk/libavcodec/x86/vp8dsp.asm
==============================================================================
--- trunk/libavcodec/x86/vp8dsp.asm	Sat Jul  3 01:39:02 2010	(r24012)
+++ trunk/libavcodec/x86/vp8dsp.asm	Sat Jul  3 02:48:12 2010	(r24013)
@@ -770,7 +770,8 @@ FILTER_BILINEAR mmxext, 4, 0
 INIT_XMM
 FILTER_BILINEAR   sse2, 8, 7
 
-cglobal put_vp8_bilinear8_v_ssse3, 7,7,5
+%macro FILTER_BILINEAR_SSSE3 1
+cglobal put_vp8_bilinear%1_v_ssse3, 7,7
     shl      r6d, 4
 %ifdef PIC
     lea      r11, [bilinear_filter_vb_m]
@@ -789,9 +790,16 @@ cglobal put_vp8_bilinear8_v_ssse3, 7,7,5
     psraw     m1, 2
     pavgw     m0, m4
     pavgw     m1, m4
+%if mmsize==8
+    packuswb  m0, m0
+    packuswb  m1, m1
+    movh [r0+r1*0], m0
+    movh [r0+r1*1], m1
+%else
     packuswb  m0, m1
     movh   [r0+r1*0], m0
     movhps [r0+r1*1], m0
+%endif
 
     lea       r0, [r0+r1*2]
     lea       r2, [r2+r3*2]
@@ -799,7 +807,7 @@ cglobal put_vp8_bilinear8_v_ssse3, 7,7,5
     jg .nextrow
     REP_RET
 
-cglobal put_vp8_bilinear8_h_ssse3, 7,7,5
+cglobal put_vp8_bilinear%1_h_ssse3, 7,7
     shl      r5d, 4
 %ifdef PIC
     lea      r11, [bilinear_filter_vb_m]
@@ -818,15 +826,28 @@ cglobal put_vp8_bilinear8_h_ssse3, 7,7,5
     psraw     m1, 2
     pavgw     m0, m4
     pavgw     m1, m4
+%if mmsize==8
+    packuswb  m0, m0
+    packuswb  m1, m1
+    movh [r0+r1*0], m0
+    movh [r0+r1*1], m1
+%else
     packuswb  m0, m1
     movh   [r0+r1*0], m0
     movhps [r0+r1*1], m0
+%endif
 
     lea       r0, [r0+r1*2]
     lea       r2, [r2+r3*2]
     sub       r4, 2
     jg .nextrow
     REP_RET
+%endmacro
+
+INIT_MMX
+FILTER_BILINEAR_SSSE3 4
+INIT_XMM
+FILTER_BILINEAR_SSSE3 8
 
 cglobal put_vp8_pixels8_mmx, 5,5
 .nextrow:



More information about the ffmpeg-cvslog mailing list