[PATCH xf86-video-glint] No need for byteswapping in YV12 decoding on BE machines

Mark Kettenis mark.kettenis at xs4all.nl
Tue Dec 7 12:07:15 PST 2010


No need for byteswapping in YV12 decoding on BE machines

The hardware seems to do the proper thing already, so always use the same
code on both little-endian and big-endian machines.  Fixes xv YV12 on a
TechSource Raptor GFX aka Sun PGX32.

Signed-off-by: Mark Kettenis <kettenis at openbsd.org>
---
 src/pm2_video.c |   40 ++--------------------------------------
 1 files changed, 2 insertions(+), 38 deletions(-)

diff --git a/src/pm2_video.c b/src/pm2_video.c
index 0c47d16..e26e42a 100644
--- a/src/pm2_video.c
+++ b/src/pm2_video.c
@@ -1696,7 +1696,7 @@ Permedia2GetStill(ScrnInfoPtr pScrn,
 }
 
 static void
-CopyYV12LE(CARD8 *Y, CARD32 *dst, int width, int height, int pitch)
+CopyYV12(CARD8 *Y, CARD32 *dst, int width, int height, int pitch)
 {
     int Y_size = width * height;
     CARD8 *V = Y + Y_size;
@@ -1718,33 +1718,6 @@ CopyYV12LE(CARD8 *Y, CARD32 *dst, int width, int height, int pitch)
     }
 }
 
-#if X_BYTE_ORDER == X_BIG_ENDIAN
-
-static void
-CopyYV12BE(CARD8 *Y, CARD32 *dst, int width, int height, int pitch)
-{
-    int Y_size = width * height;
-    CARD8 *V = Y + Y_size;
-    CARD8 *U = V + (Y_size >> 2);
-    int pad = (pitch >> 2) - (width >> 1);
-    int x;
-
-    width >>= 1;
-
-    for (height >>= 1; height > 0; height--) {
-	for (x = 0; x < width; Y += 2, x++)
-	    *dst++ = V[x] + (Y[1] << 8) + (U[x] << 16) + (Y[0] << 24);
-	dst += pad;
-	for (x = 0; x < width; Y += 2, x++)
-	    *dst++ = V[x] + (Y[1] << 8) + (U[x] << 16) + (Y[0] << 24);
-	dst += pad;
-	U += width;
-	V += width;
-    }
-}
-
-#endif /* X_BYTE_ORDER == X_BIG_ENDIAN */
-
 static void
 CopyFlat(CARD8 *src, CARD8 *dst, int width, int height, int pitch)
 {
@@ -1841,17 +1814,8 @@ Permedia2PutImage(ScrnInfoPtr pScrn,
 
     switch (id) {
     case LE4CC('Y','V','1','2'):
-#if X_BYTE_ORDER == X_LITTLE_ENDIAN
-	CopyYV12LE(buf, (CARD32 *)((CARD8 *) pGlint->FbBase + pPPriv->BufferBase[0]),
+	CopyYV12(buf, (CARD32 *)((CARD8 *) pGlint->FbBase + pPPriv->BufferBase[0]),
 	    width, height, pPPriv->BufferStride);
-#else
-	if (pGlint->FBDev)
-	    CopyYV12LE(buf, (CARD32 *)((CARD8 *) pGlint->FbBase + pPPriv->BufferBase[0]),
-		width, height, pPPriv->BufferStride);
-	else
-	    CopyYV12BE(buf, (CARD32 *)((CARD8 *) pGlint->FbBase + pPPriv->BufferBase[0]),
-		width, height, pPPriv->BufferStride);
-#endif
 	PutYUV(pPPriv, pPPriv->BufferBase[0], FORMAT_YUYV, 1, 0);
 	break;
 
-- 
1.7.3.2



More information about the xorg-devel mailing list