[haiku-commits] r39033 - haiku/trunk/src/add-ons/media/plugins/ffmpeg

  • From: superstippi@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 20 Oct 2010 23:28:18 +0200 (CEST)

Author: stippi
Date: 2010-10-20 23:28:18 +0200 (Wed, 20 Oct 2010)
New Revision: 39033
Changeset: http://dev.haiku-os.org/changeset/39033

Modified:
   haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_conv_c.cpp
   haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_conv_c.h
   haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_conv_mmx.cpp
   haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_conv_mmx.h
   haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_util.cpp
Log:
 * Removed a big chunk of dead or outdated code. It was really
   hard to see the big picture and tell what actually works
   in the higher levels of the code.
 * Coding style cleanup.


Modified: haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_conv_c.cpp
===================================================================
--- haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_conv_c.cpp 2010-10-20 
21:25:43 UTC (rev 39032)
+++ haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_conv_c.cpp 2010-10-20 
21:28:18 UTC (rev 39033)
@@ -1,72 +1,57 @@
+#include "gfx_conv_c.h"
+
 #include <strings.h>
 #include <stdio.h>
-#include "gfx_conv_c.h"
 
-#define OPTIMIZED 1
 
-void gfx_conv_null_c(AVFrame *in, AVFrame *out, int width, int height)
+void
+gfx_conv_null(AVFrame *in, AVFrame *out, int width, int height)
 {
-       printf("[%d, %d, %d] -> [%d, %d, %d]\n", in->linesize[0], 
in->linesize[1], in->linesize[2], out->linesize[0], out->linesize[1], 
out->linesize[2]);
        memcpy(out->data[0], in->data[0], height * in->linesize[0]);
 }
 
 
-#if !OPTIMIZED
-// this one is for SVQ1 :^)
-// july 2002, mmu_man
-void gfx_conv_yuv410p_ycbcr422_c(AVFrame *in, AVFrame *out, int width, int 
height)
+void
+gfx_conv_yuv410p_ycbcr422_c(AVFrame *in, AVFrame *out, int width, int height)
 {
-       int i, j;
-       unsigned char *po, *pi, *pi2, *pi3;
-//     printf("[%ld, %ld, %ld] -> [%ld, %ld, %ld]\n", in->linesize[0], 
in->linesize[1], in->linesize[2], out->linesize[0], out->linesize[1], 
out->linesize[2]);
-//     memcpy(out->data[0], in->data[0], height * in->linesize[0]);
-       po = out->data[0];
-       pi = in->data[0];
-       pi2 = in->data[1];
-       pi3 = in->data[2];
-       for(i=0; i<height; i++) {
-               for(j=0;j<out->linesize[0];j++)
-//                     *(((long *)po)+j) = (long)(*(pi+j) + (*(pi2+j) << 8) + 
(*(pi+j+3) << 16) + (*(pi3+j) << 24));
-                       *(((long *)po)+j) = (long)(*(pi+2*j) + (*(pi2+(j >> 1)) 
<< 8) + (*(pi+2*j+1) << 16) + (*(pi3+j) << 24));
-               po += out->linesize[0];
-               pi += in->linesize[0];
-               if(i%4 == 1)
-                       pi2 += in->linesize[1];
-               else if (i%4 == 3)
-                       pi3 += in->linesize[2];
-       }
-}
-
-#else
-
-void gfx_conv_yuv410p_ycbcr422_c(AVFrame *in, AVFrame *out, int width, int 
height)
-{
        int i;
 //     bool toggle=false;
-       unsigned long *po, *po_eol;
+       unsigned long *po_eol;
        register unsigned long *p;
-       unsigned long *pi;
-       unsigned short *pi2, *pi3;
-       register unsigned long y1, y2;
-       register unsigned short u, v;
-       register unsigned long a, b, c, d;
-//     printf("[%ld, %ld, %ld] -> [%ld, %ld, %ld]\n", in->linesize[0], 
in->linesize[1], in->linesize[2], out->linesize[0], out->linesize[1], 
out->linesize[2]);
+       register unsigned long y1;
+       register unsigned long y2;
+       register unsigned short u;
+       register unsigned short v;
+       register unsigned long a;
+       register unsigned long b;
+       register unsigned long c;
+       register unsigned long d;
+//     printf("[%ld, %ld, %ld] -> [%ld, %ld, %ld]\n", in->linesize[0],
+//             in->linesize[1], in->linesize[2], out->linesize[0], 
out->linesize[1],
+//             out->linesize[2]);
 //     memcpy(out->data[0], in->data[0], height * in->linesize[0]);
