summaryrefslogtreecommitdiff
path: root/libavcodec/pngdec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2011-09-06 13:35:15 +0200
committerMichael Niedermayer <michaelni@gmx.at>2011-09-06 14:11:04 +0200
commit738219c921d6037f8acfcde1c567c3b16fb625fe (patch)
treed2340b490ccc22443712d2c4a4c31af762974e3f /libavcodec/pngdec.c
parent6dbac85f8d20c77283e3d01f42a7c2154bbf976d (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.c15
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)) {