# HG changeset patch # User michael # Date 1013141881 0 # Node ID 7f4d58df90acdfbf962136d60c1ed0c65435fff4 # Parent f01ed4dfa868cf9560532252196889c82c855a5b unscaled BGR15->BGR16 a few bugfixes of the other unscaled converters diff -r f01ed4dfa868 -r 7f4d58df90ac postproc/swscale.c --- a/postproc/swscale.c Fri Feb 08 03:09:46 2002 +0000 +++ b/postproc/swscale.c Fri Feb 08 04:18:01 2002 +0000 @@ -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; isrcW); + 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; isrcW); + 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; isrcW<<1); srcPtr+= srcStride[0]; dstPtr+= dstStride[0]; } @@ -1400,6 +1422,17 @@ 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", + vo_format_name(srcFormat), vo_format_name(dstFormat)); + return c; + } } if(cpuCaps.hasMMX2)