]> git.sesse.net Git - ffmpeg/blobdiff - postproc/yuv2rgb_mlib.c
PSM support in MPEG-PS demuxer.
[ffmpeg] / postproc / yuv2rgb_mlib.c
index 142aa1deb0f467073447875e082bba16ddee146b..0b0fb95951199e43427d69fe296117c89dac4a46 100644 (file)
 #include "../libvo/img_format.h" //FIXME try to reduce dependency of such stuff
 #include "swscale.h"
 
-static void mlib_YUV2ARGB420_32(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, 
+static int mlib_YUV2ARGB420_32(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, 
              int srcSliceH, uint8_t* dst[], int dstStride[]){
-    uint8_t *src[3];
-    int srcStride[3];
-
-    sws_orderYUV(c->srcFormat, src, srcStride, srcParam, srcStrideParam);
     if(c->srcFormat == IMGFMT_422P){
        srcStride[1] *= 2;
        srcStride[2] *= 2;
@@ -46,16 +42,13 @@ static void mlib_YUV2ARGB420_32(SwsContext *c, uint8_t* srcParam[], int srcStrid
     
     assert(srcStride[1] == srcStride[2]);
  
-    mlib_VideoColorYUV2ARGB420(dst[0], src[0], src[1], src[2], c->dstW,
-                            c->dstH, dstStride[0], srcStride[0], srcStride[1]);
+    mlib_VideoColorYUV2ARGB420(dst[0]+srcSliceY*dstStride[0], src[0], src[1], src[2], c->dstW,
+                            srcSliceH, dstStride[0], srcStride[0], srcStride[1]);
+    return srcSliceH;
 }
 
-static void mlib_YUV2ABGR420_32(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, 
+static int mlib_YUV2ABGR420_32(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, 
              int srcSliceH, uint8_t* dst[], int dstStride[]){
-    uint8_t *src[3];
-    int srcStride[3];
-
-    sws_orderYUV(c->srcFormat, src, srcStride, srcParam, srcStrideParam);
     if(c->srcFormat == IMGFMT_422P){
        srcStride[1] *= 2;
        srcStride[2] *= 2;
@@ -63,16 +56,13 @@ static void mlib_YUV2ABGR420_32(SwsContext *c, uint8_t* srcParam[], int srcStrid
     
     assert(srcStride[1] == srcStride[2]);
  
-    mlib_VideoColorYUV2ABGR420(dst[0], src[0], src[1], src[2], c->dstW,
-                            c->dstH, dstStride[0], srcStride[0], srcStride[1]);
+    mlib_VideoColorYUV2ABGR420(dst[0]+srcSliceY*dstStride[0], src[0], src[1], src[2], c->dstW,
+                            srcSliceH, dstStride[0], srcStride[0], srcStride[1]);
+    return srcSliceH;
 }
 
-static void mlib_YUV2RGB420_24(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, 
+static int mlib_YUV2RGB420_24(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, 
              int srcSliceH, uint8_t* dst[], int dstStride[]){
-    uint8_t *src[3];
-    int srcStride[3];
-
-    sws_orderYUV(c->srcFormat, src, srcStride, srcParam, srcStrideParam);
     if(c->srcFormat == IMGFMT_422P){
        srcStride[1] *= 2;
        srcStride[2] *= 2;
@@ -80,8 +70,9 @@ static void mlib_YUV2RGB420_24(SwsContext *c, uint8_t* srcParam[], int srcStride
     
     assert(srcStride[1] == srcStride[2]);
  
-    mlib_VideoColorYUV2RGB420(dst[0], src[0], src[1], src[2], c->dstW,
-                            c->dstH, dstStride[0], srcStride[0], srcStride[1]);
+    mlib_VideoColorYUV2RGB420(dst[0]+srcSliceY*dstStride[0], src[0], src[1], src[2], c->dstW,
+                            srcSliceH, dstStride[0], srcStride[0], srcStride[1]);
+    return srcSliceH;
 }
 
 
@@ -90,7 +81,7 @@ SwsFunc yuv2rgb_init_mlib(SwsContext *c)
        switch(c->dstFormat){
        case IMGFMT_RGB24: return mlib_YUV2RGB420_24;
        case IMGFMT_RGB32: return mlib_YUV2ARGB420_32;
-       case IMGFMT_BGR32: return mlib_YUV2ARGB420_32;
+       case IMGFMT_BGR32: return mlib_YUV2ABGR420_32;
        default: return NULL;
        }
 }