mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
Merge commit '016c5b066de08a93a5f6b5beb0ef377356b35cde'
* commit '016c5b066de08a93a5f6b5beb0ef377356b35cde': tiff: refactor fax support in a separate function Conflicts: libavcodec/tiff.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
1fec361f35
@ -470,6 +470,44 @@ static int tiff_unpack_zlib(TiffContext *s, uint8_t *dst, int stride,
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
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_malloc((unsigned)size +
|
||||
FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
|
||||
if (!src2) {
|
||||
av_log(s->avctx, AV_LOG_ERROR,
|
||||
"Error allocating temporary buffer\n");
|
||||
return AVERROR(ENOMEM);
|
||||
}
|
||||
if (s->fax_opts & 2) {
|
||||
av_log(s->avctx, AV_LOG_ERROR,
|
||||
"Uncompressed fax mode is not supported (yet)\n");
|
||||
av_free(src2);
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
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, FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
ret = ff_ccitt_unpack(s->avctx, src2, 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++) {
|
||||
horizontal_fill(s->bpp, dst, 1, dst, 0, width, 0);
|
||||
dst += stride;
|
||||
}
|
||||
av_free(src2);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int tiff_unpack_strip(TiffContext *s, uint8_t *dst, int stride,
|
||||
const uint8_t *src, int size, int lines)
|
||||
{
|
||||
@ -510,43 +548,7 @@ static int tiff_unpack_strip(TiffContext *s, uint8_t *dst, int stride,
|
||||
if (s->compr == TIFF_CCITT_RLE ||
|
||||
s->compr == TIFF_G3 ||
|
||||
s->compr == TIFF_G4) {
|
||||
int i, ret = 0;
|
||||
uint8_t *src2 = av_malloc((unsigned)size +
|
||||
FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
|
||||
if (!src2) {
|
||||
av_log(s->avctx, AV_LOG_ERROR,
|
||||
"Error allocating temporary buffer\n");
|
||||
return AVERROR(ENOMEM);
|
||||
}
|
||||
if (s->fax_opts & 2) {
|
||||
av_log(s->avctx, AV_LOG_ERROR,
|
||||
"Uncompressed fax mode is not supported (yet)\n");
|
||||
av_free(src2);
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
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, FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
switch (s->compr) {
|
||||
case TIFF_CCITT_RLE:
|
||||
case TIFF_G3:
|
||||
case TIFF_G4:
|
||||
ret = ff_ccitt_unpack(s->avctx, src2, size, dst, lines, stride,
|
||||
s->compr, s->fax_opts);
|
||||
break;
|
||||
}
|
||||
if (s->bpp < 8 && s->avctx->pix_fmt == AV_PIX_FMT_PAL8)
|
||||
for (line = 0; line < lines; line++) {
|
||||
horizontal_fill(s->bpp, dst, 1, dst, 0, width, 0);
|
||||
dst += stride;
|
||||
}
|
||||
av_free(src2);
|
||||
return ret;
|
||||
return tiff_unpack_fax(s, dst, stride, src, size, width, lines);
|
||||
}
|
||||
for (line = 0; line < lines; line++) {
|
||||
if (src - ssrc > size) {
|
||||
|
Loading…
Reference in New Issue
Block a user