• Main Page
  • Related Pages
  • Modules
  • Data Structures
  • Files
  • Examples
  • File List
  • Globals

libswscale/mlib/yuv2rgb_mlib.c

Go to the documentation of this file.
00001 /*
00002  * software YUV to RGB converter using mediaLib
00003  *
00004  * Copyright (C) 2003 Michael Niedermayer <michaelni@gmx.at>
00005  *
00006  * This file is part of Libav.
00007  *
00008  * Libav is free software; you can redistribute it and/or
00009  * modify it under the terms of the GNU Lesser General Public
00010  * License as published by the Free Software Foundation; either
00011  * version 2.1 of the License, or (at your option) any later version.
00012  *
00013  * Libav is distributed in the hope that it will be useful,
00014  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00016  * Lesser General Public License for more details.
00017  *
00018  * You should have received a copy of the GNU Lesser General Public
00019  * License along with Libav; if not, write to the Free Software
00020  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
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 #include "libswscale/swscale_internal.h"
00033 
00034 static int mlib_YUV2ARGB420_32(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
00035                                int srcSliceH, uint8_t* dst[], int dstStride[])
00036 {
00037     if(c->srcFormat == PIX_FMT_YUV422P) {
00038         srcStride[1] *= 2;
00039         srcStride[2] *= 2;
00040     }
00041 
00042     assert(srcStride[1] == srcStride[2]);
00043 
00044     mlib_VideoColorYUV2ARGB420(dst[0]+srcSliceY*dstStride[0], src[0], src[1], src[2], c->dstW,
00045                                srcSliceH, dstStride[0], srcStride[0], srcStride[1]);
00046     return srcSliceH;
00047 }
00048 
00049 static int mlib_YUV2ABGR420_32(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
00050                                int srcSliceH, uint8_t* dst[], int dstStride[])
00051 {
00052     if(c->srcFormat == PIX_FMT_YUV422P) {
00053         srcStride[1] *= 2;
00054         srcStride[2] *= 2;
00055     }
00056 
00057     assert(srcStride[1] == srcStride[2]);
00058 
00059     mlib_VideoColorYUV2ABGR420(dst[0]+srcSliceY*dstStride[0], src[0], src[1], src[2], c->dstW,
00060                                srcSliceH, dstStride[0], srcStride[0], srcStride[1]);
00061     return srcSliceH;
00062 }
00063 
00064 static int mlib_YUV2RGB420_24(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
00065                               int srcSliceH, uint8_t* dst[], int dstStride[])
00066 {
00067     if(c->srcFormat == PIX_FMT_YUV422P) {
00068         srcStride[1] *= 2;
00069         srcStride[2] *= 2;
00070     }
00071 
00072     assert(srcStride[1] == srcStride[2]);
00073 
00074     mlib_VideoColorYUV2RGB420(dst[0]+srcSliceY*dstStride[0], src[0], src[1], src[2], c->dstW,
00075                               srcSliceH, dstStride[0], srcStride[0], srcStride[1]);
00076     return srcSliceH;
00077 }
00078 
00079 
00080 SwsFunc ff_yuv2rgb_init_mlib(SwsContext *c)
00081 {
00082     switch(c->dstFormat) {
00083     case PIX_FMT_RGB24: return mlib_YUV2RGB420_24;
00084     case PIX_FMT_BGR32: return mlib_YUV2ARGB420_32;
00085     case PIX_FMT_RGB32: return mlib_YUV2ABGR420_32;
00086     default: return NULL;
00087     }
00088 }
00089 
Generated on Thu Jan 24 2013 17:08:56 for Libav by doxygen 1.7.1