Originally committed as revision 32394 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale
| ... | ... |
@@ -82,6 +82,7 @@ untested special converters |
| 82 | 82 |
(x)==PIX_FMT_PAL8 \ |
| 83 | 83 |
|| (x)==PIX_FMT_YUYV422 \ |
| 84 | 84 |
|| (x)==PIX_FMT_UYVY422 \ |
| 85 |
+ || (x)==PIX_FMT_Y400A \ |
|
| 85 | 86 |
|| isAnyRGB(x) \ |
| 86 | 87 |
) |
| 87 | 88 |
|
| ... | ... |
@@ -1435,6 +1436,34 @@ static int uyvyToYuv422Wrapper(SwsContext *c, const uint8_t* src[], int srcStrid |
| 1435 | 1435 |
return srcSliceH; |
| 1436 | 1436 |
} |
| 1437 | 1437 |
|
| 1438 |
+static void gray8aToPacked32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette) |
|
| 1439 |
+{
|
|
| 1440 |
+ long i; |
|
| 1441 |
+ for (i=0; i<num_pixels; i++) |
|
| 1442 |
+ ((uint32_t *) dst)[i] = ((const uint32_t *)palette)[src[i<<1]] | (src[(i<<1)+1] << 24); |
|
| 1443 |
+} |
|
| 1444 |
+ |
|
| 1445 |
+static void gray8aToPacked32_1(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette) |
|
| 1446 |
+{
|
|
| 1447 |
+ long i; |
|
| 1448 |
+ |
|
| 1449 |
+ for (i=0; i<num_pixels; i++) |
|
| 1450 |
+ ((uint32_t *) dst)[i] = ((const uint32_t *)palette)[src[i<<1]] | src[(i<<1)+1]; |
|
| 1451 |
+} |
|
| 1452 |
+ |
|
| 1453 |
+static void gray8aToPacked24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette) |
|
| 1454 |
+{
|
|
| 1455 |
+ long i; |
|
| 1456 |
+ |
|
| 1457 |
+ for (i=0; i<num_pixels; i++) {
|
|
| 1458 |
+ //FIXME slow? |
|
| 1459 |
+ dst[0]= palette[src[i<<1]*4+0]; |
|
| 1460 |
+ dst[1]= palette[src[i<<1]*4+1]; |
|
| 1461 |
+ dst[2]= palette[src[i<<1]*4+2]; |
|
| 1462 |
+ dst+= 3; |
|
| 1463 |
+ } |
|
| 1464 |
+} |
|
| 1465 |
+ |
|
| 1438 | 1466 |
static int palToRgbWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, |
| 1439 | 1467 |
int srcSliceH, uint8_t* dst[], int dstStride[]) |
| 1440 | 1468 |
{
|
| ... | ... |
@@ -1446,7 +1475,16 @@ static int palToRgbWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], |
| 1446 | 1446 |
uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; |
| 1447 | 1447 |
const uint8_t *srcPtr= src[0]; |
| 1448 | 1448 |
|
| 1449 |
- if (usePal(srcFormat)) {
|
|
| 1449 |
+ if (srcFormat == PIX_FMT_Y400A) {
|
|
| 1450 |
+ switch (dstFormat) {
|
|
| 1451 |
+ case PIX_FMT_RGB32 : conv = gray8aToPacked32; break; |
|
| 1452 |
+ case PIX_FMT_BGR32 : conv = gray8aToPacked32; break; |
|
| 1453 |
+ case PIX_FMT_BGR32_1: conv = gray8aToPacked32_1; break; |
|
| 1454 |
+ case PIX_FMT_RGB32_1: conv = gray8aToPacked32_1; break; |
|
| 1455 |
+ case PIX_FMT_RGB24 : conv = gray8aToPacked24; break; |
|
| 1456 |
+ case PIX_FMT_BGR24 : conv = gray8aToPacked24; break; |
|
| 1457 |
+ } |
|
| 1458 |
+ } else if (usePal(srcFormat)) {
|
|
| 1450 | 1459 |
switch (dstFormat) {
|
| 1451 | 1460 |
case PIX_FMT_RGB32 : conv = sws_convertPalette8ToPacked32; break; |
| 1452 | 1461 |
case PIX_FMT_BGR32 : conv = sws_convertPalette8ToPacked32; break; |
| ... | ... |
@@ -1903,7 +1941,7 @@ int sws_scale(SwsContext *c, const uint8_t* const src[], const int srcStride[], |
| 1903 | 1903 |
r= (i>>3 )*255; |
| 1904 | 1904 |
g= ((i>>1)&3)*85; |
| 1905 | 1905 |
b= (i&1 )*255; |
| 1906 |
- } else if(c->srcFormat == PIX_FMT_GRAY8) {
|
|
| 1906 |
+ } else if(c->srcFormat == PIX_FMT_GRAY8 || PIX_FMT_Y400A) {
|
|
| 1907 | 1907 |
r = g = b = i; |
| 1908 | 1908 |
} else {
|
| 1909 | 1909 |
assert(c->srcFormat == PIX_FMT_BGR4_BYTE); |
| ... | ... |
@@ -378,6 +378,7 @@ const char *sws_format_name(enum PixelFormat format); |
| 378 | 378 |
) |
| 379 | 379 |
#define isGray(x) ( \ |
| 380 | 380 |
(x)==PIX_FMT_GRAY8 \ |
| 381 |
+ || (x)==PIX_FMT_Y400A \ |
|
| 381 | 382 |
|| (x)==PIX_FMT_GRAY16BE \ |
| 382 | 383 |
|| (x)==PIX_FMT_GRAY16LE \ |
| 383 | 384 |
) |
| ... | ... |
@@ -440,9 +441,10 @@ const char *sws_format_name(enum PixelFormat format); |
| 440 | 440 |
|| (x)==PIX_FMT_BGR32_1 \ |
| 441 | 441 |
|| (x)==PIX_FMT_RGB32 \ |
| 442 | 442 |
|| (x)==PIX_FMT_RGB32_1 \ |
| 443 |
+ || (x)==PIX_FMT_Y400A \ |
|
| 443 | 444 |
|| (x)==PIX_FMT_YUVA420P \ |
| 444 | 445 |
) |
| 445 |
-#define usePal(x) (av_pix_fmt_descriptors[x].flags & PIX_FMT_PAL) |
|
| 446 |
+#define usePal(x) ((av_pix_fmt_descriptors[x].flags & PIX_FMT_PAL) || (x) == PIX_FMT_Y400A) |
|
| 446 | 447 |
|
| 447 | 448 |
extern const uint64_t ff_dither4[2]; |
| 448 | 449 |
extern const uint64_t ff_dither8[2]; |
| ... | ... |
@@ -3001,6 +3001,7 @@ static void RENAME(sws_init_swScale)(SwsContext *c) |
| 3001 | 3001 |
case PIX_FMT_YUV420P16BE: |
| 3002 | 3002 |
case PIX_FMT_YUV422P16BE: |
| 3003 | 3003 |
case PIX_FMT_YUV444P16BE: |
| 3004 |
+ case PIX_FMT_Y400A : |
|
| 3004 | 3005 |
case PIX_FMT_GRAY16BE : c->lumToYV12 = RENAME(yuy2ToY); break; |
| 3005 | 3006 |
case PIX_FMT_UYVY422 : |
| 3006 | 3007 |
case PIX_FMT_YUV420P16LE: |
| ... | ... |
@@ -3033,10 +3034,14 @@ static void RENAME(sws_init_swScale)(SwsContext *c) |
| 3033 | 3033 |
case PIX_FMT_RGB32_1: |
| 3034 | 3034 |
case PIX_FMT_BGR32 : |
| 3035 | 3035 |
case PIX_FMT_BGR32_1: c->alpToYV12 = abgrToA; break; |
| 3036 |
+ case PIX_FMT_Y400A : c->alpToYV12 = RENAME(yuy2ToY); break; |
|
| 3036 | 3037 |
} |
| 3037 | 3038 |
} |
| 3038 | 3039 |
|
| 3039 | 3040 |
switch (srcFormat) {
|
| 3041 |
+ case PIX_FMT_Y400A : |
|
| 3042 |
+ c->alpSrcOffset = 1; |
|
| 3043 |
+ break; |
|
| 3040 | 3044 |
case PIX_FMT_RGB32 : |
| 3041 | 3045 |
case PIX_FMT_BGR32 : |
| 3042 | 3046 |
c->alpSrcOffset = 3; |