diff options
author | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2011-12-27 18:17:57 +0100 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2011-12-27 18:17:57 +0100 |
commit | 613cbf31680324fd73558f0e4ad36f1eb062221e (patch) | |
tree | dc02d687ed6556b24e2c8b34f3b2c0d6cea4d605 | |
parent | 440e984b712ff02ee0fc5deb7db8d4ae57eed4fc (diff) | |
download | ffmpeg-613cbf31680324fd73558f0e4ad36f1eb062221e.tar.gz |
Fix some 1bit png samples, they can be palettised.
Fixes ticket #767.
-rw-r--r-- | libavcodec/pngdec.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c index 609b21e2aa..0ede85fe18 100644 --- a/libavcodec/pngdec.c +++ b/libavcodec/pngdec.c @@ -494,10 +494,10 @@ 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) { - avctx->pix_fmt = PIX_FMT_MONOBLACK; } else if (s->color_type == PNG_COLOR_TYPE_PALETTE) { avctx->pix_fmt = PIX_FMT_PAL8; + } else if (s->bit_depth == 1) { + avctx->pix_fmt = PIX_FMT_MONOBLACK; } else if (s->bit_depth == 8 && s->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) { avctx->pix_fmt = PIX_FMT_GRAY8A; @@ -609,6 +609,23 @@ static int decode_frame(AVCodecContext *avctx, } exit_loop: + if(s->bits_per_pixel == 1 && s->color_type == PNG_COLOR_TYPE_PALETTE){ + int i, j; + uint8_t *pd = s->current_picture->data[0]; + for(j=0; j < s->height; j++) { + for(i=s->width/8-1; i>=0; i--) { + pd[8*i+7]= pd[i] &1; + pd[8*i+6]= (pd[i]>>1)&1; + pd[8*i+5]= (pd[i]>>2)&1; + pd[8*i+4]= (pd[i]>>3)&1; + pd[8*i+3]= (pd[i]>>4)&1; + pd[8*i+2]= (pd[i]>>5)&1; + pd[8*i+1]= (pd[i]>>6)&1; + pd[8*i+0]= pd[i]>>7; + } + pd += s->image_linesize; + } + } if(s->bits_per_pixel == 2){ int i, j; uint8_t *pd = s->current_picture->data[0]; |