mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-04-10 19:23:00 +00:00
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>
This commit is contained in:
parent
f0042e573e
commit
b0cd60bd97
@ -108,8 +108,6 @@ typedef struct TiffContext {
|
|||||||
int deinvert_buf_size;
|
int deinvert_buf_size;
|
||||||
uint8_t *yuv_line;
|
uint8_t *yuv_line;
|
||||||
unsigned int yuv_line_size;
|
unsigned int yuv_line_size;
|
||||||
uint8_t *fax_buffer;
|
|
||||||
unsigned int fax_buffer_size;
|
|
||||||
|
|
||||||
int geotag_count;
|
int geotag_count;
|
||||||
TiffGeoTag *geotags;
|
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,
|
static int tiff_unpack_fax(TiffContext *s, uint8_t *dst, int stride,
|
||||||
const uint8_t *src, int size, int width, int lines)
|
const uint8_t *src, int size, int width, int lines)
|
||||||
{
|
{
|
||||||
int i, ret = 0;
|
|
||||||
int line;
|
int line;
|
||||||
uint8_t *src2;
|
int ret;
|
||||||
|
|
||||||
av_fast_padded_malloc(&s->fax_buffer, &s->fax_buffer_size, size);
|
if (s->fill_order) {
|
||||||
src2 = s->fax_buffer;
|
if ((ret = deinvert_buffer(s, src, size)) < 0)
|
||||||
|
return ret;
|
||||||
if (!src2) {
|
src = s->deinvert_buf;
|
||||||
av_log(s->avctx, AV_LOG_ERROR,
|
|
||||||
"Error allocating temporary buffer\n");
|
|
||||||
return AVERROR(ENOMEM);
|
|
||||||
}
|
}
|
||||||
|
ret = ff_ccitt_unpack(s->avctx, src, size, dst, lines, stride,
|
||||||
if (!s->fill_order) {
|
|
||||||
memcpy(src2, src, size);
|
|
||||||
} else {
|
|
||||||
for (i = 0; i < size; i++)
|
|
||||||
src2[i] = ff_reverse[src[i]];
|
|
||||||
}
|
|
||||||
memset(src2 + size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
|
|
||||||
ret = ff_ccitt_unpack(s->avctx, src2, size, dst, lines, stride,
|
|
||||||
s->compr, s->fax_opts);
|
s->compr, s->fax_opts);
|
||||||
if (s->bpp < 8 && s->avctx->pix_fmt == AV_PIX_FMT_PAL8)
|
if (s->bpp < 8 && s->avctx->pix_fmt == AV_PIX_FMT_PAL8)
|
||||||
for (line = 0; line < lines; line++) {
|
for (line = 0; line < lines; line++) {
|
||||||
@ -2188,8 +2174,6 @@ static av_cold int tiff_end(AVCodecContext *avctx)
|
|||||||
s->deinvert_buf_size = 0;
|
s->deinvert_buf_size = 0;
|
||||||
av_freep(&s->yuv_line);
|
av_freep(&s->yuv_line);
|
||||||
s->yuv_line_size = 0;
|
s->yuv_line_size = 0;
|
||||||
av_freep(&s->fax_buffer);
|
|
||||||
s->fax_buffer_size = 0;
|
|
||||||
av_frame_free(&s->jpgframe);
|
av_frame_free(&s->jpgframe);
|
||||||
av_packet_free(&s->jpkt);
|
av_packet_free(&s->jpkt);
|
||||||
avcodec_free_context(&s->avctx_mjpeg);
|
avcodec_free_context(&s->avctx_mjpeg);
|
||||||
|
Loading…
Reference in New Issue
Block a user