Mercurial > mplayer.hg
comparison libswscale/swscale.c @ 32308:ecb8e52d4add
Y400A (gray alpha) input support in libswscale
author | bcoudurier |
---|---|
date | Mon, 27 Sep 2010 22:24:03 +0000 |
parents | 6a1d3ea9a0c0 |
children | f0247fec1cd7 |
comparison
equal
deleted
inserted
replaced
32307:7ba2369d71f7 | 32308:ecb8e52d4add |
---|---|
80 | 80 |
81 #define isPacked(x) ( \ | 81 #define isPacked(x) ( \ |
82 (x)==PIX_FMT_PAL8 \ | 82 (x)==PIX_FMT_PAL8 \ |
83 || (x)==PIX_FMT_YUYV422 \ | 83 || (x)==PIX_FMT_YUYV422 \ |
84 || (x)==PIX_FMT_UYVY422 \ | 84 || (x)==PIX_FMT_UYVY422 \ |
85 || (x)==PIX_FMT_Y400A \ | |
85 || isAnyRGB(x) \ | 86 || isAnyRGB(x) \ |
86 ) | 87 ) |
87 | 88 |
88 #define RGB2YUV_SHIFT 15 | 89 #define RGB2YUV_SHIFT 15 |
89 #define BY ( (int)(0.114*219/255*(1<<RGB2YUV_SHIFT)+0.5)) | 90 #define BY ( (int)(0.114*219/255*(1<<RGB2YUV_SHIFT)+0.5)) |
1433 uyvytoyuv422(ydst, udst, vdst, src[0], c->srcW, srcSliceH, dstStride[0], dstStride[1], srcStride[0]); | 1434 uyvytoyuv422(ydst, udst, vdst, src[0], c->srcW, srcSliceH, dstStride[0], dstStride[1], srcStride[0]); |
1434 | 1435 |
1435 return srcSliceH; | 1436 return srcSliceH; |
1436 } | 1437 } |
1437 | 1438 |
1439 static void gray8aToPacked32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette) | |
1440 { | |
1441 long i; | |
1442 for (i=0; i<num_pixels; i++) | |
1443 ((uint32_t *) dst)[i] = ((const uint32_t *)palette)[src[i<<1]] | (src[(i<<1)+1] << 24); | |
1444 } | |
1445 | |
1446 static void gray8aToPacked32_1(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette) | |
1447 { | |
1448 long i; | |
1449 | |
1450 for (i=0; i<num_pixels; i++) | |
1451 ((uint32_t *) dst)[i] = ((const uint32_t *)palette)[src[i<<1]] | src[(i<<1)+1]; | |
1452 } | |
1453 | |
1454 static void gray8aToPacked24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette) | |
1455 { | |
1456 long i; | |
1457 | |
1458 for (i=0; i<num_pixels; i++) { | |
1459 //FIXME slow? | |
1460 dst[0]= palette[src[i<<1]*4+0]; | |
1461 dst[1]= palette[src[i<<1]*4+1]; | |
1462 dst[2]= palette[src[i<<1]*4+2]; | |
1463 dst+= 3; | |
1464 } | |
1465 } | |
1466 | |
1438 static int palToRgbWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, | 1467 static int palToRgbWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, |
1439 int srcSliceH, uint8_t* dst[], int dstStride[]) | 1468 int srcSliceH, uint8_t* dst[], int dstStride[]) |
1440 { | 1469 { |
1441 const enum PixelFormat srcFormat= c->srcFormat; | 1470 const enum PixelFormat srcFormat= c->srcFormat; |
1442 const enum PixelFormat dstFormat= c->dstFormat; | 1471 const enum PixelFormat dstFormat= c->dstFormat; |
1444 const uint8_t *palette)=NULL; | 1473 const uint8_t *palette)=NULL; |
1445 int i; | 1474 int i; |
1446 uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; | 1475 uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; |
1447 const uint8_t *srcPtr= src[0]; | 1476 const uint8_t *srcPtr= src[0]; |
1448 | 1477 |
1449 if (usePal(srcFormat)) { | 1478 if (srcFormat == PIX_FMT_Y400A) { |
1479 switch (dstFormat) { | |
1480 case PIX_FMT_RGB32 : conv = gray8aToPacked32; break; | |
1481 case PIX_FMT_BGR32 : conv = gray8aToPacked32; break; | |
1482 case PIX_FMT_BGR32_1: conv = gray8aToPacked32_1; break; | |
1483 case PIX_FMT_RGB32_1: conv = gray8aToPacked32_1; break; | |
1484 case PIX_FMT_RGB24 : conv = gray8aToPacked24; break; | |
1485 case PIX_FMT_BGR24 : conv = gray8aToPacked24; break; | |
1486 } | |
1487 } else if (usePal(srcFormat)) { | |
1450 switch (dstFormat) { | 1488 switch (dstFormat) { |
1451 case PIX_FMT_RGB32 : conv = sws_convertPalette8ToPacked32; break; | 1489 case PIX_FMT_RGB32 : conv = sws_convertPalette8ToPacked32; break; |
1452 case PIX_FMT_BGR32 : conv = sws_convertPalette8ToPacked32; break; | 1490 case PIX_FMT_BGR32 : conv = sws_convertPalette8ToPacked32; break; |
1453 case PIX_FMT_BGR32_1: conv = sws_convertPalette8ToPacked32; break; | 1491 case PIX_FMT_BGR32_1: conv = sws_convertPalette8ToPacked32; break; |
1454 case PIX_FMT_RGB32_1: conv = sws_convertPalette8ToPacked32; break; | 1492 case PIX_FMT_RGB32_1: conv = sws_convertPalette8ToPacked32; break; |
1901 r= (i&7 )*36; | 1939 r= (i&7 )*36; |
1902 } else if(c->srcFormat == PIX_FMT_RGB4_BYTE) { | 1940 } else if(c->srcFormat == PIX_FMT_RGB4_BYTE) { |
1903 r= (i>>3 )*255; | 1941 r= (i>>3 )*255; |
1904 g= ((i>>1)&3)*85; | 1942 g= ((i>>1)&3)*85; |
1905 b= (i&1 )*255; | 1943 b= (i&1 )*255; |
1906 } else if(c->srcFormat == PIX_FMT_GRAY8) { | 1944 } else if(c->srcFormat == PIX_FMT_GRAY8 || PIX_FMT_Y400A) { |
1907 r = g = b = i; | 1945 r = g = b = i; |
1908 } else { | 1946 } else { |
1909 assert(c->srcFormat == PIX_FMT_BGR4_BYTE); | 1947 assert(c->srcFormat == PIX_FMT_BGR4_BYTE); |
1910 b= (i>>3 )*255; | 1948 b= (i>>3 )*255; |
1911 g= ((i>>1)&3)*85; | 1949 g= ((i>>1)&3)*85; |