compression.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef GAVL_COMPRESSION_H_INCLUDED
00023 #define GAVL_COMPRESSION_H_INCLUDED
00024
00025 #include <gavl/gavldefs.h>
00026
00027 #ifdef __cplusplus
00028 extern "C" {
00029 #endif
00030
00045 #define GAVL_COMPRESSION_HAS_P_FRAMES (1<<0) //!< Not all frames are keyframes
00046 #define GAVL_COMPRESSION_HAS_B_FRAMES (1<<1) //!< Frames don't appear in presentation order
00047 #define GAVL_COMPRESSION_HAS_FIELD_PICTURES (1<<2) //!< Packets can consist of 2 consecutive fields
00048 #define GAVL_COMPRESSION_SBR (1<<3) //!< Samplerate got doubled by decoder, format and sample counts are for the upsampled rate
00049
00055 typedef enum
00056 {
00057 GAVL_CODEC_ID_NONE = 0,
00058
00059 GAVL_CODEC_ID_ALAW = 1,
00060 GAVL_CODEC_ID_ULAW,
00061 GAVL_CODEC_ID_MP2,
00062 GAVL_CODEC_ID_MP3,
00063 GAVL_CODEC_ID_AC3,
00064 GAVL_CODEC_ID_AAC,
00065 GAVL_CODEC_ID_VORBIS,
00066 GAVL_CODEC_ID_FLAC,
00067
00068
00069 GAVL_CODEC_ID_JPEG = 0x10000,
00070 GAVL_CODEC_ID_PNG,
00071 GAVL_CODEC_ID_TIFF,
00072 GAVL_CODEC_ID_TGA,
00073 GAVL_CODEC_ID_MPEG1,
00074 GAVL_CODEC_ID_MPEG2,
00075 GAVL_CODEC_ID_MPEG4_ASP,
00076 GAVL_CODEC_ID_H264,
00077 GAVL_CODEC_ID_THEORA,
00078 GAVL_CODEC_ID_DIRAC,
00079 GAVL_CODEC_ID_DV,
00080 } gavl_codec_id_t;
00081
00092 typedef struct
00093 {
00094 int flags;
00095 gavl_codec_id_t id;
00096
00097 uint8_t * global_header;
00098 int global_header_len;
00099
00100 int bitrate;
00101 int palette_size;
00102 } gavl_compression_info_t;
00103
00108 GAVL_PUBLIC
00109 void gavl_compression_info_free(gavl_compression_info_t* info);
00110
00117 GAVL_PUBLIC
00118 void gavl_compression_info_dump(const gavl_compression_info_t * info);
00119
00126 GAVL_PUBLIC
00127 void gavl_compression_info_copy(gavl_compression_info_t * dst,
00128 const gavl_compression_info_t * src);
00129
00130
00146 GAVL_PUBLIC
00147 const char * gavl_compression_get_extension(gavl_codec_id_t id, int * separate);
00148
00158 GAVL_PUBLIC
00159 int gavl_compression_need_pixelformat(gavl_codec_id_t id);
00160
00167 GAVL_PUBLIC
00168 int gavl_compression_constant_frame_samples(gavl_codec_id_t id);
00169
00170
00171
00172 #define GAVL_PACKET_TYPE_I 'I' //!< Packet is an I-frame
00173 #define GAVL_PACKET_TYPE_P 'P' //!< Packet is a P-frame
00174 #define GAVL_PACKET_TYPE_B 'B' //!< Packet is a B-frame
00175 #define GAVL_PACKET_TYPE_MASK 0xff //!< Mask for frame type
00176
00177 #define GAVL_PACKET_KEYFRAME (1<<8) //!< Packet is a keyframe
00178 #define GAVL_PACKET_LAST (1<<9) //!< Packet is the last in the stream (only Xiph codecs need this flag)
00179
00193 typedef struct
00194 {
00195 uint8_t * data;
00196 int data_len;
00197 int data_alloc;
00198
00199 int flags;
00200
00201 int64_t pts;
00202 int64_t duration;
00203
00204 int field2_offset;
00205 int header_size;
00206 int sequence_end_pos;
00207
00208 } gavl_packet_t;
00209
00218 GAVL_PUBLIC
00219 void gavl_packet_alloc(gavl_packet_t * p, int len);
00220
00225 GAVL_PUBLIC
00226 void gavl_packet_free(gavl_packet_t * p);
00227
00234 GAVL_PUBLIC
00235 void gavl_packet_dump(const gavl_packet_t * p);
00236
00241 #ifdef __cplusplus
00242 }
00243 #endif
00244
00245
00246 #endif // GAVL_COMPRESSION_H_INCLUDED