summaryrefslogtreecommitdiff
path: root/libavformat/qtpalette.c
diff options
context:
space:
mode:
authorMats Peterson <matsp888@yahoo.com>2015-12-29 07:35:00 +0100
committerMichael Niedermayer <michael@niedermayer.cc>2015-12-29 13:12:18 +0100
commitbd03ee1184e404e8fc69f8ab4787b2ee02554d5b (patch)
tree617486e373f40507dd74a38bef08aa3af62e947b /libavformat/qtpalette.c
parentc51c08e0e70c186971385bdbb225f69edd4e3375 (diff)
lavf/qtpalette: Treat 1-bit video as palettized
This commit for qtpalette.c and qtpalette.h adds 1-bit video to the "palettized video" category, since if the video sample description contains a palette, the two colors in the palette can be any color, not necessarily black & white. Unfortunately, I've noticed that the qtrle (QuickTime Animation) decoder blindly assumes that 1-bit video is black & white. I don't have enough knowledge about the decoder to fix this, though. Below is a link to a sample 1-bit QuickTime Animation clip of a rotating earth that uses blueish colors, and they will be correctly rendered in QuickTime, but not in FFmpeg (which will use black & white). https://drive.google.com/open?id=0B3_pEBoLs0faUlItWm9KaGJSTEE Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavformat/qtpalette.c')
-rw-r--r--libavformat/qtpalette.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/libavformat/qtpalette.c b/libavformat/qtpalette.c
index 770df56481..6544a551eb 100644
--- a/libavformat/qtpalette.c
+++ b/libavformat/qtpalette.c
@@ -46,8 +46,8 @@ int ff_get_qtpalette(int codec_id, AVIOContext *pb, uint32_t *palette)
if (greyscale && codec_id == AV_CODEC_ID_CINEPAK)
return 0;
- /* If the depth is 2, 4, or 8 bpp, file is palettized. */
- if ((bit_depth == 2 || bit_depth == 4 || bit_depth == 8)) {
+ /* 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)) {
int color_count, color_start, color_end;
uint32_t a, r, g, b;
@@ -70,7 +70,9 @@ int ff_get_qtpalette(int codec_id, AVIOContext *pb, uint32_t *palette)
* color table */
const uint8_t *color_table;
color_count = 1 << bit_depth;
- if (bit_depth == 2)
+ if (bit_depth == 1)
+ color_table = ff_qt_default_palette_2;
+ else if (bit_depth == 2)
color_table = ff_qt_default_palette_4;
else if (bit_depth == 4)
color_table = ff_qt_default_palette_16;