/home/lyrian/OggVorbis/kate/include/kate/kate.h

Go to the documentation of this file.
00001 /* Copyright (C) 2008 Vincent Penquerc'h.
00002    This file is part of the Kate codec library.
00003    Written by Vincent Penquerc'h.
00004 
00005    Use, distribution and reproduction of this library is governed
00006    by a BSD style source license included with this source in the
00007    file 'COPYING'. Please read these terms before distributing. */
00008 
00009 
00010 #ifndef _KATE_CODEC_H_
00011 #define _KATE_CODEC_H_
00012 
00017 #include "kate/kate_config.h"
00018 
00021 #define KATE_VERSION_MAJOR 0             
00022 #define KATE_VERSION_MINOR 1             
00023 #define KATE_VERSION_PATCH 7             
00028 #define KATE_BITSTREAM_VERSION_MAJOR 0   
00029 #define KATE_BITSTREAM_VERSION_MINOR 3   
00033 typedef enum {
00034   kate_utf8                      
00035 } kate_text_encoding;
00036 
00038 typedef enum {
00039   kate_markup_none,              
00040   kate_markup_simple             
00041 } kate_markup_type;
00042 
00044 typedef enum {
00045   kate_pixel,                    
00046   kate_percentage,               
00047   kate_millionths                
00048 } kate_space_metric;
00049 
00051 typedef struct kate_region {
00052   kate_space_metric metric;      
00053   int x;                         
00054   int y;                         
00055   int w;                         
00056   int h;                         
00057   int style;                     
00058   unsigned int clip:1;           
00059   unsigned int pad0:31;
00060   uintptr_t pad1[6];
00061 } kate_region;
00062 
00064 typedef struct kate_color {
00065   unsigned char r;               
00066   unsigned char g;               
00067   unsigned char b;               
00068   unsigned char a;               
00069 } kate_color;
00070 
00072 typedef struct kate_style {
00073   kate_float halign;                 
00074   kate_float valign;                 
00076   kate_color text_color;             
00077   kate_color background_color;       
00078   kate_color draw_color;             
00080   kate_space_metric font_metric;     
00081   kate_float font_width;             
00082   kate_float font_height;            
00084   kate_space_metric margin_metric;   
00085   kate_float left_margin;            
00086   kate_float top_margin;             
00087   kate_float right_margin;           
00088   kate_float bottom_margin;          
00090   unsigned int bold:1;               
00091   unsigned int italics:1;            
00092   unsigned int underline:1;          
00093   unsigned int strike:1;             
00094   unsigned int justify:1;            
00095   unsigned int pad0:27;
00096 
00097   kate_const char *font;             
00099   uintptr_t pad1[9];
00100 } kate_style;
00101 
00103 typedef enum kate_curve_type {
00104   kate_curve_none,                   
00105   kate_curve_static,                 
00106   kate_curve_linear,                 
00107   kate_curve_catmull_rom_spline,     
00108   kate_curve_bezier_cubic_spline,    
00109   kate_curve_bspline                 
00110 } kate_curve_type;
00111 
00113 typedef struct kate_curve {
00114   kate_curve_type type;              
00115   size_t npts;                       
00116   kate_float *pts;                   
00117   uintptr_t pad[5];
00118 } kate_curve;
00119 
00121 typedef enum kate_motion_mapping {
00122   /* these can be used for a x/y position mapping */
00123   kate_motion_mapping_none,                  
00124   kate_motion_mapping_frame,                 
00125   kate_motion_mapping_window,                
00126   kate_motion_mapping_region,                
00127   kate_motion_mapping_event_duration,        
00128   kate_motion_mapping_bitmap_size,           
00130 #if 0
00131   text is useful, find a way to readd it easily
00132   kate_motion_mapping_text,                  
00133 #endif
00134 
00135   /* more mapping may be added in future versions */
00136 
00137   kate_motion_mapping_user=128               
00138 } kate_motion_mapping;
00139 
00141 typedef enum kate_motion_semantics {
00142   kate_motion_semantics_time,                    
00143   kate_motion_semantics_z,                       
00144   kate_motion_semantics_region_position,         
00145   kate_motion_semantics_region_size,             
00146   kate_motion_semantics_text_alignment_int,      
00147   kate_motion_semantics_text_alignment_ext,      
00148   kate_motion_semantics_text_position,           
00149   kate_motion_semantics_text_size,               
00150   kate_motion_semantics_marker1_position,        
00151   kate_motion_semantics_marker2_position,        
00152   kate_motion_semantics_marker3_position,        
00153   kate_motion_semantics_marker4_position,        
00154   kate_motion_semantics_glyph_pointer_1,         
00155   kate_motion_semantics_glyph_pointer_2,         
00156   kate_motion_semantics_glyph_pointer_3,         
00157   kate_motion_semantics_glyph_pointer_4,         
00158   kate_motion_semantics_text_color_rg,           
00159   kate_motion_semantics_text_color_ba,           
00160   kate_motion_semantics_background_color_rg,     
00161   kate_motion_semantics_background_color_ba,     
00162   kate_motion_semantics_draw_color_rg,           
00163   kate_motion_semantics_draw_color_ba,           
00164   kate_motion_semantics_style_morph,             
00165   kate_motion_semantics_text_path,               
00166   kate_motion_semantics_text_path_section,       
00167   kate_motion_semantics_draw,                    
00168   kate_motion_semantics_text_visible_section,    
00169   kate_motion_semantics_horizontal_margins,      
00170   kate_motion_semantics_vertical_margins,        
00171   kate_motion_semantics_bitmap_position,         
00172   kate_motion_semantics_bitmap_size,             
00174   /* more semantics may be added in future versions */
00175 
00176   kate_motion_semantics_user = 128               
00177 } kate_motion_semantics;
00178 
00180 typedef struct kate_motion {
00181   size_t ncurves;                                
00182   kate_curve **curves;                           
00183   kate_float *durations;                         
00184   kate_motion_mapping x_mapping;                 
00185   kate_motion_mapping y_mapping;                 
00186   kate_motion_semantics semantics;               
00187   unsigned int periodic:1;                       
00188   unsigned int pad0:31;
00189   uintptr_t pad1[5];
00190 } kate_motion;
00191 
00193 typedef enum kate_text_directionality {
00194   kate_l2r_t2b,                                  
00195   kate_r2l_t2b,                                  
00196   kate_t2b_r2l,                                  
00197   kate_t2b_l2r                                   
00198 } kate_text_directionality;
00199 
00201 typedef struct kate_palette {
00202   size_t ncolors;                                
00203   kate_color *colors;                            
00204   uintptr_t pad[2];
00205 } kate_palette;
00206 
00208 typedef enum kate_bitmap_type {
00209   kate_bitmap_type_paletted,                     
00210   kate_bitmap_type_png                           
00211 } kate_bitmap_type;
00212 
00214 typedef struct kate_bitmap {
00215   size_t width;                                  
00216   size_t height;                                 
00217   unsigned char bpp;                             
00218   kate_bitmap_type type;                         
00219   unsigned char pad0[2];
00220   int palette;                                   
00221   unsigned char *pixels;                         
00222   size_t size;                                   
00223   uintptr_t pad1[2];
00224 } kate_bitmap;
00225 
00227 typedef struct kate_font_range {
00228   int first_code_point;                          
00229   int last_code_point;                           
00230   int first_bitmap;                              
00231   uintptr_t pad[5];
00232 } kate_font_range;
00233 
00235 typedef struct kate_font_mapping {
00236   size_t nranges;                                
00237   kate_font_range **ranges;                      
00238   uintptr_t pad[6];
00239 } kate_font_mapping;
00240 
00246 typedef struct kate_info {
00247   unsigned char bitstream_version_major;         
00248   unsigned char bitstream_version_minor;         
00249   unsigned char pad0[2];
00250 
00251   kate_text_encoding text_encoding;              
00252   kate_text_directionality text_directionality;  
00254   unsigned char num_headers;                     
00255   unsigned char granule_shift;                   
00256   unsigned char pad1[2];
00257 
00258   kate_int32_t gps_numerator;                    
00259   kate_int32_t gps_denominator;                  
00261   kate_const char *language;                     
00263   kate_const char *category;                     
00265   size_t nregions;                               
00266   kate_const kate_region *kate_const *regions;   
00268   size_t nstyles;                                
00269   kate_const kate_style *kate_const *styles;     
00271   size_t ncurves;                                
00272   kate_const kate_curve *kate_const *curves;     
00274   size_t nmotions;                               
00275   kate_const kate_motion *kate_const *motions;   
00277   size_t npalettes;                              
00278   kate_const kate_palette *kate_const *palettes; 
00280   size_t nbitmaps;                               
00281   kate_const kate_bitmap *kate_const *bitmaps;   
00283   size_t nfont_ranges;                                       
00284   kate_const kate_font_range *kate_const *font_ranges;       
00286   size_t nfont_mappings;                                     
00287   kate_const kate_font_mapping *kate_const *font_mappings;   
00289   kate_markup_type text_markup_type;             
00291   size_t original_canvas_width;                  
00292   size_t original_canvas_height;                 
00294   uintptr_t pad2[11];
00295 
00296   /* internal */
00297   int remove_markup;
00298   int no_limits;
00299   int probe;
00300 
00301   uintptr_t pad3[13];
00302 } kate_info;
00303 
00304 struct kate_encode_state; /* internal */
00305 struct kate_decode_state; /* internal */
00306 
00308 typedef struct kate_state {
00309   kate_const kate_info *ki;                      
00311   /* internal */
00312   kate_const struct kate_encode_state *kes;
00313   kate_const struct kate_decode_state *kds;
00314 
00315   uintptr_t pad[5];
00316 } kate_state;
00317 
00319 typedef struct kate_comment {
00320   char **user_comments;                         
00321   int *comment_lengths;                         
00322   int comments;                                 
00323   char *vendor;                                 
00324 } kate_comment;
00325 
00330 typedef struct kate_event {
00331   kate_int64_t start;                           
00332   kate_int64_t duration;                        
00333   kate_int64_t backlink;                        
00335   kate_float start_time;                        
00336   kate_float end_time;                          
00338   kate_int32_t id;                              
00340   kate_text_encoding text_encoding;             
00341   kate_text_directionality text_directionality; 
00342   kate_const char *language;                    
00343   kate_const char *text;                        
00344   size_t len;                                   
00345   size_t len0;                                  
00347   size_t nmotions;                              
00348   kate_const kate_motion *kate_const *motions;  
00350   kate_const kate_region *region;               
00351   kate_const kate_style *style;                 
00352   kate_const kate_style *secondary_style;       
00353   kate_const kate_font_mapping *font_mapping;   
00354   kate_const kate_palette *palette;             
00355   kate_const kate_bitmap *bitmap;               
00357   kate_markup_type text_markup_type;            
00359   uintptr_t pad0[8];
00360 
00361   /* internal */
00362   const kate_info *ki;
00363   size_t trackers;
00364 
00365   uintptr_t pad1[10];
00366 } kate_event;
00367 
00369 typedef struct kate_tracker {
00370   const kate_info *ki;                          
00371   kate_const kate_event *event;                 
00372   kate_float t;                                 
00374   struct {
00375     unsigned int region:1;                      
00376     unsigned int text_alignment_int:1;          
00377     unsigned int text_alignment_ext:1;          
00378     unsigned int text_pos:1;                    
00379     unsigned int text_size:1;                   
00380     unsigned int marker_pos:4;                  
00381     unsigned int text_color:1;                  
00382     unsigned int background_color:1;            
00383     unsigned int draw_color:1;                  
00384     unsigned int glyph_pointer:4;               
00385     unsigned int path:1;                        
00386     unsigned int draw:1;                        
00387     unsigned int visible_section:1;             
00388     unsigned int z:1;                           
00389     unsigned int hmargins:1;                    
00390     unsigned int vmargins:1;                    
00391     unsigned int bitmap_pos:1;                  
00392     unsigned int bitmap_size:1;                 
00393     /* 24 bits */
00394     unsigned int pad0:8;
00395     unsigned int pad1:32;
00396     /* 64 bits */
00397   } has;                                        
00399   int window_w;                                 
00400   int window_h;                                 
00401   int frame_x;                                  
00402   int frame_y;                                  
00403   int frame_w;                                  
00404   int frame_h;                                  
00406   /* has.region */
00407   kate_float region_x;                          
00408   kate_float region_y;                          
00409   kate_float region_w;                          
00410   kate_float region_h;                          
00412   /* has.text_alignment (int/ext) */
00413   kate_float text_halign;                       
00414   kate_float text_valign;                       
00416   /* has.text_pos */
00417   kate_float text_x;                            
00418   kate_float text_y;                            
00420   /* has.text_size */
00421   kate_float text_size_x;                       
00422   kate_float text_size_y;                       
00424   /* has.marker_pos&(1<<n) */
00425   kate_float marker_x[4];                       
00426   kate_float marker_y[4];                       
00428   /* has.text_color */
00429   kate_color text_color;                        
00431   /* has.background_color */
00432   kate_color background_color;                  
00434   /* has.draw_color */
00435   kate_color draw_color;                        
00437   /* has.glyph_pointer&(1<<n) */
00438   kate_float glyph_pointer[4];                  
00439   kate_float glyph_height[4];                   
00441   /* has.path */
00442   kate_float path_start;                        
00443   kate_float path_end;                          
00445   /* has.draw */
00446   kate_float draw_x;                            
00447   kate_float draw_y;                            
00449   /* has.visible_section */
00450   kate_float visible_x;                         
00451   kate_float visible_y;                         
00453   /* has.z */
00454   kate_float z;                                 
00456   /* has.hmargins */
00457   kate_float left_margin;                       
00458   kate_float right_margin;                      
00460   /* has.vmargins */
00461   kate_float top_margin;                        
00462   kate_float bottom_margin;                     
00464   /* has.bitmap_pos */
00465   kate_float bitmap_x;                          
00466   kate_float bitmap_y;                          
00468   /* has.bitmap_size */
00469   kate_float bitmap_size_x;                     
00470   kate_float bitmap_size_y;                     
00472   /* internal */
00473   size_t nglyphs;
00474 
00475   uintptr_t pad[28];
00476 
00477 } kate_tracker;
00478 
00480 typedef struct kate_packet {
00481   size_t nbytes;             
00482   void *data;                
00483 } kate_packet;
00484 
00485 #ifdef __cplusplus
00486 extern "C" {
00487 #endif
00488 
00490 extern int kate_get_version(void);
00491 extern const char *kate_get_version_string(void);
00492 extern int kate_get_bitstream_version(void);
00493 extern const char *kate_get_bitstream_version_string(void);
00494 
00496 extern int kate_info_init(kate_info *ki);
00497 extern int kate_info_set_granule_encoding(kate_info *ki,kate_float resolution,kate_float max_length,kate_float max_event_lifetime);
00498 extern int kate_info_set_language(kate_info *ki,const char *language);
00499 extern int kate_info_set_text_directionality(kate_info *ki,kate_text_directionality text_directionality);
00500 extern int kate_info_set_markup_type(kate_info *ki,kate_markup_type text_markup_type);
00501 extern int kate_info_set_category(kate_info *ki,const char *category);
00502 extern int kate_info_set_original_canvas_size(kate_info *ki,size_t width,size_t height);
00503 extern int kate_info_add_region(kate_info *ki,kate_region *kr);
00504 extern int kate_info_add_style(kate_info *ki,kate_style *ks);
00505 extern int kate_info_add_curve(kate_info *ki,kate_curve *kc);
00506 extern int kate_info_add_motion(kate_info *ki,kate_motion *km);
00507 extern int kate_info_add_palette(kate_info *ki,kate_palette *kp);
00508 extern int kate_info_add_bitmap(kate_info *ki,kate_bitmap *kb);
00509 extern int kate_info_add_font_range(kate_info *ki,kate_font_range *kfr);
00510 extern int kate_info_add_font_mapping(kate_info *ki,kate_font_mapping *kfm);
00511 extern int kate_info_matches_language(const kate_info *ki,const char *language);
00512 extern int kate_info_remove_markup(kate_info *ki,int flag);
00513 extern int kate_info_no_limits(kate_info *ki,int flag);
00514 extern int kate_info_clear(kate_info *ki);
00515 
00517 extern int kate_granule_shift(const kate_info *ki);
00518 extern kate_float kate_granule_time(const kate_info *ki,kate_int64_t granulepos);
00519 extern kate_int64_t kate_duration_granule(const kate_info *ki,kate_float duration);
00520 extern kate_float kate_granule_duration(const kate_info *ki,kate_int64_t duration);
00521 
00523 extern int kate_clear(kate_state *k);
00524 extern int kate_motion_get_point(const kate_motion *km,kate_float duration,kate_float t,kate_float *x,kate_float *y);
00525 extern int kate_region_init(kate_region *kr);
00526 extern int kate_style_init(kate_style *ks);
00527 extern int kate_palette_init(kate_palette *kp);
00528 extern int kate_bitmap_init(kate_bitmap *kb);
00529 extern int kate_curve_init(kate_curve *kc);
00530 extern int kate_motion_init(kate_motion *km);
00531 
00533 extern int kate_text_get_character(kate_text_encoding text_encoding,const char ** const text,size_t *len0);
00534 extern int kate_text_set_character(kate_text_encoding text_encoding,int c,char ** const text,size_t *len0);
00535 extern int kate_text_remove_markup(kate_text_encoding text_encoding,char *text,size_t *len0);
00536 extern int kate_text_validate(kate_text_encoding text_encoding,const char *text,size_t len0);
00537 
00539 extern int kate_comment_init(kate_comment *kc);
00540 extern int kate_comment_clear(kate_comment *kc);
00541 extern int kate_comment_add(kate_comment *kc,const char *comment);
00542 extern int kate_comment_add_length(kate_comment *kc,const char *comment,size_t len);
00543 extern int kate_comment_add_tag(kate_comment *kc,const char *name,const char *value);
00544 extern const char *kate_comment_query(const kate_comment *kc,const char *tag,int count);
00545 extern int kate_comment_query_count(const kate_comment *kc,const char *tag);
00546 
00548 extern int kate_encode_init(kate_state *k,kate_info *ki);
00549 extern int kate_encode_headers(kate_state *k,kate_comment *kc,kate_packet *kp);
00550 extern int kate_encode_text(kate_state *k,kate_float start_time,kate_float stop_time,const char *text,size_t sz,kate_packet *kp); /* text is not null terminated */
00551 extern int kate_encode_keepalive(kate_state *k,kate_float t,kate_packet *kp);
00552 extern int kate_encode_finish(kate_state *k,kate_float t,kate_packet *kp); /* t may be negative to use the end granule of the last event */
00553 extern int kate_encode_set_id(kate_state *k,kate_int32_t id);
00554 extern int kate_encode_set_language(kate_state *k,const char *language); /* language can be NULL */
00555 extern int kate_encode_set_text_encoding(kate_state *k,kate_text_encoding text_encoding);
00556 extern int kate_encode_set_text_directionality(kate_state *k,kate_text_directionality text_directionality);
00557 extern int kate_encode_set_region_index(kate_state *k,size_t region);
00558 extern int kate_encode_set_region(kate_state *k,const kate_region *kr);
00559 extern int kate_encode_set_style_index(kate_state *k,size_t style);
00560 extern int kate_encode_set_style(kate_state *k,const kate_style *ks);
00561 extern int kate_encode_set_secondary_style_index(kate_state *k,size_t style);
00562 extern int kate_encode_set_secondary_style(kate_state *k,const kate_style *ks);
00563 extern int kate_encode_set_font_mapping_index(kate_state *k,size_t font_mapping);
00564 extern int kate_encode_add_motion(kate_state *k,kate_motion *km,int destroy);
00565 extern int kate_encode_add_motion_index(kate_state *k,size_t motion);
00566 extern int kate_encode_set_palette_index(kate_state *k,size_t palette);
00567 extern int kate_encode_set_palette(kate_state *k,const kate_palette *kp);
00568 extern int kate_encode_set_bitmap_index(kate_state *k,size_t bitmap);
00569 extern int kate_encode_set_bitmap(kate_state *k,const kate_bitmap *kb);
00570 extern int kate_encode_set_markup_type(kate_state *k,int markup_type);
00571 extern kate_int64_t kate_encode_get_granule(const kate_state *k);
00572 
00574 extern int kate_decode_is_idheader(const kate_packet *kp);
00575 extern int kate_decode_init(kate_state *k,kate_info *ki);
00576 extern int kate_decode_headerin(kate_info *ki,kate_comment *kc,kate_packet *kp);
00577 extern int kate_decode_packetin(kate_state *k,kate_packet *kp);
00578 extern int kate_decode_eventout(kate_state *k,kate_const kate_event **ev); /* event can be NULL */
00579 
00581 extern int kate_tracker_init(kate_tracker *kin,const kate_info *ki,kate_const kate_event *ev);
00582 extern int kate_tracker_clear(kate_tracker *kin);
00583 extern int kate_tracker_update(kate_tracker *kin,kate_float t,int window_w,int window_h,int frame_x,int frame_y,int frame_w,int frame_h);
00584 extern int kate_tracker_morph_styles(kate_style *style,kate_float t,const kate_style *from,const kate_style *to);
00585 extern int kate_tracker_get_text_path_position(kate_tracker *kin,size_t glyph,int *x,int *y);
00586 extern int kate_tracker_update_property_at_duration(const kate_tracker *kin,kate_float duration,kate_float t,kate_motion_semantics semantics,kate_float *x,kate_float *y);
00587 
00589 extern int kate_font_get_index_from_code_point(const kate_font_mapping *kfm,int c);
00590 
00592 extern int kate_high_decode_init(kate_state *k);
00593 extern int kate_high_decode_packetin(kate_state *k,kate_packet *kp,kate_const kate_event **ev);
00594 extern int kate_high_decode_clear(kate_state *k);
00595 extern const kate_comment *kate_high_decode_get_comments(kate_state *k);
00596 
00598 extern int kate_packet_wrap(kate_packet *kp,size_t nbytes,const void *data);
00599 extern int kate_packet_init(kate_packet *kp,size_t nbytes,const void *data);
00600 extern int kate_packet_clear(kate_packet *kp);
00601 
00602 #ifdef __cplusplus
00603 }
00604 #endif
00605 
00608 #define KATE_E_NOT_FOUND (-1)            
00609 #define KATE_E_INVALID_PARAMETER (-2)    
00610 #define KATE_E_OUT_OF_MEMORY (-3)        
00611 #define KATE_E_BAD_GRANULE (-4)          
00612 #define KATE_E_INIT (-5)                 
00613 #define KATE_E_BAD_PACKET (-6)           
00614 #define KATE_E_TEXT (-7)                 
00615 #define KATE_E_LIMIT (-8)                
00616 #define KATE_E_VERSION (-9)              
00617 #define KATE_E_NOT_KATE (-10)            
00620 #endif
00621 

Generated on Sun Aug 10 23:59:03 2008 for libkate by  doxygen 1.5.4