summaryrefslogtreecommitdiff
path: root/libavcodec/tiff.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-03-30 08:26:43 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-04-02 17:40:54 +0200
commitb0cd60bd97ec403579bd7d12e6f55d7caa0d616d (patch)
tree22438da7efee9455b9d7b30deb27154d96ab41c9 /libavcodec/tiff.c
parentf0042e573e13858ab16b08ad9899eb8c908cd058 (diff)
avcodec/tiff: Don't use separate temporary buffer for fax
Also don't unnecessarily copy the input data around if it needn't be reversed; and remove a redundant memset -- av_fast_padded_malloc() already does this for us. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'libavcodec/tiff.c')
-rw-r--r--libavcodec/tiff.c28
1 files changed, 6 insertions, 22 deletions
diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c
index f8c68f1e7d..819672eea0 100644
--- a/libavcodec/tiff.c
+++ b/libavcodec/tiff.c
@@ -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);