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);