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 "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 if(c->srcFormat == PIX_FMT_YUV422P){
00036 srcStride[1] *= 2;
00037 srcStride[2] *= 2;
00038 }
00039
00040 assert(srcStride[1] == srcStride[2]);
00041
00042 mlib_VideoColorYUV2ARGB420(dst[0]+srcSliceY*dstStride[0], src[0], src[1], src[2], c->dstW,
00043 srcSliceH, dstStride[0], srcStride[0], srcStride[1]);
00044 return srcSliceH;
00045 }
00046
00047 static int mlib_YUV2ABGR420_32(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
00048 int srcSliceH, uint8_t* dst[], int dstStride[]){
00049 if(c->srcFormat == PIX_FMT_YUV422P){
00050 srcStride[1] *= 2;
00051 srcStride[2] *= 2;
00052 }
00053
00054 assert(srcStride[1] == srcStride[2]);
00055
00056 mlib_VideoColorYUV2ABGR420(dst[0]+srcSliceY*dstStride[0], src[0], src[1], src[2], c->dstW,
00057 srcSliceH, dstStride[0], srcStride[0], srcStride[1]);
00058 return srcSliceH;
00059 }
00060
00061 static int mlib_YUV2RGB420_24(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
00062 int srcSliceH, uint8_t* dst[], int dstStride[]){
00063 if(c->srcFormat == PIX_FMT_YUV422P){
00064 srcStride[1] *= 2;
00065 srcStride[2] *= 2;
00066 }
00067
00068 assert(srcStride[1] == srcStride[2]);
00069
00070 mlib_VideoColorYUV2RGB420(dst[0]+srcSliceY*dstStride[0], src[0], src[1], src[2], c->dstW,
00071 srcSliceH, dstStride[0], srcStride[0], srcStride[1]);
00072 return srcSliceH;
00073 }
00074
00075
00076 SwsFunc sws_yuv2rgb_init_mlib(SwsContext *c)
00077 {
00078 switch(c->dstFormat){
00079 case PIX_FMT_RGB24: return mlib_YUV2RGB420_24;
00080 case PIX_FMT_BGR32: return mlib_YUV2ARGB420_32;
00081 case PIX_FMT_RGB32: return mlib_YUV2ABGR420_32;
00082 default: return NULL;
00083 }
00084 }
00085