MCPcopy Create free account
hub / github.com/ARM-software/astc-encoder / UnpackB44Block

Function UnpackB44Block

Source/ThirdParty/tinyexr.h:3763–3856  ·  view source on GitHub ↗

Unpack one 4x4 block from B44 compressed 14 bytes (matches OpenEXR unpack14)

Source from the content-addressed store, hash-verified

3761
3762// Unpack one 4x4 block from B44 compressed 14 bytes (matches OpenEXR unpack14)
3763static void UnpackB44Block(unsigned short dst[16], const unsigned char src[14]) {
3764 // Extract t[0] (stored as ordered-magnitude value)
3765 unsigned short s0 = (static_cast<unsigned short>(src[0]) << 8) | src[1];
3766
3767 // Extract shift and compute bias
3768 unsigned short shift = src[2] >> 2;
3769 unsigned short bias = static_cast<unsigned short>(0x20u << shift);
3770
3771 // Reconstruct t values using running differences
3772 // Pattern: s[0]->s[4]->s[8]->s[12], then s[0]->s[1], s[4]->s[5], etc.
3773
3774 unsigned short s4 = static_cast<unsigned short>(
3775 static_cast<unsigned int>(s0) +
3776 static_cast<unsigned int>(((static_cast<unsigned int>(src[2]) << 4) |
3777 (static_cast<unsigned int>(src[3]) >> 4)) & 0x3fu) * (1u << shift) - bias);
3778
3779 unsigned short s8 = static_cast<unsigned short>(
3780 static_cast<unsigned int>(s4) +
3781 static_cast<unsigned int>(((static_cast<unsigned int>(src[3]) << 2) |
3782 (static_cast<unsigned int>(src[4]) >> 6)) & 0x3fu) * (1u << shift) - bias);
3783
3784 unsigned short s12 = static_cast<unsigned short>(
3785 static_cast<unsigned int>(s8) +
3786 static_cast<unsigned int>(src[4] & 0x3fu) * (1u << shift) - bias);
3787
3788 unsigned short s1 = static_cast<unsigned short>(
3789 static_cast<unsigned int>(s0) +
3790 static_cast<unsigned int>(src[5] >> 2) * (1u << shift) - bias);
3791
3792 unsigned short s5 = static_cast<unsigned short>(
3793 static_cast<unsigned int>(s4) +
3794 static_cast<unsigned int>(((static_cast<unsigned int>(src[5]) << 4) |
3795 (static_cast<unsigned int>(src[6]) >> 4)) & 0x3fu) * (1u << shift) - bias);
3796
3797 unsigned short s9 = static_cast<unsigned short>(
3798 static_cast<unsigned int>(s8) +
3799 static_cast<unsigned int>(((static_cast<unsigned int>(src[6]) << 2) |
3800 (static_cast<unsigned int>(src[7]) >> 6)) & 0x3fu) * (1u << shift) - bias);
3801
3802 unsigned short s13 = static_cast<unsigned short>(
3803 static_cast<unsigned int>(s12) +
3804 static_cast<unsigned int>(src[7] & 0x3fu) * (1u << shift) - bias);
3805
3806 unsigned short s2 = static_cast<unsigned short>(
3807 static_cast<unsigned int>(s1) +
3808 static_cast<unsigned int>(src[8] >> 2) * (1u << shift) - bias);
3809
3810 unsigned short s6 = static_cast<unsigned short>(
3811 static_cast<unsigned int>(s5) +
3812 static_cast<unsigned int>(((static_cast<unsigned int>(src[8]) << 4) |
3813 (static_cast<unsigned int>(src[9]) >> 4)) & 0x3fu) * (1u << shift) - bias);
3814
3815 unsigned short s10 = static_cast<unsigned short>(
3816 static_cast<unsigned int>(s9) +
3817 static_cast<unsigned int>(((static_cast<unsigned int>(src[9]) << 2) |
3818 (static_cast<unsigned int>(src[10]) >> 6)) & 0x3fu) * (1u << shift) - bias);
3819
3820 unsigned short s14 = static_cast<unsigned short>(

Callers 1

DecompressB44Function · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected