CVS: main/postproc swscale.c,1.75,1.76
Update of /cvsroot/mplayer/main/postproc In directory mplayer:/var/tmp.root/cvs-serv6334 Modified Files: swscale.c Log Message: unscaled BGR15->BGR16 a few bugfixes of the other unscaled converters Index: swscale.c =================================================================== RCS file: /cvsroot/mplayer/main/postproc/swscale.c,v retrieving revision 1.75 retrieving revision 1.76 diff -u -r1.75 -r1.76 --- swscale.c 8 Feb 2002 03:09:46 -0000 1.75 +++ swscale.c 8 Feb 2002 04:18:01 -0000 1.76 @@ -27,12 +27,14 @@ YUY2/BGR15/BGR16/BGR24/BGR32/RGB24/RGB32 -> same format BGR24 -> BGR32 & RGB24 -> RGB32 BGR32 -> BGR24 & RGB32 -> RGB24 + BGR15 -> BGR16 */ /* tested special converters YV12/I420 -> BGR16 YV12 -> YV12 + BGR15 -> BGR16 untested special converters YV12/I420/IYUV -> BGR15/BGR24/BGR32 (its the yuv2rgb stuff, so it should be ok) @@ -1153,7 +1155,7 @@ 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); + rgb24to32(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); else { int i; @@ -1162,7 +1164,7 @@ for(i=0; i<srcSliceH; i++) { - rgb24to32(srcPtr, dstPtr, c->srcW); + rgb24to32(srcPtr, dstPtr, c->srcW*3); srcPtr+= srcStride[0]; dstPtr+= dstStride[0]; } @@ -1173,7 +1175,7 @@ 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); + rgb32to24(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); else { int i; @@ -1182,7 +1184,27 @@ for(i=0; i<srcSliceH; i++) { - rgb32to24(srcPtr, dstPtr, c->srcW); + rgb32to24(srcPtr, dstPtr, c->srcW<<2); + srcPtr+= srcStride[0]; + dstPtr+= dstStride[0]; + } + } +} + +static void bgr15to16Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, + int srcSliceH, uint8_t* dst[], int dstStride[]){ + + if(dstStride[0]==srcStride[0]) + rgb15to16(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); + else + { + int i; + uint8_t *srcPtr= src[0]; + uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; + + for(i=0; i<srcSliceH; i++) + { + rgb15to16(srcPtr, dstPtr, c->srcW<<1); srcPtr+= srcStride[0]; dstPtr+= dstStride[0]; } @@ -1394,6 +1416,17 @@ ||(srcFormat==IMGFMT_RGB24 && dstFormat==IMGFMT_RGB32)) { c->swScale= bgr24to32Wrapper; + + if(flags&SWS_PRINT_INFO) + printf("SwScaler: using unscaled %s -> %s special converter\n", + vo_format_name(srcFormat), vo_format_name(dstFormat)); + return c; + } + + /* bgr15to16 */ + if(srcFormat==IMGFMT_BGR15 && dstFormat==IMGFMT_BGR16) + { + c->swScale= bgr15to16Wrapper; if(flags&SWS_PRINT_INFO) printf("SwScaler: using unscaled %s -> %s special converter\n",
participants (2)
-
Michael Niedermayer -
Nick Kurshev