will be decoded correctly. This fixes issue 1423. Originally committed as revision 20065 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.6
| @@ -269,7 +269,7 @@ static int find_group3_syncmarker(GetBitContext *gb, int srcsize) | |||||
| int ff_ccitt_unpack(AVCodecContext *avctx, | int ff_ccitt_unpack(AVCodecContext *avctx, | ||||
| const uint8_t *src, int srcsize, | const uint8_t *src, int srcsize, | ||||
| uint8_t *dst, int height, int stride, enum TiffCompr compr) | |||||
| uint8_t *dst, int height, int stride, enum TiffCompr compr, int opts) | |||||
| { | { | ||||
| int j; | int j; | ||||
| GetBitContext gb; | GetBitContext gb; | ||||
| @@ -293,9 +293,10 @@ int ff_ccitt_unpack(AVCodecContext *avctx, | |||||
| return -1; | return -1; | ||||
| } | } | ||||
| }else{ | }else{ | ||||
| int g3d1 = (compr == TIFF_G3) && !(opts & 1); | |||||
| if(compr!=TIFF_CCITT_RLE && find_group3_syncmarker(&gb, srcsize*8) < 0) | if(compr!=TIFF_CCITT_RLE && find_group3_syncmarker(&gb, srcsize*8) < 0) | ||||
| break; | break; | ||||
| if(compr==TIFF_CCITT_RLE || get_bits1(&gb)) | |||||
| if(compr==TIFF_CCITT_RLE || g3d1 || get_bits1(&gb)) | |||||
| ret = decode_group3_1d_line(avctx, &gb, avctx->width, runs, runend); | ret = decode_group3_1d_line(avctx, &gb, avctx->width, runs, runend); | ||||
| else | else | ||||
| ret = decode_group3_2d_line(avctx, &gb, avctx->width, runs, runend, ref); | ret = decode_group3_2d_line(avctx, &gb, avctx->width, runs, runend, ref); | ||||
| @@ -40,6 +40,6 @@ void ff_ccitt_unpack_init(void); | |||||
| */ | */ | ||||
| int ff_ccitt_unpack(AVCodecContext *avctx, | int ff_ccitt_unpack(AVCodecContext *avctx, | ||||
| const uint8_t *src, int srcsize, | const uint8_t *src, int srcsize, | ||||
| uint8_t *dst, int height, int stride, enum TiffCompr compr); | |||||
| uint8_t *dst, int height, int stride, enum TiffCompr compr, int opts); | |||||
| #endif /* AVCODEC_FAXCOMPR_H */ | #endif /* AVCODEC_FAXCOMPR_H */ | ||||
| @@ -146,13 +146,11 @@ static int tiff_unpack_strip(TiffContext *s, uint8_t* dst, int stride, const uin | |||||
| src2[i] = ff_reverse[src[i]]; | src2[i] = ff_reverse[src[i]]; | ||||
| } | } | ||||
| memset(src2+size, 0, FF_INPUT_BUFFER_PADDING_SIZE); | memset(src2+size, 0, FF_INPUT_BUFFER_PADDING_SIZE); | ||||
| if(s->compr == TIFF_G3 && !(s->fax_opts & 1)) | |||||
| s->compr = TIFF_CCITT_RLE; | |||||
| switch(s->compr){ | switch(s->compr){ | ||||
| case TIFF_CCITT_RLE: | case TIFF_CCITT_RLE: | ||||
| case TIFF_G3: | case TIFF_G3: | ||||
| case TIFF_G4: | case TIFF_G4: | ||||
| ret = ff_ccitt_unpack(s->avctx, src2, size, dst, lines, stride, s->compr); | |||||
| ret = ff_ccitt_unpack(s->avctx, src2, size, dst, lines, stride, s->compr, s->fax_opts); | |||||
| break; | break; | ||||
| } | } | ||||
| av_free(src2); | av_free(src2); | ||||