Compressed stream support

Compressed stream support. More...


Data Structures

struct  gavl_compression_info_t
 Compression format. More...
struct  gavl_packet_t
 Packet structure. More...

Defines

#define GAVL_COMPRESSION_HAS_P_FRAMES   (1<<0)
 Not all frames are keyframes.
#define GAVL_COMPRESSION_HAS_B_FRAMES   (1<<1)
 Frames don't appear in presentation order.
#define GAVL_COMPRESSION_HAS_FIELD_PICTURES   (1<<2)
 Packets can consist of 2 consecutive fields.
#define GAVL_COMPRESSION_SBR   (1<<3)
 Samplerate got doubled by decoder, format and sample counts are for the upsampled rate.
#define GAVL_PACKET_TYPE_I   'I'
 Packet is an I-frame.
#define GAVL_PACKET_TYPE_P   'P'
 Packet is a P-frame.
#define GAVL_PACKET_TYPE_B   'B'
 Packet is a B-frame.
#define GAVL_PACKET_TYPE_MASK   0xff
 Mask for frame type.
#define GAVL_PACKET_KEYFRAME   (1<<8)
 Packet is a keyframe.
#define GAVL_PACKET_LAST   (1<<9)
 Packet is the last in the stream (only Xiph codecs need this flag).

Enumerations

enum  gavl_codec_id_t {
  GAVL_CODEC_ID_NONE = 0,
  GAVL_CODEC_ID_ALAW = 1,
  GAVL_CODEC_ID_ULAW,
  GAVL_CODEC_ID_MP2,
  GAVL_CODEC_ID_MP3,
  GAVL_CODEC_ID_AC3,
  GAVL_CODEC_ID_AAC,
  GAVL_CODEC_ID_VORBIS,
  GAVL_CODEC_ID_JPEG = 0x10000,
  GAVL_CODEC_ID_PNG,
  GAVL_CODEC_ID_TIFF,
  GAVL_CODEC_ID_TGA,
  GAVL_CODEC_ID_MPEG1,
  GAVL_CODEC_ID_MPEG2,
  GAVL_CODEC_ID_MPEG4_ASP,
  GAVL_CODEC_ID_H264,
  GAVL_CODEC_ID_THEORA,
  GAVL_CODEC_ID_DIRAC,
  GAVL_CODEC_ID_DV
}

Functions

GAVL_PUBLIC void gavl_compression_info_free (gavl_compression_info_t *info)
 Free all dynamically allocated memory of a compression info.
GAVL_PUBLIC void gavl_compression_info_dump (const gavl_compression_info_t *info)
 Dump a compression info to stderr.
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_PUBLIC int gavl_compression_need_pixelformat (gavl_codec_id_t id)
 Check if the compression supports multiple pixelformats.
GAVL_PUBLIC void gavl_packet_alloc (gavl_packet_t *p, int len)
 Allocate memory for a packet.
GAVL_PUBLIC void gavl_packet_free (gavl_packet_t *p)
 Free memory of a packet.
GAVL_PUBLIC void gavl_packet_dump (const gavl_packet_t *p)
 Dump a packet to stderr.

Variables

gavl_codec_id_t gavl_compression_info_t::id
 Codec ID.
uint8_t * gavl_compression_info_t::global_header
 Global header.
int gavl_compression_info_t::global_header_len
 Length of global header.
int gavl_compression_info_t::bitrate
 Needed by some codecs, negative values mean VBR.
int gavl_compression_info_t::palette_size
 Size of the embedded palette for image codecs.
int gavl_packet_t::data_len
 Length of data.
int gavl_packet_t::data_alloc
 How many bytes got allocated.
int gavl_packet_t::flags
 ORed combination of GAVL_PACKET_* flags.
int64_t gavl_packet_t::pts
 Presentation time.
int64_t gavl_packet_t::duration
 Duration of the contained frame.
int gavl_packet_t::field2_offset
 Offset of field 2 for field pictures.
int gavl_packet_t::header_size
 Size of a repeated global header (or 0).
int gavl_packet_t::sequence_end_pos
 Position of sequence end code if any.


Detailed Description

Compressed stream support.

gavl provides some structures and functions for handling compressed data packets. It is a completely independent API layer and has nothing to do with the uncompressed video and audio API. In particular the conversion between compressed and uncompressed data (i.e. codecs) are outside the scope of gavl. These are implemented in gmerlin-avdecoder and gmerlin encoding plugins.


Define Documentation

#define GAVL_COMPRESSION_HAS_P_FRAMES   (1<<0)

Not all frames are keyframes.

#define GAVL_COMPRESSION_HAS_B_FRAMES   (1<<1)

Frames don't appear in presentation order.

#define GAVL_COMPRESSION_HAS_FIELD_PICTURES   (1<<2)

Packets can consist of 2 consecutive fields.

#define GAVL_COMPRESSION_SBR   (1<<3)

