MCPcopy Create free account
hub / github.com/Aleksoid1978/VideoRenderer / CopyFrameBGR48

Function CopyFrameBGR48

Source/Helper.cpp:600–640  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

598}
599
600void CopyFrameBGR48(const UINT lines, BYTE* dst, UINT dst_pitch, const BYTE* src, int src_pitch)
601{
602 UINT line_pixels = abs(src_pitch) / 6;
603 UINT line_pixels4 = line_pixels & ~(4u - 1);
604
605 for (UINT y = 0; y < lines; ++y) {
606 uint64_t* src64 = (uint64_t*)src;
607 uint64_t* dst64 = (uint64_t*)dst;
608
609 UINT i = 0;
610 for (; i < line_pixels4; i += 4) {
611 uint64_t sa = *src64++;
612 uint64_t sb = *src64++;
613 uint64_t sc = *src64++;
614
615 *dst64++ = ((sa & 0xffff) << 32) | (sa & 0xffff0000) | ((sa & 0xffff00000000) >> 32);
616 *dst64++ = ((sa & 0xffff000000000000) >> 16) | ((sb & 0xffff) << 16) | ((sb & 0xffff0000) >> 16);
617 *dst64++ = (sb & 0xffff00000000) | ((sb & 0xffff000000000000) >> 32) | (sc & 0xffff);
618 *dst64++ = ((sc & 0xffff0000) << 16) | ((sc & 0xffff00000000) >> 16) | ((sc & 0xffff000000000000) >> 48);
619 }
620
621 if (UINT remainder = line_pixels - i) {
622 uint64_t sa = *src64++;
623 *dst64++ = ((sa & 0xffff) << 32) | (sa & 0xffff0000) | ((sa & 0xffff00000000) >> 32);
624
625 if (remainder==2) {
626 uint64_t sb = *(uint32_t*)src64;
627 *dst64 = ((sa & 0xffff000000000000) >> 16) | ((sb & 0xffff) << 16) | ((sb & 0xffff0000) >> 16);
628 }
629 else if (remainder == 3) {
630 uint64_t sb = *src64++;
631 uint64_t sc = *(uint32_t*)src64;
632 *dst64++ = ((sa & 0xffff000000000000) >> 16) | ((sb & 0xffff) << 16) | ((sb & 0xffff0000) >> 16);
633 *dst64 = (sb & 0xffff00000000) | ((sb & 0xffff000000000000) >> 32) | (sc & 0xffff);
634 }
635 }
636
637 src += src_pitch;
638 dst += dst_pitch;
639 }
640}
641
642void CopyFrameBGRA64(const UINT lines, BYTE* dst, UINT dst_pitch, const BYTE* src, int src_pitch)
643{

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected