This patch 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 Mats -- Mats Peterson http://matsp888.no-ip.org/~mats/
>From 172d0252f8c4b9ee8032cf43d43322ced547d7a8 Mon Sep 17 00:00:00 2001 From: Mats Peterson <matsp...@yahoo.com> Date: Tue, 29 Dec 2015 06:22:35 +0100 Subject: [PATCH] lavf/qtpalette: Treat 1-bit video as palettized This patch 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 Mats --- libavformat/qtpalette.c | 4 ++-- libavformat/qtpalette.h | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/libavformat/qtpalette.c b/libavformat/qtpalette.c index 770df56..4db8d2b 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; diff --git a/libavformat/qtpalette.h b/libavformat/qtpalette.h index da83421..b2bd360 100644 --- a/libavformat/qtpalette.h +++ b/libavformat/qtpalette.h @@ -26,6 +26,11 @@ #include <stdint.h> #include "avformat.h" +static const uint8_t ff_qt_default_palette_2[2 * 3] = { + 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00 +}; + static const uint8_t ff_qt_default_palette_4[4 * 3] = { 0x93, 0x65, 0x5E, 0xFF, 0xFF, 0xFF, -- 1.7.10.4
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel