gosu 0.8.0.pre3 → 0.8.0.pre4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. checksums.yaml +4 -4
  2. data/Gosu/Buttons.hpp +13 -11
  3. data/{linux → ext/gosu}/extconf.rb +25 -47
  4. data/{GosuImpl/RubyGosu_wrap.cxx → ext/gosu/gosu_wrap.cxx} +3 -2
  5. data/{GosuImpl/RubyGosu_wrap.h → ext/gosu/gosu_wrap.h} +0 -0
  6. data/lib/gosu.rb +6 -7
  7. data/lib/gosu/zen.rb +12 -0
  8. data/{GosuImpl → src}/Audio/ALChannelManagement.hpp +0 -0
  9. data/{GosuImpl → src}/Audio/AudioFile.hpp +0 -0
  10. data/{GosuImpl → src}/Audio/AudioOpenAL.cpp +0 -0
  11. data/{GosuImpl → src}/Audio/AudioOpenAL.mm +0 -0
  12. data/{GosuImpl → src}/Audio/AudioToolboxFile.hpp +0 -0
  13. data/{GosuImpl → src}/Audio/OggFile.hpp +0 -0
  14. data/{GosuImpl → src}/Audio/SndFile.hpp +0 -0
  15. data/{GosuImpl/Graphics → src/Bitmap}/Bitmap.cpp +2 -0
  16. data/{GosuImpl/Graphics → src/Bitmap}/BitmapApple.mm +0 -0
  17. data/{GosuImpl/Graphics → src/Bitmap}/BitmapBMP.cpp +0 -0
  18. data/{GosuImpl/Graphics → src/Bitmap}/BitmapColorKey.cpp +0 -0
  19. data/{GosuImpl/Graphics → src/Bitmap}/BitmapFreeImage.cpp +0 -0
  20. data/{GosuImpl/Graphics → src/Bitmap}/BitmapGDIplus.cpp +0 -0
  21. data/{GosuImpl/Graphics → src/Bitmap}/BitmapUtils.cpp +0 -0
  22. data/{GosuImpl → src}/DirectoriesMac.mm +0 -0
  23. data/{GosuImpl → src}/DirectoriesTouch.mm +0 -0
  24. data/{GosuImpl → src}/DirectoriesUnix.cpp +0 -0
  25. data/{GosuImpl → src}/DirectoriesWin.cpp +0 -0
  26. data/{GosuImpl → src}/FileUnix.cpp +0 -0
  27. data/{GosuImpl → src}/FileWin.cpp +0 -0
  28. data/{GosuImpl/Graphics → src}/GosuView.hpp +0 -0
  29. data/{GosuImpl/Graphics → src}/GosuView.mm +0 -0
  30. data/{GosuImpl → src}/Graphics/BlockAllocator.cpp +0 -0
  31. data/{GosuImpl → src}/Graphics/BlockAllocator.hpp +0 -0
  32. data/{GosuImpl → src}/Graphics/ClipRectStack.hpp +0 -0
  33. data/{GosuImpl → src}/Graphics/Color.cpp +0 -0
  34. data/{GosuImpl → src}/Graphics/Common.hpp +0 -0
  35. data/{GosuImpl → src}/Graphics/DrawOp.hpp +0 -0
  36. data/{GosuImpl → src}/Graphics/DrawOpQueue.hpp +0 -0
  37. data/{GosuImpl → src}/Graphics/Graphics.cpp +0 -0
  38. data/{GosuImpl → src}/Graphics/Image.cpp +0 -0
  39. data/{GosuImpl → src}/Graphics/LargeImageData.cpp +0 -0
  40. data/{GosuImpl → src}/Graphics/LargeImageData.hpp +0 -0
  41. data/{GosuImpl → src}/Graphics/Macro.hpp +0 -0
  42. data/{GosuImpl → src}/Graphics/RenderState.hpp +0 -0
  43. data/{GosuImpl → src}/Graphics/TexChunk.cpp +0 -0
  44. data/{GosuImpl → src}/Graphics/TexChunk.hpp +0 -0
  45. data/{GosuImpl → src}/Graphics/Texture.cpp +0 -0
  46. data/{GosuImpl → src}/Graphics/Texture.hpp +0 -0
  47. data/{GosuImpl → src}/Graphics/Transform.cpp +0 -0
  48. data/{GosuImpl → src}/Graphics/TransformStack.hpp +0 -0
  49. data/{GosuImpl → src}/IO.cpp +0 -0
  50. data/{GosuImpl → src}/Iconv.hpp +0 -0
  51. data/{GosuImpl → src}/Input/AccelerometerReader.hpp +0 -0
  52. data/{GosuImpl → src}/Input/AccelerometerReader.mm +0 -0
  53. data/{GosuImpl → src/Input}/Input.cpp +0 -0
  54. data/{GosuImpl → src/Input}/InputTouch.mm +0 -0
  55. data/{GosuImpl → src/Input}/TextInput.cpp +0 -0
  56. data/{GosuImpl → src/Input}/TextInputMac.mm +0 -0
  57. data/{GosuImpl → src}/Inspection.cpp +0 -0
  58. data/{GosuImpl → src}/MacUtility.hpp +0 -0
  59. data/{GosuImpl → src}/Math.cpp +0 -0
  60. data/{GosuImpl → src}/Sockets/CommSocket.cpp +0 -0
  61. data/{GosuImpl → src}/Sockets/ListenerSocket.cpp +0 -0
  62. data/{GosuImpl → src}/Sockets/MessageSocket.cpp +0 -0
  63. data/{GosuImpl → src}/Sockets/Socket.cpp +0 -0
  64. data/{GosuImpl → src}/Sockets/Socket.hpp +0 -0
  65. data/{GosuImpl/Graphics → src/Text}/Font.cpp +1 -1
  66. data/{GosuImpl/Graphics → src/Text}/FormattedString.hpp +0 -0
  67. data/{GosuImpl/Graphics → src/Text}/Text.cpp +1 -1
  68. data/{GosuImpl/Graphics/TextTouch.mm → src/Text/TextApple.mm} +0 -0
  69. data/{GosuImpl/Graphics → src/Text}/TextMac.cpp +1 -1
  70. data/{GosuImpl/Graphics → src/Text}/TextTTFWin.cpp +0 -0
  71. data/{GosuImpl/Graphics → src/Text}/TextUnix.cpp +0 -0
  72. data/{GosuImpl/Graphics → src/Text}/TextWin.cpp +0 -0
  73. data/{GosuImpl → src}/TimingApple.cpp +0 -0
  74. data/{GosuImpl → src}/TimingUnix.cpp +0 -0
  75. data/{GosuImpl → src}/TimingWin.cpp +0 -0
  76. data/{GosuImpl → src}/Utility.cpp +0 -0
  77. data/{GosuImpl → src}/UtilityApple.mm +0 -0
  78. data/{GosuImpl → src}/UtilityWin.cpp +0 -0
  79. data/{GosuImpl → src}/WinMain.cpp +0 -0
  80. data/{GosuImpl → src}/WinUtility.cpp +0 -0
  81. data/{GosuImpl → src}/Window.cpp +0 -0
  82. data/{GosuImpl → src}/WindowTouch.mm +0 -0
  83. data/{GosuImpl → src}/X11vroot.h +0 -0
  84. metadata +97 -193
  85. data/.yardopts +0 -1
  86. data/COPYING +0 -29
  87. data/GosuImpl/InputMac.mm +0 -733
  88. data/GosuImpl/InputWin.cpp +0 -483
  89. data/GosuImpl/InputX.cpp +0 -243
  90. data/GosuImpl/RubyGosu.swg +0 -821
  91. data/GosuImpl/RubyGosu_SWIG_GC_PATCH.patch +0 -126
  92. data/GosuImpl/RubyGosu_SWIG_RENAME_PATCH.patch +0 -62
  93. data/GosuImpl/TextInputWin.cpp +0 -211
  94. data/GosuImpl/TextInputX.cpp +0 -217
  95. data/GosuImpl/WindowWin.cpp +0 -534
  96. data/GosuImpl/WindowX.cpp +0 -458
  97. data/README.txt +0 -25
  98. data/dependencies/libogg/AUTHORS +0 -4
  99. data/dependencies/libogg/CHANGES +0 -70
  100. data/dependencies/libogg/COPYING +0 -28
  101. data/dependencies/libogg/include/ogg/ogg.h +0 -209
  102. data/dependencies/libogg/include/ogg/os_types.h +0 -147
  103. data/dependencies/libogg/src/bitwise.c +0 -857
  104. data/dependencies/libogg/src/framing.c +0 -2089
  105. data/dependencies/libvorbis/AUTHORS +0 -3
  106. data/dependencies/libvorbis/CHANGES +0 -126
  107. data/dependencies/libvorbis/COPYING +0 -28
  108. data/dependencies/libvorbis/include/vorbis/codec.h +0 -243
  109. data/dependencies/libvorbis/include/vorbis/vorbisenc.h +0 -436
  110. data/dependencies/libvorbis/include/vorbis/vorbisfile.h +0 -206
  111. data/dependencies/libvorbis/lib/analysis.c +0 -120
  112. data/dependencies/libvorbis/lib/backends.h +0 -144
  113. data/dependencies/libvorbis/lib/barkmel.c +0 -64
  114. data/dependencies/libvorbis/lib/bitrate.c +0 -253
  115. data/dependencies/libvorbis/lib/bitrate.h +0 -59
  116. data/dependencies/libvorbis/lib/block.c +0 -1046
  117. data/dependencies/libvorbis/lib/books/coupled/res_books_51.h +0 -12257
  118. data/dependencies/libvorbis/lib/books/coupled/res_books_stereo.h +0 -15783
  119. data/dependencies/libvorbis/lib/books/floor/floor_books.h +0 -1547
  120. data/dependencies/libvorbis/lib/books/uncoupled/res_books_uncoupled.h +0 -7758
  121. data/dependencies/libvorbis/lib/codebook.c +0 -479
  122. data/dependencies/libvorbis/lib/codebook.h +0 -119
  123. data/dependencies/libvorbis/lib/codec_internal.h +0 -167
  124. data/dependencies/libvorbis/lib/envelope.c +0 -375
  125. data/dependencies/libvorbis/lib/envelope.h +0 -80
  126. data/dependencies/libvorbis/lib/floor0.c +0 -222
  127. data/dependencies/libvorbis/lib/floor1.c +0 -1099
  128. data/dependencies/libvorbis/lib/highlevel.h +0 -58
  129. data/dependencies/libvorbis/lib/info.c +0 -664
  130. data/dependencies/libvorbis/lib/lookup.c +0 -94
  131. data/dependencies/libvorbis/lib/lookup.h +0 -32
  132. data/dependencies/libvorbis/lib/lookup_data.h +0 -192
  133. data/dependencies/libvorbis/lib/lpc.c +0 -160
  134. data/dependencies/libvorbis/lib/lpc.h +0 -29
  135. data/dependencies/libvorbis/lib/lsp.c +0 -456
  136. data/dependencies/libvorbis/lib/lsp.h +0 -28
  137. data/dependencies/libvorbis/lib/mapping0.c +0 -816
  138. data/dependencies/libvorbis/lib/masking.h +0 -785
  139. data/dependencies/libvorbis/lib/mdct.c +0 -563
  140. data/dependencies/libvorbis/lib/mdct.h +0 -71
  141. data/dependencies/libvorbis/lib/misc.h +0 -57
  142. data/dependencies/libvorbis/lib/modes/floor_all.h +0 -260
  143. data/dependencies/libvorbis/lib/modes/psych_11.h +0 -51
  144. data/dependencies/libvorbis/lib/modes/psych_16.h +0 -133
  145. data/dependencies/libvorbis/lib/modes/psych_44.h +0 -642
  146. data/dependencies/libvorbis/lib/modes/psych_8.h +0 -101
  147. data/dependencies/libvorbis/lib/modes/residue_16.h +0 -163
  148. data/dependencies/libvorbis/lib/modes/residue_44.h +0 -292
  149. data/dependencies/libvorbis/lib/modes/residue_44p51.h +0 -451
  150. data/dependencies/libvorbis/lib/modes/residue_44u.h +0 -318
  151. data/dependencies/libvorbis/lib/modes/residue_8.h +0 -109
  152. data/dependencies/libvorbis/lib/modes/setup_11.h +0 -143
  153. data/dependencies/libvorbis/lib/modes/setup_16.h +0 -153
  154. data/dependencies/libvorbis/lib/modes/setup_22.h +0 -128
  155. data/dependencies/libvorbis/lib/modes/setup_32.h +0 -132
  156. data/dependencies/libvorbis/lib/modes/setup_44.h +0 -117
  157. data/dependencies/libvorbis/lib/modes/setup_44p51.h +0 -74
  158. data/dependencies/libvorbis/lib/modes/setup_44u.h +0 -74
  159. data/dependencies/libvorbis/lib/modes/setup_8.h +0 -149
  160. data/dependencies/libvorbis/lib/modes/setup_X.h +0 -225
  161. data/dependencies/libvorbis/lib/os.h +0 -186
  162. data/dependencies/libvorbis/lib/psy.c +0 -1203
  163. data/dependencies/libvorbis/lib/psy.h +0 -154
  164. data/dependencies/libvorbis/lib/psytune.c +0 -524
  165. data/dependencies/libvorbis/lib/registry.c +0 -45
  166. data/dependencies/libvorbis/lib/registry.h +0 -32
  167. data/dependencies/libvorbis/lib/res0.c +0 -889
  168. data/dependencies/libvorbis/lib/scales.h +0 -90
  169. data/dependencies/libvorbis/lib/sharedbook.c +0 -579
  170. data/dependencies/libvorbis/lib/smallft.c +0 -1255
  171. data/dependencies/libvorbis/lib/smallft.h +0 -34
  172. data/dependencies/libvorbis/lib/synthesis.c +0 -184
  173. data/dependencies/libvorbis/lib/tone.c +0 -54
  174. data/dependencies/libvorbis/lib/vorbisenc.c +0 -1215
  175. data/dependencies/libvorbis/lib/vorbisfile.c +0 -2337
  176. data/dependencies/libvorbis/lib/window.c +0 -2135
  177. data/dependencies/libvorbis/lib/window.h +0 -26
  178. data/dependencies/ogg_vorbis.license +0 -28
  179. data/reference/gosu.rb +0 -1284
