diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2011-09-06 15:35:15 +0400 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-09-06 16:11:04 +0400 |
commit | 738219c921d6037f8acfcde1c567c3b16fb625fe (patch) | |
tree | d2340b490ccc22443712d2c4a4c31af762974e3f /libavcodec/pngdec.c | |
parent | 6dbac85f8d20c77283e3d01f42a7c2154bbf976d (diff) |
pngdec: 4bpp support
Fixes Ticket208
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/pngdec.c')
-rw-r--r-- | libavcodec/pngdec.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c index 70635671c2..0b6a62dc1d 100644 --- a/libavcodec/pngdec.c +++ b/libavcodec/pngdec.c @@ -27,7 +27,7 @@ #include "png.h" /* TODO: - * - add 2, 4 and 16 bit depth support + * - add 2 and 16 bit depth support */ #include <zlib.h> @@ -580,6 +580,19 @@ static int decode_frame(AVCodecContext *avctx, } } exit_loop: + + if(s->bits_per_pixel == 4){ + int i, j; + uint8_t *pd = s->current_picture->data[0]; + for(j=0; j < s->height; j++) { + for(i=s->width/2-1; i>=0; i--) { + pd[2*i+1]= pd[i]&15; + pd[2*i+0]= pd[i]>>4; + } + pd += s->image_linesize; + } + } + /* handle p-frames only if a predecessor frame is available */ if(s->last_picture->data[0] != NULL) { if(!(avpkt->flags & AV_PKT_FLAG_KEY)) { |