00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <mlib_types.h>
00024 #include <mlib_status.h>
00025 #include <mlib_sys.h>
00026 #include <mlib_video.h>
00027 #include <inttypes.h>
00028 #include <stdlib.h>
00029 #include <assert.h>
00030
00031 #include "libswscale/swscale.h"
00032
00033 static int mlib_YUV2ARGB420_32(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
00034 int srcSliceH, uint8_t* dst[], int dstStride[])
00035 {
00036 if(c->srcFormat == PIX_FMT_YUV422P) {
00037 srcStride[1] *= 2;
00038 srcStride[2] *= 2;
00039 }
00040
00041 assert(srcStride[1] == srcStride[2]);
00042
00043 mlib_VideoColorYUV2ARGB420(dst[0]+srcSliceY*dstStride[0], src[0], src[1], src[2], c->dstW,
00044 srcSliceH, dstStride[0], srcStride[0], srcStride[1]);
00045 return srcSliceH;
00046 }
00047
00048 static int mlib_YUV2ABGR420_32(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
00049 int srcSliceH, uint8_t* dst[], int dstStride[])
00050 {
00051 if(c->srcFormat == PIX_FMT_YUV422P) {
00052 srcStride[1] *= 2;
00053 srcStride[2] *= 2;
00054 }
00055
00056 assert(srcStride[1] == srcStride[2]);
00057
00058 mlib_VideoColorYUV2ABGR420(dst[0]+srcSliceY*dstStride[0], src[0], src[1], src[2], c->dstW,
00059 srcSliceH, dstStride[0], srcStride[0], srcStride[1]);
00060 return srcSliceH;
00061 }
00062
00063 static int mlib_YUV2RGB420_24(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
00064 int srcSliceH, uint8_t* dst[], int dstStride[])
00065 {
00066 if(c->srcFormat == PIX_FMT_YUV422P) {
00067 srcStride[1] *= 2;
00068 srcStride[2] *= 2;
00069 }
00070
00071 assert(srcStride[1] == srcStride[2]);
00072
00073 mlib_VideoColorYUV2RGB420(dst[0]+srcSliceY*dstStride[0], src[0], src[1], src[2], c->dstW,
00074 srcSliceH, dstStride[0], srcStride[0], srcStride[1]);
00075 return srcSliceH;
00076 }
00077
00078
00079 SwsFunc ff_yuv2rgb_init_mlib(SwsContext *c)
00080 {
00081 switch(c->dstFormat) {
00082 case PIX_FMT_RGB24: return mlib_YUV2RGB420_24;
00083 case PIX_FMT_BGR32: return mlib_YUV2ARGB420_32;
00084 case PIX_FMT_RGB32: return mlib_YUV2ABGR420_32;
00085 default: return NULL;
00086 }
00087 }
00088