dds: Fix palette decoding

Red and blue channels were decoded in the wrong order.

Found-By: ami_stuff
pull/140/head
Vittorio Giovara 10 years ago
parent ea4d46e729
commit 57214b2f7f
  1. 10
      libavcodec/dds.c
  2. 2
      tests/ref/fate/dds-pal
  3. 2
      tests/ref/fate/dds-pal-ati

@ -645,11 +645,15 @@ static int dds_decode(AVCodecContext *avctx, void *data,
if (ctx->paletted) { if (ctx->paletted) {
int i; int i;
uint32_t *p = (uint32_t *)frame->data[1]; uint8_t *p = frame->data[1];
/* Use the first 1024 bytes as palette, then copy the rest. */ /* Use the first 1024 bytes as palette, then copy the rest. */
for (i = 0; i < 256; i++) for (i = 0; i < 256; i++) {
p[i] = bytestream2_get_le32(gbc); p[i * 4 + 2] = bytestream2_get_byte(gbc);
p[i * 4 + 1] = bytestream2_get_byte(gbc);
p[i * 4 + 0] = bytestream2_get_byte(gbc);
p[i * 4 + 3] = bytestream2_get_byte(gbc);
}
frame->palette_has_changed = 1; frame->palette_has_changed = 1;
} }

@ -1,2 +1,2 @@
#tb 0: 1/25 #tb 0: 1/25
0, 0, 0, 1, 65536, 0xbffee5cd 0, 0, 0, 1, 65536, 0x4287e5cd

@ -1,2 +1,2 @@
#tb 0: 1/25 #tb 0: 1/25
0, 0, 0, 1, 16384, 0x23068060 0, 0, 0, 1, 16384, 0x6ac18060

Loading…
Cancel
Save