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