-       po = (unsigned long *)out->data[0];
-       pi = (unsigned long *)in->data[0];
-       pi2 = (unsigned short *)in->data[1];
-       pi3 = (unsigned short *)in->data[2];
-       for(i=0; i<height; i++) {
-               for(p=po, po_eol = (unsigned long *)(((char 
*)po)+out->linesize[0]); p<po_eol;) {
-//                     *(((long *)po)+j) = (long)(*(pi+j) + (*(pi2+j) << 8) + 
(*(pi+j+3) << 16) + (*(pi3+j) << 24));
+       unsigned long *po = (unsigned long *)out->data[0];
+       unsigned long *pi = (unsigned long *)in->data[0];
+       unsigned short *pi2 = (unsigned short *)in->data[1];
+       unsigned short *pi3 = (unsigned short *)in->data[2];
+       for (i = 0; i < height; i++) {
+               for (p = po,
+                       po_eol = (unsigned long *)(((char *)po) + 
out->linesize[0]);
+                       p < po_eol;) {
+//                     *(((long *)po) + j) = (long)(*(pi + j) + (*(pi2 + j) << 
8) 
+//                             + (*(pi + j + 3) << 16) + (*(pi3 + j) << 24));
                        y1 = *pi++;
                        y2 = *pi++;
                        u = *pi2;
                        v = *pi3;
-                       a = (long)((y1 & 0x0FF) | ((u& 0x0FF) << 8) | ((y1 & 
0x0FF00) << 8) | ((v & 0x0FF) << 24));
-                       b = (long)(((y1 & 0x0FF0000) >> 16) | ((u& 0x0FF) << 8) 
| ((y1 & 0x0FF000000) >> 8) | ((v & 0x0FF) << 24));
-                       c = (long)(y2 & 0x0FF | ((u& 0x0FF00)) | ((y2 & 
0x0FF00) << 8) | ((v & 0x0FF00) << 16));
-                       d = (long)(((y2 & 0x0FF0000) >> 16) | ((u& 0x0FF00)) | 
((y2 & 0x0FF000000) >> 8) | ((v & 0x0FF00) << 16));
+                       a = (long)((y1 & 0x0FF) | ((u& 0x0FF) << 8) | ((y1 & 
0x0FF00) << 8)
+                               | ((v & 0x0FF) << 24));
+                       b = (long)(((y1 & 0x0FF0000) >> 16) | ((u& 0x0FF) << 8)
+                               | ((y1 & 0x0FF000000) >> 8) | ((v & 0x0FF) << 
24));
+                       c = (long)(y2 & 0x0FF | ((u& 0x0FF00)) | ((y2 & 
0x0FF00) << 8)
+                               | ((v & 0x0FF00) << 16));
+                       d = (long)(((y2 & 0x0FF0000) >> 16) | ((u& 0x0FF00))
+                               | ((y2 & 0x0FF000000) >> 8) | ((v & 0x0FF00) << 
16));
 //                     if (toggle) {
                                pi2++;
 //                     } else {
@@ -81,75 +66,62 @@
                }
                po = (unsigned long *)((char *)po + out->linesize[0]);
                pi = (unsigned long *)(in->data[0] + i * in->linesize[0]);
-               pi2 = (unsigned short *)(in->data[1] + ((i+2)/4) * 
in->linesize[1]);
-               pi3 = (unsigned short *)(in->data[2] + ((i+3)/4) * 
in->linesize[2]);
+               pi2 = (unsigned short *)(in->data[1] + ((i + 2) / 4)
+                       * in->linesize[1]);
+               pi3 = (unsigned short *)(in->data[2] + ((i + 3) / 4)
+                       * in->linesize[2]);
        }
 }
-#endif // OPTIMIZED
 
-// this one is for cyuv
-// may 2003, mmu_man
-// XXX: FIXME (== yuv410p atm)
-void gfx_conv_yuv411p_ycbcr422_c(AVFrame *in, AVFrame *out, int width, int 
height)
+
+void
+gfx_conv_yuv411p_ycbcr422_c(AVFrame *in, AVFrame *out, int width, int height)
 {
+       // this one is for cyuv
+       // TODO: (== yuv410p atm)
        gfx_conv_yuv410p_ycbcr422_c(in, out, width, height);
 }
 
 
-/*
- * DOES CRASH
-void gfx_conv_yuv420p_ycbcr422_c(AVFrame *in, AVFrame *out, int width, int 
height)
+void
+gfx_conv_yuv420p_ycbcr422_c(AVFrame *in, AVFrame *out, int width, int height)
 {
-       int i, j;
-       unsigned char *po, *pi, *pi2, *pi3;
-//     printf("[%ld, %ld, %ld] -> [%ld, %ld, %ld]\n", in->linesize[0], 
in->linesize[1], in->linesize[2], out->linesize[0], out->linesize[1], 
out->linesize[2]);
-//     memcpy(out->data[0], in->data[0], height * in->linesize[0]);
-       po = out->data[0];
-       pi = in->data[0];
-       pi2 = in->data[1];
-       pi3 = in->data[2];
-       for(i=0; i<height; i++) {
-               for(j=0;j<out->linesize[0];j++)
-//                     *(((long *)po)+j) = (long)(*(pi+j) + (*(pi2+j) << 8) + 
(*(pi+j+3) << 16) + (*(pi3+j) << 24));
-                       *(((long *)po)+j) = (long)(*(pi+2*j) + (*(pi2+j) << 8) 
+ (*(pi+2*j+1) << 16) + (*(pi3+j) << 24));
-               po += out->linesize[0];
-               pi += in->linesize[0];
-               if(i%2)
-                       pi2 += in->linesize[1];
-               else
-                       pi3 += in->linesize[2];
-       }
-}
-*/
-
-
-void gfx_conv_yuv420p_ycbcr422_c(AVFrame *in, AVFrame *out, int width, int 
height)
-{
-       int i;
-       unsigned long *po, *po_eol;
+       unsigned long *po_eol;
        register unsigned long *p;
-       unsigned long *pi, *pi2, *pi3;
-       register unsigned long y1, y2, u, v;
-       register unsigned long a, b, c, d;
-//     printf("[%ld, %ld, %ld] -> [%ld, %ld, %ld]\n", in->linesize[0], 
in->linesize[1], in->linesize[2], out->linesize[0], out->linesize[1], 
out->linesize[2]);
+       register unsigned long y1;
+       register unsigned long y2;
+       register unsigned long u;
+       register unsigned long v;
+       register unsigned long a;
+       register unsigned long b;
+       register unsigned long c;
+       register unsigned long d;
+//     printf("[%ld, %ld, %ld] -> [%ld, %ld, %ld]\n", in->linesize[0],
+//             in->linesize[1], in->linesize[2], out->linesize[0], 
out->linesize[1],
+//             out->linesize[2]);
 //     memcpy(out->data[0], in->data[0], height * in->linesize[0]);
