00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _vorbis_codec_h_
00019 #define _vorbis_codec_h_
00020
00021 #ifndef __SYMBIAN32__
00022 # define IMPORT_C extern
00023 # define EXPORT_C
00024 #else
00025 # ifndef __cplusplus
00026 # undef IMPORT_C
00027 # define IMPORT_C __declspec(dllexport)
00028 # define EXPORT_C __declspec(dllexport)
00029 # endif
00030 #endif
00031 #ifdef __cplusplus
00032 extern "C"
00033 {
00034 #endif
00035
00036 #include "ogg/ogg.h"
00037
00038 typedef struct vorbis_info{
00039 int version;
00040 int channels;
00041 long rate;
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058 long bitrate_upper;
00059 long bitrate_nominal;
00060 long bitrate_lower;
00061 long bitrate_window;
00062
00063 void *codec_setup;
00064 } vorbis_info;
00065
00066
00067
00068
00069 typedef struct vorbis_dsp_state{
00070 int analysisp;
00071 vorbis_info *vi;
00072
00073 float **pcm;
00074 float **pcmret;
00075 int pcm_storage;
00076 int pcm_current;
00077 int pcm_returned;
00078
00079 int preextrapolate;
00080 int eofflag;
00081
00082 long lW;
00083 long W;
00084 long nW;
00085 long centerW;
00086
00087 ogg_int64_t granulepos;
00088 ogg_int64_t sequence;
00089
00090 ogg_int64_t glue_bits;
00091 ogg_int64_t time_bits;
00092 ogg_int64_t floor_bits;
00093 ogg_int64_t res_bits;
00094
00095 void *backend_state;
00096 } vorbis_dsp_state;
00097
00098 typedef struct vorbis_block{
00099
00100 float **pcm;
00101 oggpack_buffer opb;
00102
00103 long lW;
00104 long W;
00105 long nW;
00106 int pcmend;
00107 int mode;
00108
00109 int eofflag;
00110 ogg_int64_t granulepos;
00111 ogg_int64_t sequence;
00112 vorbis_dsp_state *vd;
00113
00114
00115
00116 void *localstore;
00117 long localtop;
00118 long localalloc;
00119 long totaluse;
00120 struct alloc_chain *reap;
00121
00122
00123 long glue_bits;
00124 long time_bits;
00125 long floor_bits;
00126 long res_bits;
00127
00128 void *internal;
00129
00130 } vorbis_block;
00131
00132
00133
00134
00135
00136
00137 struct alloc_chain{
00138 void *ptr;
00139 struct alloc_chain *next;
00140 };
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150 typedef struct vorbis_comment{
00151
00152
00153 char **user_comments;
00154 int *comment_lengths;
00155 int comments;
00156 char *vendor;
00157
00158 } vorbis_comment;
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175 IMPORT_C void vorbis_info_init(vorbis_info *vi);
00176 IMPORT_C void vorbis_info_clear(vorbis_info *vi);
00177 IMPORT_C int vorbis_info_blocksize(vorbis_info *vi,int zo);
00178 IMPORT_C void vorbis_comment_init(vorbis_comment *vc);
00179 IMPORT_C void vorbis_comment_add(vorbis_comment *vc, char *comment);
00180 IMPORT_C void vorbis_comment_add_tag(vorbis_comment *vc,
00181 char *tag, char *contents);
00182 IMPORT_C char *vorbis_comment_query(vorbis_comment *vc, char *tag, int count);
00183 IMPORT_C int vorbis_comment_query_count(vorbis_comment *vc, char *tag);
00184 IMPORT_C void vorbis_comment_clear(vorbis_comment *vc);
00185
00186 IMPORT_C int vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb);
00187 IMPORT_C int vorbis_block_clear(vorbis_block *vb);
00188 IMPORT_C void vorbis_dsp_clear(vorbis_dsp_state *v);
00189 IMPORT_C double vorbis_granule_time(vorbis_dsp_state *v,
00190 ogg_int64_t granulepos);
00191
00192
00193
00194 IMPORT_C int vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi);
00195 IMPORT_C int vorbis_commentheader_out(vorbis_comment *vc, ogg_packet *op);
00196 IMPORT_C int vorbis_analysis_headerout(vorbis_dsp_state *v,
00197 vorbis_comment *vc,
00198 ogg_packet *op,
00199 ogg_packet *op_comm,
00200 ogg_packet *op_code);
00201 IMPORT_C float **vorbis_analysis_buffer(vorbis_dsp_state *v,int vals);
00202 IMPORT_C int vorbis_analysis_wrote(vorbis_dsp_state *v,int vals);
00203 IMPORT_C int vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb);
00204 IMPORT_C int vorbis_analysis(vorbis_block *vb,ogg_packet *op);
00205
00206 IMPORT_C int vorbis_bitrate_addblock(vorbis_block *vb);
00207 IMPORT_C int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd,
00208 ogg_packet *op);
00209
00210
00211 IMPORT_C int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,
00212 ogg_packet *op);
00213
00214 IMPORT_C int vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi);
00215 IMPORT_C int vorbis_synthesis_restart(vorbis_dsp_state *v);
00216 IMPORT_C int vorbis_synthesis(vorbis_block *vb,ogg_packet *op);
00217 IMPORT_C int vorbis_synthesis_trackonly(vorbis_block *vb,ogg_packet *op);
00218 IMPORT_C int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb);
00219 IMPORT_C int vorbis_synthesis_pcmout(vorbis_dsp_state *v,float ***pcm);
00220 IMPORT_C int vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm);
00221 IMPORT_C int vorbis_synthesis_read(vorbis_dsp_state *v,int samples);
00222 IMPORT_C long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op);
00223
00224 IMPORT_C int vorbis_synthesis_halfrate(vorbis_info *v,int flag);
00225 IMPORT_C int vorbis_synthesis_halfrate_p(vorbis_info *v);
00226
00227
00228
00229 #define OV_FALSE -1
00230 #define OV_EOF -2
00231 #define OV_HOLE -3
00232
00233 #define OV_EREAD -128
00234 #define OV_EFAULT -129
00235 #define OV_EIMPL -130
00236 #define OV_EINVAL -131
00237 #define OV_ENOTVORBIS -132
00238 #define OV_EBADHEADER -133
00239 #define OV_EVERSION -134
00240 #define OV_ENOTAUDIO -135
00241 #define OV_EBADPACKET -136
00242 #define OV_EBADLINK -137
00243 #define OV_ENOSEEK -138
00244
00245 #ifdef __cplusplus
00246 }
00247 #endif
00248
00249 #endif
00250