[Ffmpeg-devel] Re: [BUG] TSCC wrong colors on PPC

Mike Melanson mike
Mon Jan 9 02:16:03 CET 2006


Mike Melanson wrote:
> I'll put my money where my mouth is and try to fix this when I get home 

	Okay, try the attached patch. It seems to work on AMD64 with 16-bit 
samples. I have no 32-bit samples.

-- 
	-Mike Melanson



Index: libavcodec/tscc.c
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/tscc.c,v
retrieving revision 1.8
diff -u -r1.8 tscc.c
--- libavcodec/tscc.c   22 Dec 2005 01:10:09 -0000      1.8
+++ libavcodec/tscc.c   9 Jan 2006 01:08:38 -0000
@@ -77,6 +77,8 @@
      unsigned char *src = c->decomp_buf;
      unsigned char *output, *output_end;
      int p1, p2, line=c->height, pos=0, i;
+    uint16_t pix16;
+    uint32_t pix32;

      output = c->pic.data[0] + (c->height - 1) * c->pic.linesize[0];
      output_end = c->pic.data[0] + (c->height) * c->pic.linesize[0];
@@ -120,17 +122,17 @@
              switch(c->bpp){
              case  8: pix[0] = *src++;
                       break;
-            case 16: pix[0] = *src++;
-                     pix[1] = *src++;
+            case 16: pix16 = LE_16(src);
+                     src += 2;
+                     *(uint16_t*)pix = pix16;
                       break;
              case 24: pix[0] = *src++;
                       pix[1] = *src++;
                       pix[2] = *src++;
                       break;
-            case 32: pix[0] = *src++;
-                     pix[1] = *src++;
-                     pix[2] = *src++;
-                     pix[3] = *src++;
+            case 32: pix32 = LE_32(src);
+                     src += 4;
+                     *(uint32_t*)pix = pix32;
                       break;
              }
              if (output + p1 * (c->bpp / 8) > output_end)
@@ -139,17 +141,15 @@
                  switch(c->bpp){
                  case  8: *output++ = pix[0];
                           break;
-                case 16: *output++ = pix[0];
-                         *output++ = pix[1];
+                case 16: *(uint16_t*)output = pix16;
+                         output += 2;
                           break;
                  case 24: *output++ = pix[0];
                           *output++ = pix[1];
                           *output++ = pix[2];
                           break;
-                case 32: *output++ = pix[0];
-                         *output++ = pix[1];
-                         *output++ = pix[2];
-                         *output++ = pix[3];
+                case 32: *(uint32_t*)output = pix32;
+                         output += 4;
                           break;
                  }
              }





More information about the ffmpeg-devel mailing list