avcodec/bmp: Analyze BGRA files alpha channel to choose pixel format
authorMichael Niedermayer <michael@niedermayer.cc>
Thu, 10 Sep 2015 14:06:14 +0000 (16:06 +0200)
committerMichael Niedermayer <michael@niedermayer.cc>
Thu, 10 Sep 2015 14:36:47 +0000 (16:36 +0200)
BGRA BMPs commonly do contain an all transparent alpha channel

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
libavcodec/bmp.c

index 42270da..3019d01 100644 (file)
@@ -337,6 +337,20 @@ static int bmp_decode_frame(AVCodecContext *avctx,
             return AVERROR_INVALIDDATA;
         }
     }
+    if (avctx->pix_fmt == AV_PIX_FMT_BGRA) {
+        for (i = 0; i < avctx->height; i++) {
+            int j;
+            uint8_t *ptr = p->data[0] + p->linesize[0]*i + 3;
+            for (j = 0; j < avctx->width; j++) {
+                if (ptr[4*j])
+                    break;
+            }
+            if (j < avctx->width)
+                break;
+        }
+        if (i == avctx->height)
+            avctx->pix_fmt = p->format = AV_PIX_FMT_BGR0;
+    }
 
     *got_frame = 1;