25 IN BOOLEAN Premultiply
49 if ((SrcLen < 2) || (MaskLen != DstLen /
sizeof (UINT32))) {
53 SrcEnd = Src + SrcLen;
59 for (RunIndex = 0; RunIndex < 3 && Src < SrcLast; ++RunIndex) {
63 DstCur = Dst + 2 - RunIndex;
64 DstEnd = DstCur + MaskLen *
sizeof (UINT32);
69 while (Src < SrcLast && DstCur < DstEnd) {
73 ControlValue = *Src++;
74 if (ControlValue & BIT7) {
81 if ((UINT32)(DstEnd - DstCur) < ControlValue *
sizeof (UINT32)) {
85 while (ControlValue > 0) {
87 DstCur +=
sizeof (UINT32);
96 if (((UINT32)(SrcEnd - Src) < ControlValue) || ((UINT32)(DstEnd - DstCur) < ControlValue *
sizeof (UINT32))) {
100 while (ControlValue > 0) {
102 DstCur +=
sizeof (UINT32);
111 if (DstCur != DstEnd) {
121 SrcEnd = Mask + MaskLen;
122 while (Mask < SrcEnd) {
124 DstCur[0] = (UINT8)((DstCur[0] * DstValue) / 0xFF);
125 DstCur[1] = (UINT8)((DstCur[1] * DstValue) / 0xFF);
126 DstCur[2] = (UINT8)((DstCur[2] * DstValue) / 0xFF);
127 DstCur[3] = DstValue;
128 DstCur +=
sizeof (UINT32);
132 SrcEnd = Mask + MaskLen;
133 while (Mask < SrcEnd) {
135 DstCur +=
sizeof (UINT32);
139 return MaskLen *
sizeof (UINT32);
UINT32 DecompressMaskedRLE24(OUT UINT8 *Dst, IN UINT32 DstLen, IN UINT8 *Src, IN UINT32 SrcLen, IN UINT8 *Mask, IN UINT32 MaskLen, IN BOOLEAN Premultiply)