-       po = (unsigned long *)out->data[0];
-       pi = (unsigned long *)in->data[0];
-       pi2 = (unsigned long *)in->data[1];
-       pi3 = (unsigned long *)in->data[2];
-       for(i=0; i<height; i++) {
-               for(p=po, po_eol = (unsigned long *)(((char 
*)po)+out->linesize[0]); p<po_eol;) {
-//                     *(((long *)po)+j) = (long)(*(pi+j) + (*(pi2+j) << 8) + 
(*(pi+j+3) << 16) + (*(pi3+j) << 24));
+       unsigned long *po = (unsigned long *)out->data[0];
+       unsigned long *pi = (unsigned long *)in->data[0];
+       unsigned long *pi2 = (unsigned long *)in->data[1];
+       unsigned long *pi3 = (unsigned long *)in->data[2];
+       for (int i = 0; i < height; i++) {
+               for (p = po, po_eol = (unsigned long *)(((char 
*)po)+out->linesize[0]);
+                       p < po_eol;) {
+//                     *(((long *)po) + j) = (long)(*(pi + j) + (*(pi2 + j) << 
8)
+//                             + (*(pi + j + 3) << 16) + (*(pi3 + j) << 24));
                        y1 = *pi++;
                        y2 = *pi++;
                        u = *pi2++;
                        v = *pi3++;
-                       a = (long)(y1 & 0x0FF | ((u& 0x0FF) << 8) | ((y1 & 
0x0FF00) << 8) | ((v & 0x0FF) << 24));
-                       b = (long)(((y1 & 0x0FF0000) >> 16) | ((u& 0x0FF00)) | 
((y1 & 0x0FF000000) >> 8) | ((v & 0x0FF00) << 16));
-                       c = (long)(y2 & 0x0FF | ((u& 0x0FF0000) >> 8) | ((y2 & 
0x0FF00) << 8) | ((v & 0x0FF0000) << 8));
-                       d = (long)(((y2 & 0x0FF0000) >> 16) | ((u& 0x0FF000000) 
>> 16) | ((y2 & 0x0FF000000) >> 8) | ((v & 0x0FF000000)));
+                       a = (long)(y1 & 0x0FF | ((u& 0x0FF) << 8) | ((y1 & 
0x0FF00) << 8)
+                               | ((v & 0x0FF) << 24));
+                       b = (long)(((y1 & 0x0FF0000) >> 16) | ((u& 0x0FF00))
+                               | ((y1 & 0x0FF000000) >> 8) | ((v & 0x0FF00) << 
16));
+                       c = (long)(y2 & 0x0FF | ((u& 0x0FF0000) >> 8)
+                               | ((y2 & 0x0FF00) << 8) | ((v & 0x0FF0000) << 
8));
+                       d = (long)(((y2 & 0x0FF0000) >> 16) | ((u& 0x0FF000000) 
>> 16)
+                               | ((y2 & 0x0FF000000) >> 8) | ((v & 
0x0FF000000)));
 
-
                        *(p++) = a;
                        *(p++) = b;
                        *(p++) = c;
@@ -157,145 +129,49 @@
                }
                po = (unsigned long *)((char *)po + out->linesize[0]);
                pi = (unsigned long *)(in->data[0] + i * in->linesize[0]);
-               pi2 = (unsigned long *)(in->data[1] + ((i+1)/2) * 
in->linesize[1]);
-               pi3 = (unsigned long *)(in->data[2] + ((i)/2) * 
in->linesize[2]);
+               pi2 = (unsigned long *)(in->data[1] + ((i + 1) / 2) * 
in->linesize[1]);
+               pi3 = (unsigned long *)(in->data[2] + (i / 2) * 
in->linesize[2]);
        }
 }
 
-void gfx_conv_yuv410p_rgb32_c(AVFrame *in, AVFrame *out, int width, int height)
+void
+gfx_conv_yuv410p_rgb32_c(AVFrame *in, AVFrame *out, int width, int height)
 {
-       gfx_conv_null_c(in, out, width, height);
+       gfx_conv_null(in, out, width, height);
 }
 
 
-void gfx_conv_yuv411p_rgb32_c(AVFrame *in, AVFrame *out, int width, int height)
+void
+gfx_conv_yuv411p_rgb32_c(AVFrame *in, AVFrame *out, int width, int height)
 {
-       gfx_conv_null_c(in, out, width, height);
+       gfx_conv_null(in, out, width, height);
 }
 
-// the lookup table based versio in gfx_conv_c_lookup.cpp is faster!
-#if 0
 
