@@ -425,3 +425,61 @@ void rgb48to64_ ## need_bswap(const uint8_t *src, \
425
425
426
426
DEFINE_RGB48TO64 (nobswap , 0 )
427
427
DEFINE_RGB48TO64 (bswap , 1 )
428
+
429
+ #define DEFINE_X2RGB10TO16 (need_bswap , swap , bits , alpha ) \
430
+ void x2rgb10to ## bits ## _ ## need_bswap(const uint8_t *src, \
431
+ uint8_t *dst, int src_size) \
432
+ { \
433
+ uint16_t *d = (uint16_t *)dst; \
434
+ const uint32_t *s = (const uint32_t *)src; \
435
+ int i, num_pixels = src_size >> 2; \
436
+ unsigned component; \
437
+ \
438
+ for (i = 0; i < num_pixels; i++) { \
439
+ unsigned p = AV_RL32(s + i); \
440
+ component = (p >> 20) & 0x3FF; \
441
+ d[(3 + alpha) * i + 0] = swap ? av_bswap16(component << 6 | component >> 4) \
442
+ : component << 6 | component >> 4; \
443
+ component = (p >> 10) & 0x3FF; \
444
+ d[(3 + alpha) * i + 1] = swap ? av_bswap16(component << 6 | component >> 4) \
445
+ : component << 6 | component >> 4; \
446
+ component = p & 0x3FF; \
447
+ d[(3 + alpha) * i + 2] = swap ? av_bswap16(component << 6 | component >> 4) \
448
+ : component << 6 | component >> 4; \
449
+ if (alpha) d[(3 + alpha) * i + 3] = 0xffff; \
450
+ } \
451
+ }
452
+
453
+ DEFINE_X2RGB10TO16 (nobswap , 0 , 48 , 0 )
454
+ DEFINE_X2RGB10TO16 (bswap , 1 , 48 , 0 )
455
+ DEFINE_X2RGB10TO16 (nobswap , 0 , 64 , 1 )
456
+ DEFINE_X2RGB10TO16 (bswap , 1 , 64 , 1 )
457
+
458
+ #define DEFINE_X2RGB10TOBGR16 (need_bswap , swap , bits , alpha ) \
459
+ void x2rgb10tobgr ## bits ## _ ## need_bswap(const uint8_t *src, \
460
+ uint8_t *dst, int src_size) \
461
+ { \
462
+ uint16_t *d = (uint16_t *)dst; \
463
+ const uint32_t *s = (const uint32_t *)src; \
464
+ int i, num_pixels = src_size >> 2; \
465
+ unsigned component; \
466
+ \
467
+ for (i = 0; i < num_pixels; i++) { \
468
+ unsigned p = AV_RL32(s + i); \
469
+ component = p & 0x3FF; \
470
+ d[(3 + alpha) * i + 0] = swap ? av_bswap16(component << 6 | component >> 4) \
471
+ : component << 6 | component >> 4; \
472
+ component = (p >> 10) & 0x3FF; \
473
+ d[(3 + alpha) * i + 1] = swap ? av_bswap16(component << 6 | component >> 4) \
474
+ : component << 6 | component >> 4; \
475
+ component = (p >> 20) & 0x3FF; \
476
+ d[(3 + alpha) * i + 2] = swap ? av_bswap16(component << 6 | component >> 4) \
477
+ : component << 6 | component >> 4; \
478
+ if (alpha) d[(3 + alpha) * i + 3] = 0xffff; \
479
+ } \
480
+ }
481
+
482
+ DEFINE_X2RGB10TOBGR16 (nobswap , 0 , 48 , 0 )
483
+ DEFINE_X2RGB10TOBGR16 (bswap , 1 , 48 , 0 )
484
+ DEFINE_X2RGB10TOBGR16 (nobswap , 0 , 64 , 1 )
485
+ DEFINE_X2RGB10TOBGR16 (bswap , 1 , 64 , 1 )
0 commit comments