Mercurial > mplayer.hg
changeset 6966:2994bd73f35d
mmx optimized avg/film noise
author | michael |
---|---|
date | Sun, 11 Aug 2002 10:52:22 +0000 |
parents | f8ea0af8edb0 |
children | 0fa27966ac47 |
files | libmpcodecs/vf_noise.c |
diffstat | 1 files changed, 46 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/libmpcodecs/vf_noise.c Sun Aug 11 10:12:15 2002 +0000 +++ b/libmpcodecs/vf_noise.c Sun Aug 11 10:52:22 2002 +0000 @@ -192,6 +192,48 @@ /***************************************************************************/ +#ifdef HAVE_MMX +static inline void lineNoiseAvg_MMX(uint8_t *dst, uint8_t *src, int len, int8_t **shift){ + int mmx_len= len&(~7); + + asm volatile( + "movl %5, %%eax \n\t" + ".balign 16 \n\t" + "1: \n\t" + "movq (%1, %%eax), %%mm1 \n\t" + "movq (%0, %%eax), %%mm0 \n\t" + "paddb (%2, %%eax), %%mm1 \n\t" + "paddb (%3, %%eax), %%mm1 \n\t" + "movq %%mm0, %%mm2 \n\t" + "movq %%mm1, %%mm3 \n\t" + "punpcklbw %%mm0, %%mm0 \n\t" + "punpckhbw %%mm2, %%mm2 \n\t" + "punpcklbw %%mm1, %%mm1 \n\t" + "punpckhbw %%mm3, %%mm3 \n\t" + "pmulhw %%mm0, %%mm1 \n\t" + "pmulhw %%mm2, %%mm3 \n\t" + "paddw %%mm1, %%mm1 \n\t" + "paddw %%mm3, %%mm3 \n\t" + "paddw %%mm0, %%mm1 \n\t" + "paddw %%mm2, %%mm3 \n\t" + "psrlw $8, %%mm1 \n\t" + "psrlw $8, %%mm3 \n\t" + "packuswb %%mm3, %%mm1 \n\t" + "movq %%mm1, (%4, %%eax) \n\t" + "addl $8, %%eax \n\t" + " js 1b \n\t" + :: "r" (src+mmx_len), "r" (shift[0]+mmx_len), "r" (shift[1]+mmx_len), "r" (shift[2]+mmx_len), + "r" (dst+mmx_len), "g" (-mmx_len) + : "%eax" + ); + + if(mmx_len!=len){ + int8_t *shift2[3]={shift[0]+mmx_len, shift[1]+mmx_len, shift[2]+mmx_len}; + lineNoiseAvg_C(dst+mmx_len, src+mmx_len, len-mmx_len, shift2); + } +} +#endif + static inline void lineNoiseAvg_C(uint8_t *dst, uint8_t *src, int len, int8_t **shift){ int i; int8_t *src2= (int8_t*)src; @@ -381,8 +423,10 @@ #ifdef HAVE_MMX - if(gCpuCaps.hasMMX) lineNoise= lineNoise_MMX; -// if(gCpuCaps.hasMMX) lineNoiseAvg= lineNoiseAvg_MMX; + if(gCpuCaps.hasMMX){ + lineNoise= lineNoise_MMX; + lineNoiseAvg= lineNoiseAvg_MMX; + } #endif #ifdef HAVE_MMX2 if(gCpuCaps.hasMMX2) lineNoise= lineNoise_MMX2;