-// Macro to limit the signed a into range 0-255, first one seems to be fastest
-#define SATURATE(a) if (0xffffff00 & (uint32)a) { if (a < 0) a = 0; else a = 
255; }
-// #define SATURATE(a) if (0xffffff00 & (uint32)a) { if (0x80000000 & 
(uint32)a) a = 0; else a = 0xff; }
-// #define SATURATE(a) if (a < 0) a = 0; else if (a > 255) a = 255;
-// #define SATURATE(a) if (a < 0) a = 0; else if (a & 0xffffff00) a = 255;
-// #define SATURATE(a) if (a < 0) a = 0; if (a & 0xffffff00) a = 255;
-
-void gfx_conv_YCbCr420p_RGB32_c(AVFrame *in, AVFrame *out, int width, int 
height)
-{
-       uint32 poutInc = 2 * out->linesize[0];
-       uint32 *poutEven = (uint32 *)out->data[0];
-       uint32 *poutOdd = (uint32 *)(out->linesize[0] + (uint8 *)poutEven);
-       
-       uint32 pi1Inc = in->linesize[0];
-       uint32 pi1Inc2 = 2 * pi1Inc;
-       uint32 pi2Inc = in->linesize[1];
-       uint32 pi3Inc = in->linesize[2];
-       
-       uint8 *pi1Base = (uint8 *)in->data[0];
-       uint8 *pi2Base = (uint8 *)in->data[1];
-       uint8 *pi3Base = (uint8 *)in->data[2];
-
-       uint32 runs = height / 2;
-       for (uint32 i = 0; i < runs; i++) {
-
-               uint16 *pi1Even = (uint16 *) (i * pi1Inc2 + pi1Base);
-               uint16 *pi1Odd = (uint16 *) (pi1Inc + (uint8 *)pi1Even);
-               uint8 *pi2 = i * pi2Inc + pi2Base;
-               uint8 *pi3 = i *pi3Inc + pi3Base;
-
-               for (uint32 j = 0; j < (uint32)width; j+= 2) {
-
-                       int32 Cr_R, Cr_G, Cb_G, Cb_B;
-                       register int32 Y0, Y1, R, G, B;
-
-                       B = - 128 + *(pi2++);
-                       R = - 128 + *(pi3++);
-                       Cb_G = B * -12845;
-                       Cb_B = B * 66493;
-                       Cr_R = R * 52298;
-                       Cr_G = R * -26640;
-
-                       G = *(pi1Even++);
-                       Y0 = ((G & 0x000000ff) - 16) * 38142;
-                       Y1 = (((G & 0x0000ff00) >> 8) - 16) * 38142;
-                       
-                       R = (Y0 + Cr_R) >> 15;
-                       G = (Y0 + Cr_G + Cb_G) >> 15;
-                       B = (Y0 + Cb_B) >> 15;
-                       SATURATE(R);
-                       SATURATE(B);
-                       SATURATE(G);
-                       poutEven[j] = (R << 16) | (G << 8) | B;
-                       
-                       R = (Y1 + Cr_R) >> 15;
-                       G = (Y1 + Cr_G + Cb_G) >> 15;
-                       B = (Y1 + Cb_B) >> 15;
-                       SATURATE(R);
-                       SATURATE(B);
-                       SATURATE(G);
-                       poutEven[j + 1] = (R << 16) | (G << 8) | B;
-
-                       G = *(pi1Odd++);
-                       Y0 = ((G & 0x000000ff) - 16) * 38142;
-                       Y1 = (((G & 0x0000ff00) >> 8) - 16) * 38142;
-
-                       R = (Y0 + Cr_R) >> 15;
-                       G = (Y0 + Cr_G + Cb_G) >> 15;
-                       B = (Y0 + Cb_B) >> 15;
-                       SATURATE(R);
-                       SATURATE(B);
-                       SATURATE(G);
-                       poutOdd[j] = (R << 16) | (G << 8) | B;
-                       
-                       R = (Y1 + Cr_R) >> 15;
-                       G = (Y1 + Cr_G + Cb_G) >> 15;
-                       B = (Y1 + Cb_B) >> 15;
-                       SATURATE(R);
-                       SATURATE(B);
-                       SATURATE(G);
-                       poutOdd[j + 1] = (R << 16) | (G << 8) | B;
-               }
-               poutEven = (uint32 *)(poutInc + (uint8 *)poutEven);
-               poutOdd = (uint32 *)(poutInc + (uint8 *)poutOdd);
-       }
-       if (height & 1) {
-               // XXX special case for last line if height not multiple of 2 
goes here
-               memset((height - 1) * out->linesize[0] + (uint8 *)out->data[0], 
0, width * 4);
-       }
-}
-
-#endif
-
 #define CLIP(a) if (0xffffff00 & (uint32)a) { if (a < 0) a = 0; else a = 255; }
 
 // http://en.wikipedia.org/wiki/YUV
-uint32 YUV444TORGBA8888(uint8 y, uint8 u, uint8 v) 
+uint32
+YUV444TORGBA8888(uint8 y, uint8 u, uint8 v)
 {
-       uint32 pixel = 0;
-       int32 c, d, e;
-       int32 r,g,b;
-
-       c = y - 16;
-       d = u - 128;
-       e = v - 128;
+       int32 c = y - 16;
+       int32 d = u - 128;
+       int32 e = v - 128;
        
-       r = (298 * c + 409 * e + 128) >> 8;
-       g = (298 * c - 100 * d - 208 * e + 128) >> 8;
-       b = (298 * c + 516 * d + 128) >> 8;
+       int32 r = (298 * c + 409 * e + 128) >> 8;
+       int32 g = (298 * c - 100 * d - 208 * e + 128) >> 8;
+       int32 b = (298 * c + 516 * d + 128) >> 8;
 
        CLIP(r);
        CLIP(g);
        CLIP(b);
     
-       pixel = (r << 16) | (g << 8) | b;
-       
-       return pixel;
+       return (uint32)((r << 16) | (g << 8) | b);
 }
 