@@ -1,58 +0,0 @@
1
- /********************************************************************
2
- * *
3
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
4
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
5
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
6
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
7
- * *
8
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
9
- * by the Xiph.Org Foundation http://www.xiph.org/ *
10
- * *
11
- ********************************************************************
12
-
13
- function: highlevel encoder setup struct separated out for vorbisenc clarity
14
- last mod: $Id: highlevel.h 17195 2010-05-05 21:49:51Z giles $
15
-
16
- ********************************************************************/
17
-
18
- typedef struct highlevel_byblocktype {
19
- double tone_mask_setting;
20
- double tone_peaklimit_setting;
21
- double noise_bias_setting;
22
- double noise_compand_setting;
23
- } highlevel_byblocktype;
24
-
25
- typedef struct highlevel_encode_setup {
26
- int set_in_stone;
27
- const void *setup;
28
- double base_setting;
29
-
30
- double impulse_noisetune;
31
-
32
- /* bitrate management below all settable */
33
- float req;
34
- int managed;
35
- long bitrate_min;
36
- long bitrate_av;
37
- double bitrate_av_damp;
38
- long bitrate_max;
39
- long bitrate_reservoir;
40
- double bitrate_reservoir_bias;
41
-
42
- int impulse_block_p;
43
- int noise_normalize_p;
44
- int coupling_p;
45
-
46
- double stereo_point_setting;
47
- double lowpass_kHz;
48
- int lowpass_altered;
49
-
50
- double ath_floating_dB;
51
- double ath_absolute_dB;
52
-
53
- double amplitude_track_dBpersec;
54
- double trigger_setting;
55
-
56
- highlevel_byblocktype block[4]; /* padding, impulse, transition, long */
57
-
58
- } highlevel_encode_setup;
@@ -1,664 +0,0 @@
1
- /********************************************************************
2
- * *
3
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
4
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
5
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
6
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
7
- * *
8
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 *
9
- * by the Xiph.Org Foundation http://www.xiph.org/ *
10
- * *
11
- ********************************************************************
12
-
13
- function: maintain the info structure, info <-> header packets
14
- last mod: $Id: info.c 17584 2010-11-01 19:26:16Z xiphmont $
15
-
16
- ********************************************************************/
17
-
18
- /* general handling of the header and the vorbis_info structure (and
19
- substructures) */
20
-
21
- #include <stdlib.h>
22
- #include <string.h>
23
- #include <ctype.h>
24
- #include <ogg/ogg.h>
25
- #include "vorbis/codec.h"
26
- #include "codec_internal.h"
27
- #include "codebook.h"
28
- #include "registry.h"
29
- #include "window.h"
30
- #include "psy.h"
31
- #include "misc.h"
32
- #include "os.h"
33
-
34
- #define GENERAL_VENDOR_STRING "Xiph.Org libVorbis 1.3.2"
35
- #define ENCODE_VENDOR_STRING "Xiph.Org libVorbis I 20101101 (Schaufenugget)"
36
-
37
- /* helpers */
38
- static int ilog2(unsigned int v){
39
- int ret=0;
40
- if(v)--v;
41
- while(v){
42
- ret++;
43
- v>>=1;
44
- }
45
- return(ret);
46
- }
47
-
48
- static void _v_writestring(oggpack_buffer *o,const char *s, int bytes){
49
-
50
- while(bytes--){
51
- oggpack_write(o,*s++,8);
52
- }
53
- }
54
-
55
- static void _v_readstring(oggpack_buffer *o,char *buf,int bytes){
56
- while(bytes--){
57
- *buf++=oggpack_read(o,8);
58
- }
59
- }
60
-
61
- void vorbis_comment_init(vorbis_comment *vc){
62
- memset(vc,0,sizeof(*vc));
63
- }
64
-
65
- void vorbis_comment_add(vorbis_comment *vc,const char *comment){
66
- vc->user_comments=_ogg_realloc(vc->user_comments,
67
- (vc->comments+2)*sizeof(*vc->user_comments));
68
- vc->comment_lengths=_ogg_realloc(vc->comment_lengths,
69
- (vc->comments+2)*sizeof(*vc->comment_lengths));
70
- vc->comment_lengths[vc->comments]=strlen(comment);
71
- vc->user_comments[vc->comments]=_ogg_malloc(vc->comment_lengths[vc->comments]+1);
72
- strcpy(vc->user_comments[vc->comments], comment);
73
- vc->comments++;
74
- vc->user_comments[vc->comments]=NULL;
75
- }
76
-
77
- void vorbis_comment_add_tag(vorbis_comment *vc, const char *tag, const char *contents){
78
- char *comment=alloca(strlen(tag)+strlen(contents)+2); /* +2 for = and \0 */
79
- strcpy(comment, tag);
80
- strcat(comment, "=");
81
- strcat(comment, contents);
82
- vorbis_comment_add(vc, comment);
83
- }
84
-
85
- /* This is more or less the same as strncasecmp - but that doesn't exist
86
- * everywhere, and this is a fairly trivial function, so we include it */
87
- static int tagcompare(const char *s1, const char *s2, int n){
88
- int c=0;
89
- while(c < n){
90
- if(toupper(s1[c]) != toupper(s2[c]))
91
- return !0;
92
- c++;
93
- }
94
- return 0;
95
- }
96
-
97
- char *vorbis_comment_query(vorbis_comment *vc, const char *tag, int count){
98
- long i;
99
- int found = 0;
100
- int taglen = strlen(tag)+1; /* +1 for the = we append */
101
- char *fulltag = alloca(taglen+ 1);
102
-
103
- strcpy(fulltag, tag);
104
- strcat(fulltag, "=");
105
-
106
- for(i=0;i<vc->comments;i++){
107
- if(!tagcompare(vc->user_comments[i], fulltag, taglen)){
108
- if(count == found)
109
- /* We return a pointer to the data, not a copy */
110
- return vc->user_comments[i] + taglen;
111
- else
112
- found++;
113
- }
114
- }
115
- return NULL; /* didn't find anything */
116
- }
117
-
118
- int vorbis_comment_query_count(vorbis_comment *vc, const char *tag){
119
- int i,count=0;
120
- int taglen = strlen(tag)+1; /* +1 for the = we append */
121
- char *fulltag = alloca(taglen+1);
122
- strcpy(fulltag,tag);
123
- strcat(fulltag, "=");
124
-
125
- for(i=0;i<vc->comments;i++){
126
- if(!tagcompare(vc->user_comments[i], fulltag, taglen))
127
- count++;
128
- }
129
-
130
- return count;
131
- }
132
-
133
- void vorbis_comment_clear(vorbis_comment *vc){
134
- if(vc){
135
- long i;
136
- if(vc->user_comments){
137
- for(i=0;i<vc->comments;i++)
138
- if(vc->user_comments[i])_ogg_free(vc->user_comments[i]);
139
- _ogg_free(vc->user_comments);
140
- }
141
- if(vc->comment_lengths)_ogg_free(vc->comment_lengths);
142
- if(vc->vendor)_ogg_free(vc->vendor);
143
- memset(vc,0,sizeof(*vc));
144
- }
145
- }
146
-
147
- /* blocksize 0 is guaranteed to be short, 1 is guaranteed to be long.
148
- They may be equal, but short will never ge greater than long */
149
- int vorbis_info_blocksize(vorbis_info *vi,int zo){
150
- codec_setup_info *ci = vi->codec_setup;
151
- return ci ? ci->blocksizes[zo] : -1;
152
- }
153
-
154
- /* used by synthesis, which has a full, alloced vi */
155
- void vorbis_info_init(vorbis_info *vi){
156
- memset(vi,0,sizeof(*vi));
157
- vi->codec_setup=_ogg_calloc(1,sizeof(codec_setup_info));
158
- }
159
-
160
- void vorbis_info_clear(vorbis_info *vi){
161
- codec_setup_info *ci=vi->codec_setup;
162
- int i;
163
-
164
- if(ci){
165
-
166
- for(i=0;i<ci->modes;i++)
167
- if(ci->mode_param[i])_ogg_free(ci->mode_param[i]);
168
-
169
- for(i=0;i<ci->maps;i++) /* unpack does the range checking */
170
- if(ci->map_param[i]) /* this may be cleaning up an aborted
171
- unpack, in which case the below type
172
- cannot be trusted */
173
- _mapping_P[ci->map_type[i]]->free_info(ci->map_param[i]);
174
-
175
- for(i=0;i<ci->floors;i++) /* unpack does the range checking */
176
- if(ci->floor_param[i]) /* this may be cleaning up an aborted
177
- unpack, in which case the below type
178
- cannot be trusted */
179
- _floor_P[ci->floor_type[i]]->free_info(ci->floor_param[i]);
180
-
181
- for(i=0;i<ci->residues;i++) /* unpack does the range checking */
182
- if(ci->residue_param[i]) /* this may be cleaning up an aborted
183
- unpack, in which case the below type
184
- cannot be trusted */
185
- _residue_P[ci->residue_type[i]]->free_info(ci->residue_param[i]);
186
-
187
- for(i=0;i<ci->books;i++){
188
- if(ci->book_param[i]){
189
- /* knows if the book was not alloced */
190
- vorbis_staticbook_destroy(ci->book_param[i]);
191
- }
192
- if(ci->fullbooks)
193
- vorbis_book_clear(ci->fullbooks+i);
194
- }
195
- if(ci->fullbooks)
196
- _ogg_free(ci->fullbooks);
197
-
198
- for(i=0;i<ci->psys;i++)
199
- _vi_psy_free(ci->psy_param[i]);
200
-
201
- _ogg_free(ci);
202
- }
203
-
204
- memset(vi,0,sizeof(*vi));
205
- }
206
-
207
- /* Header packing/unpacking ********************************************/
208
-
209
- static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){
210
- codec_setup_info *ci=vi->codec_setup;
211
- if(!ci)return(OV_EFAULT);
212
-
213
- vi->version=oggpack_read(opb,32);
214
- if(vi->version!=0)return(OV_EVERSION);
215
-
216
- vi->channels=oggpack_read(opb,8);
217
- vi->rate=oggpack_read(opb,32);
218
-
219
- vi->bitrate_upper=oggpack_read(opb,32);
220
- vi->bitrate_nominal=oggpack_read(opb,32);
221
- vi->bitrate_lower=oggpack_read(opb,32);
222
-
223
- ci->blocksizes[0]=1<<oggpack_read(opb,4);
224
- ci->blocksizes[1]=1<<oggpack_read(opb,4);
225
-
226
- if(vi->rate<1)goto err_out;
227
- if(vi->channels<1)goto err_out;
228
- if(ci->blocksizes[0]<64)goto err_out;
229
- if(ci->blocksizes[1]<ci->blocksizes[0])goto err_out;
230
- if(ci->blocksizes[1]>8192)goto err_out;
231
-
232
- if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */
233
-
234
- return(0);
235
- err_out:
236
- vorbis_info_clear(vi);
237
- return(OV_EBADHEADER);
238
- }
239
-
240
- static int _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){
241
- int i;
242
- int vendorlen=oggpack_read(opb,32);
243
- if(vendorlen<0)goto err_out;
244
- if(vendorlen>opb->storage-8)goto err_out;
245
- vc->vendor=_ogg_calloc(vendorlen+1,1);
246
- _v_readstring(opb,vc->vendor,vendorlen);
247
- i=oggpack_read(opb,32);
248
- if(i<0)goto err_out;
249
- if(i>((opb->storage-oggpack_bytes(opb))>>2))goto err_out;
250
- vc->comments=i;
251
- vc->user_comments=_ogg_calloc(vc->comments+1,sizeof(*vc->user_comments));
252
- vc->comment_lengths=_ogg_calloc(vc->comments+1, sizeof(*vc->comment_lengths));
253
-
254
- for(i=0;i<vc->comments;i++){
255
- int len=oggpack_read(opb,32);
256
- if(len<0)goto err_out;
257
- if(len>opb->storage-oggpack_bytes(opb))goto err_out;
258
- vc->comment_lengths[i]=len;
259
- vc->user_comments[i]=_ogg_calloc(len+1,1);
260
- _v_readstring(opb,vc->user_comments[i],len);
261
- }
262
- if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */
263
-
264
- return(0);
265
- err_out:
266
- vorbis_comment_clear(vc);
267
- return(OV_EBADHEADER);
268
- }
269
-
270
- /* all of the real encoding details are here. The modes, books,
271
- everything */
272
- static int _vorbis_unpack_books(vorbis_info *vi,oggpack_buffer *opb){
273
- codec_setup_info *ci=vi->codec_setup;
274
- int i;
275
- if(!ci)return(OV_EFAULT);
276
-
277
- /* codebooks */
278
- ci->books=oggpack_read(opb,8)+1;
279
- if(ci->books<=0)goto err_out;
280
- for(i=0;i<ci->books;i++){
281
- ci->book_param[i]=vorbis_staticbook_unpack(opb);
282
- if(!ci->book_param[i])goto err_out;
283
- }
284
-
285
- /* time backend settings; hooks are unused */
286
- {
287
- int times=oggpack_read(opb,6)+1;
288
- if(times<=0)goto err_out;
289
- for(i=0;i<times;i++){
290
- int test=oggpack_read(opb,16);
291
- if(test<0 || test>=VI_TIMEB)goto err_out;
292
- }
293
- }
294
-
295
- /* floor backend settings */
296
- ci->floors=oggpack_read(opb,6)+1;
297
- if(ci->floors<=0)goto err_out;
298
- for(i=0;i<ci->floors;i++){
299
- ci->floor_type[i]=oggpack_read(opb,16);
300
- if(ci->floor_type[i]<0 || ci->floor_type[i]>=VI_FLOORB)goto err_out;
301
- ci->floor_param[i]=_floor_P[ci->floor_type[i]]->unpack(vi,opb);
302
- if(!ci->floor_param[i])goto err_out;
303
- }
304
-
305
- /* residue backend settings */
306
- ci->residues=oggpack_read(opb,6)+1;
307
- if(ci->residues<=0)goto err_out;
308
- for(i=0;i<ci->residues;i++){
309
- ci->residue_type[i]=oggpack_read(opb,16);
310
- if(ci->residue_type[i]<0 || ci->residue_type[i]>=VI_RESB)goto err_out;
311
- ci->residue_param[i]=_residue_P[ci->residue_type[i]]->unpack(vi,opb);
312
- if(!ci->residue_param[i])goto err_out;
313
- }
314
-
315
- /* map backend settings */
316
- ci->maps=oggpack_read(opb,6)+1;
317
- if(ci->maps<=0)goto err_out;
318
- for(i=0;i<ci->maps;i++){
319
- ci->map_type[i]=oggpack_read(opb,16);
320
- if(ci->map_type[i]<0 || ci->map_type[i]>=VI_MAPB)goto err_out;
321
- ci->map_param[i]=_mapping_P[ci->map_type[i]]->unpack(vi,opb);
322
- if(!ci->map_param[i])goto err_out;
323
- }
324
-
325
- /* mode settings */
326
- ci->modes=oggpack_read(opb,6)+1;
327
- if(ci->modes<=0)goto err_out;
328
- for(i=0;i<ci->modes;i++){
329
- ci->mode_param[i]=_ogg_calloc(1,sizeof(*ci->mode_param[i]));
330
- ci->mode_param[i]->blockflag=oggpack_read(opb,1);
331
- ci->mode_param[i]->windowtype=oggpack_read(opb,16);
332
- ci->mode_param[i]->transformtype=oggpack_read(opb,16);
333
- ci->mode_param[i]->mapping=oggpack_read(opb,8);
334
-
335
- if(ci->mode_param[i]->windowtype>=VI_WINDOWB)goto err_out;
336
- if(ci->mode_param[i]->transformtype>=VI_WINDOWB)goto err_out;
337
- if(ci->mode_param[i]->mapping>=ci->maps)goto err_out;
338
- if(ci->mode_param[i]->mapping<0)goto err_out;
339
- }
340
-
341
- if(oggpack_read(opb,1)!=1)goto err_out; /* top level EOP check */
342
-
343
- return(0);
344
- err_out:
345
- vorbis_info_clear(vi);
346
- return(OV_EBADHEADER);
347
- }
348
-
349
- /* Is this packet a vorbis ID header? */
350
- int vorbis_synthesis_idheader(ogg_packet *op){
351
- oggpack_buffer opb;
352
- char buffer[6];
353
-
354
- if(op){
355
- oggpack_readinit(&opb,op->packet,op->bytes);
356
-
357
- if(!op->b_o_s)
358
- return(0); /* Not the initial packet */
359
-
360
- if(oggpack_read(&opb,8) != 1)
361
- return 0; /* not an ID header */
362
-
363
- memset(buffer,0,6);
364
- _v_readstring(&opb,buffer,6);
365
- if(memcmp(buffer,"vorbis",6))
366
- return 0; /* not vorbis */
367
-
368
- return 1;
369
- }
370
-
371
- return 0;
372
- }
373
-
374
- /* The Vorbis header is in three packets; the initial small packet in
375
- the first page that identifies basic parameters, a second packet
376
- with bitstream comments and a third packet that holds the
377
- codebook. */
378
-
379
- int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,ogg_packet *op){
380
- oggpack_buffer opb;
381
-
382
- if(op){
383
- oggpack_readinit(&opb,op->packet,op->bytes);
384
-
385
- /* Which of the three types of header is this? */
386
- /* Also verify header-ness, vorbis */
387
- {
388
- char buffer[6];
389
- int packtype=oggpack_read(&opb,8);
390
- memset(buffer,0,6);
391
- _v_readstring(&opb,buffer,6);
392
- if(memcmp(buffer,"vorbis",6)){
393
- /* not a vorbis header */
394
- return(OV_ENOTVORBIS);
395
- }
396
- switch(packtype){
397
- case 0x01: /* least significant *bit* is read first */
398
- if(!op->b_o_s){
399
- /* Not the initial packet */
400
- return(OV_EBADHEADER);
401
- }
402
- if(vi->rate!=0){
403
- /* previously initialized info header */
404
- return(OV_EBADHEADER);
405
- }
406
-
407
- return(_vorbis_unpack_info(vi,&opb));
408
-
409
- case 0x03: /* least significant *bit* is read first */
410
- if(vi->rate==0){
411
- /* um... we didn't get the initial header */
412
- return(OV_EBADHEADER);
413
- }
414
-
415
- return(_vorbis_unpack_comment(vc,&opb));
416
-
417
- case 0x05: /* least significant *bit* is read first */
418
- if(vi->rate==0 || vc->vendor==NULL){
419
- /* um... we didn;t get the initial header or comments yet */
420
- return(OV_EBADHEADER);
421
- }
422
-
423
- return(_vorbis_unpack_books(vi,&opb));
424
-
425
- default:
426
- /* Not a valid vorbis header type */
427
- return(OV_EBADHEADER);
428
- break;
429
- }
430
- }
431
- }
432
- return(OV_EBADHEADER);
433
- }
434
-
435
- /* pack side **********************************************************/
436
-
437
- static int _vorbis_pack_info(oggpack_buffer *opb,vorbis_info *vi){
438
- codec_setup_info *ci=vi->codec_setup;
439
- if(!ci)return(OV_EFAULT);
440
-
441
- /* preamble */
442
- oggpack_write(opb,0x01,8);
443
- _v_writestring(opb,"vorbis", 6);
444
-
445
- /* basic information about the stream */
446
- oggpack_write(opb,0x00,32);
447
- oggpack_write(opb,vi->channels,8);
448
- oggpack_write(opb,vi->rate,32);
449
-
450
- oggpack_write(opb,vi->bitrate_upper,32);
451
- oggpack_write(opb,vi->bitrate_nominal,32);
452
- oggpack_write(opb,vi->bitrate_lower,32);
453
-
454
- oggpack_write(opb,ilog2(ci->blocksizes[0]),4);
455
- oggpack_write(opb,ilog2(ci->blocksizes[1]),4);
456
- oggpack_write(opb,1,1);
457
-
458
- return(0);
459
- }
460
-
461
- static int _vorbis_pack_comment(oggpack_buffer *opb,vorbis_comment *vc){
462
- int bytes = strlen(ENCODE_VENDOR_STRING);
463
-
464
- /* preamble */
465
- oggpack_write(opb,0x03,8);
466
- _v_writestring(opb,"vorbis", 6);
467
-
468
- /* vendor */
469
- oggpack_write(opb,bytes,32);
470
- _v_writestring(opb,ENCODE_VENDOR_STRING, bytes);
471
-
472
- /* comments */
473
-
474
- oggpack_write(opb,vc->comments,32);
475
- if(vc->comments){
476
- int i;
477
- for(i=0;i<vc->comments;i++){
478
- if(vc->user_comments[i]){
479
- oggpack_write(opb,vc->comment_lengths[i],32);
480
- _v_writestring(opb,vc->user_comments[i], vc->comment_lengths[i]);
481
- }else{
482
- oggpack_write(opb,0,32);
483
- }
484
- }
485
- }
486
- oggpack_write(opb,1,1);
487
-
488
- return(0);
489
- }
490
-
491
- static int _vorbis_pack_books(oggpack_buffer *opb,vorbis_info *vi){
492
- codec_setup_info *ci=vi->codec_setup;
493
- int i;
494
- if(!ci)return(OV_EFAULT);
495
-
496
- oggpack_write(opb,0x05,8);
497
- _v_writestring(opb,"vorbis", 6);
498
-
499
- /* books */
500
- oggpack_write(opb,ci->books-1,8);
501
- for(i=0;i<ci->books;i++)
502
- if(vorbis_staticbook_pack(ci->book_param[i],opb))goto err_out;
503
-
504
- /* times; hook placeholders */
505
- oggpack_write(opb,0,6);
506
- oggpack_write(opb,0,16);
507
-
508
- /* floors */
509
- oggpack_write(opb,ci->floors-1,6);
510
- for(i=0;i<ci->floors;i++){
511
- oggpack_write(opb,ci->floor_type[i],16);
512
- if(_floor_P[ci->floor_type[i]]->pack)
513
- _floor_P[ci->floor_type[i]]->pack(ci->floor_param[i],opb);
514
- else
515
- goto err_out;
516
- }
517
-
518
- /* residues */
519
- oggpack_write(opb,ci->residues-1,6);
520
- for(i=0;i<ci->residues;i++){
521
- oggpack_write(opb,ci->residue_type[i],16);
522
- _residue_P[ci->residue_type[i]]->pack(ci->residue_param[i],opb);
523
- }
524
-
525
- /* maps */
526
- oggpack_write(opb,ci->maps-1,6);
527
- for(i=0;i<ci->maps;i++){
528
- oggpack_write(opb,ci->map_type[i],16);
529
- _mapping_P[ci->map_type[i]]->pack(vi,ci->map_param[i],opb);
530
- }
531
-
532
- /* modes */
533
- oggpack_write(opb,ci->modes-1,6);
534
- for(i=0;i<ci->modes;i++){
535
- oggpack_write(opb,ci->mode_param[i]->blockflag,1);
536
- oggpack_write(opb,ci->mode_param[i]->windowtype,16);
537
- oggpack_write(opb,ci->mode_param[i]->transformtype,16);
538
- oggpack_write(opb,ci->mode_param[i]->mapping,8);
539
- }
540
- oggpack_write(opb,1,1);
541
-
542
- return(0);
543
- err_out:
544
- return(-1);
545
- }
546
-
547
- int vorbis_commentheader_out(vorbis_comment *vc,
548
- ogg_packet *op){
549
-
550
- oggpack_buffer opb;
551
-
552
- oggpack_writeinit(&opb);
553
- if(_vorbis_pack_comment(&opb,vc)) return OV_EIMPL;
554
-
555
- op->packet = _ogg_malloc(oggpack_bytes(&opb));
556
- memcpy(op->packet, opb.buffer, oggpack_bytes(&opb));
557
-
558
- op->bytes=oggpack_bytes(&opb);
559
- op->b_o_s=0;
560
- op->e_o_s=0;
561
- op->granulepos=0;
562
- op->packetno=1;
563
-
564
- return 0;
565
- }
566
-
567
- int vorbis_analysis_headerout(vorbis_dsp_state *v,
568
- vorbis_comment *vc,
569
- ogg_packet *op,
570
- ogg_packet *op_comm,
571
- ogg_packet *op_code){
572
- int ret=OV_EIMPL;
573
- vorbis_info *vi=v->vi;
574
- oggpack_buffer opb;
575
- private_state *b=v->backend_state;
576
-
577
- if(!b){
578
- ret=OV_EFAULT;
579
- goto err_out;
580
- }
581
-
582
- /* first header packet **********************************************/
583
-
584
- oggpack_writeinit(&opb);
585
- if(_vorbis_pack_info(&opb,vi))goto err_out;
586
-
587
- /* build the packet */
588
- if(b->header)_ogg_free(b->header);
589
- b->header=_ogg_malloc(oggpack_bytes(&opb));
590
- memcpy(b->header,opb.buffer,oggpack_bytes(&opb));
591
- op->packet=b->header;
592
- op->bytes=oggpack_bytes(&opb);
593
- op->b_o_s=1;
594
- op->e_o_s=0;
595
- op->granulepos=0;
596
- op->packetno=0;
597
-
598
- /* second header packet (comments) **********************************/
599
-
600
- oggpack_reset(&opb);
601
- if(_vorbis_pack_comment(&opb,vc))goto err_out;
602
-
603
- if(b->header1)_ogg_free(b->header1);
604
- b->header1=_ogg_malloc(oggpack_bytes(&opb));
605
- memcpy(b->header1,opb.buffer,oggpack_bytes(&opb));
606
- op_comm->packet=b->header1;
607
- op_comm->bytes=oggpack_bytes(&opb);
608
- op_comm->b_o_s=0;
609
- op_comm->e_o_s=0;
610
- op_comm->granulepos=0;
611
- op_comm->packetno=1;
612
-
613
- /* third header packet (modes/codebooks) ****************************/
614
-
615
- oggpack_reset(&opb);
616
- if(_vorbis_pack_books(&opb,vi))goto err_out;
617
-
618
- if(b->header2)_ogg_free(b->header2);
619
- b->header2=_ogg_malloc(oggpack_bytes(&opb));
620
- memcpy(b->header2,opb.buffer,oggpack_bytes(&opb));
621
- op_code->packet=b->header2;
622
- op_code->bytes=oggpack_bytes(&opb);
623
- op_code->b_o_s=0;
624
- op_code->e_o_s=0;
625
- op_code->granulepos=0;
626
- op_code->packetno=2;
627
-
628
- oggpack_writeclear(&opb);
629
- return(0);
630
- err_out:
631
- memset(op,0,sizeof(*op));
632
- memset(op_comm,0,sizeof(*op_comm));
633
- memset(op_code,0,sizeof(*op_code));
634
-
635
- if(b){
636
- oggpack_writeclear(&opb);
637
- if(b->header)_ogg_free(b->header);
638
- if(b->header1)_ogg_free(b->header1);
639
- if(b->header2)_ogg_free(b->header2);
640
- b->header=NULL;
641
- b->header1=NULL;
642
- b->header2=NULL;
643
- }
644
- return(ret);
645
- }
646
-
647
- double vorbis_granule_time(vorbis_dsp_state *v,ogg_int64_t granulepos){
648
- if(granulepos == -1) return -1;
649
-
650
- /* We're not guaranteed a 64 bit unsigned type everywhere, so we
651
- have to put the unsigned granpo in a signed type. */
652
- if(granulepos>=0){
653
- return((double)granulepos/v->vi->rate);
654
- }else{
655
- ogg_int64_t granuleoff=0xffffffff;
656
- granuleoff<<=31;
657
- granuleoff|=0x7ffffffff;
658
- return(((double)granulepos+2+granuleoff+granuleoff)/v->vi->rate);
659
- }
660
- }
661
-
662
- const char *vorbis_version_string(void){
663
- return GENERAL_VENDOR_STRING;
664
- }