[Mplayer-cvslog] CVS: main/postproc swscale.c,1.72,1.73
Michael Niedermayer
michael at mplayer.dev.hu
Thu Feb 7 16:29:18 CET 2002
Update of /cvsroot/mplayer/main/postproc
In directory mplayer:/var/tmp.root/cvs-serv27247
Modified Files:
swscale.c
Log Message:
unscaled converters
BGR24 -> BGR32 & RGB24 -> RGB32
BGR32 -> BGR24 & RGB32 -> RGB24
Index: swscale.c
===================================================================
RCS file: /cvsroot/mplayer/main/postproc/swscale.c,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -r1.72 -r1.73
--- swscale.c 7 Feb 2002 03:39:30 -0000 1.72
+++ swscale.c 7 Feb 2002 15:29:15 -0000 1.73
@@ -25,6 +25,21 @@
YV12/I420/IYUV -> BGR15/BGR16/BGR24/BGR32
YV12/I420/IYUV -> YV12/I420/IYUV
YUY2/BGR15/BGR16/BGR24/BGR32/RGB24/RGB32 -> same format
+ BGR24 -> BGR32 & RGB24 -> RGB32
+ BGR32 -> BGR24 & RGB32 -> RGB24
+*/
+
+/*
+tested special converters
+ YV12/I420 -> BGR16
+ YV12 -> YV12
+
+untested special converters
+ YV12/I420/IYUV -> BGR15/BGR24/BGR32 (its the yuv2rgb stuff, so it should be ok)
+ YV12/I420/IYUV -> YV12/I420/IYUV
+ YUY2/BGR15/BGR16/BGR24/BGR32/RGB24/RGB32 -> same format
+ BGR24 -> BGR32 & RGB24 -> RGB32
+ BGR32 -> BGR24 & RGB32 -> RGB24
*/
#include <inttypes.h>
@@ -1134,6 +1149,47 @@
yuv2rgb( dst,src[0],src[2],src[1],c->srcW,srcSliceH,dstStride[0],srcStride[0],srcStride[1] );
}
+static void bgr24to32Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
+ int srcSliceH, uint8_t* dst[], int dstStride[]){
+
+ if(dstStride[0]*3==srcStride[0]*4)
+ rgb24to32(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*dstStride[0]>>2);
+ else
+ {
+ int i;
+ uint8_t *srcPtr= src[0];
+ uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY;
+
+ for(i=0; i<srcSliceH; i++)
+ {
+ rgb24to32(srcPtr, dstPtr, c->srcW);
+ srcPtr+= srcStride[0];
+ dstPtr+= dstStride[0];
+ }
+ }
+}
+
+static void bgr32to24Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
+ int srcSliceH, uint8_t* dst[], int dstStride[]){
+
+ if(dstStride[0]*4==srcStride[0]*3)
+ rgb32to24(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]>>2);
+ else
+ {
+ int i;
+ uint8_t *srcPtr= src[0];
+ uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY;
+
+ for(i=0; i<srcSliceH; i++)
+ {
+ rgb32to24(srcPtr, dstPtr, c->srcW);
+ srcPtr+= srcStride[0];
+ dstPtr+= dstStride[0];
+ }
+ }
+}
+
+
/* unscaled copy like stuff (assumes nearly identical formats) */
static void simpleCopy(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY,
int srcSliceH, uint8_t* dstParam[], int dstStride[]){
@@ -1294,7 +1350,7 @@
if(srcFilter->chrV!=NULL && srcFilter->chrV->length>1) usesFilter=1;
if(srcFilter->chrH!=NULL && srcFilter->chrH->length>1) usesFilter=1;
- /* special Cases */
+ /* unscaled special Cases */
if(srcW==dstW && srcH==dstH && !usesFilter)
{
/* yuv2bgr */
@@ -1314,6 +1370,30 @@
if(srcFormat == dstFormat || (isPlanarYUV(srcFormat) && isPlanarYUV(dstFormat)))
{
c->swScale= simpleCopy;
+
+ if(flags&SWS_PRINT_INFO)
+ printf("SwScaler: using unscaled %s -> %s special converter\n",
+ vo_format_name(srcFormat), vo_format_name(dstFormat));
+ return c;
+ }
+
+ /* bgr32to24 & rgb32to24*/
+ if((srcFormat==IMGFMT_BGR32 && dstFormat==IMGFMT_BGR24)
+ ||(srcFormat==IMGFMT_RGB32 && dstFormat==IMGFMT_RGB24))
+ {
+ c->swScale= bgr32to24Wrapper;
+
+ if(flags&SWS_PRINT_INFO)
+ printf("SwScaler: using unscaled %s -> %s special converter\n",
+ vo_format_name(srcFormat), vo_format_name(dstFormat));
+ return c;
+ }
+
+ /* bgr24to32 & rgb24to32*/
+ if((srcFormat==IMGFMT_BGR24 && dstFormat==IMGFMT_BGR32)
+ ||(srcFormat==IMGFMT_RGB24 && dstFormat==IMGFMT_RGB32))
+ {
+ c->swScale= bgr24to32Wrapper;
if(flags&SWS_PRINT_INFO)
printf("SwScaler: using unscaled %s -> %s special converter\n",
More information about the MPlayer-cvslog
mailing list