-void gfx_conv_YCbCr422_RGB32_c(AVFrame *in, AVFrame *out, int width, int 
height)
+
+void
+gfx_conv_YCbCr422_RGB32_c(AVFrame *in, AVFrame *out, int width, int height)
 {
        uint8 *ybase = (uint8 *)in->data[0];
        uint8 *ubase = (uint8 *)in->data[1];
@@ -310,8 +186,10 @@
                uv_index = 0;
 
                for (uint32 j=0; j < width; j+=2) {
-                       rgbbase[j]   = YUV444TORGBA8888(ybase[j]  
,ubase[uv_index],vbase[uv_index]);
-                       rgbbase[j+1] = 
YUV444TORGBA8888(ybase[j+1],ubase[uv_index],vbase[uv_index]);
+                       rgbbase[j] = YUV444TORGBA8888(ybase[j], ubase[uv_index],
+                               vbase[uv_index]);
+                       rgbbase[j + 1] = YUV444TORGBA8888(ybase[j + 1], 
ubase[uv_index],
+                               vbase[uv_index]);
        
                uv_index++;
                }
@@ -325,7 +203,8 @@
 
        if (height & 1) {
                // XXX special case for last line if height not multiple of 2 
goes here
-               memset((height - 1) * out->linesize[0] + (uint8 *)out->data[0], 
0, width * 4);
+               memset((height - 1) * out->linesize[0] + (uint8 *)out->data[0], 
0,
+                       width * 4);
        }
 
 }

Modified: haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_conv_c.h
===================================================================
--- haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_conv_c.h   2010-10-20 
21:25:43 UTC (rev 39032)
+++ haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_conv_c.h   2010-10-20 
21:28:18 UTC (rev 39033)
@@ -1,19 +1,33 @@
 #ifndef _GFX_CONV_C_H
 #define _GFX_CONV_C_H
 
-// BeOS and libavcodec bitmap formats
+
 #include <GraphicsDefs.h>
-#include "libavcodec/avcodec.h"
 
-void gfx_conv_null_c(AVFrame *in, AVFrame *out, int width, int height);
+extern "C" {
+       #include "libavcodec/avcodec.h"
+}
 
-void gfx_conv_yuv410p_ycbcr422_c(AVFrame *in, AVFrame *out, int width, int 
height);
-void gfx_conv_yuv411p_ycbcr422_c(AVFrame *in, AVFrame *out, int width, int 
height);
-void gfx_conv_yuv420p_ycbcr422_c(AVFrame *in, AVFrame *out, int width, int 
height);
 
-void gfx_conv_yuv410p_rgb32_c(AVFrame *in, AVFrame *out, int width, int 
height);
-void gfx_conv_yuv411p_rgb32_c(AVFrame *in, AVFrame *out, int width, int 
height);
-void gfx_conv_YCbCr420p_RGB32_c(AVFrame *in, AVFrame *out, int width, int 
height);
-void gfx_conv_YCbCr422_RGB32_c(AVFrame *in, AVFrame *out, int width, int 
height);
+void gfx_conv_null(AVFrame *in, AVFrame *out, int width, int height);
 
-#endif
+
+void gfx_conv_yuv410p_ycbcr422_c(AVFrame *in, AVFrame *out, int width,
+       int height);
+void gfx_conv_yuv411p_ycbcr422_c(AVFrame *in, AVFrame *out, int width,
+       int height);
+void gfx_conv_yuv420p_ycbcr422_c(AVFrame *in, AVFrame *out, int width,
+       int height);
+
+
+void gfx_conv_yuv410p_rgb32_c(AVFrame *in, AVFrame *out, int width,
+       int height);
+void gfx_conv_yuv411p_rgb32_c(AVFrame *in, AVFrame *out, int width,
+       int height);
+void gfx_conv_YCbCr420p_RGB32_c(AVFrame *in, AVFrame *out, int width,
+       int height);
+void gfx_conv_YCbCr422_RGB32_c(AVFrame *in, AVFrame *out, int width,
+       int height);
+
+
+#endif // _GFX_CONV_C_H

Modified: haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_conv_mmx.cpp
===================================================================
--- haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_conv_mmx.cpp       
2010-10-20 21:25:43 UTC (rev 39032)
+++ haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_conv_mmx.cpp       
2010-10-20 21:28:18 UTC (rev 39033)
@@ -1,143 +1,134 @@
 #include "gfx_conv_mmx.h"
 #include "gfx_conv_c.h"
 
-extern "C" void _Convert_YUV420P_RGBA32_SSE2(void *fromYPtr, void *fromUPtr, 
void *fromVPtr, void *toPtr, int width);
-extern "C" void _Convert_YUV422_RGBA32_SSE2(void *fromYPtr, void *toPtr, int 
width);
-extern "C" void _Convert_YUV420P_RGBA32_SSE(void *fromYPtr, void *fromUPtr, 
void *fromVPtr, void *toPtr, int width);
-extern "C" void _Convert_YUV422_RGBA32_SSE(void *fromYPtr, void *toPtr, int 
width);
 
-void gfx_conv_null_mmx(AVFrame *in, AVFrame *out, int width, int height) {
-       memcpy(out->data[0], in->data[0], height * in->linesize[0]);
-}
+extern "C" void _Convert_YUV420P_RGBA32_SSE2(void *fromYPtr, void *fromUPtr,
+       void *fromVPtr, void *toPtr, int width);
+extern "C" void _Convert_YUV422_RGBA32_SSE2(void *fromYPtr, void *toPtr,
+       int width);
+extern "C" void _Convert_YUV420P_RGBA32_SSE(void *fromYPtr, void *fromUPtr,
+       void *fromVPtr, void *toPtr, int width);
+extern "C" void _Convert_YUV422_RGBA32_SSE(void *fromYPtr, void *toPtr,
+       int width);
 
-void gfx_conv_yuv410p_ycbcr422_mmx(AVFrame *in, AVFrame *out, int width, int 
height)
-{
-//     img_convert((AVPicture *)out,PIX_FMT_YUV422P,(const AVPicture 
*)in,PIX_FMT_YUV410P,width,height);
-}
 
