-- Mats Peterson http://matsp888.no-ip.org/~mats/
>From c27daa7279b3ccaf93d43621cc22c5ceac5c406c Mon Sep 17 00:00:00 2001 From: Mats Peterson <matsp...@yahoo.com> Date: Sat, 20 Feb 2016 12:57:50 +0100 Subject: [PATCH v3 1/4] lavf/riffenc: Write space for palette
--- libavformat/riffenc.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/libavformat/riffenc.c b/libavformat/riffenc.c index ceb27f2..25bccf2 100644 --- a/libavformat/riffenc.c +++ b/libavformat/riffenc.c @@ -209,6 +209,12 @@ void ff_put_bmp_header(AVIOContext *pb, AVCodecContext *enc, int keep_height = enc->extradata_size >= 9 && !memcmp(enc->extradata + enc->extradata_size - 9, "BottomUp", 9); int extradata_size = enc->extradata_size - 9*keep_height; + int raw_pal_avi; + + raw_pal_avi = !for_asf && enc->codec_id == AV_CODEC_ID_RAWVIDEO && + enc->bits_per_coded_sample >= 1 && enc->bits_per_coded_sample <= 8; + if (!enc->extradata_size && raw_pal_avi) + extradata_size = 4 * (1 << enc->bits_per_coded_sample); /* size */ avio_wl32(pb, 40 + (ignore_extradata ? 0 :extradata_size)); @@ -228,10 +234,20 @@ void ff_put_bmp_header(AVIOContext *pb, AVCodecContext *enc, avio_wl32(pb, 0); if (!ignore_extradata) { - avio_write(pb, enc->extradata, extradata_size); - - if (!for_asf && extradata_size & 1) - avio_w8(pb, 0); + if (enc->extradata_size) { + avio_write(pb, enc->extradata, extradata_size); + if (!for_asf && extradata_size & 1) + avio_w8(pb, 0); + } else if (raw_pal_avi) { + int i; + for (i = 0; i < 1 << enc->bits_per_coded_sample; i++) { + /* Initialize 1 bpp palette to black & white */ + if (!i && enc->bits_per_coded_sample == 1) + avio_wl32(pb, 0xffffff); + else + avio_wl32(pb, 0); + } + } } } -- 1.7.10.4
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel