1 module deimos.vorbis.codec; 2 3 import core.stdc.config; 4 5 import deimos.ogg.ogg; 6 7 extern (C): 8 9 struct vorbis_info 10 { 11 int version_; 12 int channels; 13 c_long rate; 14 c_long bitrate_upper; 15 c_long bitrate_nominal; 16 c_long bitrate_lower; 17 c_long bitrate_window; 18 void* codec_setup; 19 } 20 21 struct vorbis_dsp_state 22 { 23 int analysisp; 24 vorbis_info* vi; 25 float** pcm; 26 float** pcmret; 27 int pcm_storage; 28 int pcm_current; 29 int pcm_returned; 30 int preextrapolate; 31 int eofflag; 32 c_long lW; 33 c_long W; 34 c_long nW; 35 c_long centerW; 36 ogg_int64_t granulepos; 37 ogg_int64_t sequence; 38 ogg_int64_t glue_bits; 39 ogg_int64_t time_bits; 40 ogg_int64_t floor_bits; 41 ogg_int64_t res_bits; 42 void* backend_state; 43 } 44 45 struct vorbis_block 46 { 47 float** pcm; 48 oggpack_buffer opb; 49 c_long lW; 50 c_long W; 51 c_long nW; 52 int pcmend; 53 int mode; 54 int eofflag; 55 ogg_int64_t granulepos; 56 ogg_int64_t sequence; 57 vorbis_dsp_state* vd; 58 void* localstore; 59 c_long localtop; 60 c_long localalloc; 61 c_long totaluse; 62 alloc_chain* reap; 63 c_long glue_bits; 64 c_long time_bits; 65 c_long floor_bits; 66 c_long res_bits; 67 void* internal; 68 } 69 70 struct alloc_chain 71 { 72 void* ptr; 73 alloc_chain* next; 74 } 75 76 struct vorbis_comment 77 { 78 char** user_comments; 79 int* comment_lengths; 80 int comments; 81 char* vendor; 82 } 83 84 void vorbis_info_init (vorbis_info* vi); 85 void vorbis_info_clear (vorbis_info* vi); 86 int vorbis_info_blocksize (vorbis_info* vi, int zo); 87 void vorbis_comment_init (vorbis_comment* vc); 88 void vorbis_comment_add (vorbis_comment* vc, const(char)* comment); 89 void vorbis_comment_add_tag (vorbis_comment* vc, const(char)* tag, const(char)* contents); 90 char* vorbis_comment_query (vorbis_comment* vc, const(char)* tag, int count); 91 int vorbis_comment_query_count (vorbis_comment* vc, const(char)* tag); 92 void vorbis_comment_clear (vorbis_comment* vc); 93 int vorbis_block_init (vorbis_dsp_state* v, vorbis_block* vb); 94 int vorbis_block_clear (vorbis_block* vb); 95 void vorbis_dsp_clear (vorbis_dsp_state* v); 96 double vorbis_granule_time (vorbis_dsp_state* v, ogg_int64_t granulepos); 97 const(char)* vorbis_version_string (); 98 int vorbis_analysis_init (vorbis_dsp_state* v, vorbis_info* vi); 99 int vorbis_commentheader_out (vorbis_comment* vc, ogg_packet* op); 100 int vorbis_analysis_headerout (vorbis_dsp_state* v, vorbis_comment* vc, ogg_packet* op, ogg_packet* op_comm, ogg_packet* op_code); 101 float** vorbis_analysis_buffer (vorbis_dsp_state* v, int vals); 102 int vorbis_analysis_wrote (vorbis_dsp_state* v, int vals); 103 int vorbis_analysis_blockout (vorbis_dsp_state* v, vorbis_block* vb); 104 int vorbis_analysis (vorbis_block* vb, ogg_packet* op); 105 int vorbis_bitrate_addblock (vorbis_block* vb); 106 int vorbis_bitrate_flushpacket (vorbis_dsp_state* vd, ogg_packet* op); 107 int vorbis_synthesis_idheader (ogg_packet* op); 108 int vorbis_synthesis_headerin (vorbis_info* vi, vorbis_comment* vc, ogg_packet* op); 109 int vorbis_synthesis_init (vorbis_dsp_state* v, vorbis_info* vi); 110 int vorbis_synthesis_restart (vorbis_dsp_state* v); 111 int vorbis_synthesis (vorbis_block* vb, ogg_packet* op); 112 int vorbis_synthesis_trackonly (vorbis_block* vb, ogg_packet* op); 113 int vorbis_synthesis_blockin (vorbis_dsp_state* v, vorbis_block* vb); 114 int vorbis_synthesis_pcmout (vorbis_dsp_state* v, float*** pcm); 115 int vorbis_synthesis_lapout (vorbis_dsp_state* v, float*** pcm); 116 int vorbis_synthesis_read (vorbis_dsp_state* v, int samples); 117 c_long vorbis_packet_blocksize (vorbis_info* vi, ogg_packet* op); 118 int vorbis_synthesis_halfrate (vorbis_info* v, int flag); 119 int vorbis_synthesis_halfrate_p (vorbis_info* v);