64 return le ? bytestream2_get_le16(gb) : bytestream2_get_be16(gb);
69 return le ? bytestream2_get_le32(gb) : bytestream2_get_be32(gb);
75 case TIFF_BYTE:
return bytestream2_get_byte(gb);
78 default:
return UINT_MAX;
83 static int tiff_uncompress(uint8_t *dst,
unsigned long *
len,
const uint8_t *src,
int size)
88 memset(&zstream, 0,
sizeof(zstream));
89 zstream.next_in = src;
90 zstream.avail_in =
size;
91 zstream.next_out = dst;
92 zstream.avail_out = *
len;
93 zret = inflateInit(&zstream);
98 zret = inflate(&zstream, Z_SYNC_FLUSH);
100 *len = zstream.total_out;
101 return zret == Z_STREAM_END ? Z_OK : zret;
107 int c,
line, pixels, code;
110 uint8_t *zbuf;
unsigned long outlen;
114 outlen = width * lines;
116 ret = tiff_uncompress(zbuf, &outlen, src, size);
118 av_log(s->
avctx,
AV_LOG_ERROR,
"Uncompressing failed (%lu of %lu) with error %d\n", outlen, (
unsigned long)width * lines, ret);
123 for(line = 0; line < lines; line++){
124 memcpy(dst, src, width);
137 for (line = 0; line < lines; line++) {
139 if (pixels < width) {
162 memcpy(src2, src, size);
164 for(i = 0; i <
size; i++)
182 for(line = 0; line < lines; line++){
192 for (i = 0; i <
width; i++)
193 bytestream2_put_byte(&pb,
av_reverse[bytestream2_get_byte(&s->
gb)]);
197 for(pixels = 0; pixels <
width;){
198 code = (int8_t)bytestream2_get_byte(&s->
gb);
203 }
else if(code != -128){
205 c = bytestream2_get_byte(&s->
gb);
224 "Unsupported image parameters: bpp=%d, bppcount=%d\n",
250 "This format is not supported (bpp=%d, bppcount=%d)\n",
271 for (i = 0; i < 256; i++)
272 pal[i] = i * 0x010101;
280 unsigned tag, type, count,
off, value = 0;
317 if (count <= 4 &&
type_sizes[type] * count <= 4)
336 if(count == 1) s->
bpp = value;
340 s->
bpp = (off & 0xFF) + ((off >> 8) & 0xFF) + ((off >> 16) & 0xFF) + ((off >> 24) & 0xFF);
345 for (i = 0; i < count; i++)
356 "Samples per pixel requires a single value, many provided\n");
394 if (type ==
TIFF_LONG && value == UINT_MAX)
443 if(value < 1 || value > 2){
453 if (count / 3 > 256 ||
456 pal_gb[0] = pal_gb[1] = pal_gb[2] = s->
gb;
460 for(i = 0; i < count / 3; i++){
461 uint32_t p = 0xFF000000;
462 p |= (
tget(&pal_gb[0], type, s->
le) >>
off) << 16;
463 p |= (
tget(&pal_gb[1], type, s->
le) >>
off) << 8;
464 p |=
tget(&pal_gb[2], type, s->
le) >>
off;
492 void *
data,
int *data_size,
502 unsigned soff, ssize;
512 id = bytestream2_get_le16(&s->
gb);
513 if(
id == 0x4949)
le = 1;
514 else if(
id == 0x4D4D)
le = 0;
526 av_log(avctx,
AV_LOG_ERROR,
"The answer to life, universe and everything is not correct!\n");
533 if (
off >= UINT_MAX - 14 || avpkt->
size <
off + 14) {
539 for(i = 0; i < entries; i++){
582 if (soff > avpkt->
size || ssize > avpkt->
size - soff) {
594 ssize = s->
width * soff;
595 for(i = 0; i < s->
height; i++) {
596 for(j = soff; j < ssize; j++)
597 dst[j] += dst[j - soff];
607 for(j = 0; j < s->
height; j++){
609 src[i] = 255 - src[i];