45 #define TIFF_MAX_ENTRY 32
49 0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8, 4
111 flip ^= ((
int[]) { 0, 0, 0, 1, 3, 3 })[type];
114 *(*p)++ = val[i ^
flip];
133 bytestream_put_le16(&entries_ptr, tag);
134 bytestream_put_le16(&entries_ptr, type);
135 bytestream_put_le32(&entries_ptr, count);
138 tnput(&entries_ptr, count, ptr_val, type, 0);
140 bytestream_put_le32(&entries_ptr, *s->
buf - s->
buf_start);
143 tnput(s->
buf, count, ptr_val, type, 0);
156 type ==
TIFF_SHORT ? (
void *)&w : (
void *)&dw);
179 if (compress(dst, &zlen, src, n) != Z_OK) {
193 src, 1, n, 2, 0xff, -1, 0);
211 for (i = 0; i < w; i++) {
220 for (i = 0; i < w; i++) {
231 #define ADD_ENTRY(s, tag, type, count, ptr_val) \
233 ret = add_entry(s, tag, type, count, ptr_val); \
238 #define ADD_ENTRY1(s, tag, type, val) \
240 ret = add_entry1(s, tag, type, val); \
246 const AVFrame *pict,
int *got_packet)
256 uint32_t res[2] = { s->
dpi, 1 };
259 int is_yuv = 0,
alpha = 0;
260 int shift_h, shift_v;
309 "This colors format is not supported\n");
331 packet_size = avctx->
height * bytes_per_row * 2 +
347 bytestream_put_le16(&ptr, 0x4949);
348 bytestream_put_le16(&ptr, 42);
351 bytestream_put_le32(&ptr, 0);
380 zlen = bytes_per_row * s->
rps;
388 for (j = 0; j < s->
rps; j++) {
391 memcpy(zbuf + zn, s->
yuv_line, bytes_per_row);
394 memcpy(zbuf + j * bytes_per_row,
416 for (i = 0; i < s->
height; i++) {
431 ptr, bytes_per_row, s->
compr);
483 uint16_t pal[256 * 3];
484 for (i = 0; i < 256; i++) {
485 uint32_t rgb = *(uint32_t *) (p->
data[1] + i * 4);
486 pal[i] = ((rgb >> 16) & 0xff) * 257;
487 pal[i + 256] = ((rgb >> 8) & 0xff) * 257;
488 pal[i + 512] = (rgb & 0xff) * 257;
496 uint32_t refbw[12] = { 15, 1, 235, 1, 128, 1, 240, 1, 128, 1, 240, 1 };
503 bytestream_put_le32(&offset, ptr - pkt->
data);
511 bytestream_put_le32(&ptr, 0);
518 return ret < 0 ? ret : 0;
548 #define OFFSET(x) offsetof(TiffEncoderContext, x)
549 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
static av_cold int encode_init(AVCodecContext *avctx)
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size)
Check AVPacket size and/or allocate data.
const char const char void * val
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
int num_entries
number of entries
static av_cold int encode_close(AVCodecContext *avctx)
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
This structure describes decoded (raw) audio or video data.
unsigned int bpp
bits per pixel
static int check_size(TiffEncoderContext *s, uint64_t need)
Check free space in buffer.
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
#define LIBAVUTIL_VERSION_INT
packed RGB 8:8:8, 24bpp, RGBRGB...
int strips
number of strips
AVFrame * coded_frame
the picture in the bitstream
static av_cold int init(AVCodecContext *avctx)
int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
Return the number of bits per pixel used by the pixel format described by pixdesc.
unsigned int strip_offsets_size
int ff_lzw_encode(struct LZWEncodeState *s, const uint8_t *inbuf, int insize)
LZW main compress function.
uint8_t ** buf
actual position in buffer
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel...
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size)
Same behaviour av_fast_malloc but the buffer has additional FF_INPUT_BUFFER_PADDING_SIZE at the end w...
int compr
compression level
static int add_entry1(TiffEncoderContext *s, enum TiffTags tag, enum TiffTypes type, int val)
static AVRational av_make_q(int num, int den)
Create a rational.
struct LZWEncodeState * lzws
LZW encode state.
uint8_t * buf_start
pointer to first byte in buffer
static const uint8_t type_sizes[14]
sizes of various TIFF field types (string size = 100)
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
#define av_assert0(cond)
assert() equivalent, that is always enabled.
#define ADD_ENTRY1(s, tag, type, val)
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
8 bit with AV_PIX_FMT_RGB32 palette
#define CODEC_CAP_INTRA_ONLY
Codec is intra only.
packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as lit...
static const uint8_t type_sizes2[14]
sizes of various TIFF field types (string size = 1)
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
#define CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
int bits_per_coded_sample
bits per sample/pixel from the demuxer (needed for huffyuv).
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples.
#define AV_OPT_FLAG_ENCODING_PARAM
a generic parameter which can be set by the user for muxing or encoding
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
int ff_lzw_encode_flush(struct LZWEncodeState *s, void(*lzw_flush_put_bits)(struct PutBitContext *))
#define ADD_ENTRY(s, tag, type, count, ptr_val)
uint16_t depth_minus1
Number of bits in the component minus 1.
unsigned int strip_sizes_size
static double alpha(void *priv, double x, double y)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift)
Utility function to access log2_chroma_w log2_chroma_h from the pixel format AVPixFmtDescriptor.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
const char * name
Name of the codec implementation.
static const uint8_t offset[127][2]
Libavcodec external API header.
packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
int flags
A combination of AV_PKT_FLAG values.
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
uint8_t nb_components
The number of components each pixel has, (1-4)
enum AVPictureType pict_type
Picture type of the frame.
#define FF_MIN_BUFFER_SIZE
minimum encoding buffer size Used to avoid some checks during header writing.
int width
picture width / height.
ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2.
TiffTypes
data type identifiers for TIFF tags
static int add_entry(TiffEncoderContext *s, enum TiffTags tag, enum TiffTypes type, int count, const void *ptr_val)
Add entry to directory in tiff header.
static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pict, int *got_packet)
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
#define AV_OPT_FLAG_VIDEO_PARAM
main external API structure.
static const AVClass tiffenc_class
planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
Describe the class of an AVClass context structure.
rational number numerator/denominator
static void tnput(uint8_t **p, int n, const uint8_t *val, enum TiffTypes type, int flip)
Put n values to buffer.
uint16_t subsampling[2]
YUV subsampling factors.
uint8_t entries[TIFF_MAX_ENTRY *12]
entries in header
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...
static void pack_yuv(TiffEncoderContext *s, const AVFrame *p, uint8_t *dst, int lnum)
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
void ff_lzw_encode_init(struct LZWEncodeState *s, uint8_t *outbuf, int outsize, int maxbits, enum FF_LZW_MODES mode, void(*lzw_put_bits)(struct PutBitContext *, int, unsigned int))
common internal api header.
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
#define CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb...
int bpp_tab_size
bpp_tab size
static void flip(AVCodecContext *avctx, AVPicture *picture)
void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size)
Same behaviour av_fast_padded_malloc except that buffer will always be 0-initialized after call...
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
static av_always_inline void bytestream_put_buffer(uint8_t **b, const uint8_t *src, unsigned int size)
static const AVOption options[]
Y , 16bpp, little-endian.
int key_frame
1 -> keyframe, 0-> not
16bit gray, 16bit alpha (little-endian)
planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
enum TiffPhotometric photometric_interpretation
photometric interpretation
int ff_rle_encode(uint8_t *outbuf, int out_size, const uint8_t *ptr, int bpp, int w, int add_rep, int xor_rep, int add_raw, int xor_raw)
RLE compress the row, with maximum size of out_size.
uint32_t dpi
image resolution in DPI
const int ff_lzw_encode_state_size
unsigned int yuv_line_size
#define AVERROR_EXTERNAL
Generic error in an external library.
AVPixelFormat
Pixel format.
This structure stores compressed data.
TiffTags
abridged list of TIFF tags
static int encode_strip(TiffEncoderContext *s, const int8_t *src, uint8_t *dst, int n, int compr)
Encode one strip in tiff file.
packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is st...