22#ifndef GAVL_COMPRESSION_H_INCLUDED
23#define GAVL_COMPRESSION_H_INCLUDED
25#include <gavl/gavldefs.h>
26#include <gavl/value.h>
48#define GAVL_COMPRESSION_HAS_P_FRAMES (1<<0)
51#define GAVL_COMPRESSION_HAS_B_FRAMES (1<<1)
54#define GAVL_COMPRESSION_HAS_FIELD_PICTURES (1<<2)
57#define GAVL_COMPRESSION_SBR (1<<3)
60#define GAVL_COMPRESSION_BIG_ENDIAN (1<<4)
62#define GAVL_MK_FOURCC(a, b, c, d) ((a<<24)|(b<<16)|(c<<8)|d)
111#define GAVL_BITRATE_VBR -1
112#define GAVL_BITRATE_LOSSLESS -2
189 const uint8_t * data,
int len);
194 const uint8_t * data,
int len);
282GAVL_PUBLIC
const char *
290GAVL_PUBLIC
const char *
323#define GAVL_PACKET_TYPE_I 0x01
324#define GAVL_PACKET_TYPE_P 0x02
325#define GAVL_PACKET_TYPE_B 0x03
326#define GAVL_PACKET_TYPE_MASK 0x03
328#define GAVL_PACKET_KEYFRAME (1<<2)
329#define GAVL_PACKET_LAST (1<<3)
330#define GAVL_PACKET_EXT (1<<4)
331#define GAVL_PACKET_REF (1<<5)
332#define GAVL_PACKET_NOOUTPUT (1<<6)
334#define GAVL_PACKET_HAS_FDS (1<<7)
336#define GAVL_PACKET_FIELD_PIC (1<<8)
337#define GAVL_PACKET_SKIP (1<<9)
340#define GAVL_PACKET_FLAG_PRIV (1<<16)
342#define GAVL_PACKET_PADDING 32
348 GAVL_PACKET_EXTRADATA_NONE = 0,
349 GAVL_PACKET_EXTRADATA_PALETTE,
350 GAVL_PACKET_EXTRADATA_FDS,
351 } gavl_packet_extradata_type_t;
353#define GAVL_PACKET_MAX_EXTRADATA 2
377gavl_palette_create(
void);
396 gavl_packet_extradata_type_t type;
484void * gavl_packet_add_extradata(
gavl_packet_t * p, gavl_packet_extradata_type_t type);
487void * gavl_packet_get_extradata(
gavl_packet_t * p, gavl_packet_extradata_type_t type);
546 const char * filename);
567 int64_t duration_min;
568 int64_t duration_max;
573 int64_t total_packets;
591 int64_t pts, int64_t duration,
int data_len,
599 gavl_dictionary_t * m);
605 gavl_dictionary_t * m);
609 gavl_dictionary_t * m);
614 gavl_dictionary_t * m);
625typedef struct gavl_packet_pts_cache_s gavl_packet_pts_cache_t;
628gavl_packet_pts_cache_t * gavl_packet_pts_cache_create(
int size);
631void gavl_packet_pts_cache_destroy(gavl_packet_pts_cache_t *);
634void gavl_packet_pts_cache_push(gavl_packet_pts_cache_t *m,
const gavl_packet_t * pkt);
637int gavl_packet_pts_cache_get_first(gavl_packet_pts_cache_t *m,
gavl_packet_t * pkt);
640int gavl_packet_pts_cache_get_by_pts(gavl_packet_pts_cache_t *m,
gavl_packet_t * pkt,
644void gavl_packet_pts_cache_clear(gavl_packet_pts_cache_t *m);
673void gavl_seek_index_append_pos_pts(
gavl_seek_index_t * idx, int64_t position, int64_t pts);
686void gavl_seek_index_to_buffer(
const gavl_seek_index_t * idx, gavl_buffer_t * buf);
689int gavl_seek_index_from_buffer(
gavl_seek_index_t * idx,
const gavl_buffer_t * buf);
GAVL_PUBLIC void gavl_compression_info_dump(const gavl_compression_info_t *info)
Dump a compression info to stderr.
GAVL_PUBLIC void gavl_packet_dump(const gavl_packet_t *p)
Dump a packet to stderr.
GAVL_PUBLIC int gavl_compression_need_pixelformat(gavl_codec_id_t id)
Check if the compression supports multiple pixelformats.
GAVL_PUBLIC void gavl_compression_info_dumpi(const gavl_compression_info_t *info, int num)
Dump a compression info to stderr.
GAVL_PUBLIC gavl_codec_id_t gavl_get_compression(int index)
Get a compression format for a specified index.
GAVL_PUBLIC void gavl_packet_copy_metadata(gavl_packet_t *dst, const gavl_packet_t *src)
Copy metadata of a packet.
GAVL_PUBLIC void gavl_packet_reset(gavl_packet_t *p)
Reset a packet.
GAVL_PUBLIC const char * gavl_compression_get_extension(gavl_codec_id_t id, int *separate)
Get the file extension of the corresponding raw format.
gavl_codec_id_t
Codec ID.
Definition compression.h:71
GAVL_PUBLIC void gavl_compression_info_init(gavl_compression_info_t *info)
Initialize a compression info.
GAVL_PUBLIC int gavl_compression_get_sample_size(gavl_codec_id_t id)
Check if an audio compression size for each samples.
GAVL_PUBLIC void gavl_packet_free(gavl_packet_t *p)
Free memory of a packet.
GAVL_PUBLIC int gavl_num_compressions()
Get the number of compression formats.
GAVL_PUBLIC void gavl_packet_alloc(gavl_packet_t *p, int len)
Allocate memory for a packet.
GAVL_PUBLIC void gavl_packet_copy(gavl_packet_t *dst, const gavl_packet_t *src)
Copy a packet.
GAVL_PUBLIC gavl_codec_id_t gavl_compression_from_short_name(const char *name)
Get a compression from the short name.
GAVL_PUBLIC void gavl_compression_info_copy(gavl_compression_info_t *dst, const gavl_compression_info_t *src)
Copy a compression info.
GAVL_PUBLIC void gavl_packet_save(const gavl_packet_t *p, const char *filename)
Save a packet to a file.
GAVL_PUBLIC uint8_t * gavl_extract_xiph_header(gavl_buffer_t *codec_header, int idx, int *header_len)
Extract a Xiph packet to a global header.
GAVL_PUBLIC const char * gavl_compression_get_long_name(gavl_codec_id_t id)
Return the long name of the compression.
GAVL_PUBLIC int gavl_compression_constant_frame_samples(gavl_codec_id_t id)
Check if an audio compression constant frame samples.
GAVL_PUBLIC void gavl_packet_init(gavl_packet_t *p)
Initialize a packet.
GAVL_PUBLIC void gavl_append_xiph_header(gavl_buffer_t *codec_header, uint8_t *header, int header_len)
Append a Xiph packet to a global header.
GAVL_PUBLIC void gavl_compression_info_free(gavl_compression_info_t *info)
Free all dynamically allocated memory of a compression info.
GAVL_PUBLIC const char * gavl_compression_get_short_name(gavl_codec_id_t id)
Return the short name of the compression.
const char * gavl_compression_get_mimetype(const gavl_compression_info_t *ci)
Get the mimetype for the corresponding elementary format.
@ GAVL_CODEC_ID_VORBIS
Vorbis (segmented extradata and packets)
Definition compression.h:84
@ GAVL_CODEC_ID_SPEEX
Speex.
Definition compression.h:87
@ GAVL_CODEC_ID_DTS
DTS.
Definition compression.h:88
@ GAVL_CODEC_ID_MPEG1
MPEG-1 video.
Definition compression.h:95
@ GAVL_CODEC_ID_DV
DV (several variants)
Definition compression.h:101
@ GAVL_CODEC_ID_AC3
AC3.
Definition compression.h:82
@ GAVL_CODEC_ID_DIRAC
Complete DIRAC frames, sequence end code appended to last packet.
Definition compression.h:100
@ GAVL_CODEC_ID_TGA
TGA image.
Definition compression.h:94
@ GAVL_CODEC_ID_MPEG2
MPEG-2 video.
Definition compression.h:96
@ GAVL_CODEC_ID_AAC
AAC as stored in quicktime/mp4.
Definition compression.h:83
@ GAVL_CODEC_ID_VP8
VP8 (as used in webm)
Definition compression.h:102
@ GAVL_CODEC_ID_MPEG4_ASP
MPEG-4 ASP (a.k.a. Divx4)
Definition compression.h:97
@ GAVL_CODEC_ID_JPEG
JPEG image.
Definition compression.h:91
@ GAVL_CODEC_ID_H264
H.264 (Annex B)
Definition compression.h:98
@ GAVL_CODEC_ID_MP2
MPEG-1 audio layer II.
Definition compression.h:80
@ GAVL_CODEC_ID_TIFF
TIFF image.
Definition compression.h:93
@ GAVL_CODEC_ID_FLAC
Flac (extradata contain a file header without comment and seektable)
Definition compression.h:85
@ GAVL_CODEC_ID_THEORA
Theora (segmented extradata)
Definition compression.h:99
@ GAVL_CODEC_ID_DIV3
Old style Divx (aka MSMPEG4V3)
Definition compression.h:103
@ GAVL_CODEC_ID_MP3
MPEG-1/2 audio layer 3 CBR/VBR.
Definition compression.h:81
@ GAVL_CODEC_ID_DVDSUB
DVD subtitles, palette is in header.
Definition compression.h:106
@ GAVL_CODEC_ID_PNG
PNG image.
Definition compression.h:92
@ GAVL_CODEC_ID_ALAW
alaw 2:1
Definition compression.h:78
@ GAVL_CODEC_ID_NONE
Unknown/unsupported compression format. In gavf files this signals that the stream consists of uncomp...
Definition compression.h:76
@ GAVL_CODEC_ID_OPUS
Opus.
Definition compression.h:86
@ GAVL_CODEC_ID_EXTENDED
Separate compression id.
Definition compression.h:107
@ GAVL_CODEC_ID_ULAW
mu-law 2:1
Definition compression.h:79
uint64_t gavl_timecode_t
Typedef for timecodes.
Definition timecode.h:43
#define GAVL_MAX_PLANES
Definition gavl.h:1418
Compression format.
Definition compression.h:125
gavl_codec_id_t id
Codec ID.
Definition compression.h:127
gavl_buffer_t codec_header
Global header.
Definition compression.h:129
int flags
ORed combination of GAVL_COMPRESSION_* flags.
Definition compression.h:126
int video_buffer_size
VBV buffer size for video (in BYTES)
Definition compression.h:135
int bitrate
Needed by some codecs, negative values mean VBR.
Definition compression.h:131
int pre_skip
Samples to skip at the start.
Definition compression.h:133
int palette_size
Size of the embedded palette for image codecs.
Definition compression.h:132
Definition compression.h:356
Packet structure.
Definition compression.h:415
int64_t pes_pts
PTS from the PES stream (probably in another scale)
Definition compression.h:424
gavl_rectangle_i_t src_rect
Rectangle to take from a video frame.
Definition compression.h:435
gavl_timecode_t timecode
Timecode.
Definition compression.h:433
int64_t dts
Decoding time.
Definition compression.h:423
int64_t pts
Presentation time.
Definition compression.h:422
uint32_t field2_offset
Offset of field 2 for field pictures.
Definition compression.h:428
gavl_interlace_mode_t interlace_mode
Interlace mode for mixed interlacing.
Definition compression.h:432
uint32_t sequence_end_pos
Position of sequence end code if any.
Definition compression.h:430
uint32_t header_size
Size of a repeated global header (or 0)
Definition compression.h:429
gavl_buffer_t buf
Data.
Definition compression.h:416
int32_t dst_y
Y-coordinate in the destination frame (for overlays)
Definition compression.h:437
int64_t position
Position of the packet in the file. The exact meaning is format dependent.
Definition compression.h:420
int64_t duration
Duration of the contained frame.
Definition compression.h:426
int32_t id
ID of the gavf stream where this packet belongs.
Definition compression.h:439
int32_t dst_x
X-coordinate in the destination frame (for overlays)
Definition compression.h:436
uint32_t flags
ORed combination of GAVL_PACKET_* flags.
Definition compression.h:418
Definition compression.h:362
Definition compression.h:371
Integer rectangle.
Definition gavl.h:1431
Definition compression.h:656
Definition compression.h:564