00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00062 #if !defined(_O_THEORA_CODEC_H_)
00063 # define _O_THEORA_CODEC_H_ (1)
00064 # include <ogg/ogg.h>
00065
00066 #if defined(__cplusplus)
00067 extern "C" {
00068 #endif
00069
00070
00071
00075 #define TH_EFAULT (-1)
00076
00077 #define TH_EINVAL (-10)
00078
00079 #define TH_EBADHEADER (-20)
00080
00081 #define TH_ENOTFORMAT (-21)
00082
00083 #define TH_EVERSION (-22)
00084
00085 #define TH_EIMPL (-23)
00086
00087 #define TH_EBADPACKET (-24)
00088
00091 #define TH_DUPFRAME (1)
00092
00098 typedef enum{
00101 TH_CS_UNSPECIFIED,
00103 TH_CS_ITU_REC_470M,
00105 TH_CS_ITU_REC_470BG,
00107 TH_CS_NSPACES
00108 }th_colorspace;
00109
00114 typedef enum{
00118 TH_PF_420,
00120 TH_PF_RSVD,
00124 TH_PF_422,
00127 TH_PF_444,
00129 TH_PF_NFORMATS
00130 }th_pixel_fmt;
00131
00132
00133
00142 typedef struct{
00144 int width;
00146 int height;
00148 int stride;
00150 unsigned char *data;
00151 }th_img_plane;
00152
00168 typedef th_img_plane th_ycbcr_buffer[3];
00169
00204 typedef struct{
00208 unsigned char version_major;
00209 unsigned char version_minor;
00210 unsigned char version_subminor;
00214 ogg_uint32_t frame_width;
00217 ogg_uint32_t frame_height;
00220 ogg_uint32_t pic_width;
00223 ogg_uint32_t pic_height;
00227 ogg_uint32_t pic_x;
00235 ogg_uint32_t pic_y;
00240 ogg_uint32_t fps_numerator;
00241 ogg_uint32_t fps_denominator;
00252 ogg_uint32_t aspect_numerator;
00253 ogg_uint32_t aspect_denominator;
00256 th_colorspace colorspace;
00258 th_pixel_fmt pixel_fmt;
00262 int target_bitrate;
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282 int quality;
00296 int keyframe_granule_shift;
00297 }th_info;
00298
00323 typedef struct th_comment{
00325 char **user_comments;
00327 int *comment_lengths;
00329 int comments;
00332 char *vendor;
00333 }th_comment;
00334
00335
00336
00338 typedef unsigned char th_quant_base[64];
00339
00341 typedef struct{
00343 int nranges;
00346 const int *sizes;
00349 const th_quant_base *base_matrices;
00350 }th_quant_ranges;
00351
00409 typedef struct{
00411 ogg_uint16_t dc_scale[64];
00413 ogg_uint16_t ac_scale[64];
00415 unsigned char loop_filter_limits[64];
00417 th_quant_ranges qi_ranges[2][3];
00418 }th_quant_info;
00419
00420
00421
00423 #define TH_NHUFFMAN_TABLES (80)
00424
00425 #define TH_NDCT_TOKENS (32)
00426
00438 typedef struct{
00441 ogg_uint32_t pattern;
00444 int nbits;
00445 }th_huff_code;
00446
00447
00448
00456 extern const char *th_version_string(void);
00466 extern ogg_uint32_t th_version_number(void);
00476 extern ogg_int64_t th_granule_frame(void *_encdec,ogg_int64_t _granpos);
00488 extern double th_granule_time(void *_encdec,ogg_int64_t _granpos);
00498 extern int th_packet_isheader(ogg_packet *_op);
00509 extern int th_packet_iskeyframe(ogg_packet *_op);
00519 extern void th_info_init(th_info *_info);
00524 extern void th_info_clear(th_info *_info);
00525
00530 extern void th_comment_init(th_comment *_tc);
00540 extern void th_comment_add(th_comment *_tc, char *_comment);
00551 extern void th_comment_add_tag(th_comment *_tc,char *_tag,char *_val);
00567 extern char *th_comment_query(th_comment *_tc,char *_tag,int _count);
00575 extern int th_comment_query_count(th_comment *_tc,char *_tag);
00581 extern void th_comment_clear(th_comment *_tc);
00584
00585
00586
00587 #if defined(__cplusplus)
00588 }
00589 #endif
00590
00591 #endif