diff options
author | Mats Peterson <matsp888@yahoo.com> | 2016-03-03 00:28:23 +0100 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2016-03-05 18:05:47 +0100 |
commit | 698fdc85478f5782dda9f390ff4327fe8053000d (patch) | |
tree | cd0162e39635aad7203127fb3e330c39552438f5 /libavformat/riffenc.c | |
parent | 0443b2cf790f62fa1405ec7e916a9416a7dc4b16 (diff) | |
download | ffmpeg-698fdc85478f5782dda9f390ff4327fe8053000d.tar.gz |
lavf/riffenc: Handle palette for non-raw codecs
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavformat/riffenc.c')
-rw-r--r-- | libavformat/riffenc.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/libavformat/riffenc.c b/libavformat/riffenc.c index 1dd7971b4c..195a58ea7f 100644 --- a/libavformat/riffenc.c +++ b/libavformat/riffenc.c @@ -209,12 +209,17 @@ 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; + enum AVPixelFormat pix_fmt = enc->pix_fmt; + int pal_avi; - raw_pal_avi = !for_asf && enc->codec_id == AV_CODEC_ID_RAWVIDEO && - !enc->codec_tag && - enc->bits_per_coded_sample >= 1 && enc->bits_per_coded_sample <= 8; - if (!enc->extradata_size && raw_pal_avi) + if (pix_fmt == AV_PIX_FMT_NONE && enc->bits_per_coded_sample == 1) + pix_fmt = AV_PIX_FMT_MONOWHITE; + pal_avi = !for_asf && + (pix_fmt == AV_PIX_FMT_PAL8 || + pix_fmt == AV_PIX_FMT_MONOWHITE || + pix_fmt == AV_PIX_FMT_MONOBLACK); + + if (!enc->extradata_size && pal_avi) extradata_size = 4 * (1 << enc->bits_per_coded_sample); /* size */ @@ -239,11 +244,8 @@ void ff_put_bmp_header(AVIOContext *pb, AVCodecContext *enc, avio_write(pb, enc->extradata, extradata_size); if (!for_asf && extradata_size & 1) avio_w8(pb, 0); - } else if (raw_pal_avi) { + } else if (pal_avi) { int i; - enum AVPixelFormat pix_fmt = enc->pix_fmt; - if (pix_fmt == AV_PIX_FMT_NONE && enc->bits_per_coded_sample == 1) - pix_fmt = AV_PIX_FMT_MONOWHITE; for (i = 0; i < 1 << enc->bits_per_coded_sample; i++) { /* Initialize 1 bpp palette to black & white */ if (i == 0 && pix_fmt == AV_PIX_FMT_MONOWHITE) |