-void gfx_conv_yuv411p_ycbcr422_mmx(AVFrame *in, AVFrame *out, int width, int 
height)
+void
+gfx_conv_yuv420p_rgba32_sse2(AVFrame *in, AVFrame *out, int width, int height)
 {
-//     img_convert((AVPicture *)out,PIX_FMT_YUV422P,(const AVPicture 
*)in,PIX_FMT_YUV411P,width,height);
-}
+       // Planar YUV420
 
-void gfx_conv_yuv420p_ycbcr422_mmx(AVFrame *in, AVFrame *out, int width, int 
height)
-{
-//     img_convert((AVPicture *)out,PIX_FMT_YUV422P,(const AVPicture 
*)in,PIX_FMT_YUV420P,width,height);
-}
+       // in and out buffers must be aligned to 32 bytes,
+       // in should be as ffmpeg allocates it
+       if ((off_t)out->data[0] % 32 != 0) {
+               gfx_conv_YCbCr420p_RGB32_c(in, out, width, height);
+               return;
+       }
 
-void gfx_conv_yuv410p_rgb32_mmx(AVFrame *in, AVFrame *out, int width, int 
height)
-{
-//     img_convert((AVPicture *)out,PIX_FMT_RGB32,(const AVPicture 
*)in,PIX_FMT_YUV410P,width,height);
-}
+       uint8 *ybase = (uint8 *)in->data[0];
+       uint8 *ubase = (uint8 *)in->data[1];
+       uint8 *vbase = (uint8 *)in->data[2];
+       uint8 *rgbbase = (uint8 *)out->data[0];
+       
+       int yBaseInc = in->linesize[0];
+       int uBaseInc = in->linesize[1];
+       int vBaseInc = in->linesize[2];
+       int rgbBaseInc = out->linesize[0];
+       
+       for (int i=0;i<height;i+=2) {
+               // First Y row
+               _Convert_YUV420P_RGBA32_SSE2(ybase, ubase, vbase, rgbbase, 
width);
+               ybase += yBaseInc;
+               rgbbase += rgbBaseInc;
 
-void gfx_conv_yuv411p_rgb32_mmx(AVFrame *in, AVFrame *out, int width, int 
height)
-{
-//     img_convert((AVPicture *)out,PIX_FMT_RGB32,(const AVPicture 
*)in,PIX_FMT_YUV411P,width,height);
+               // Second Y row but same u and v row
+               _Convert_YUV420P_RGBA32_SSE2(ybase, ubase, vbase, rgbbase, 
width);
+               ybase += yBaseInc;
+               ubase += uBaseInc;
+               vbase += vBaseInc;
+               rgbbase += rgbBaseInc;
+       }
 }
 
-void gfx_conv_yuv420p_rgb32_mmx(AVFrame *in, AVFrame *out, int width, int 
height)
-{
-//     img_convert((AVPicture *)out,PIX_FMT_RGB32,(const AVPicture 
*)in,PIX_FMT_YUV420P,width,height);
-}
 
-// Planar YUV420
-void gfx_conv_yuv420p_rgba32_sse2(AVFrame *in, AVFrame *out, int width, int 
height)
+void
+gfx_conv_yuv422p_rgba32_sse2(AVFrame *in, AVFrame *out, int width, int height)
 {
-       // in and out buffers must be aligned to 32 bytes, in should be as 
ffmpeg allocates it
-       if ((off_t)out->data[0] % 32 == 0) {
-       
-               uint8 *ybase = (uint8 *)in->data[0];
-               uint8 *ubase = (uint8 *)in->data[1];
-               uint8 *vbase = (uint8 *)in->data[2];
-               uint8 *rgbbase = (uint8 *)out->data[0];
-               
-               int yBaseInc = in->linesize[0];
-               int uBaseInc = in->linesize[1];
-               int vBaseInc = in->linesize[2];
-               int rgbBaseInc = out->linesize[0];
-               
-               for (int i=0;i<height;i+=2) {
-                       _Convert_YUV420P_RGBA32_SSE2(ybase, ubase, vbase, 
rgbbase, width);      // First Y row
-                       ybase += yBaseInc;
-                       rgbbase += rgbBaseInc;
-               
-                       _Convert_YUV420P_RGBA32_SSE2(ybase, ubase, vbase, 
rgbbase, width);      // Second Y row but same u and v row
-                       ybase += yBaseInc;
-                       ubase += uBaseInc;
-                       vbase += vBaseInc;
-                       rgbbase += rgbBaseInc;
-               }
-       } else {
-               gfx_conv_YCbCr420p_RGB32_c(in, out, width, height);
-       }
-}
+       // Packed YUV422
 
