|
|
|
@@ -108,8 +108,6 @@ typedef struct TiffContext { |
|
|
|
int deinvert_buf_size; |
|
|
|
uint8_t *yuv_line; |
|
|
|
unsigned int yuv_line_size; |
|
|
|
uint8_t *fax_buffer; |
|
|
|
unsigned int fax_buffer_size; |
|
|
|
|
|
|
|
int geotag_count; |
|
|
|
TiffGeoTag *geotags; |
|
|
|
@@ -615,27 +613,15 @@ static int tiff_unpack_lzma(TiffContext *s, AVFrame *p, uint8_t *dst, int stride |
|
|
|
static int tiff_unpack_fax(TiffContext *s, uint8_t *dst, int stride, |
|
|
|
const uint8_t *src, int size, int width, int lines) |
|
|
|
{ |
|
|
|
int i, ret = 0; |
|
|
|
int line; |
|
|
|
uint8_t *src2; |
|
|
|
|
|
|
|
av_fast_padded_malloc(&s->fax_buffer, &s->fax_buffer_size, size); |
|
|
|
src2 = s->fax_buffer; |
|
|
|
|
|
|
|
if (!src2) { |
|
|
|
av_log(s->avctx, AV_LOG_ERROR, |
|
|
|
"Error allocating temporary buffer\n"); |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
} |
|
|
|
int ret; |
|
|
|
|
|
|
|
if (!s->fill_order) { |
|
|
|
memcpy(src2, src, size); |
|
|
|
} else { |
|
|
|
for (i = 0; i < size; i++) |
|
|
|
src2[i] = ff_reverse[src[i]]; |
|
|
|
if (s->fill_order) { |
|
|
|
if ((ret = deinvert_buffer(s, src, size)) < 0) |
|
|
|
return ret; |
|
|
|
src = s->deinvert_buf; |
|
|
|
} |
|
|
|
memset(src2 + size, 0, AV_INPUT_BUFFER_PADDING_SIZE); |
|
|
|
ret = ff_ccitt_unpack(s->avctx, src2, size, dst, lines, stride, |
|
|
|
ret = ff_ccitt_unpack(s->avctx, src, size, dst, lines, stride, |
|
|
|
s->compr, s->fax_opts); |
|
|
|
if (s->bpp < 8 && s->avctx->pix_fmt == AV_PIX_FMT_PAL8) |
|
|
|
for (line = 0; line < lines; line++) { |
|
|
|
@@ -2188,8 +2174,6 @@ static av_cold int tiff_end(AVCodecContext *avctx) |
|
|
|
s->deinvert_buf_size = 0; |
|
|
|
av_freep(&s->yuv_line); |
|
|
|
s->yuv_line_size = 0; |
|
|
|
av_freep(&s->fax_buffer); |
|
|
|
s->fax_buffer_size = 0; |
|
|
|
av_frame_free(&s->jpgframe); |
|
|
|
av_packet_free(&s->jpkt); |
|
|
|
avcodec_free_context(&s->avctx_mjpeg); |
|
|
|
|