Commit 613cbf31 authored by Carl Eugen Hoyos's avatar Carl Eugen Hoyos

Fix some 1bit png samples, they can be palettised.

Fixes ticket #767.
parent 440e984b
...@@ -494,10 +494,10 @@ static int decode_frame(AVCodecContext *avctx, ...@@ -494,10 +494,10 @@ 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) {
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;
} else if (s->bit_depth == 1) {
avctx->pix_fmt = PIX_FMT_MONOBLACK;
} else if (s->bit_depth == 8 && } else if (s->bit_depth == 8 &&
s->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) { s->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
avctx->pix_fmt = PIX_FMT_GRAY8A; avctx->pix_fmt = PIX_FMT_GRAY8A;
...@@ -609,6 +609,23 @@ static int decode_frame(AVCodecContext *avctx, ...@@ -609,6 +609,23 @@ static int decode_frame(AVCodecContext *avctx,
} }
exit_loop: 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){ if(s->bits_per_pixel == 2){
int i, j; int i, j;
uint8_t *pd = s->current_picture->data[0]; uint8_t *pd = s->current_picture->data[0];
......
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