mirror of https://git.ffmpeg.org/ffmpeg.git
tiff: refactor fax support in a separate function
This commit is contained in:
parent
103937681d
commit
016c5b066d
|
@ -142,6 +142,38 @@ static int tiff_unpack_zlib(TiffContext *s, uint8_t *dst, int stride,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
static int tiff_unpack_fax(TiffContext *s, uint8_t *dst, int stride,
|
||||||
|
const uint8_t *src, int size, int lines)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
ret = ff_ccitt_unpack(s->avctx, src2, size, dst, lines, stride,
|
||||||
|
s->compr, s->fax_opts);
|
||||||
|
av_free(src2);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static int tiff_unpack_strip(TiffContext *s, uint8_t *dst, int stride,
|
static int tiff_unpack_strip(TiffContext *s, uint8_t *dst, int stride,
|
||||||
const uint8_t *src, int size, int lines)
|
const uint8_t *src, int size, int lines)
|
||||||
{
|
{
|
||||||
|
@ -171,38 +203,7 @@ static int tiff_unpack_strip(TiffContext *s, uint8_t *dst, int stride,
|
||||||
if (s->compr == TIFF_CCITT_RLE ||
|
if (s->compr == TIFF_CCITT_RLE ||
|
||||||
s->compr == TIFF_G3 ||
|
s->compr == TIFF_G3 ||
|
||||||
s->compr == TIFF_G4) {
|
s->compr == TIFF_G4) {
|
||||||
int i, ret = 0;
|
return tiff_unpack_fax(s, dst, stride, src, size, lines);
|
||||||
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;
|
|
||||||
}
|
|
||||||
av_free(src2);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
for (line = 0; line < lines; line++) {
|
for (line = 0; line < lines; line++) {
|
||||||
if (src - ssrc > size) {
|
if (src - ssrc > size) {
|
||||||
|
|
Loading…
Reference in New Issue