Signed-off-by: Paul B Mahol <onemda@gmail.com>
Paul B Mahol authored on 2012/07/18 10:34:20... | ... |
@@ -86,6 +86,8 @@ int main(int argc, char **argv) |
86 | 86 |
FUNC(4, 4, shuffle_bytes_2103), /* rgb32tobgr32 */ |
87 | 87 |
FUNC(6, 6, rgb48tobgr48_nobswap), |
88 | 88 |
FUNC(6, 6, rgb48tobgr48_bswap), |
89 |
+ FUNC(8, 6, rgb64tobgr48_nobswap), |
|
90 |
+ FUNC(8, 6, rgb64tobgr48_bswap), |
|
89 | 91 |
FUNC(0, 0, NULL) |
90 | 92 |
}; |
91 | 93 |
int width; |
... | ... |
@@ -351,3 +351,21 @@ void rgb48tobgr48_ ## need_bswap(const uint8_t *src, \ |
351 | 351 |
|
352 | 352 |
DEFINE_RGB48TOBGR48(nobswap, 0) |
353 | 353 |
DEFINE_RGB48TOBGR48(bswap, 1) |
354 |
+ |
|
355 |
+#define DEFINE_RGB64TOBGR48(need_bswap, swap) \ |
|
356 |
+void rgb64tobgr48_ ## need_bswap(const uint8_t *src, \ |
|
357 |
+ uint8_t *dst, int src_size) \ |
|
358 |
+{ \ |
|
359 |
+ uint16_t *d = (uint16_t *)dst; \ |
|
360 |
+ uint16_t *s = (uint16_t *)src; \ |
|
361 |
+ int i, num_pixels = src_size >> 3; \ |
|
362 |
+ \ |
|
363 |
+ for (i = 0; i < num_pixels; i++) { \ |
|
364 |
+ d[3 * i ] = swap ? av_bswap16(s[4 * i + 2]) : s[4 * i + 2]; \ |
|
365 |
+ d[3 * i + 1] = swap ? av_bswap16(s[4 * i + 1]) : s[4 * i + 1]; \ |
|
366 |
+ d[3 * i + 2] = swap ? av_bswap16(s[4 * i ]) : s[4 * i ]; \ |
|
367 |
+ } \ |
|
368 |
+} |
|
369 |
+ |
|
370 |
+DEFINE_RGB64TOBGR48(nobswap, 0) |
|
371 |
+DEFINE_RGB64TOBGR48(bswap, 1) |
... | ... |
@@ -52,6 +52,8 @@ extern void (*rgb32tobgr15)(const uint8_t *src, uint8_t *dst, int src_size); |
52 | 52 |
|
53 | 53 |
extern void (*shuffle_bytes_2103)(const uint8_t *src, uint8_t *dst, int src_size); |
54 | 54 |
|
55 |
+void rgb64tobgr48_nobswap(const uint8_t *src, uint8_t *dst, int src_size); |
|
56 |
+void rgb64tobgr48_bswap(const uint8_t *src, uint8_t *dst, int src_size); |
|
55 | 57 |
void rgb48tobgr48_nobswap(const uint8_t *src, uint8_t *dst, int src_size); |
56 | 58 |
void rgb48tobgr48_bswap(const uint8_t *src, uint8_t *dst, int src_size); |
57 | 59 |
void rgb24to32(const uint8_t *src, uint8_t *dst, int src_size); |
... | ... |
@@ -521,6 +521,13 @@ static int planarRgbToRgbWrapper(SwsContext *c, const uint8_t *src[], |
521 | 521 |
|| (x) == PIX_FMT_ABGR \ |
522 | 522 |
) |
523 | 523 |
|
524 |
+#define isRGBA64(x) ( \ |
|
525 |
+ (x) == PIX_FMT_RGBA64LE \ |
|
526 |
+ || (x) == PIX_FMT_RGBA64BE \ |
|
527 |
+ || (x) == PIX_FMT_BGRA64LE \ |
|
528 |
+ || (x) == PIX_FMT_BGRA64BE \ |
|
529 |
+ ) |
|
530 |
+ |
|
524 | 531 |
#define isRGB48(x) ( \ |
525 | 532 |
(x) == PIX_FMT_RGB48LE \ |
526 | 533 |
|| (x) == PIX_FMT_RGB48BE \ |
... | ... |
@@ -566,6 +573,15 @@ static rgbConvFn findRgbConvFn(SwsContext *c) |
566 | 566 |
|| CONV_IS(BGR48LE, RGB48BE) |
567 | 567 |
|| CONV_IS(RGB48BE, BGR48LE) |
568 | 568 |
|| CONV_IS(BGR48BE, RGB48LE)) conv = rgb48tobgr48_bswap; |
569 |
+ } else if (isRGBA64(srcFormat) && isRGB48(dstFormat)) { |
|
570 |
+ if (CONV_IS(RGBA64LE, BGR48LE) |
|
571 |
+ || CONV_IS(BGRA64LE, RGB48LE) |
|
572 |
+ || CONV_IS(RGBA64BE, BGR48BE) |
|
573 |
+ || CONV_IS(BGRA64BE, RGB48BE)) conv = rgb64tobgr48_nobswap; |
|
574 |
+ else if (CONV_IS(RGBA64LE, BGR48BE) |
|
575 |
+ || CONV_IS(BGRA64LE, RGB48BE) |
|
576 |
+ || CONV_IS(RGBA64BE, BGR48LE) |
|
577 |
+ || CONV_IS(BGRA64BE, RGB48LE)) conv = rgb64tobgr48_bswap; |
|
569 | 578 |
} else |
570 | 579 |
/* BGR -> BGR */ |
571 | 580 |
if ((isBGRinInt(srcFormat) && isBGRinInt(dstFormat)) || |