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