summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2012-01-12 01:47:59 +0000
committerMichael Niedermayer <michaelni@gmx.at>2012-01-12 16:32:55 +0100
commitbd36ec55bef7c446079e192655d065fd86483876 (patch)
tree005fa59deca579ea6b98910eabe7dcc736e71c2a /libavcodec
parentf068ce570f7c378106bd7afdad6455b22ac28020 (diff)
bmpdec: proper check for alpha
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/bmp.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/libavcodec/bmp.c b/libavcodec/bmp.c
index e77360a598..b7853d1093 100644
--- a/libavcodec/bmp.c
+++ b/libavcodec/bmp.c
@@ -49,6 +49,7 @@ static int bmp_decode_frame(AVCodecContext *avctx,
unsigned int ihsize;
int i, j, n, linesize;
uint32_t rgb[3];
+ uint32_t alpha = 0;
uint8_t *ptr;
int dsize;
const uint8_t *buf0 = buf;
@@ -131,6 +132,8 @@ static int bmp_decode_frame(AVCodecContext *avctx,
rgb[0] = bytestream_get_le32(&buf);
rgb[1] = bytestream_get_le32(&buf);
rgb[2] = bytestream_get_le32(&buf);
+ if (ihsize >= 108)
+ alpha = bytestream_get_le32(&buf);
}
avctx->width = width;
@@ -142,13 +145,13 @@ static int bmp_decode_frame(AVCodecContext *avctx,
case 32:
if(comp == BMP_BITFIELDS){
if (rgb[0] == 0xFF000000 && rgb[1] == 0x00FF0000 && rgb[2] == 0x0000FF00)
- avctx->pix_fmt = PIX_FMT_ABGR;
+ avctx->pix_fmt = alpha ? PIX_FMT_ABGR : PIX_FMT_0BGR;
else if (rgb[0] == 0x00FF0000 && rgb[1] == 0x0000FF00 && rgb[2] == 0x000000FF)
- avctx->pix_fmt = PIX_FMT_BGRA;
+ avctx->pix_fmt = alpha ? PIX_FMT_BGRA : PIX_FMT_BGR0;
else if (rgb[0] == 0x0000FF00 && rgb[1] == 0x00FF0000 && rgb[2] == 0xFF000000)
- avctx->pix_fmt = PIX_FMT_ARGB;
+ avctx->pix_fmt = alpha ? PIX_FMT_ARGB : PIX_FMT_0RGB;
else if (rgb[0] == 0x000000FF && rgb[1] == 0x0000FF00 && rgb[2] == 0x00FF0000)
- avctx->pix_fmt = PIX_FMT_RGBA;
+ avctx->pix_fmt = alpha ? PIX_FMT_RGBA : PIX_FMT_RGB0;
else {
av_log(avctx, AV_LOG_ERROR, "Unknown bitfields %0X %0X %0X\n", rgb[0], rgb[1], rgb[2]);
return AVERROR(EINVAL);