67 return le ? bytestream2_get_le16(gb) : bytestream2_get_be16(gb);
72 return le ? bytestream2_get_le32(gb) : bytestream2_get_be32(gb);
78 case TIFF_BYTE:
return bytestream2_get_byte(gb);
81 default:
return UINT_MAX;
89 z_stream zstream = { 0 };
92 zstream.next_in = src;
93 zstream.avail_in =
size;
94 zstream.next_out = dst;
95 zstream.avail_out = *
len;
96 zret = inflateInit(&zstream);
101 zret = inflate(&zstream, Z_SYNC_FLUSH);
102 inflateEnd(&zstream);
103 *len = zstream.total_out;
104 return zret == Z_STREAM_END ? Z_OK : zret;
109 int width,
int lines)
112 unsigned long outlen;
114 outlen = width * lines;
118 ret = tiff_uncompress(zbuf, &outlen, src, size);
121 "Uncompressing failed (%lu of %lu) with error %d\n", outlen,
122 (
unsigned long)width * lines, ret);
127 for (line = 0; line < lines; line++) {
128 memcpy(dst, src, width);
139 const uint8_t *src,
int size,
int lines)
147 "Error allocating temporary buffer\n");
156 memcpy(src2, src, size);
158 for (i = 0; i <
size; i++)
169 const uint8_t *src,
int size,
int lines)
172 int c, line, pixels, code, ret;
173 int width = ((s->
width * s->
bpp) + 7) >> 3;
180 return tiff_unpack_zlib(s, dst, stride, src, size, width, lines);
183 "zlib support not enabled, "
184 "deflate compression not supported\n");
193 for (line = 0; line < lines; line++) {
195 if (pixels < width) {
213 for (line = 0; line < lines; line++) {
223 for (i = 0; i <
width; i++)
224 bytestream2_put_byte(&pb,
ff_reverse[bytestream2_get_byte(&s->
gb)]);
228 for (pixels = 0; pixels <
width;) {
234 }
else if (code != -128) {
236 c = bytestream2_get_byte(&s->
gb);
254 "Unsupported image parameters: bpp=%d, bppcount=%d\n",
286 "This format is not supported (bpp=%d, bppcount=%d)\n",
307 unsigned tag, type, count, off, value = 0;
344 if (count <= 4 &&
type_sizes[type] * count <= 4)
361 "This format is not supported (bpp=%d, %d components)\n",
370 s->
bpp = (off & 0xFF) + ((off >> 8) & 0xFF) +
371 ((off >> 16) & 0xFF) + ((off >> 24) & 0xFF);
376 for (i = 0; i < count; i++)
387 "Samples per pixel requires a single value, many provided\n");
429 if (!value || (type ==
TIFF_LONG && value == UINT_MAX))
477 "PhotometricInterpretation 0x%04X",
487 if (value < 1 || value > 2) {
489 "Unknown FillOrder value %d, trying default one\n", value);
497 if (count / 3 > 256 ||
500 pal_gb[0] = pal_gb[1] = pal_gb[2] = s->
gb;
504 for (i = 0; i < count / 3; i++) {
505 uint32_t p = 0xFF000000;
506 p |= (
tget(&pal_gb[0], type, s->
le) >> off) << 16;
507 p |= (
tget(&pal_gb[1], type, s->
le) >> off) << 8;
508 p |=
tget(&pal_gb[2], type, s->
le) >> off;
531 "Unknown or unsupported tag %d/0X%0X\n",
547 int i, j, entries,
stride;
548 unsigned soff, ssize;
558 id = bytestream2_get_le16(&s->
gb);
561 else if (
id == 0x4D4D)
575 "The answer to life, universe and everything is not correct!\n");
582 if (off >= UINT_MAX - 14 || avpkt->
size < off + 14) {
588 for (i = 0; i < entries; i++) {
620 for (i = 0; i < s->
height; i += s->
rps) {
627 soff =
tget(&stripdata, s->
sot, le);
631 if (soff > avpkt->
size || ssize > avpkt->
size - soff) {
646 ssize = s->
width * soff;
648 for (i = 0; i < s->
height; i++) {
649 for (j = soff; j < ssize; j += 2)
654 for (i = 0; i < s->
height; i++) {
655 for (j = soff; j < ssize; j += 2)
660 for (i = 0; i < s->
height; i++) {
661 for (j = soff; j < ssize; j++)
662 dst[j] += dst[j - soff];
670 for (i = 0; i < s->
height; i++) {
671 for (j = 0; j < p->
linesize[0]; j++)
672 dst[j] = 255 - dst[j];
int ff_lzw_decode(LZWState *p, uint8_t *buf, int len)
Decode given number of bytes NOTE: the algorithm here is inspired from the LZW GIF decoder written by...
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static av_always_inline void bytestream2_set_buffer(PutByteContext *p, const uint8_t c, unsigned int size)
This structure describes decoded (raw) audio or video data.
static int tiff_unpack_strip(TiffContext *s, uint8_t *dst, int stride, const uint8_t *src, int size, int lines)
#define AV_LOG_WARNING
Something somehow does not look correct.
packed RGB 8:8:8, 24bpp, RGBRGB...
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Check that the provided frame dimensions are valid and set them on the codec context.
static av_always_inline void bytestream2_init_writer(PutByteContext *p, uint8_t *buf, int buf_size)
av_cold void ff_lzw_decode_close(LZWState **p)
av_cold void ff_lzw_decode_open(LZWState **p)
static int init_image(TiffContext *s, AVFrame *frame)
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
#define FF_ARRAY_ELEMS(a)
static int8_t ff_u8_to_s8(uint8_t a)
static unsigned tget_short(GetByteContext *gb, int le)
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Macro definitions for various function/variable attributes.
static unsigned tget_long(GetByteContext *gb, int le)
av_cold void ff_ccitt_unpack_init(void)
initialize upacker code
static int decode(MimicContext *ctx, int quality, int num_coeffs, int is_iframe)
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
8 bit with PIX_FMT_RGB32 palette
packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as lit...
static av_cold int tiff_init(AVCodecContext *avctx)
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
static const uint8_t type_sizes[6]
sizes of various TIFF field types (string size = 100)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
16bit gray, 16bit alpha (big-endian)
static av_always_inline void bytestream2_skip(GetByteContext *g, unsigned int size)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static av_cold int tiff_end(AVCodecContext *avctx)
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
static av_always_inline unsigned int bytestream2_get_bytes_left(GetByteContext *g)
static int tiff_decode_tag(TiffContext *s)
void av_log(void *avcl, int level, const char *fmt,...)
const char * name
Name of the codec implementation.
int ff_ccitt_unpack(AVCodecContext *avctx, const uint8_t *src, int srcsize, uint8_t *dst, int height, int stride, enum TiffCompr compr, int opts)
unpack data compressed with CCITT Group 3 1/2-D or Group 4 method
packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
#define FF_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
enum TiffPhotometric photometric
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
int width
picture width / height.
static unsigned tget(GetByteContext *gb, int type, int le)
#define AVERROR_PATCHWELCOME
Not yet implemented in Libav, patches welcome.
static av_always_inline int bytestream2_seek_p(PutByteContext *p, int offset, int whence)
static av_always_inline int bytestream2_tell(GetByteContext *g)
TiffCompr
list of TIFF compression types
Libavcodec external API header.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
main external API structure.
static void close(AVCodecParserContext *s)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
static av_always_inline unsigned int bytestream2_copy_buffer(PutByteContext *p, GetByteContext *g, unsigned int size)
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb...
common internal api header.
static av_always_inline unsigned int bytestream2_get_eof(PutByteContext *p)
packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big...
int ff_lzw_decode_init(LZWState *p, int csize, const uint8_t *buf, int buf_size, int mode)
Initialize LZW decoder.
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
static av_cold int init(AVCodecParserContext *s)
Y , 16bpp, little-endian.
static av_always_inline int bytestream2_seek(GetByteContext *g, int offset, int whence)
16bit gray, 16bit alpha (little-endian)
const uint8_t ff_reverse[256]
This structure stores compressed data.
static int tiff_unpack_fax(TiffContext *s, uint8_t *dst, int stride, const uint8_t *src, int size, int lines)
CCITT Fax Group 3 and 4 decompression.