Commit c60a824e authored by Marton Balint's avatar Marton Balint

avformat/qtpalette: parse color table according to the QuickTime file format specs

The specs says that the the first color component in the color array is
not alpha, but simply 0.

Fixes 0 alpha of fate-suite/cvid/catfight-cvid-pal8-partial.mov
Signed-off-by: 's avatarMarton Balint <cus@passwd.hu>
parent da55304c
...@@ -49,7 +49,7 @@ int ff_get_qtpalette(int codec_id, AVIOContext *pb, uint32_t *palette) ...@@ -49,7 +49,7 @@ int ff_get_qtpalette(int codec_id, AVIOContext *pb, uint32_t *palette)
/* If the depth is 1, 2, 4, or 8 bpp, file is palettized. */ /* If the depth is 1, 2, 4, or 8 bpp, file is palettized. */
if ((bit_depth == 1 || bit_depth == 2 || bit_depth == 4 || bit_depth == 8)) { if ((bit_depth == 1 || bit_depth == 2 || bit_depth == 4 || bit_depth == 8)) {
uint32_t color_count, color_start, color_end; uint32_t color_count, color_start, color_end;
uint32_t a, r, g, b; uint32_t r, g, b;
/* Ignore the greyscale bit for 1-bit video and sample /* Ignore the greyscale bit for 1-bit video and sample
* descriptions containing a color table. */ * descriptions containing a color table. */
...@@ -94,17 +94,17 @@ int ff_get_qtpalette(int codec_id, AVIOContext *pb, uint32_t *palette) ...@@ -94,17 +94,17 @@ int ff_get_qtpalette(int codec_id, AVIOContext *pb, uint32_t *palette)
color_end = avio_rb16(pb); color_end = avio_rb16(pb);
if ((color_start <= 255) && (color_end <= 255)) { if ((color_start <= 255) && (color_end <= 255)) {
for (i = color_start; i <= color_end; i++) { for (i = color_start; i <= color_end; i++) {
/* each A, R, G, or B component is 16 bits; /* Each color is made of four unsigned 16 bit integers. The
* only use the top 8 bits */ * first integer is 0, the remaining integers are the red,
a = avio_r8(pb); * the green and the blue values. We only use the top 8 bit. */
avio_r8(pb); avio_skip(pb, 2);
r = avio_r8(pb); r = avio_r8(pb);
avio_r8(pb); avio_r8(pb);
g = avio_r8(pb); g = avio_r8(pb);
avio_r8(pb); avio_r8(pb);
b = avio_r8(pb); b = avio_r8(pb);
avio_r8(pb); avio_r8(pb);
palette[i] = (a << 24 ) | (r << 16) | (g << 8) | (b); palette[i] = (0xFFU << 24) | (r << 16) | (g << 8) | (b);
} }
} }
} }
......
dcc9c4c182a5809dee9a9366f4533797 *./tests/data/lavf-fate/lavf.mov dcc9c4c182a5809dee9a9366f4533797 *./tests/data/lavf-fate/lavf.mov
1270387 ./tests/data/lavf-fate/lavf.mov 1270387 ./tests/data/lavf-fate/lavf.mov
./tests/data/lavf-fate/lavf.mov CRC=0x5ec66f68 ./tests/data/lavf-fate/lavf.mov CRC=0x9320cd26
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment