00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 #ifndef __ANX_IMPORT_H__
00034 #define __ANX_IMPORT_H__
00035 
00036 #include <annodex/anx_types.h>
00037 #include <annodex/anx_core.h>
00038 
00067 typedef struct _AnxImporter AnxImporter;
00068 
00072 typedef struct _AnxSourceTrack AnxSourceTrack;
00073 
00078 typedef struct _AnxSource AnxSource;
00079 
00092 typedef AnxSource* (*AnxImporterOpenFunc) (const char * path, const char * id,
00093                                            int ignore_raw,
00094                                            double start_time, double end_time,
00095                                            AnxImportCallbacks * import_callbacks);
00096 
00110 typedef AnxSource * (*AnxImporterOpenFDFunc) (int fd, const char * id,
00111                                               int ignore_raw,
00112                                               double start_time, double end_time,
00113                                               AnxImportCallbacks * import_callbacks);
00114 
00122 typedef long (*AnxImporterReadFunc) (AnxSource * source, unsigned char * buf,
00123                                   long n, long bound);
00124 
00130 typedef long (*AnxImporterSizeofNextReadFunc) (AnxSource * source, long bound);
00131 
00136 typedef int (*AnxImporterCloseFunc) (AnxSource * source);
00137 
00138 struct _AnxImporter {
00139   AnxImporterOpenFunc open;
00140   AnxImporterOpenFDFunc openfd;
00141   AnxImporterCloseFunc close;
00142   AnxImporterReadFunc read;
00143   AnxImporterSizeofNextReadFunc sizeof_next_read;
00144   char * content_type;
00145 };
00146 
00147 struct _AnxSourceTrack {
00148   char * id;
00149   char * content_type;
00150   long nr_header_packets;
00151   anx_int64_t granule_rate_n;
00152   anx_int64_t granule_rate_d;
00153   anx_int64_t start_granule;
00154   anx_int64_t end_granule;
00155   anx_int64_t current_granule;
00156   int eos;
00157 };
00158 
00159 struct _AnxSource {
00160   AnxImporter * importer;
00161   AnxList * tracks;
00162   AnxSourceTrack * current_track; 
00163 
00164   
00165   int eos;
00166   double start_time;
00167   double end_time;
00168   void * custom_data;
00169 };
00170 
00171 #ifdef __cplusplus
00172 extern "C" {
00173 #endif
00174 
00180 int anx_importer_register (AnxImporter * importer);
00181 
00187 int anx_importer_unregister (AnxImporter * importer);
00188 
00189 #ifdef __cplusplus
00190 }
00191 #endif
00192 
00193 #endif