|
|
|
@ -488,7 +488,7 @@ static int decode_byterun(uint8_t *dst, int dst_size, |
|
|
|
|
return buf - buf_start; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#define DECODE_RGBX_COMMON(pixel_size) \ |
|
|
|
|
#define DECODE_RGBX_COMMON(type) \ |
|
|
|
|
if (!length) { \
|
|
|
|
|
length = bytestream2_get_byte(gb); \
|
|
|
|
|
if (!length) { \
|
|
|
|
@ -498,7 +498,7 @@ static int decode_byterun(uint8_t *dst, int dst_size, |
|
|
|
|
} \
|
|
|
|
|
} \
|
|
|
|
|
for (i = 0; i < length; i++) { \
|
|
|
|
|
*(uint32_t *)(dst + y*linesize + x * pixel_size) = pixel; \
|
|
|
|
|
*(type *)(dst + y*linesize + x * sizeof(type)) = pixel; \
|
|
|
|
|
x += 1; \
|
|
|
|
|
if (x >= width) { \
|
|
|
|
|
y += 1; \
|
|
|
|
@ -521,7 +521,7 @@ static void decode_rgb8(GetByteContext *gb, uint8_t *dst, int width, int height, |
|
|
|
|
while (bytestream2_get_bytes_left(gb) >= 4) { |
|
|
|
|
uint32_t pixel = 0xFF000000 | bytestream2_get_be24(gb); |
|
|
|
|
length = bytestream2_get_byte(gb) & 0x7F; |
|
|
|
|
DECODE_RGBX_COMMON(4) |
|
|
|
|
DECODE_RGBX_COMMON(uint32_t) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -539,7 +539,7 @@ static void decode_rgbn(GetByteContext *gb, uint8_t *dst, int width, int height, |
|
|
|
|
uint32_t pixel = bytestream2_get_be16u(gb); |
|
|
|
|
length = pixel & 0x7; |
|
|
|
|
pixel >>= 4; |
|
|
|
|
DECODE_RGBX_COMMON(2) |
|
|
|
|
DECODE_RGBX_COMMON(uint16_t) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|