pngdec: relax condition for setting monoblack pixel format
authorStefano Sabatini <stefano.sabatini-lala@poste.it>
Sun, 15 May 2011 23:51:04 +0000 (01:51 +0200)
committerStefano Sabatini <stefano.sabatini-lala@poste.it>
Mon, 16 May 2011 14:34:47 +0000 (16:34 +0200)
Ignore color_type information for setting the monoblack pixel format,
only rely on bit_depth.

In particular: fix Test_1bpp_grayscale.png from issue #172.

This may work fine for some broken encoder, and not for others.

libavcodec/pngdec.c

index 100b60c..9732396 100644 (file)
@@ -467,8 +467,7 @@ static int decode_frame(AVCodecContext *avctx,
                 } else if (s->bit_depth == 16 &&
                            s->color_type == PNG_COLOR_TYPE_RGB) {
                     avctx->pix_fmt = PIX_FMT_RGB48BE;
-                } else if (s->bit_depth == 1 &&
-                           s->color_type == PNG_COLOR_TYPE_GRAY) {
+                } else if (s->bit_depth == 1) {
                     avctx->pix_fmt = PIX_FMT_MONOBLACK;
                 } else if (s->color_type == PNG_COLOR_TYPE_PALETTE) {
                     avctx->pix_fmt = PIX_FMT_PAL8;
@@ -504,7 +503,7 @@ static int decode_frame(AVCodecContext *avctx,
                 s->image_buf = p->data[0];
                 s->image_linesize = p->linesize[0];
                 /* copy the palette if needed */
-                if (s->color_type == PNG_COLOR_TYPE_PALETTE)
+                if (avctx->pix_fmt == PIX_FMT_PAL8)
                     memcpy(p->data[1], s->palette, 256 * sizeof(uint32_t));
                 /* empty row is used if differencing to the first row */
                 s->last_row = av_mallocz(s->row_size);