[Mplayer-cvslog] CVS: main/postproc rgb2rgb_template.c,1.57,1.58
Michael Niedermayer CVS
michael at mplayerhq.hu
Mon Feb 3 19:45:28 CET 2003
Update of /cvsroot/mplayer/main/postproc
In directory mail:/var/tmp.root/cvs-serv22353
Modified Files:
rgb2rgb_template.c
Log Message:
yuv9 -> yv12 bugfixes
Index: rgb2rgb_template.c
===================================================================
RCS file: /cvsroot/mplayer/main/postproc/rgb2rgb_template.c,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -r1.57 -r1.58
--- rgb2rgb_template.c 23 Oct 2002 23:52:57 -0000 1.57
+++ rgb2rgb_template.c 3 Feb 2003 18:45:25 -0000 1.58
@@ -1619,16 +1619,20 @@
{
int x,y;
+ dst[0]= src[0];
+
// first line
- for(x=0; x<srcWidth; x++){
- dst[2*x+0]=
- dst[2*x+1]= src[x];
+ for(x=0; x<srcWidth-1; x++){
+ dst[2*x+1]= (3*src[x] + src[x+1])>>2;
+ dst[2*x+2]= ( src[x] + 3*src[x+1])>>2;
}
- dst+= dstStride;
+ dst[2*srcWidth-1]= src[srcWidth-1];
+
+ dst+= dstStride;
for(y=1; y<srcHeight; y++){
#if defined (HAVE_MMX2) || defined (HAVE_3DNOW)
- const int mmxSize= srcWidth;
+ const int mmxSize= srcWidth&~15;
asm volatile(
"movl %4, %%eax \n\t"
"1: \n\t"
@@ -1636,67 +1640,76 @@
"movq (%1, %%eax), %%mm1 \n\t"
"movq 1(%0, %%eax), %%mm2 \n\t"
"movq 1(%1, %%eax), %%mm3 \n\t"
- "movq %%mm0, %%mm4 \n\t"
- "movq %%mm1, %%mm5 \n\t"
- PAVGB" %%mm3, %%mm0 \n\t"
- PAVGB" %%mm3, %%mm0 \n\t"
- PAVGB" %%mm4, %%mm3 \n\t"
- PAVGB" %%mm4, %%mm3 \n\t"
- PAVGB" %%mm2, %%mm1 \n\t"
- PAVGB" %%mm2, %%mm1 \n\t"
- PAVGB" %%mm5, %%mm2 \n\t"
- PAVGB" %%mm5, %%mm2 \n\t"
- "movq %%mm3, %%mm4 \n\t"
- "movq %%mm2, %%mm5 \n\t"
- "punpcklbw %%mm1, %%mm3 \n\t"
- "punpckhbw %%mm1, %%mm4 \n\t"
- "punpcklbw %%mm0, %%mm2 \n\t"
- "punpckhbw %%mm0, %%mm5 \n\t"
+ "movq -1(%0, %%eax), %%mm4 \n\t"
+ "movq -1(%1, %%eax), %%mm5 \n\t"
+ PAVGB" %%mm0, %%mm5 \n\t"
+ PAVGB" %%mm0, %%mm3 \n\t"
+ PAVGB" %%mm0, %%mm5 \n\t"
+ PAVGB" %%mm0, %%mm3 \n\t"
+ PAVGB" %%mm1, %%mm4 \n\t"
+ PAVGB" %%mm1, %%mm2 \n\t"
+ PAVGB" %%mm1, %%mm4 \n\t"
+ PAVGB" %%mm1, %%mm2 \n\t"
+ "movq %%mm5, %%mm7 \n\t"
+ "movq %%mm4, %%mm6 \n\t"
+ "punpcklbw %%mm3, %%mm5 \n\t"
+ "punpckhbw %%mm3, %%mm7 \n\t"
+ "punpcklbw %%mm2, %%mm4 \n\t"
+ "punpckhbw %%mm2, %%mm6 \n\t"
#if 1
- MOVNTQ" %%mm3, (%2, %%eax, 2) \n\t"
- MOVNTQ" %%mm4, 8(%2, %%eax, 2) \n\t"
- MOVNTQ" %%mm2, (%3, %%eax, 2) \n\t"
- MOVNTQ" %%mm5, 8(%3, %%eax, 2) \n\t"
+ MOVNTQ" %%mm5, (%2, %%eax, 2) \n\t"
+ MOVNTQ" %%mm7, 8(%2, %%eax, 2) \n\t"
+ MOVNTQ" %%mm4, (%3, %%eax, 2) \n\t"
+ MOVNTQ" %%mm6, 8(%3, %%eax, 2) \n\t"
#else
- "movq %%mm3, (%2, %%eax, 2) \n\t"
- "movq %%mm4, 8(%2, %%eax, 2) \n\t"
- "movq %%mm2, (%3, %%eax, 2) \n\t"
- "movq %%mm5, 8(%3, %%eax, 2) \n\t"
+ "movq %%mm5, (%2, %%eax, 2) \n\t"
+ "movq %%mm7, 8(%2, %%eax, 2) \n\t"
+ "movq %%mm4, (%3, %%eax, 2) \n\t"
+ "movq %%mm6, 8(%3, %%eax, 2) \n\t"
#endif
"addl $8, %%eax \n\t"
" js 1b \n\t"
- :: "r" (src + mmxSize-1), "r" (src + srcStride + mmxSize-1),
+ :: "r" (src + mmxSize ), "r" (src + srcStride + mmxSize ),
"r" (dst + mmxSize*2), "r" (dst + dstStride + mmxSize*2),
"g" (-mmxSize)
: "%eax"
);
- dst[0]=
- dst[dstStride]= src[0];
#else
- dst[0]=
- dst[dstStride]= src[0];
+ const int mmxSize=1;
+#endif
+ dst[0 ]= (3*src[0] + src[srcStride])>>2;
+ dst[dstStride]= ( src[0] + 3*src[srcStride])>>2;
- for(x=0; x<srcWidth-1; x++){
+ for(x=mmxSize-1; x<srcWidth-1; x++){
dst[2*x +1]= (3*src[x+0] + src[x+srcStride+1])>>2;
dst[2*x+dstStride+2]= ( src[x+0] + 3*src[x+srcStride+1])>>2;
dst[2*x+dstStride+1]= ( src[x+1] + 3*src[x+srcStride ])>>2;
dst[2*x +2]= (3*src[x+1] + src[x+srcStride ])>>2;
}
-#endif
- dst[srcWidth*2 -1]=
- dst[srcWidth*2 -1 + dstStride]= src[srcWidth-1];
+ dst[srcWidth*2 -1 ]= (3*src[srcWidth-1] + src[srcWidth-1 + srcStride])>>2;
+ dst[srcWidth*2 -1 + dstStride]= ( src[srcWidth-1] + 3*src[srcWidth-1 + srcStride])>>2;
dst+=dstStride*2;
src+=srcStride;
}
- src-=srcStride;
// last line
+#if 1
+ dst[0]= src[0];
+
+ for(x=0; x<srcWidth-1; x++){
+ dst[2*x+1]= (3*src[x] + src[x+1])>>2;
+ dst[2*x+2]= ( src[x] + 3*src[x+1])>>2;
+ }
+ dst[2*srcWidth-1]= src[srcWidth-1];
+#else
for(x=0; x<srcWidth; x++){
dst[2*x+0]=
dst[2*x+1]= src[x];
}
+#endif
+
#ifdef HAVE_MMX
asm volatile( EMMS" \n\t"
SFENCE" \n\t"
More information about the MPlayer-cvslog
mailing list