|
|
|
@ -108,20 +108,21 @@ static int pnm_decode_frame(AVCodecContext *avctx, void *data, |
|
|
|
|
linesize = p->linesize[0]; |
|
|
|
|
if (s->bytestream + n * avctx->height > s->bytestream_end) |
|
|
|
|
return -1; |
|
|
|
|
if(s->type < 4){ |
|
|
|
|
if(s->type < 4 || (is_mono && s->type==7)){ |
|
|
|
|
for (i=0; i<avctx->height; i++) { |
|
|
|
|
PutBitContext pb; |
|
|
|
|
init_put_bits(&pb, ptr, linesize); |
|
|
|
|
for(j=0; j<avctx->width * components; j++){ |
|
|
|
|
unsigned int c=0; |
|
|
|
|
int v=0; |
|
|
|
|
if(s->type < 4) |
|
|
|
|
while(s->bytestream < s->bytestream_end && (*s->bytestream < '0' || *s->bytestream > '9' )) |
|
|
|
|
s->bytestream++; |
|
|
|
|
if(s->bytestream >= s->bytestream_end) |
|
|
|
|
return -1; |
|
|
|
|
if (is_mono) { |
|
|
|
|
/* read a single digit */ |
|
|
|
|
v = (*s->bytestream++) - '0'; |
|
|
|
|
v = (*s->bytestream++)&1; |
|
|
|
|
} else { |
|
|
|
|
/* read a sequence of digits */ |
|
|
|
|
do { |
|
|
|
@ -260,7 +261,7 @@ AVCodec ff_pam_decoder = { |
|
|
|
|
.close = ff_pnm_end, |
|
|
|
|
.decode = pnm_decode_frame, |
|
|
|
|
.capabilities = CODEC_CAP_DR1, |
|
|
|
|
.pix_fmts = (const enum PixelFormat[]){PIX_FMT_RGB24, PIX_FMT_RGB32, PIX_FMT_GRAY8, PIX_FMT_MONOWHITE, PIX_FMT_NONE}, |
|
|
|
|
.pix_fmts = (const enum PixelFormat[]){PIX_FMT_RGB24, PIX_FMT_RGB32, PIX_FMT_GRAY8, PIX_FMT_MONOBLACK, PIX_FMT_NONE}, |
|
|
|
|
.long_name = NULL_IF_CONFIG_SMALL("PAM (Portable AnyMap) image"), |
|
|
|
|
}; |
|
|
|
|
#endif |
|
|
|
|