-// Packed YUV422
-void gfx_conv_yuv422p_rgba32_sse2(AVFrame *in, AVFrame *out, int width, int 
height)
-{
-       // in and out buffers must be aligned to 32 bytes, in should be as 
ffmpeg allocates it
-       if ((off_t)out->data[0] % 32 == 0) {
+       // in and out buffers must be aligned to 32 bytes,
+       // in should be as ffmpeg allocates it
+       if ((off_t)out->data[0] % 32 != 0) {
+               gfx_conv_YCbCr422_RGB32_c(in, out, width, height);
+               return;
+       }
                
-               uint8 *ybase = (uint8 *)in->data[0];
-               uint8 *rgbbase = (uint8 *)out->data[0];
+       uint8 *ybase = (uint8 *)in->data[0];
+       uint8 *rgbbase = (uint8 *)out->data[0];
 
-               for (int i = 0; i <= height; i++) {
-                       _Convert_YUV422_RGBA32_SSE2(ybase, rgbbase, width);
-                       ybase += in->linesize[0];
-                       rgbbase += out->linesize[0];
-               }
-       } else {
-               gfx_conv_YCbCr422_RGB32_c(in, out, width, height);
+       for (int i = 0; i <= height; i++) {
+               _Convert_YUV422_RGBA32_SSE2(ybase, rgbbase, width);
+               ybase += in->linesize[0];
+               rgbbase += out->linesize[0];
        }
 }
 
-// Planar YUV420
-void gfx_conv_yuv420p_rgba32_sse(AVFrame *in, AVFrame *out, int width, int 
height)
+
+void
+gfx_conv_yuv420p_rgba32_sse(AVFrame *in, AVFrame *out, int width, int height)
 {
-       // in and out buffers must be aligned to 16 bytes, in should be as 
ffmpeg allocates it
-       if ((off_t)out->data[0] % 16 == 0) {
-       
-               uint8 *ybase = (uint8 *)in->data[0];
-               uint8 *ubase = (uint8 *)in->data[1];
-               uint8 *vbase = (uint8 *)in->data[2];
-               uint8 *rgbbase = (uint8 *)out->data[0];
-               
-               int yBaseInc = in->linesize[0];
-               int uBaseInc = in->linesize[1];
-               int vBaseInc = in->linesize[2];
-               int rgbBaseInc = out->linesize[0];
-               
-               for (int i=0;i<height;i+=2) {
-                       _Convert_YUV420P_RGBA32_SSE(ybase, ubase, vbase, 
rgbbase, width);       // First Y row
-                       ybase += yBaseInc;
-                       rgbbase += rgbBaseInc;
-               
-                       _Convert_YUV420P_RGBA32_SSE(ybase, ubase, vbase, 
rgbbase, width);       // Second Y row but same u and v row
-                       ybase += yBaseInc;
-                       ubase += uBaseInc;
-                       vbase += vBaseInc;
-                       rgbbase += rgbBaseInc;
-               }
-       } else {
+       // Planar YUV420
+
+       // in and out buffers must be aligned to 16 bytes,
+       // in should be as ffmpeg allocates it
+       if ((off_t)out->data[0] % 16 != 0) {
                gfx_conv_YCbCr420p_RGB32_c(in, out, width, height);
+               return;
        }
+       
+       uint8 *ybase = (uint8 *)in->data[0];
+       uint8 *ubase = (uint8 *)in->data[1];
+       uint8 *vbase = (uint8 *)in->data[2];
+       uint8 *rgbbase = (uint8 *)out->data[0];
+       
+       int yBaseInc = in->linesize[0];
+       int uBaseInc = in->linesize[1];
+       int vBaseInc = in->linesize[2];
+       int rgbBaseInc = out->linesize[0];
+       
+       for (int i=0;i<height;i+=2) {
+               // First Y row
+               _Convert_YUV420P_RGBA32_SSE(ybase, ubase, vbase, rgbbase, 
width);
+               ybase += yBaseInc;
+               rgbbase += rgbBaseInc;
+
+               // Second Y row but same u and v row
+               _Convert_YUV420P_RGBA32_SSE(ybase, ubase, vbase, rgbbase, 
width);
+               ybase += yBaseInc;
+               ubase += uBaseInc;
+               vbase += vBaseInc;
+               rgbbase += rgbBaseInc;
+       }
 }
 
-// Packed YUV422
-void gfx_conv_yuv422p_rgba32_sse(AVFrame *in, AVFrame *out, int width, int 
height)
+
+void
+gfx_conv_yuv422p_rgba32_sse(AVFrame *in, AVFrame *out, int width, int height)
 {
-       // in and out buffers must be aligned to 16 bytes, in should be as 
ffmpeg allocates it
-       if ((off_t)out->data[0] % 16 == 0) {
-               
-               uint8 *ybase = (uint8 *)in->data[0];
-               uint8 *rgbbase = (uint8 *)out->data[0];
+       // Packed YUV422
 
-               for (int i = 0; i <= height; i++) {
-                       _Convert_YUV422_RGBA32_SSE(ybase, rgbbase, width);
-                       ybase += in->linesize[0];
-                       rgbbase += out->linesize[0];
-               }
-       } else {
+       // in and out buffers must be aligned to 16 bytes,
+       // in should be as ffmpeg allocates it
+       if ((off_t)out->data[0] % 16 != 0) {
                gfx_conv_YCbCr422_RGB32_c(in, out, width, height);
+               return;
        }
+               
+       uint8 *ybase = (uint8 *)in->data[0];
+       uint8 *rgbbase = (uint8 *)out->data[0];
+
+       for (int i = 0; i <= height; i++) {
+               _Convert_YUV422_RGBA32_SSE(ybase, rgbbase, width);
+               ybase += in->linesize[0];
+               rgbbase += out->linesize[0];
+       }
 }

Modified: haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_conv_mmx.h
===================================================================
--- haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_conv_mmx.h 2010-10-20 
21:25:43 UTC (rev 39032)
+++ haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_conv_mmx.h 2010-10-20 
21:28:18 UTC (rev 39033)
@@ -7,12 +7,6 @@
 
 void gfx_conv_null_mmx(AVFrame *in, AVFrame *out, int width, int height);
 
-void gfx_conv_yuv410p_ycbcr422_mmx(AVFrame *in, AVFrame *out, int width, int 
height);
-void gfx_conv_yuv411p_ycbcr422_mmx(AVFrame *in, AVFrame *out, int width, int 
height);
-void gfx_conv_yuv420p_ycbcr422_mmx(AVFrame *in, AVFrame *out, int width, int 
height);
-
-void gfx_conv_yuv410p_rgb32_mmx(AVFrame *in, AVFrame *out, int width, int 
height);
-void gfx_conv_yuv411p_rgb32_mmx(AVFrame *in, AVFrame *out, int width, int 
height);
 void gfx_conv_yuv420p_rgba32_sse2(AVFrame *in, AVFrame *out, int width, int 
height);
 void gfx_conv_yuv422p_rgba32_sse2(AVFrame *in, AVFrame *out, int width, int 
height);
 void gfx_conv_yuv420p_rgba32_sse(AVFrame *in, AVFrame *out, int width, int 
height);

Modified: haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_util.cpp
===================================================================
--- haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_util.cpp   2010-10-20 
21:25:43 UTC (rev 39032)
+++ haiku/trunk/src/add-ons/media/plugins/ffmpeg/gfx_util.cpp   2010-10-20 
21:28:18 UTC (rev 39033)
@@ -30,23 +30,13 @@
        switch (colorSpace) {
                case B_RGB32:
                        if (pixelFormat == PIX_FMT_YUV410P) {
-//                             if (cpu.HasMMX()) {
-//                                     TRACE("resolve_colorspace: 
gfx_conv_yuv410p_rgb32_mmx\n");
-//                                     return gfx_conv_yuv410p_rgb32_mmx;
-//                             } else {
-                                       TRACE("resolve_colorspace: 
gfx_conv_yuv410p_rgb32_c\n");
-                                       return gfx_conv_yuv410p_rgb32_c;
-//                             }
+                               TRACE("resolve_colorspace: 
gfx_conv_yuv410p_rgb32_c\n");
+                               return gfx_conv_yuv410p_rgb32_c;
                        }
 
                        if (pixelFormat == PIX_FMT_YUV411P) {
-//                             if (cpu.HasMMX()) {
-//                                     TRACE("resolve_colorspace: 
gfx_conv_yuv411p_rgb32_mmx\n");
-//                                     return gfx_conv_yuv411p_rgb32_mmx;
-//                             } else {
-                                       TRACE("resolve_colorspace: 
gfx_conv_yuv411p_rgb32_c\n");
-                                       return gfx_conv_yuv411p_rgb32_c;
-//                             }
+                               TRACE("resolve_colorspace: 
gfx_conv_yuv411p_rgb32_c\n");
+                               return gfx_conv_yuv411p_rgb32_c;
                        }
 
                        if (pixelFormat == PIX_FMT_YUV420P 
@@ -90,56 +80,31 @@
                        return NULL;
 
                case B_YCbCr422:
-
                        if (pixelFormat == PIX_FMT_YUV410P) {
-//                             if (cpu.HasMMX()) {
-//                                     TRACE("resolve_colorspace: "
-//                                             
"gfx_conv_yuv410p_ycbcr422_mmx\n");
-//                                     return gfx_conv_yuv410p_ycbcr422_mmx;
-//                             } else {
-                                       TRACE("resolve_colorspace: 
gfx_conv_yuv410p_ycbcr422_c\n");
-                                       return gfx_conv_yuv410p_ycbcr422_c;
-//                             }
+                               TRACE("resolve_colorspace: 
gfx_conv_yuv410p_ycbcr422_c\n");
+                               return gfx_conv_yuv410p_ycbcr422_c;
                        }
 
                        if (pixelFormat == PIX_FMT_YUV411P) {
-//                             if (cpu.HasMMX()) {
-//                                     TRACE("resolve_colorspace: "
-//                                             
"gfx_conv_yuv411p_ycbcr422_mmx\n");
-//                                     return gfx_conv_yuv411p_ycbcr422_mmx;
-//                             } else {
-                                       TRACE("resolve_colorspace: 
gfx_conv_yuv411p_ycbcr422_c\n");
-                                       return gfx_conv_yuv411p_ycbcr422_c;
-//                             }
+                               TRACE("resolve_colorspace: 
gfx_conv_yuv411p_ycbcr422_c\n");
+                               return gfx_conv_yuv411p_ycbcr422_c;
                        }
 
                        if (pixelFormat == PIX_FMT_YUV420P
                                || pixelFormat == PIX_FMT_YUVJ420P) {
-//                             if (cpu.HasMMX()) {
-//                                     TRACE("resolve_colorspace: "
-//                                             
"gfx_conv_yuv420p_ycbcr422_mmx\n");
-//                                     return gfx_conv_yuv420p_ycbcr422_mmx;
-//                             } else {
-                                       TRACE("resolve_colorspace: 
gfx_conv_yuv420p_ycbcr422_c\n");
-                                       return gfx_conv_yuv420p_ycbcr422_c;
-//                             }
+                               TRACE("resolve_colorspace: 
gfx_conv_yuv420p_ycbcr422_c\n");
+                               return gfx_conv_yuv420p_ycbcr422_c;
                        }
 
                        if (pixelFormat == PIX_FMT_YUYV422) {
-//                             if (cpu.HasMMX()) {
-//                                     TRACE("resolve_colorspace: 
PIX_FMT_YUV422 => B_YCbCr422: "
-//                                             "gfx_conv_null_mmx\n");
-//                                     return gfx_conv_null_mmx;
-//                             } else {
-                                       TRACE("resolve_colorspace: 
PIX_FMT_YUV422 => B_YCbCr422: "
-                                               "gfx_conv_null_c\n");
-                                       return gfx_conv_null_c;
-//                             }
+                               TRACE("resolve_colorspace: PIX_FMT_YUV422 => 
B_YCbCr422: "
+                                       "gfx_conv_null\n");
+                               return gfx_conv_null;
                        }
 
                        TRACE("resolve_colorspace: %s => B_YCbCr422: NULL\n",
                                pixfmt_to_string(pixelFormat));
-                       return gfx_conv_null_c;
+                       return NULL;
 
                default:
                        TRACE("resolve_colorspace: default: NULL!!!\n");


Other related posts: