#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;
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;
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;
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;
}
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;
}
}