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 const uint8_t *src,
int size,
int lines)
112 int c,
line, pixels, code;
121 unsigned long outlen;
123 outlen = width * lines;
127 ret = tiff_uncompress(zbuf, &outlen, src, size);
130 "Uncompressing failed (%lu of %lu) with error %d\n", outlen,
131 (
unsigned long)width * lines, ret);
136 for (line = 0; line < lines; line++) {
137 memcpy(dst, src, width);
150 for (line = 0; line < lines; line++) {
152 if (pixels < width) {
169 "Error allocating temporary buffer\n");
174 "Uncompressed fax mode is not supported (yet)\n");
179 memcpy(src2, src, size);
181 for (i = 0; i <
size; i++)
200 for (line = 0; line < lines; line++) {
210 for (i = 0; i <
width; i++)
211 bytestream2_put_byte(&pb,
ff_reverse[bytestream2_get_byte(&s->
gb)]);
215 for (pixels = 0; pixels <
width;) {
216 code = (int8_t)bytestream2_get_byte(&s->
gb);
221 }
else if (code != -128) {
223 c = bytestream2_get_byte(&s->
gb);
260 "This format is not supported (bpp=%d, bppcount=%d)\n",
281 for (i = 0; i < 256; i++)
282 pal[i] = i * 0x010101;
290 unsigned tag, type, count,
off, value = 0;
328 if (count <= 4 &&
type_sizes[type] * count <= 4)
345 "This format is not supported (bpp=%d, %d components)\n",
354 s->
bpp = (off & 0xFF) + ((off >> 8) & 0xFF) +
355 ((off >> 16) & 0xFF) + ((off >> 24) & 0xFF);
360 for (i = 0; i < count; i++)
371 "Samples per pixel requires a single value, many provided\n");
402 "JPEG compression is not supported\n");
411 if (type ==
TIFF_LONG && value == UINT_MAX)
415 "Incorrect value of rows per strip\n");
463 if (value < 1 || value > 2) {
465 "Unknown FillOrder value %d, trying default one\n", value);
474 if (count / 3 > 256 ||
477 pal_gb[0] = pal_gb[1] = pal_gb[2] = s->
gb;
481 for (i = 0; i < count / 3; i++) {
482 uint32_t p = 0xFF000000;
483 p |= (
tget(&pal_gb[0], type, s->
le) >>
off) << 16;
484 p |= (
tget(&pal_gb[1], type, s->
le) >>
off) << 8;
485 p |=
tget(&pal_gb[2], type, s->
le) >>
off;
523 unsigned soff, ssize;
533 id = bytestream2_get_le16(&s->
gb);
536 else if (
id == 0x4D4D)
550 "The answer to life, universe and everything is not correct!\n");
557 if (off >= UINT_MAX - 14 || avpkt->
size < off + 14) {
563 for (i = 0; i < entries; i++) {
595 for (i = 0; i < s->
height; i += s->
rps) {
602 soff =
tget(&stripdata, s->
sot, le);
606 if (soff > avpkt->
size || ssize > avpkt->
size - soff) {
618 ssize = s->
width * soff;
619 for (i = 0; i < s->
height; i++) {
620 for (j = soff; j < ssize; j++)
621 dst[j] += dst[j - soff];
631 for (j = 0; j < s->
height; j++) {
633 src[i] = 255 - src[i];
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 ...
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)
void(* release_buffer)(struct AVCodecContext *c, AVFrame *pic)
Called to release buffers which were allocated with get_buffer.
packed RGB 8:8:8, 24bpp, RGBRGB...
AVFrame * coded_frame
the picture in the bitstream
void avcodec_set_dimensions(AVCodecContext *s, int width, int height)
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)
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)
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)
static int init_image(TiffContext *s)
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)
static const uint8_t type_sizes[6]
sizes of various TIFF field types (string size = 100)
static int init(AVCodecParserContext *s)
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
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. ...
struct TiffContext TiffContext
static av_cold int tiff_end(AVCodecContext *avctx)
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...
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of the image can be address...
int width
picture width / height.
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame)
Get a buffer for a frame.
static unsigned tget(GetByteContext *gb, int type, int le)
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
int linesize[AV_NUM_DATA_POINTERS]
Size, in bytes, of the data for each picture/channel plane.
main external API structure.
static void close(AVCodecParserContext *s)
static av_always_inline unsigned int bytestream2_copy_buffer(PutByteContext *p, GetByteContext *g, unsigned int size)
void avcodec_get_frame_defaults(AVFrame *frame)
Set the fields of the given AVFrame to default values.
#define FF_ARRAY_ELEMS(a)
#define FF_INPUT_BUFFER_PADDING_SIZE
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...
#define AVERROR_INVALIDDATA
int ff_lzw_decode_init(LZWState *p, int csize, const uint8_t *buf, int buf_size, int mode)
Initialize LZW decoder.
Y , 16bpp, little-endian.
static av_always_inline int bytestream2_seek(GetByteContext *g, int offset, int whence)
const uint8_t ff_reverse[256]
This structure stores compressed data.
CCITT Fax Group 3 and 4 decompression.
if(!(ptr_align%ac->ptr_align)&&samples_align >=aligned_len)