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 <stddef.h>
00018 #include <stdint.h>
00019 #include <ogg/ogg.h>
00020 
00021 #ifdef KATE_INTERNAL
00022 #define kate_const
00023 #else
00024 #define kate_const const
00025 #endif
00026 
00027 typedef int32_t kate_int32_t;
00028 typedef int64_t kate_int64_t;
00029 typedef float kate_float;
00030 
00033 #define KATE_VERSION_MAJOR 0             
00034 #define KATE_VERSION_MINOR 1             
00035 #define KATE_VERSION_PATCH 2             
00040 #define KATE_BITSTREAM_VERSION_MAJOR 0   
00041 #define KATE_BITSTREAM_VERSION_MINOR 2   
00044 #ifndef kate_malloc
00045 #define kate_malloc malloc
00046 #endif
00047 #ifndef kate_realloc
00048 #define kate_realloc realloc
00049 #endif
00050 #ifndef kate_free
00051 #define kate_free free
00052 #endif
00053 
00055 typedef enum {
00056   kate_utf8                      
00057 } kate_text_encoding;
00058 
00060 typedef enum {
00061   kate_markup_none,              
00062   kate_markup_simple,            
00063 } kate_markup_type;
00064 
00066 typedef enum {
00067   kate_pixel,                    
00068   kate_percentage                
00069 } kate_space_metric;
00070 
00072 typedef struct kate_region {
00073   kate_space_metric metric;      
00074   int x;                         
00075   int y;                         
00076   int w;                         
00077   int h;                         
00078   int style;                     
00079   uint32_t clip:1;               
00080   uint32_t pad0:31;
00081   uintptr_t pad1[6];
00082 } kate_region;
00083 
00085 typedef struct kate_color {
00086   unsigned char r;               
00087   unsigned char g;               
00088   unsigned char b;               
00089   unsigned char a;               
00090 } kate_color;
00091 
00093 typedef struct kate_style {
00094   kate_float halign;                 
00095   kate_float valign;                 
00097   kate_color text_color;             
00098   kate_color background_color;       
00099   kate_color draw_color;             
00101   kate_space_metric font_metric;     
00102   kate_float font_width;             
00103   kate_float font_height;            
00105   kate_space_metric margin_metric;   
00106   kate_float left_margin;            
00107   kate_float top_margin;             
00108   kate_float right_margin;           
00109   kate_float bottom_margin;          
00111   uint32_t bold:1;                   
00112   uint32_t italics:1;                
00113   uint32_t underline:1;              
00114   uint32_t strike:1;                 
00115   uint32_t justify:1;                
00116   uint32_t pad0:27;
00117 
00118   kate_const char *font;             
00120   uintptr_t pad1[9];
00121 } kate_style;
00122 
00124 typedef enum kate_curve_type {
00125   kate_curve_none,                   
00126   kate_curve_static,                 
00127   kate_curve_linear,                 
00128   kate_curve_catmull_rom_spline,     
00129   kate_curve_bezier_cubic_spline,    
00130   kate_curve_bspline,                
00131 } kate_curve_type;
00132 
00134 typedef struct kate_curve {
00135   kate_curve_type type;              
00136   size_t npts;                       
00137   kate_float *pts;                   
00138   uintptr_t pad[5];
00139 } kate_curve;
00140 
00142 typedef enum kate_motion_mapping {
00143   /* these can be used for a x/y position mapping */
00144   kate_motion_mapping_none,                  
00145   kate_motion_mapping_frame,                 
00146   kate_motion_mapping_window,                
00147   kate_motion_mapping_region,                
00148   kate_motion_mapping_event_duration,        
00149   kate_motion_mapping_bitmap_size,           
00151 #if 0
00152   text is useful, find a way to readd it easily
00153   kate_motion_mapping_text,                  
00154 #endif
00155 
00156   /* more mapping may be added in future versions */
00157 
00158   kate_motion_mapping_user=128               
00159 } kate_motion_mapping;
00160 
00162 typedef enum kate_motion_semantics {
00163   kate_motion_semantics_time,                    
00164   kate_motion_semantics_z,                       
00165   kate_motion_semantics_region_position,         
00166   kate_motion_semantics_region_size,             
00167   kate_motion_semantics_text_alignment_int,      
00168   kate_motion_semantics_text_alignment_ext,      
00169   kate_motion_semantics_text_position,           
00170   kate_motion_semantics_text_size,               
00171   kate_motion_semantics_marker1_position,        
00172   kate_motion_semantics_marker2_position,        
00173   kate_motion_semantics_marker3_position,        
00174   kate_motion_semantics_marker4_position,        
00175   kate_motion_semantics_glyph_pointer_1,         
00176   kate_motion_semantics_glyph_pointer_2,         
00177   kate_motion_semantics_glyph_pointer_3,         
00178   kate_motion_semantics_glyph_pointer_4,         
00179   kate_motion_semantics_text_color_rg,           
00180   kate_motion_semantics_text_color_ba,           
00181   kate_motion_semantics_background_color_rg,     
00182   kate_motion_semantics_background_color_ba,     
00183   kate_motion_semantics_draw_color_rg,           
00184   kate_motion_semantics_draw_color_ba,           
00185   kate_motion_semantics_style_morph,             
00186   kate_motion_semantics_text_path,               
00187   kate_motion_semantics_text_path_section,       
00188   kate_motion_semantics_draw,                    
00189   kate_motion_semantics_text_visible_section,    
00190   kate_motion_semantics_horizontal_margins,      
00191   kate_motion_semantics_vertical_margins,        
00192   kate_motion_semantics_bitmap_position,         
00193   kate_motion_semantics_bitmap_size,             
00195   /* more semantics may be added in future versions */
00196 
00197   kate_motion_semantics_user = 128               
00198 } kate_motion_semantics;
00199 
00201 typedef struct kate_motion {
00202   size_t ncurves;                                
00203   kate_curve **curves;                           
00204   kate_float *durations;                         
00205   kate_motion_mapping x_mapping;                 
00206   kate_motion_mapping y_mapping;                 
00207   kate_motion_semantics semantics;               
00208   uint32_t periodic:1;                           
00209   uint32_t pad0:31;
00210   uintptr_t pad1[5];
00211 } kate_motion;
00212 
00214 typedef enum kate_text_directionality {
00215   kate_l2r_t2b,                                  
00216   kate_r2l_t2b,                                  
00217   kate_t2b_r2l,                                  
00218   kate_t2b_l2r                                   
00219 } kate_text_directionality;
00220 
00222 typedef struct kate_palette {
00223   size_t ncolors;                                
00224   kate_color *colors;                            
00225   uintptr_t pad[2];
00226 } kate_palette;
00227 
00229 typedef enum kate_bitmap_type {
00230   kate_bitmap_type_paletted,                     
00231   kate_bitmap_type_png                           
00232 } kate_bitmap_type;
00233 
00235 typedef struct kate_bitmap {
00236   size_t width;                                  
00237   size_t height;                                 
00238   unsigned char bpp;                             
00239   kate_bitmap_type type;                         
00240   unsigned char pad0[2];
00241   int palette;                                   
00242   unsigned char *pixels;                         
00243   size_t size;                                   
00244   uintptr_t pad1[2];
00245 } kate_bitmap;
00246 
00248 typedef struct kate_font_range {
00249   int first_code_point;                          
00250   int last_code_point;                           
00251   int first_bitmap;                              
00252   uintptr_t pad[5];
00253 } kate_font_range;
00254 
00256 typedef struct kate_font_mapping {
00257   size_t nranges;                                
00258   kate_font_range **ranges;                      
00259   uintptr_t pad[6];
00260 } kate_font_mapping;
00261 
00267 typedef struct kate_info {
00268   unsigned char bitstream_version_major;         
00269   unsigned char bitstream_version_minor;         
00270   unsigned char pad0[2];
00271 
00272   kate_text_encoding text_encoding;              
00273   kate_text_directionality text_directionality;  
00275   unsigned char num_headers;                     
00276   unsigned char granule_shift;                   
00277   unsigned char pad1[2];
00278 
00279   kate_int32_t gps_numerator;                    
00280   kate_int32_t gps_denominator;                  
00282   kate_const char *language;                     
00284   kate_const char *category;                     
00286   size_t nregions;                               
00287   kate_const kate_region *kate_const *regions;   
00289   size_t nstyles;                                
00290   kate_const kate_style *kate_const *styles;     
00292   size_t ncurves;                                
00293   kate_const kate_curve *kate_const *curves;     
00295   size_t nmotions;                               
00296   kate_const kate_motion *kate_const *motions;   
00298   size_t npalettes;                              
00299   kate_const kate_palette *kate_const *palettes; 
00301   size_t nbitmaps;                               
00302   kate_const kate_bitmap *kate_const *bitmaps;   
00304   size_t nfont_ranges;                                       
00305   kate_const kate_font_range *kate_const *font_ranges;       
00307   size_t nfont_mappings;                                     
00308   kate_const kate_font_mapping *kate_const *font_mappings;   
00310   kate_markup_type text_markup_type;             
00312   uintptr_t pad2[13];
00313 
00314   /* internal */
00315   int remove_markup;
00316   int no_limits;
00317   int probe;
00318 
00319   uintptr_t pad3[13];
00320 } kate_info;
00321 
00322 struct kate_encode_state; /* internal */
00323 struct kate_decode_state; /* internal */
00324 
00326 typedef struct kate_state {
00327   kate_const kate_info *ki;                      
00329   /* internal */
00330   kate_const struct kate_encode_state *kes;
00331   kate_const struct kate_decode_state *kds;
00332 
00333   uintptr_t pad[5];
00334 } kate_state;
00335 
00337 typedef struct kate_comment {
00338   char **user_comments;                         
00339   int *comment_lengths;                         
00340   int comments;                                 
00341   char *vendor;                                 
00342 } kate_comment;
00343 
00348 typedef struct kate_event {
00349   kate_int64_t start;                           
00350   kate_int64_t duration;                        
00351   kate_int64_t backlink;                        
00353   kate_float start_time;                        
00354   kate_float end_time;                          
00356   kate_int32_t id;                              
00358   kate_text_encoding text_encoding;             
00359   kate_text_directionality text_directionality; 
00360   kate_const char *language;                    
00361   kate_const char *text;                        
00362   size_t len;                                   
00363   size_t len0;                                  
00365   size_t nmotions;                              
00366   kate_const kate_motion *kate_const *motions;  
00368   kate_const kate_region *region;               
00369   kate_const kate_style *style;                 
00370   kate_const kate_style *secondary_style;       
00371   kate_const kate_font_mapping *font_mapping;   
00372   kate_const kate_palette *palette;             
00373   kate_const kate_bitmap *bitmap;               
00375   kate_markup_type text_markup_type;            
00377   uintptr_t pad0[8];
00378 
00379   /* internal */
00380   const kate_info *ki;
00381   size_t trackers;
00382 
00383   uintptr_t pad1[10];
00384 } kate_event;
00385 
00387 typedef struct kate_tracker {
00388   const kate_info *ki;                          
00389   kate_const kate_event *event;                 
00390   kate_float t;                                 
00392   struct {
00393     uint32_t region:1;                          
00394     uint32_t text_alignment_int:1;              
00395     uint32_t text_alignment_ext:1;              
00396     uint32_t text_pos:1;                        
00397     uint32_t text_size:1;                       
00398     uint32_t marker_pos:4;                      
00399     uint32_t text_color:1;                      
00400     uint32_t background_color:1;                
00401     uint32_t draw_color:1;                      
00402     uint32_t glyph_pointer:4;                   
00403     uint32_t path:1;                            
00404     uint32_t draw:1;                            
00405     uint32_t visible_section:1;                 
00406     uint32_t z:1;                               
00407     uint32_t hmargins:1;                        
00408     uint32_t vmargins:1;                        
00409     uint32_t bitmap_pos:1;                      
00410     uint32_t bitmap_size:1;                     
00411     /* 24 bits */
00412     uint32_t pad0:8;
00413     uint32_t pad1:32;
00414     /* 64 bits */
00415   } has;                                        
00417   int window_w;                                 
00418   int window_h;                                 
00419   int frame_x;                                  
00420   int frame_y;                                  
00421   int frame_w;                                  
00422   int frame_h;                                  
00424   /* has.region */
00425   kate_float region_x;                          
00426   kate_float region_y;                          
00427   kate_float region_w;                          
00428   kate_float region_h;                          
00430   /* has.text_alignment (int/ext) */
00431   kate_float text_halign;                       
00432   kate_float text_valign;                       
00434   /* has.text_pos */
00435   kate_float text_x;                            
00436   kate_float text_y;                            
00438   /* has.text_size */
00439   kate_float text_size_x;                       
00440   kate_float text_size_y;                       
00442   /* has.marker_pos&(1<<n) */
00443   kate_float marker_x[4];                       
00444   kate_float marker_y[4];                       
00446   /* has.text_color */
00447   kate_color text_color;                        
00449   /* has.background_color */
00450   kate_color background_color;                  
00452   /* has.draw_color */
00453   kate_color draw_color;                        
00455   /* has.glyph_pointer&(1<<n) */
00456   kate_float glyph_pointer[4];                  
00457   kate_float glyph_height[4];                   
00459   /* has.path */
00460   kate_float path_start;                        
00461   kate_float path_end;                          
00463   /* has.draw */
00464   kate_float draw_x;                            
00465   kate_float draw_y;                            
00467   /* has.visible_section */
00468   kate_float visible_x;                         
00469   kate_float visible_y;                         
00471   /* has.z */
00472   kate_float z;                                 
00474   /* has.hmargins */
00475   kate_float left_margin;                       
00476   kate_float right_margin;                      
00478   /* has.vmargins */
00479   kate_float top_margin;                        
00480   kate_float bottom_margin;                     
00482   /* has.bitmap_pos */
00483   kate_float bitmap_x;                          
00484   kate_float bitmap_y;                          
00486   /* has.bitmap_size */
00487   kate_float bitmap_size_x;                     
00488   kate_float bitmap_size_y;                     
00490   /* internal */
00491   size_t nglyphs;
00492 
00493   uintptr_t pad[28];
00494 
00495 } kate_tracker;
00496 
00498 typedef struct kate_packet {
00499   size_t nbytes;             
00500   void *data;                
00501 } kate_packet;
00502 
00503 #ifdef __cplusplus
00504 extern "C" {
00505 #endif
00506 
00508 extern int kate_get_version(void);
00509 extern const char *kate_get_version_string(void);
00510 extern int kate_get_bitstream_version(void);
00511 extern const char *kate_get_bitstream_version_string(void);
00512 
00514 extern int kate_info_init(kate_info *ki);
00515 extern int kate_info_set_granule_encoding(kate_info *ki,kate_float resolution,kate_float max_length,kate_float max_event_lifetime);
00516 extern int kate_info_set_language(kate_info *ki,const char *language);
00517 extern int kate_info_set_text_directionality(kate_info *ki,kate_text_directionality text_directionality);
00518 extern int kate_info_set_markup_type(kate_info *ki,kate_markup_type text_markup_type);
00519 extern int kate_info_set_category(kate_info *ki,const char *category);
00520 extern int kate_info_add_region(kate_info *ki,kate_region *kr);
00521 extern int kate_info_add_style(kate_info *ki,kate_style *ks);
00522 extern int kate_info_add_curve(kate_info *ki,kate_curve *kc);
00523 extern int kate_info_add_motion(kate_info *ki,kate_motion *km);
00524 extern int kate_info_add_palette(kate_info *ki,kate_palette *kp);
00525 extern int kate_info_add_bitmap(kate_info *ki,kate_bitmap *kb);
00526 extern int kate_info_add_font_range(kate_info *ki,kate_font_range *kfr);
00527 extern int kate_info_add_font_mapping(kate_info *ki,kate_font_mapping *kfm);
00528 extern int kate_info_matches_language(const kate_info *ki,const char *language);
00529 extern int kate_info_remove_markup(kate_info *ki,int flag);
00530 extern int kate_info_no_limits(kate_info *ki,int flag);
00531 extern int kate_info_clear(kate_info *ki);
00532 
00534 extern int kate_granule_shift(const kate_info *ki);
00535 extern kate_float kate_granule_time(const kate_info *ki,kate_int64_t granulepos);
00536 extern kate_int64_t kate_duration_granule(const kate_info *ki,kate_float duration);
00537 extern kate_float kate_granule_duration(const kate_info *ki,kate_int64_t duration);
00538 
00539 extern int kate_clear(kate_state *k);
00540 extern int kate_motion_get_point(const kate_motion *km,kate_float duration,kate_float t,kate_float *x,kate_float *y);
00541 
00543 extern int kate_text_get_character(kate_text_encoding text_encoding,const char ** const text,size_t *len0);
00544 extern int kate_text_set_character(kate_text_encoding text_encoding,int c,char ** const text,size_t *len0);
00545 extern int kate_text_remove_markup(kate_text_encoding text_encoding,char *text,size_t *len0);
00546 extern int kate_text_validate(kate_text_encoding text_encoding,const char *text,size_t len0);
00547 
00549 extern int kate_comment_init(kate_comment *kc);
00550 extern int kate_comment_clear(kate_comment *kc);
00551 extern int kate_comment_add(kate_comment *kc,const char *comment);
00552 extern int kate_comment_add_length(kate_comment *kc,const char *comment,size_t len);
00553 extern int kate_comment_add_tag(kate_comment *kc,const char *name,const char *value);
00554 extern const char *kate_comment_query(const kate_comment *kc,const char *tag,int count);
00555 extern int kate_comment_query_count(const kate_comment *kc,const char *tag);
00556 
00558 extern int kate_encode_init(kate_state *k,kate_info *ki);
00559 extern int kate_encode_headers(kate_state *k,kate_comment *kc,kate_packet *kp);
00560 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 */
00561 extern int kate_encode_keepalive(kate_state *k,kate_float t,kate_packet *kp);
00562 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 */
00563 extern int kate_encode_set_id(kate_state *k,kate_int32_t id);
00564 extern int kate_encode_set_language(kate_state *k,const char *language); /* language can be NULL */
00565 extern int kate_encode_set_text_encoding(kate_state *k,kate_text_encoding text_encoding);
00566 extern int kate_encode_set_text_directionality(kate_state *k,kate_text_directionality text_directionality);
00567 extern int kate_encode_set_region_index(kate_state *k,size_t region);
00568 extern int kate_encode_set_region(kate_state *k,const kate_region *kr);
00569 extern int kate_encode_set_style_index(kate_state *k,size_t style);
00570 extern int kate_encode_set_style(kate_state *k,const kate_style *ks);
00571 extern int kate_encode_set_secondary_style_index(kate_state *k,size_t style);
00572 extern int kate_encode_set_secondary_style(kate_state *k,const kate_style *ks);
00573 extern int kate_encode_set_font_mapping_index(kate_state *k,size_t font_mapping);
00574 extern int kate_encode_add_motion(kate_state *k,kate_motion *km,int destroy);
00575 extern int kate_encode_add_motion_index(kate_state *k,size_t motion);
00576 extern int kate_encode_set_palette_index(kate_state *k,size_t palette);
00577 extern int kate_encode_set_palette(kate_state *k,const kate_palette *kp);
00578 extern int kate_encode_set_bitmap_index(kate_state *k,size_t bitmap);
00579 extern int kate_encode_set_bitmap(kate_state *k,const kate_bitmap *kb);
00580 extern int kate_encode_set_markup_type(kate_state *k,int markup_type);
00581 
00583 extern int kate_decode_is_idheader(const kate_packet *kp);
00584 extern int kate_decode_init(kate_state *k,kate_info *ki);
00585 extern int kate_decode_headerin(kate_info *ki,kate_comment *kc,kate_packet *kp);
00586 extern int kate_decode_packetin(kate_state *k,kate_packet *kp);
00587 extern int kate_decode_eventout(kate_state *k,kate_const kate_event **ev); /* event can be NULL */
00588 
00590 extern int kate_tracker_init(kate_tracker *kin,const kate_info *ki,kate_const kate_event *ev);
00591 extern int kate_tracker_clear(kate_tracker *kin);
00592 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);
00593 extern int kate_tracker_morph_styles(kate_style *style,kate_float t,const kate_style *from,const kate_style *to);
00594 extern int kate_tracker_get_text_path_position(kate_tracker *kin,size_t glyph,int *x,int *y);
00595 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);
00596 
00598 extern int kate_font_get_index_from_code_point(const kate_font_mapping *kfm,int c);
00599 
00601 extern int kate_high_decode_init(kate_state *k);
00602 extern int kate_high_decode_packetin(kate_state *k,kate_packet *kp,kate_const kate_event **ev);
00603 extern int kate_high_decode_clear(kate_state *k);
00604 
00606 extern int kate_packet_wrap(kate_packet *kp,size_t nbytes,const void *data);
00607 extern int kate_packet_init(kate_packet *kp,size_t nbytes,const void *data);
00608 extern int kate_packet_clear(kate_packet *kp);
00609 
00610 #ifdef __cplusplus
00611 }
00612 #endif
00613 
00616 #define KATE_E_NOT_FOUND (-1)            
00617 #define KATE_E_INVALID_PARAMETER (-2)    
00618 #define KATE_E_OUT_OF_MEMORY (-3)        
00619 #define KATE_E_BAD_GRANULE (-4)          
00620 #define KATE_E_INIT (-5)                 
00621 #define KATE_E_BAD_PACKET (-6)           
00622 #define KATE_E_TEXT (-7)                 
00623 #define KATE_E_LIMIT (-8)                
00624 #define KATE_E_VERSION (-9)              
00625 #define KATE_E_NOT_KATE (-10)            
00628 #endif
00629 

Generated on Thu May 15 08:16:15 2008 for libkate by  doxygen 1.5.4