Signed-off-by: Paul B Mahol <onemda@gmail.com>
Paul B Mahol authored on 2012/07/18 10:49:52... | ... |
@@ -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, rgb64to48_nobswap), |
|
90 |
+ FUNC(8, 6, rgb64to48_bswap), |
|
89 | 91 |
FUNC(8, 6, rgb64tobgr48_nobswap), |
90 | 92 |
FUNC(8, 6, rgb64tobgr48_bswap), |
91 | 93 |
FUNC(0, 0, NULL) |
... | ... |
@@ -369,3 +369,21 @@ void rgb64tobgr48_ ## need_bswap(const uint8_t *src, \ |
369 | 369 |
|
370 | 370 |
DEFINE_RGB64TOBGR48(nobswap, 0) |
371 | 371 |
DEFINE_RGB64TOBGR48(bswap, 1) |
372 |
+ |
|
373 |
+#define DEFINE_RGB64TO48(need_bswap, swap) \ |
|
374 |
+void rgb64to48_ ## need_bswap(const uint8_t *src, \ |
|
375 |
+ uint8_t *dst, int src_size) \ |
|
376 |
+{ \ |
|
377 |
+ uint16_t *d = (uint16_t *)dst; \ |
|
378 |
+ uint16_t *s = (uint16_t *)src; \ |
|
379 |
+ int i, num_pixels = src_size >> 3; \ |
|
380 |
+ \ |
|
381 |
+ for (i = 0; i < num_pixels; i++) { \ |
|
382 |
+ d[3 * i ] = swap ? av_bswap16(s[4 * i ]) : s[4 * i ]; \ |
|
383 |
+ d[3 * i + 1] = swap ? av_bswap16(s[4 * i + 1]) : s[4 * i + 1]; \ |
|
384 |
+ d[3 * i + 2] = swap ? av_bswap16(s[4 * i + 2]) : s[4 * i + 2]; \ |
|
385 |
+ } \ |
|
386 |
+} |
|
387 |
+ |
|
388 |
+DEFINE_RGB64TO48(nobswap, 0) |
|
389 |
+DEFINE_RGB64TO48(bswap, 1) |
... | ... |
@@ -56,6 +56,8 @@ void rgb64tobgr48_nobswap(const uint8_t *src, uint8_t *dst, int src_size); |
56 | 56 |
void rgb64tobgr48_bswap(const uint8_t *src, uint8_t *dst, int src_size); |
57 | 57 |
void rgb48tobgr48_nobswap(const uint8_t *src, uint8_t *dst, int src_size); |
58 | 58 |
void rgb48tobgr48_bswap(const uint8_t *src, uint8_t *dst, int src_size); |
59 |
+void rgb64to48_nobswap(const uint8_t *src, uint8_t *dst, int src_size); |
|
60 |
+void rgb64to48_bswap(const uint8_t *src, uint8_t *dst, int src_size); |
|
59 | 61 |
void rgb24to32(const uint8_t *src, uint8_t *dst, int src_size); |
60 | 62 |
void rgb32to24(const uint8_t *src, uint8_t *dst, int src_size); |
61 | 63 |
void rgb16tobgr32(const uint8_t *src, uint8_t *dst, int src_size); |
... | ... |
@@ -582,6 +582,14 @@ static rgbConvFn findRgbConvFn(SwsContext *c) |
582 | 582 |
|| CONV_IS(BGRA64LE, RGB48BE) |
583 | 583 |
|| CONV_IS(RGBA64BE, BGR48LE) |
584 | 584 |
|| CONV_IS(BGRA64BE, RGB48LE)) conv = rgb64tobgr48_bswap; |
585 |
+ else if (CONV_IS(RGBA64LE, RGB48LE) |
|
586 |
+ || CONV_IS(BGRA64LE, BGR48LE) |
|
587 |
+ || CONV_IS(RGBA64BE, RGB48BE) |
|
588 |
+ || CONV_IS(BGRA64BE, BGR48BE)) conv = rgb64to48_nobswap; |
|
589 |
+ else if (CONV_IS(RGBA64LE, RGB48BE) |
|
590 |
+ || CONV_IS(BGRA64LE, BGR48BE) |
|
591 |
+ || CONV_IS(RGBA64BE, RGB48LE) |
|
592 |
+ || CONV_IS(BGRA64BE, BGR48LE)) conv = rgb64to48_bswap; |
|
585 | 593 |
} else |
586 | 594 |
/* BGR -> BGR */ |
587 | 595 |
if ((isBGRinInt(srcFormat) && isBGRinInt(dstFormat)) || |