Samplerate got doubled by decoder, format and sample counts are for the upsampled rate.

#define GAVL_PACKET_TYPE_I   'I'

Packet is an I-frame.

#define GAVL_PACKET_TYPE_P   'P'

Packet is a P-frame.

#define GAVL_PACKET_TYPE_B   'B'

Packet is a B-frame.

#define GAVL_PACKET_TYPE_MASK   0xff

Mask for frame type.

#define GAVL_PACKET_KEYFRAME   (1<<8)

Packet is a keyframe.

#define GAVL_PACKET_LAST   (1<<9)

Packet is the last in the stream (only Xiph codecs need this flag).


Enumeration Type Documentation

Enumerator:
GAVL_CODEC_ID_NONE  Unknown/unsupported compression format.
GAVL_CODEC_ID_ALAW  alaw 2:1
GAVL_CODEC_ID_ULAW  mu-law 2:1
GAVL_CODEC_ID_MP2  MPEG-1 audio layer II.
GAVL_CODEC_ID_MP3  MPEG-1/2 audio layer 3 CBR/VBR.
GAVL_CODEC_ID_AC3  AC3.
GAVL_CODEC_ID_AAC  AAC as stored in quicktime/mp4.
GAVL_CODEC_ID_VORBIS  Vorbis (segmented extradata and packets).
GAVL_CODEC_ID_JPEG  JPEG image.
GAVL_CODEC_ID_PNG  PNG image.
GAVL_CODEC_ID_TIFF  TIFF image.
GAVL_CODEC_ID_TGA  TGA image.
GAVL_CODEC_ID_MPEG1  MPEG-1 video.
GAVL_CODEC_ID_MPEG2  MPEG-2 video.
GAVL_CODEC_ID_MPEG4_ASP  MPEG-4 ASP (a.k.a. Divx4).
GAVL_CODEC_ID_H264  H.264 (Annex B).
GAVL_CODEC_ID_THEORA  Theora (segmented extradata.
GAVL_CODEC_ID_DIRAC  Complete DIRAC frames, sequence end code appended to last packet.
GAVL_CODEC_ID_DV  DV (several variants).


Function Documentation

GAVL_PUBLIC void gavl_compression_info_free ( gavl_compression_info_t info  ) 

Free all dynamically allocated memory of a compression info.

Parameters:
info A compression info

GAVL_PUBLIC void gavl_compression_info_dump ( const gavl_compression_info_t info  ) 

Dump a compression info to stderr.

Parameters:
info A compression info
Use this for debugging

GAVL_PUBLIC const char* gavl_compression_get_extension ( gavl_codec_id_t  id,
int *  separate 
)

Get the file extension of the corresponding raw format.

Parameters:
id A codec ID
separate If non-null returns 1 if each packet should be in a separate file
Returns:
The file extension of the raw file or NULL
This function can be used for writing elementary streams to files. It returns a suitable file extension. If separate is 1, each packet should be written to a separate file. This basically means, that the codec corresponds to an image format.

Not all compression formats have a suitable elementary stream format, in this case NULL is returned for the extension. Most prominent examples are Vorbis and Theora, which can hardly exist outside an OGG container.

GAVL_PUBLIC int gavl_compression_need_pixelformat ( gavl_codec_id_t  id  ) 

Check if the compression supports multiple pixelformats.

Parameters:
id A codec ID
Returns:
1 if the compression ID must be associated with a pixelformat, 0 else
This function can be used by decoding libraries to check if the compresison ID is sufficient or if the pixelformat must be valid in the associated video format.

GAVL_PUBLIC void gavl_packet_alloc ( gavl_packet_t p,
int  len 
)

Allocate memory for a packet.

Parameters:
p A packet
len Number of bytes you want to store in the packet
This function uses realloc(), which means that it preserves the data already contained in the packet.

GAVL_PUBLIC void gavl_packet_free ( gavl_packet_t p  ) 

Free memory of a packet.

Parameters:
p A packet

GAVL_PUBLIC void gavl_packet_dump ( const gavl_packet_t p  ) 

Dump a packet to stderr.

Parameters:
p A packet
Use this for debugging


Variable Documentation

Codec ID.

Global header.

Length of global header.

Needed by some codecs, negative values mean VBR.

Size of the embedded palette for image codecs.

int gavl_packet_t::data_len [inherited]

Length of data.

int gavl_packet_t::data_alloc [inherited]

How many bytes got allocated.

int gavl_packet_t::flags [inherited]

ORed combination of GAVL_PACKET_* flags.

int64_t gavl_packet_t::pts [inherited]

Presentation time.

int64_t gavl_packet_t::duration [inherited]

Duration of the contained frame.

Offset of field 2 for field pictures.

int gavl_packet_t::header_size [inherited]

Size of a repeated global header (or 0).

Position of sequence end code if any.


Generated on Mon Jan 31 18:18:42 2011 for gavl by  doxygen 1.5.9