| Index: patched-ffmpeg-mt/libswscale/swscale.c
|
| ===================================================================
|
| --- patched-ffmpeg-mt/libswscale/swscale.c (revision 41250)
|
| +++ patched-ffmpeg-mt/libswscale/swscale.c (working copy)
|
| @@ -27,7 +27,7 @@
|
| {BGR,RGB}{1,4,8,15,16} support dithering
|
|
|
| unscaled special converters (YV12=I420=IYUV, Y800=Y8)
|
| - YV12 -> {BGR,RGB}{1,4,8,15,16,24,32}
|
| + YV12 -> {BGR,RGB}{1,4,8,12,15,16,24,32}
|
| x -> x
|
| YUV9 -> YV12
|
| YUV9/YV12 -> Y800
|
| @@ -90,10 +90,8 @@
|
| (x)==PIX_FMT_PAL8 \
|
| || (x)==PIX_FMT_YUYV422 \
|
| || (x)==PIX_FMT_UYVY422 \
|
| - || isRGB(x) \
|
| - || isBGR(x) \
|
| + || isAnyRGB(x) \
|
| )
|
| -#define usePal(x) (av_pix_fmt_descriptors[x].flags & PIX_FMT_PAL)
|
|
|
| #define RGB2YUV_SHIFT 15
|
| #define BY ( (int)(0.114*219/255*(1<<RGB2YUV_SHIFT)+0.5))
|
| @@ -199,6 +197,13 @@
|
| { 0, 4, 0, 4, 0, 4, 0, 4, },
|
| };
|
|
|
| +DECLARE_ALIGNED(8, const uint8_t, dither_4x4_16)[4][8]={
|
| +{ 8, 4, 11, 7, 8, 4, 11, 7, },
|
| +{ 2, 14, 1, 13, 2, 14, 1, 13, },
|
| +{ 10, 6, 9, 5, 10, 6, 9, 5, },
|
| +{ 0, 12, 3, 15, 0, 12, 3, 15, },
|
| +};
|
| +
|
| DECLARE_ALIGNED(8, const uint8_t, dither_8x8_32)[8][8]={
|
| { 17, 9, 23, 15, 16, 8, 22, 14, },
|
| { 5, 29, 3, 27, 4, 28, 2, 26, },
|
| @@ -766,8 +771,10 @@
|
| dest+=6;\
|
| }\
|
| break;\
|
| - case PIX_FMT_RGB565:\
|
| - case PIX_FMT_BGR565:\
|
| + case PIX_FMT_RGB565BE:\
|
| + case PIX_FMT_RGB565LE:\
|
| + case PIX_FMT_BGR565BE:\
|
| + case PIX_FMT_BGR565LE:\
|
| {\
|
| const int dr1= dither_2x2_8[y&1 ][0];\
|
| const int dg1= dither_2x2_4[y&1 ][0];\
|
| @@ -781,8 +788,10 @@
|
| }\
|
| }\
|
| break;\
|
| - case PIX_FMT_RGB555:\
|
| - case PIX_FMT_BGR555:\
|
| + case PIX_FMT_RGB555BE:\
|
| + case PIX_FMT_RGB555LE:\
|
| + case PIX_FMT_BGR555BE:\
|
| + case PIX_FMT_BGR555LE:\
|
| {\
|
| const int dr1= dither_2x2_8[y&1 ][0];\
|
| const int dg1= dither_2x2_8[y&1 ][1];\
|
| @@ -1133,7 +1142,7 @@
|
| #endif
|
|
|
| #if ARCH_PPC
|
| -#if HAVE_ALTIVEC || CONFIG_RUNTIME_CPUDETECT
|
| +#if HAVE_ALTIVEC
|
| #define COMPILE_ALTIVEC
|
| #endif
|
| #endif //ARCH_PPC
|
| @@ -1236,7 +1245,7 @@
|
| }
|
|
|
| #else
|
| -#if ARCH_PPC
|
| +#if ARCH_PPC && COMPILE_ALTIVEC
|
| if (flags & SWS_CPU_CAPS_ALTIVEC) {
|
| sws_init_swScale_altivec(c);
|
| return swScale_altivec;
|
| @@ -1268,7 +1277,7 @@
|
| #endif //!CONFIG_RUNTIME_CPUDETECT
|
| }
|
|
|
| -static int PlanarToNV12Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| +static int planarToNv12Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| int srcSliceH, uint8_t* dstParam[], int dstStride[])
|
| {
|
| uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY;
|
| @@ -1294,7 +1303,7 @@
|
| return srcSliceH;
|
| }
|
|
|
| -static int PlanarToYuy2Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| +static int planarToYuy2Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| int srcSliceH, uint8_t* dstParam[], int dstStride[])
|
| {
|
| uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY;
|
| @@ -1304,7 +1313,7 @@
|
| return srcSliceH;
|
| }
|
|
|
| -static int PlanarToUyvyWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| +static int planarToUyvyWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| int srcSliceH, uint8_t* dstParam[], int dstStride[])
|
| {
|
| uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY;
|
| @@ -1314,7 +1323,7 @@
|
| return srcSliceH;
|
| }
|
|
|
| -static int YUV422PToYuy2Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| +static int yuv422pToYuy2Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| int srcSliceH, uint8_t* dstParam[], int dstStride[])
|
| {
|
| uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY;
|
| @@ -1324,7 +1333,7 @@
|
| return srcSliceH;
|
| }
|
|
|
| -static int YUV422PToUyvyWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| +static int yuv422pToUyvyWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| int srcSliceH, uint8_t* dstParam[], int dstStride[])
|
| {
|
| uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY;
|
| @@ -1334,7 +1343,7 @@
|
| return srcSliceH;
|
| }
|
|
|
| -static int YUYV2YUV420Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| +static int yuyvToYuv420Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| int srcSliceH, uint8_t* dstParam[], int dstStride[])
|
| {
|
| uint8_t *ydst=dstParam[0] + dstStride[0]*srcSliceY;
|
| @@ -1349,7 +1358,7 @@
|
| return srcSliceH;
|
| }
|
|
|
| -static int YUYV2YUV422Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| +static int yuyvToYuv422Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| int srcSliceH, uint8_t* dstParam[], int dstStride[])
|
| {
|
| uint8_t *ydst=dstParam[0] + dstStride[0]*srcSliceY;
|
| @@ -1361,7 +1370,7 @@
|
| return srcSliceH;
|
| }
|
|
|
| -static int UYVY2YUV420Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| +static int uyvyToYuv420Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| int srcSliceH, uint8_t* dstParam[], int dstStride[])
|
| {
|
| uint8_t *ydst=dstParam[0] + dstStride[0]*srcSliceY;
|
| @@ -1376,7 +1385,7 @@
|
| return srcSliceH;
|
| }
|
|
|
| -static int UYVY2YUV422Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| +static int uyvyToYuv422Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| int srcSliceH, uint8_t* dstParam[], int dstStride[])
|
| {
|
| uint8_t *ydst=dstParam[0] + dstStride[0]*srcSliceY;
|
| @@ -1388,8 +1397,8 @@
|
| return srcSliceH;
|
| }
|
|
|
| -static int pal2rgbWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| - int srcSliceH, uint8_t* dst[], int dstStride[])
|
| +static int palToRgbWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| + int srcSliceH, uint8_t* dst[], int dstStride[])
|
| {
|
| const enum PixelFormat srcFormat= c->srcFormat;
|
| const enum PixelFormat dstFormat= c->dstFormat;
|
| @@ -1424,9 +1433,16 @@
|
| return srcSliceH;
|
| }
|
|
|
| +#define isRGBA32(x) ( \
|
| + (x) == PIX_FMT_ARGB \
|
| + || (x) == PIX_FMT_RGBA \
|
| + || (x) == PIX_FMT_BGRA \
|
| + || (x) == PIX_FMT_ABGR \
|
| + )
|
| +
|
| /* {RGB,BGR}{15,16,24,32,32_1} -> {RGB,BGR}{15,16,24,32} */
|
| -static int rgb2rgbWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| - int srcSliceH, uint8_t* dst[], int dstStride[])
|
| +static int rgbToRgbWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| + int srcSliceH, uint8_t* dst[], int dstStride[])
|
| {
|
| const enum PixelFormat srcFormat= c->srcFormat;
|
| const enum PixelFormat dstFormat= c->dstFormat;
|
| @@ -1436,9 +1452,25 @@
|
| const int dstId= c->dstFormatBpp >> 2;
|
| void (*conv)(const uint8_t *src, uint8_t *dst, long src_size)=NULL;
|
|
|
| +#define CONV_IS(src, dst) (srcFormat == PIX_FMT_##src && dstFormat == PIX_FMT_##dst)
|
| +
|
| + if (isRGBA32(srcFormat) && isRGBA32(dstFormat)) {
|
| + if ( CONV_IS(ABGR, RGBA)
|
| + || CONV_IS(ARGB, BGRA)
|
| + || CONV_IS(BGRA, ARGB)
|
| + || CONV_IS(RGBA, ABGR)) conv = shuffle_bytes_3210;
|
| + else if (CONV_IS(ABGR, ARGB)
|
| + || CONV_IS(ARGB, ABGR)) conv = shuffle_bytes_0321;
|
| + else if (CONV_IS(ABGR, BGRA)
|
| + || CONV_IS(ARGB, RGBA)) conv = shuffle_bytes_1230;
|
| + else if (CONV_IS(BGRA, RGBA)
|
| + || CONV_IS(RGBA, BGRA)) conv = shuffle_bytes_2103;
|
| + else if (CONV_IS(BGRA, ABGR)
|
| + || CONV_IS(RGBA, ARGB)) conv = shuffle_bytes_3012;
|
| + } else
|
| /* BGR -> BGR */
|
| - if ( (isBGR(srcFormat) && isBGR(dstFormat))
|
| - || (isRGB(srcFormat) && isRGB(dstFormat))) {
|
| + if ( (isBGRinInt(srcFormat) && isBGRinInt(dstFormat))
|
| + || (isRGBinInt(srcFormat) && isRGBinInt(dstFormat))) {
|
| switch(srcId | (dstId<<4)) {
|
| case 0x34: conv= rgb16to15; break;
|
| case 0x36: conv= rgb24to15; break;
|
| @@ -1453,8 +1485,8 @@
|
| case 0x84: conv= rgb16to32; break;
|
| case 0x86: conv= rgb24to32; break;
|
| }
|
| - } else if ( (isBGR(srcFormat) && isRGB(dstFormat))
|
| - || (isRGB(srcFormat) && isBGR(dstFormat))) {
|
| + } else if ( (isBGRinInt(srcFormat) && isRGBinInt(dstFormat))
|
| + || (isRGBinInt(srcFormat) && isBGRinInt(dstFormat))) {
|
| switch(srcId | (dstId<<4)) {
|
| case 0x33: conv= rgb15tobgr15; break;
|
| case 0x34: conv= rgb16tobgr15; break;
|
| @@ -1471,7 +1503,6 @@
|
| case 0x83: conv= rgb15tobgr32; break;
|
| case 0x84: conv= rgb16tobgr32; break;
|
| case 0x86: conv= rgb24tobgr32; break;
|
| - case 0x88: conv= rgb32tobgr32; break;
|
| }
|
| }
|
|
|
| @@ -1480,14 +1511,18 @@
|
| sws_format_name(srcFormat), sws_format_name(dstFormat));
|
| } else {
|
| const uint8_t *srcPtr= src[0];
|
| - if(srcFormat == PIX_FMT_RGB32_1 || srcFormat == PIX_FMT_BGR32_1)
|
| + uint8_t *dstPtr= dst[0];
|
| + if ((srcFormat == PIX_FMT_RGB32_1 || srcFormat == PIX_FMT_BGR32_1) && !isRGBA32(dstFormat))
|
| srcPtr += ALT32_CORR;
|
|
|
| + if ((dstFormat == PIX_FMT_RGB32_1 || dstFormat == PIX_FMT_BGR32_1) && !isRGBA32(srcFormat))
|
| + dstPtr += ALT32_CORR;
|
| +
|
| if (dstStride[0]*srcBpp == srcStride[0]*dstBpp && srcStride[0] > 0)
|
| - conv(srcPtr, dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]);
|
| + conv(srcPtr, dstPtr + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]);
|
| else {
|
| int i;
|
| - uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY;
|
| + dstPtr += dstStride[0]*srcSliceY;
|
|
|
| for (i=0; i<srcSliceH; i++) {
|
| conv(srcPtr, dstPtr, c->srcW*srcBpp);
|
| @@ -1499,7 +1534,7 @@
|
| return srcSliceH;
|
| }
|
|
|
| -static int bgr24toyv12Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| +static int bgr24ToYv12Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| int srcSliceH, uint8_t* dst[], int dstStride[])
|
| {
|
| rgb24toyv12(
|
| @@ -1514,7 +1549,7 @@
|
| return srcSliceH;
|
| }
|
|
|
| -static int yvu9toyv12Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| +static int yvu9ToYv12Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| int srcSliceH, uint8_t* dst[], int dstStride[])
|
| {
|
| int i;
|
| @@ -1550,8 +1585,8 @@
|
| }
|
|
|
| /* unscaled copy like stuff (assumes nearly identical formats) */
|
| -static int packedCopy(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| - int srcSliceH, uint8_t* dst[], int dstStride[])
|
| +static int packedCopyWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| + int srcSliceH, uint8_t* dst[], int dstStride[])
|
| {
|
| if (dstStride[0]==srcStride[0] && srcStride[0] > 0)
|
| memcpy(dst[0] + dstStride[0]*srcSliceY, src[0], srcSliceH*dstStride[0]);
|
| @@ -1575,8 +1610,8 @@
|
| return srcSliceH;
|
| }
|
|
|
| -static int planarCopy(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| - int srcSliceH, uint8_t* dst[], int dstStride[])
|
| +static int planarCopyWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY,
|
| + int srcSliceH, uint8_t* dst[], int dstStride[])
|
| {
|
| int plane, i, j;
|
| for (plane=0; plane<4; plane++) {
|
| @@ -1660,31 +1695,31 @@
|
| const int dstH = c->dstH;
|
| int needsDither;
|
|
|
| - needsDither= (isBGR(dstFormat) || isRGB(dstFormat))
|
| + needsDither= isAnyRGB(dstFormat)
|
| && c->dstFormatBpp < 24
|
| - && (c->dstFormatBpp < c->srcFormatBpp || (!(isRGB(srcFormat) || isBGR(srcFormat))));
|
| + && (c->dstFormatBpp < c->srcFormatBpp || (!isAnyRGB(srcFormat)));
|
|
|
| /* yv12_to_nv12 */
|
| if ((srcFormat == PIX_FMT_YUV420P || srcFormat == PIX_FMT_YUVA420P) && (dstFormat == PIX_FMT_NV12 || dstFormat == PIX_FMT_NV21)) {
|
| - c->swScale= PlanarToNV12Wrapper;
|
| + c->swScale= planarToNv12Wrapper;
|
| }
|
| /* yuv2bgr */
|
| - if ((srcFormat==PIX_FMT_YUV420P || srcFormat==PIX_FMT_YUV422P || srcFormat==PIX_FMT_YUVA420P) && (isBGR(dstFormat) || isRGB(dstFormat))
|
| + if ((srcFormat==PIX_FMT_YUV420P || srcFormat==PIX_FMT_YUV422P || srcFormat==PIX_FMT_YUVA420P) && isAnyRGB(dstFormat)
|
| && !(flags & SWS_ACCURATE_RND) && !(dstH&1)) {
|
| c->swScale= ff_yuv2rgb_get_func_ptr(c);
|
| }
|
|
|
| if (srcFormat==PIX_FMT_YUV410P && (dstFormat==PIX_FMT_YUV420P || dstFormat==PIX_FMT_YUVA420P) && !(flags & SWS_BITEXACT)) {
|
| - c->swScale= yvu9toyv12Wrapper;
|
| + c->swScale= yvu9ToYv12Wrapper;
|
| }
|
|
|
| /* bgr24toYV12 */
|
| if (srcFormat==PIX_FMT_BGR24 && (dstFormat==PIX_FMT_YUV420P || dstFormat==PIX_FMT_YUVA420P) && !(flags & SWS_ACCURATE_RND))
|
| - c->swScale= bgr24toyv12Wrapper;
|
| + c->swScale= bgr24ToYv12Wrapper;
|
|
|
| /* RGB/BGR -> RGB/BGR (no dither needed forms) */
|
| - if ( (isBGR(srcFormat) || isRGB(srcFormat))
|
| - && (isBGR(dstFormat) || isRGB(dstFormat))
|
| + if ( isAnyRGB(srcFormat)
|
| + && isAnyRGB(dstFormat)
|
| && srcFormat != PIX_FMT_BGR8 && dstFormat != PIX_FMT_BGR8
|
| && srcFormat != PIX_FMT_RGB8 && dstFormat != PIX_FMT_RGB8
|
| && srcFormat != PIX_FMT_BGR4 && dstFormat != PIX_FMT_BGR4
|
| @@ -1693,12 +1728,10 @@
|
| && srcFormat != PIX_FMT_RGB4_BYTE && dstFormat != PIX_FMT_RGB4_BYTE
|
| && srcFormat != PIX_FMT_MONOBLACK && dstFormat != PIX_FMT_MONOBLACK
|
| && srcFormat != PIX_FMT_MONOWHITE && dstFormat != PIX_FMT_MONOWHITE
|
| - && dstFormat != PIX_FMT_RGB32_1
|
| - && dstFormat != PIX_FMT_BGR32_1
|
| && srcFormat != PIX_FMT_RGB48LE && dstFormat != PIX_FMT_RGB48LE
|
| && srcFormat != PIX_FMT_RGB48BE && dstFormat != PIX_FMT_RGB48BE
|
| && (!needsDither || (c->flags&(SWS_FAST_BILINEAR|SWS_POINT))))
|
| - c->swScale= rgb2rgbWrapper;
|
| + c->swScale= rgbToRgbWrapper;
|
|
|
| if ((usePal(srcFormat) && (
|
| dstFormat == PIX_FMT_RGB32 ||
|
| @@ -1707,13 +1740,13 @@
|
| dstFormat == PIX_FMT_BGR32 ||
|
| dstFormat == PIX_FMT_BGR32_1 ||
|
| dstFormat == PIX_FMT_BGR24)))
|
| - c->swScale= pal2rgbWrapper;
|
| + c->swScale= palToRgbWrapper;
|
|
|
| if (srcFormat == PIX_FMT_YUV422P) {
|
| if (dstFormat == PIX_FMT_YUYV422)
|
| - c->swScale= YUV422PToYuy2Wrapper;
|
| + c->swScale= yuv422pToYuy2Wrapper;
|
| else if (dstFormat == PIX_FMT_UYVY422)
|
| - c->swScale= YUV422PToUyvyWrapper;
|
| + c->swScale= yuv422pToUyvyWrapper;
|
| }
|
|
|
| /* LQ converters if -sws 0 or -sws 4*/
|
| @@ -1721,19 +1754,19 @@
|
| /* yv12_to_yuy2 */
|
| if (srcFormat == PIX_FMT_YUV420P || srcFormat == PIX_FMT_YUVA420P) {
|
| if (dstFormat == PIX_FMT_YUYV422)
|
| - c->swScale= PlanarToYuy2Wrapper;
|
| + c->swScale= planarToYuy2Wrapper;
|
| else if (dstFormat == PIX_FMT_UYVY422)
|
| - c->swScale= PlanarToUyvyWrapper;
|
| + c->swScale= planarToUyvyWrapper;
|
| }
|
| }
|
| if(srcFormat == PIX_FMT_YUYV422 && (dstFormat == PIX_FMT_YUV420P || dstFormat == PIX_FMT_YUVA420P))
|
| - c->swScale= YUYV2YUV420Wrapper;
|
| + c->swScale= yuyvToYuv420Wrapper;
|
| if(srcFormat == PIX_FMT_UYVY422 && (dstFormat == PIX_FMT_YUV420P || dstFormat == PIX_FMT_YUVA420P))
|
| - c->swScale= UYVY2YUV420Wrapper;
|
| + c->swScale= uyvyToYuv420Wrapper;
|
| if(srcFormat == PIX_FMT_YUYV422 && dstFormat == PIX_FMT_YUV422P)
|
| - c->swScale= YUYV2YUV422Wrapper;
|
| + c->swScale= yuyvToYuv422Wrapper;
|
| if(srcFormat == PIX_FMT_UYVY422 && dstFormat == PIX_FMT_YUV422P)
|
| - c->swScale= UYVY2YUV422Wrapper;
|
| + c->swScale= uyvyToYuv422Wrapper;
|
|
|
| #ifdef COMPILE_ALTIVEC
|
| if ((c->flags & SWS_CPU_CAPS_ALTIVEC) &&
|
| @@ -1761,9 +1794,9 @@
|
| && srcFormat != PIX_FMT_NV12 && srcFormat != PIX_FMT_NV21))
|
| {
|
| if (isPacked(c->srcFormat))
|
| - c->swScale= packedCopy;
|
| + c->swScale= packedCopyWrapper;
|
| else /* Planar YUV or gray */
|
| - c->swScale= planarCopy;
|
| + c->swScale= planarCopyWrapper;
|
| }
|
| #if ARCH_BFIN
|
| if (flags & SWS_CPU_CAPS_BFIN)
|
| @@ -1826,6 +1859,8 @@
|
| r= (i>>3 )*255;
|
| g= ((i>>1)&3)*85;
|
| b= (i&1 )*255;
|
| + } else if(c->srcFormat == PIX_FMT_GRAY8) {
|
| + r = g = b = i;
|
| } else {
|
| assert(c->srcFormat == PIX_FMT_BGR4_BYTE);
|
| b= (i>>3 )*255;
|
|
|