aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2018-04-19 20:11:02 +0200
committerMarton Balint <cus@passwd.hu>2018-05-01 21:21:49 +0200
commitda6c519f6e531239c0cc97f0d68d7f8756c6862a (patch)
treedbf7a0d689cf694fb170b91fac0cea438f1e96e4
parent29328d96b90fc20048803201b379c6c6a18661b4 (diff)
downloadffmpeg-da6c519f6e531239c0cc97f0d68d7f8756c6862a.tar.gz
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: Marton Balint <cus@passwd.hu> (cherry picked from commit c60a824ee87ae3b15ed1cb92b780bec9b642b019)
-rw-r--r--libavformat/qtpalette.c12
-rw-r--r--tests/ref/lavf-fate/mov_qtrle_mace62
2 files changed, 7 insertions, 7 deletions
diff --git a/libavformat/qtpalette.c b/libavformat/qtpalette.c
index 666c6b7351..6833f0cea9 100644
--- a/libavformat/qtpalette.c
+++ b/libavformat/qtpalette.c
@@ -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 ((bit_depth == 1 || bit_depth == 2 || bit_depth == 4 || bit_depth == 8)) {
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
* descriptions containing a color table. */
@@ -94,17 +94,17 @@ int ff_get_qtpalette(int codec_id, AVIOContext *pb, uint32_t *palette)
color_end = avio_rb16(pb);
if ((color_start <= 255) && (color_end <= 255)) {
for (i = color_start; i <= color_end; i++) {
- /* each A, R, G, or B component is 16 bits;
- * only use the top 8 bits */
- a = avio_r8(pb);
- avio_r8(pb);
+ /* Each color is made of four unsigned 16 bit integers. The
+ * first integer is 0, the remaining integers are the red,
+ * the green and the blue values. We only use the top 8 bit. */
+ avio_skip(pb, 2);
r = avio_r8(pb);
avio_r8(pb);
g = avio_r8(pb);
avio_r8(pb);
b = avio_r8(pb);
avio_r8(pb);
- palette[i] = (a << 24 ) | (r << 16) | (g << 8) | (b);
+ palette[i] = (0xFFU << 24) | (r << 16) | (g << 8) | (b);
}
}
}
diff --git a/tests/ref/lavf-fate/mov_qtrle_mace6 b/tests/ref/lavf-fate/mov_qtrle_mace6
index 30c705ee4c..f8428aaa49 100644
--- a/tests/ref/lavf-fate/mov_qtrle_mace6
+++ b/tests/ref/lavf-fate/mov_qtrle_mace6
@@ -1,3 +1,3 @@
dcc9c4c182a5809dee9a9366f4533797 *./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