Commit 68bed67d authored by Stefano Sabatini's avatar Stefano Sabatini

pngdec: relax condition for setting monoblack pixel format

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.
parent 85eedcf6
...@@ -467,8 +467,7 @@ static int decode_frame(AVCodecContext *avctx, ...@@ -467,8 +467,7 @@ static int decode_frame(AVCodecContext *avctx,
} else if (s->bit_depth == 16 && } else if (s->bit_depth == 16 &&
s->color_type == PNG_COLOR_TYPE_RGB) { s->color_type == PNG_COLOR_TYPE_RGB) {
avctx->pix_fmt = PIX_FMT_RGB48BE; avctx->pix_fmt = PIX_FMT_RGB48BE;
} else if (s->bit_depth == 1 && } else if (s->bit_depth == 1) {
s->color_type == PNG_COLOR_TYPE_GRAY) {
avctx->pix_fmt = PIX_FMT_MONOBLACK; avctx->pix_fmt = PIX_FMT_MONOBLACK;
} else if (s->color_type == PNG_COLOR_TYPE_PALETTE) { } else if (s->color_type == PNG_COLOR_TYPE_PALETTE) {
avctx->pix_fmt = PIX_FMT_PAL8; avctx->pix_fmt = PIX_FMT_PAL8;
...@@ -504,7 +503,7 @@ static int decode_frame(AVCodecContext *avctx, ...@@ -504,7 +503,7 @@ static int decode_frame(AVCodecContext *avctx,
s->image_buf = p->data[0]; s->image_buf = p->data[0];
s->image_linesize = p->linesize[0]; s->image_linesize = p->linesize[0];
/* copy the palette if needed */ /* 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)); memcpy(p->data[1], s->palette, 256 * sizeof(uint32_t));
/* empty row is used if differencing to the first row */ /* empty row is used if differencing to the first row */
s->last_row = av_mallocz(s->row_size); s->last_row = av_mallocz(s->row_size);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment