Symphony Of Empires
stb_vorbis.c
Go to the documentation of this file.
1 // Ogg Vorbis audio decoder - v1.22 - public domain
2 // http://nothings.org/stb_vorbis/
3 //
4 // Original version written by Sean Barrett in 2007.
5 //
6 // Originally sponsored by RAD Game Tools. Seeking implementation
7 // sponsored by Phillip Bennefall, Marc Andersen, Aaron Baker,
8 // Elias Software, Aras Pranckevicius, and Sean Barrett.
9 //
10 // LICENSE
11 //
12 // See end of file for license information.
13 //
14 // Limitations:
15 //
16 // - floor 0 not supported (used in old ogg vorbis files pre-2004)
17 // - lossless sample-truncation at beginning ignored
18 // - cannot concatenate multiple vorbis streams
19 // - sample positions are 32-bit, limiting seekable 192Khz
20 // files to around 6 hours (Ogg supports 64-bit)
21 //
22 // Feature contributors:
23 // Dougall Johnson (sample-exact seeking)
24 //
25 // Bugfix/warning contributors:
26 // Terje Mathisen Niklas Frykholm Andy Hill
27 // Casey Muratori John Bolton Gargaj
28 // Laurent Gomila Marc LeBlanc Ronny Chevalier
29 // Bernhard Wodo Evan Balster github:alxprd
30 // Tom Beaumont Ingo Leitgeb Nicolas Guillemot
31 // Phillip Bennefall Rohit Thiago Goulart
32 // github:manxorist Saga Musix github:infatum
33 // Timur Gagiev Maxwell Koo Peter Waller
34 // github:audinowho Dougall Johnson David Reid
35 // github:Clownacy Pedro J. Estebanez Remi Verschelde
36 // AnthoFoxo github:morlat Gabriel Ravier
37 //
38 // Partial history:
39 // 1.22 - 2021-07-11 - various small fixes
40 // 1.21 - 2021-07-02 - fix bug for files with no comments
41 // 1.20 - 2020-07-11 - several small fixes
42 // 1.19 - 2020-02-05 - warnings
43 // 1.18 - 2020-02-02 - fix seek bugs; parse header comments; misc warnings etc.
44 // 1.17 - 2019-07-08 - fix CVE-2019-13217..CVE-2019-13223 (by ForAllSecure)
45 // 1.16 - 2019-03-04 - fix warnings
46 // 1.15 - 2019-02-07 - explicit failure if Ogg Skeleton data is found
47 // 1.14 - 2018-02-11 - delete bogus dealloca usage
48 // 1.13 - 2018-01-29 - fix truncation of last frame (hopefully)
49 // 1.12 - 2017-11-21 - limit residue begin/end to blocksize/2 to avoid large temp allocs in bad/corrupt files
50 // 1.11 - 2017-07-23 - fix MinGW compilation
51 // 1.10 - 2017-03-03 - more robust seeking; fix negative ilog(); clear error in open_memory
52 // 1.09 - 2016-04-04 - back out 'truncation of last frame' fix from previous version
53 // 1.08 - 2016-04-02 - warnings; setup memory leaks; truncation of last frame
54 // 1.07 - 2015-01-16 - fixes for crashes on invalid files; warning fixes; const
55 // 1.06 - 2015-08-31 - full, correct support for seeking API (Dougall Johnson)
56 // some crash fixes when out of memory or with corrupt files
57 // fix some inappropriately signed shifts
58 // 1.05 - 2015-04-19 - don't define __forceinline if it's redundant
59 // 1.04 - 2014-08-27 - fix missing const-correct case in API
60 // 1.03 - 2014-08-07 - warning fixes
61 // 1.02 - 2014-07-09 - declare qsort comparison as explicitly _cdecl in Windows
62 // 1.01 - 2014-06-18 - fix stb_vorbis_get_samples_float (interleaved was correct)
63 // 1.0 - 2014-05-26 - fix memory leaks; fix warnings; fix bugs in >2-channel;
64 // (API change) report sample rate for decode-full-file funcs
65 //
66 // See end of file for full version history.
67 
68 
70 //
71 // HEADER BEGINS HERE
72 //
73 
74 #ifndef STB_VORBIS_INCLUDE_STB_VORBIS_H
75 #define STB_VORBIS_INCLUDE_STB_VORBIS_H
76 
77 #if defined(STB_VORBIS_NO_CRT) && !defined(STB_VORBIS_NO_STDIO)
78 #define STB_VORBIS_NO_STDIO 1
79 #endif
80 
81 #ifndef STB_VORBIS_NO_STDIO
82 #include <stdio.h>
83 #endif
84 
85 #ifdef __cplusplus
86 extern "C" {
87 #endif
88 
90 
91 // Individual stb_vorbis* handles are not thread-safe; you cannot decode from
92 // them from multiple threads at the same time. However, you can have multiple
93 // stb_vorbis* handles and decode from them independently in multiple thrads.
94 
95 
97 
98 // normally stb_vorbis uses malloc() to allocate memory at startup,
99 // and alloca() to allocate temporary memory during a frame on the
100 // stack. (Memory consumption will depend on the amount of setup
101 // data in the file and how you set the compile flags for speed
102 // vs. size. In my test files the maximal-size usage is ~150KB.)
103 //
104 // You can modify the wrapper functions in the source (setup_malloc,
105 // setup_temp_malloc, temp_malloc) to change this behavior, or you
106 // can use a simpler allocation model: you pass in a buffer from
107 // which stb_vorbis will allocate _all_ its memory (including the
108 // temp memory). "open" may fail with a VORBIS_outofmem if you
109 // do not pass in enough data; there is no way to determine how
110 // much you do need except to succeed (at which point you can
111 // query get_info to find the exact amount required. yes I know
112 // this is lame).
113 //
114 // If you pass in a non-NULL buffer of the type below, allocation
115 // will occur from it as described above. Otherwise just pass NULL
116 // to use malloc()/alloca()
117 
118 typedef struct
119 {
123 
124 
126 
127 typedef struct stb_vorbis stb_vorbis;
128 
129 typedef struct
130 {
131  unsigned int sample_rate;
132  int channels;
133 
134  unsigned int setup_memory_required;
136  unsigned int temp_memory_required;
137 
140 
141 typedef struct
142 {
143  char *vendor;
144 
146  char **comment_list;
148 
149 // get general information about the file
151 
152 // get ogg comments
154 
155 // get the last error detected (clears it, too)
156 extern int stb_vorbis_get_error(stb_vorbis *f);
157 
158 // close an ogg vorbis file and free all memory in use
159 extern void stb_vorbis_close(stb_vorbis *f);
160 
161 // this function returns the offset (in samples) from the beginning of the
162 // file that will be returned by the next decode, if it is known, or -1
163 // otherwise. after a flush_pushdata() call, this may take a while before
164 // it becomes valid again.
165 // NOT WORKING YET after a seek with PULLDATA API
167 
168 // returns the current seek point within the file, or offset from the beginning
169 // of the memory buffer. In pushdata mode it returns 0.
170 extern unsigned int stb_vorbis_get_file_offset(stb_vorbis *f);
171 
173 
174 #ifndef STB_VORBIS_NO_PUSHDATA_API
175 
176 // this API allows you to get blocks of data from any source and hand
177 // them to stb_vorbis. you have to buffer them; stb_vorbis will tell
178 // you how much it used, and you have to give it the rest next time;
179 // and stb_vorbis may not have enough data to work with and you will
180 // need to give it the same data again PLUS more. Note that the Vorbis
181 // specification does not bound the size of an individual frame.
182 
184  const unsigned char * datablock, int datablock_length_in_bytes,
185  int *datablock_memory_consumed_in_bytes,
186  int *error,
187  const stb_vorbis_alloc *alloc_buffer);
188 // create a vorbis decoder by passing in the initial data block containing
189 // the ogg&vorbis headers (you don't need to do parse them, just provide
190 // the first N bytes of the file--you're told if it's not enough, see below)
191 // on success, returns an stb_vorbis *, does not set error, returns the amount of
192 // data parsed/consumed on this call in *datablock_memory_consumed_in_bytes;
193 // on failure, returns NULL on error and sets *error, does not change *datablock_memory_consumed
194 // if returns NULL and *error is VORBIS_need_more_data, then the input block was
195 // incomplete and you need to pass in a larger block from the start of the file
196 
198  stb_vorbis *f,
199  const unsigned char *datablock, int datablock_length_in_bytes,
200  int *channels, // place to write number of float * buffers
201  float ***output, // place to write float ** array of float * buffers
202  int *samples // place to write number of output samples
203  );
204 // decode a frame of audio sample data if possible from the passed-in data block
205 //
206 // return value: number of bytes we used from datablock
207 //
208 // possible cases:
209 // 0 bytes used, 0 samples output (need more data)
210 // N bytes used, 0 samples output (resynching the stream, keep going)
211 // N bytes used, M samples output (one frame of data)
212 // note that after opening a file, you will ALWAYS get one N-bytes,0-sample
213 // frame, because Vorbis always "discards" the first frame.
214 //
215 // Note that on resynch, stb_vorbis will rarely consume all of the buffer,
216 // instead only datablock_length_in_bytes-3 or less. This is because it wants
217 // to avoid missing parts of a page header if they cross a datablock boundary,
218 // without writing state-machiney code to record a partial detection.
219 //
220 // The number of channels returned are stored in *channels (which can be
221 // NULL--it is always the same as the number of channels reported by
222 // get_info). *output will contain an array of float* buffers, one per
223 // channel. In other words, (*output)[0][0] contains the first sample from
224 // the first channel, and (*output)[1][0] contains the first sample from
225 // the second channel.
226 //
227 // *output points into stb_vorbis's internal output buffer storage; these
228 // buffers are owned by stb_vorbis and application code should not free
229 // them or modify their contents. They are transient and will be overwritten
230 // once you ask for more data to get decoded, so be sure to grab any data
231 // you need before then.
232 
234 // inform stb_vorbis that your next datablock will not be contiguous with
235 // previous ones (e.g. you've seeked in the data); future attempts to decode
236 // frames will cause stb_vorbis to resynchronize (as noted above), and
237 // once it sees a valid Ogg page (typically 4-8KB, as large as 64KB), it
238 // will begin decoding the _next_ frame.
239 //
240 // if you want to seek using pushdata, you need to seek in your file, then
241 // call stb_vorbis_flush_pushdata(), then start calling decoding, then once
242 // decoding is returning you data, call stb_vorbis_get_sample_offset, and
243 // if you don't like the result, seek your file again and repeat.
244 #endif
245 
246 
248 
249 #ifndef STB_VORBIS_NO_PULLDATA_API
250 // This API assumes stb_vorbis is allowed to pull data from a source--
251 // either a block of memory containing the _entire_ vorbis stream, or a
252 // FILE * that you or it create, or possibly some other reading mechanism
253 // if you go modify the source to replace the FILE * case with some kind
254 // of callback to your code. (But if you don't support seeking, you may
255 // just want to go ahead and use pushdata.)
256 
257 #if !defined(STB_VORBIS_NO_STDIO) && !defined(STB_VORBIS_NO_INTEGER_CONVERSION)
258 extern int stb_vorbis_decode_filename(const char *filename, int *channels, int *sample_rate, short **output);
259 #endif
260 #if !defined(STB_VORBIS_NO_INTEGER_CONVERSION)
261 extern int stb_vorbis_decode_memory(const unsigned char *mem, int len, int *channels, int *sample_rate, short **output);
262 #endif
263 // decode an entire file and output the data interleaved into a malloc()ed
264 // buffer stored in *output. The return value is the number of samples
265 // decoded, or -1 if the file could not be opened or was not an ogg vorbis file.
266 // When you're done with it, just free() the pointer returned in *output.
267 
268 extern stb_vorbis * stb_vorbis_open_memory(const unsigned char *data, int len,
269  int *error, const stb_vorbis_alloc *alloc_buffer);
270 // create an ogg vorbis decoder from an ogg vorbis stream in memory (note
271 // this must be the entire stream!). on failure, returns NULL and sets *error
272 
273 #ifndef STB_VORBIS_NO_STDIO
274 extern stb_vorbis * stb_vorbis_open_filename(const char *filename,
275  int *error, const stb_vorbis_alloc *alloc_buffer);
276 // create an ogg vorbis decoder from a filename via fopen(). on failure,
277 // returns NULL and sets *error (possibly to VORBIS_file_open_failure).
278 
279 extern stb_vorbis * stb_vorbis_open_file(FILE *f, int close_handle_on_close,
280  int *error, const stb_vorbis_alloc *alloc_buffer);
281 // create an ogg vorbis decoder from an open FILE *, looking for a stream at
282 // the _current_ seek point (ftell). on failure, returns NULL and sets *error.
283 // note that stb_vorbis must "own" this stream; if you seek it in between
284 // calls to stb_vorbis, it will become confused. Moreover, if you attempt to
285 // perform stb_vorbis_seek_*() operations on this file, it will assume it
286 // owns the _entire_ rest of the file after the start point. Use the next
287 // function, stb_vorbis_open_file_section(), to limit it.
288 
289 extern stb_vorbis * stb_vorbis_open_file_section(FILE *f, int close_handle_on_close,
290  int *error, const stb_vorbis_alloc *alloc_buffer, unsigned int len);
291 // create an ogg vorbis decoder from an open FILE *, looking for a stream at
292 // the _current_ seek point (ftell); the stream will be of length 'len' bytes.
293 // on failure, returns NULL and sets *error. note that stb_vorbis must "own"
294 // this stream; if you seek it in between calls to stb_vorbis, it will become
295 // confused.
296 #endif
297 
298 extern int stb_vorbis_seek_frame(stb_vorbis *f, unsigned int sample_number);
299 extern int stb_vorbis_seek(stb_vorbis *f, unsigned int sample_number);
300 // these functions seek in the Vorbis file to (approximately) 'sample_number'.
301 // after calling seek_frame(), the next call to get_frame_*() will include
302 // the specified sample. after calling stb_vorbis_seek(), the next call to
303 // stb_vorbis_get_samples_* will start with the specified sample. If you
304 // do not need to seek to EXACTLY the target sample when using get_samples_*,
305 // you can also use seek_frame().
306 
307 extern int stb_vorbis_seek_start(stb_vorbis *f);
308 // this function is equivalent to stb_vorbis_seek(f,0)
309 
310 extern unsigned int stb_vorbis_stream_length_in_samples(stb_vorbis *f);
312 // these functions return the total length of the vorbis stream
313 
314 extern int stb_vorbis_get_frame_float(stb_vorbis *f, int *channels, float ***output);
315 // decode the next frame and return the number of samples. the number of
316 // channels returned are stored in *channels (which can be NULL--it is always
317 // the same as the number of channels reported by get_info). *output will
318 // contain an array of float* buffers, one per channel. These outputs will
319 // be overwritten on the next call to stb_vorbis_get_frame_*.
320 //
321 // You generally should not intermix calls to stb_vorbis_get_frame_*()
322 // and stb_vorbis_get_samples_*(), since the latter calls the former.
323 
324 #ifndef STB_VORBIS_NO_INTEGER_CONVERSION
325 extern int stb_vorbis_get_frame_short_interleaved(stb_vorbis *f, int num_c, short *buffer, int num_shorts);
326 extern int stb_vorbis_get_frame_short (stb_vorbis *f, int num_c, short **buffer, int num_samples);
327 #endif
328 // decode the next frame and return the number of *samples* per channel.
329 // Note that for interleaved data, you pass in the number of shorts (the
330 // size of your array), but the return value is the number of samples per
331 // channel, not the total number of samples.
332 //
333 // The data is coerced to the number of channels you request according to the
334 // channel coercion rules (see below). You must pass in the size of your
335 // buffer(s) so that stb_vorbis will not overwrite the end of the buffer.
336 // The maximum buffer size needed can be gotten from get_info(); however,
337 // the Vorbis I specification implies an absolute maximum of 4096 samples
338 // per channel.
339 
340 // Channel coercion rules:
341 // Let M be the number of channels requested, and N the number of channels present,
342 // and Cn be the nth channel; let stereo L be the sum of all L and center channels,
343 // and stereo R be the sum of all R and center channels (channel assignment from the
344 // vorbis spec).
345 // M N output
346 // 1 k sum(Ck) for all k
347 // 2 * stereo L, stereo R
348 // k l k > l, the first l channels, then 0s
349 // k l k <= l, the first k channels
350 // Note that this is not _good_ surround etc. mixing at all! It's just so
351 // you get something useful.
352 
353 extern int stb_vorbis_get_samples_float_interleaved(stb_vorbis *f, int channels, float *buffer, int num_floats);
354 extern int stb_vorbis_get_samples_float(stb_vorbis *f, int channels, float **buffer, int num_samples);
355 // gets num_samples samples, not necessarily on a frame boundary--this requires
356 // buffering so you have to supply the buffers. DOES NOT APPLY THE COERCION RULES.
357 // Returns the number of samples stored per channel; it may be less than requested
358 // at the end of the file. If there are no more samples in the file, returns 0.
359 
360 #ifndef STB_VORBIS_NO_INTEGER_CONVERSION
361 extern int stb_vorbis_get_samples_short_interleaved(stb_vorbis *f, int channels, short *buffer, int num_shorts);
362 extern int stb_vorbis_get_samples_short(stb_vorbis *f, int channels, short **buffer, int num_samples);
363 #endif
364 // gets num_samples samples, not necessarily on a frame boundary--this requires
365 // buffering so you have to supply the buffers. Applies the coercion rules above
366 // to produce 'channels' channels. Returns the number of samples stored per channel;
367 // it may be less than requested at the end of the file. If there are no more
368 // samples in the file, returns 0.
369 
370 #endif
371 
373 
375 {
377 
378  VORBIS_need_more_data=1, // not a real error
379 
380  VORBIS_invalid_api_mixing, // can't mix API modes
381  VORBIS_outofmem, // not enough memory
383  VORBIS_too_many_channels, // STB_VORBIS_MAX_CHANNELS is too small
384  VORBIS_file_open_failure, // fopen() failed
385  VORBIS_seek_without_length, // can't seek in unknown-length file
386 
387  VORBIS_unexpected_eof=10, // file is truncated?
388  VORBIS_seek_invalid, // seek past EOF
389 
390  // decoding errors (corrupt/invalid stream) -- you probably
391  // don't care about the exact details of these
392 
393  // vorbis errors:
396 
397  // ogg errors:
407 };
408 
409 
410 #ifdef __cplusplus
411 }
412 #endif
413 
414 #endif // STB_VORBIS_INCLUDE_STB_VORBIS_H
415 //
416 // HEADER ENDS HERE
417 //
419 
420 #ifndef STB_VORBIS_HEADER_ONLY
421 
422 // global configuration settings (e.g. set these in the project/makefile),
423 // or just set them in this file at the top (although ideally the first few
424 // should be visible when the header file is compiled too, although it's not
425 // crucial)
426 
427 // STB_VORBIS_NO_PUSHDATA_API
428 // does not compile the code for the various stb_vorbis_*_pushdata()
429 // functions
430 // #define STB_VORBIS_NO_PUSHDATA_API
431 
432 // STB_VORBIS_NO_PULLDATA_API
433 // does not compile the code for the non-pushdata APIs
434 // #define STB_VORBIS_NO_PULLDATA_API
435 
436 // STB_VORBIS_NO_STDIO
437 // does not compile the code for the APIs that use FILE *s internally
438 // or externally (implied by STB_VORBIS_NO_PULLDATA_API)
439 // #define STB_VORBIS_NO_STDIO
440 
441 // STB_VORBIS_NO_INTEGER_CONVERSION
442 // does not compile the code for converting audio sample data from
443 // float to integer (implied by STB_VORBIS_NO_PULLDATA_API)
444 // #define STB_VORBIS_NO_INTEGER_CONVERSION
445 
446 // STB_VORBIS_NO_FAST_SCALED_FLOAT
447 // does not use a fast float-to-int trick to accelerate float-to-int on
448 // most platforms which requires endianness be defined correctly.
449 //#define STB_VORBIS_NO_FAST_SCALED_FLOAT
450 
451 
452 // STB_VORBIS_MAX_CHANNELS [number]
453 // globally define this to the maximum number of channels you need.
454 // The spec does not put a restriction on channels except that
455 // the count is stored in a byte, so 255 is the hard limit.
456 // Reducing this saves about 16 bytes per value, so using 16 saves
457 // (255-16)*16 or around 4KB. Plus anything other memory usage
458 // I forgot to account for. Can probably go as low as 8 (7.1 audio),
459 // 6 (5.1 audio), or 2 (stereo only).
460 #ifndef STB_VORBIS_MAX_CHANNELS
461 #define STB_VORBIS_MAX_CHANNELS 16 // enough for anyone?
462 #endif
463 
464 // STB_VORBIS_PUSHDATA_CRC_COUNT [number]
465 // after a flush_pushdata(), stb_vorbis begins scanning for the
466 // next valid page, without backtracking. when it finds something
467 // that looks like a page, it streams through it and verifies its
468 // CRC32. Should that validation fail, it keeps scanning. But it's
469 // possible that _while_ streaming through to check the CRC32 of
470 // one candidate page, it sees another candidate page. This #define
471 // determines how many "overlapping" candidate pages it can search
472 // at once. Note that "real" pages are typically ~4KB to ~8KB, whereas
473 // garbage pages could be as big as 64KB, but probably average ~16KB.
474 // So don't hose ourselves by scanning an apparent 64KB page and
475 // missing a ton of real ones in the interim; so minimum of 2
476 #ifndef STB_VORBIS_PUSHDATA_CRC_COUNT
477 #define STB_VORBIS_PUSHDATA_CRC_COUNT 4
478 #endif
479 
480 // STB_VORBIS_FAST_HUFFMAN_LENGTH [number]
481 // sets the log size of the huffman-acceleration table. Maximum
482 // supported value is 24. with larger numbers, more decodings are O(1),
483 // but the table size is larger so worse cache missing, so you'll have
484 // to probe (and try multiple ogg vorbis files) to find the sweet spot.
485 #ifndef STB_VORBIS_FAST_HUFFMAN_LENGTH
486 #define STB_VORBIS_FAST_HUFFMAN_LENGTH 10
487 #endif
488 
489 // STB_VORBIS_FAST_BINARY_LENGTH [number]
490 // sets the log size of the binary-search acceleration table. this
491 // is used in similar fashion to the fast-huffman size to set initial
492 // parameters for the binary search
493 
494 // STB_VORBIS_FAST_HUFFMAN_INT
495 // The fast huffman tables are much more efficient if they can be
496 // stored as 16-bit results instead of 32-bit results. This restricts
497 // the codebooks to having only 65535 possible outcomes, though.
498 // (At least, accelerated by the huffman table.)
499 #ifndef STB_VORBIS_FAST_HUFFMAN_INT
500 #define STB_VORBIS_FAST_HUFFMAN_SHORT
501 #endif
502 
503 // STB_VORBIS_NO_HUFFMAN_BINARY_SEARCH
504 // If the 'fast huffman' search doesn't succeed, then stb_vorbis falls
505 // back on binary searching for the correct one. This requires storing
506 // extra tables with the huffman codes in sorted order. Defining this
507 // symbol trades off space for speed by forcing a linear search in the
508 // non-fast case, except for "sparse" codebooks.
509 // #define STB_VORBIS_NO_HUFFMAN_BINARY_SEARCH
510 
511 // STB_VORBIS_DIVIDES_IN_RESIDUE
512 // stb_vorbis precomputes the result of the scalar residue decoding
513 // that would otherwise require a divide per chunk. you can trade off
514 // space for time by defining this symbol.
515 // #define STB_VORBIS_DIVIDES_IN_RESIDUE
516 
517 // STB_VORBIS_DIVIDES_IN_CODEBOOK
518 // vorbis VQ codebooks can be encoded two ways: with every case explicitly
519 // stored, or with all elements being chosen from a small range of values,
520 // and all values possible in all elements. By default, stb_vorbis expands
521 // this latter kind out to look like the former kind for ease of decoding,
522 // because otherwise an integer divide-per-vector-element is required to
523 // unpack the index. If you define STB_VORBIS_DIVIDES_IN_CODEBOOK, you can
524 // trade off storage for speed.
525 //#define STB_VORBIS_DIVIDES_IN_CODEBOOK
526 
527 #ifdef STB_VORBIS_CODEBOOK_SHORTS
528 #error "STB_VORBIS_CODEBOOK_SHORTS is no longer supported as it produced incorrect results for some input formats"
529 #endif
530 
531 // STB_VORBIS_DIVIDE_TABLE
532 // this replaces small integer divides in the floor decode loop with
533 // table lookups. made less than 1% difference, so disabled by default.
534 
535 // STB_VORBIS_NO_INLINE_DECODE
536 // disables the inlining of the scalar codebook fast-huffman decode.
537 // might save a little codespace; useful for debugging
538 // #define STB_VORBIS_NO_INLINE_DECODE
539 
540 // STB_VORBIS_NO_DEFER_FLOOR
541 // Normally we only decode the floor without synthesizing the actual
542 // full curve. We can instead synthesize the curve immediately. This
543 // requires more memory and is very likely slower, so I don't think
544 // you'd ever want to do it except for debugging.
545 // #define STB_VORBIS_NO_DEFER_FLOOR
546 
547 
548 
549 
551 
552 #ifdef STB_VORBIS_NO_PULLDATA_API
553  #define STB_VORBIS_NO_INTEGER_CONVERSION
554  #define STB_VORBIS_NO_STDIO
555 #endif
556 
557 #if defined(STB_VORBIS_NO_CRT) && !defined(STB_VORBIS_NO_STDIO)
558  #define STB_VORBIS_NO_STDIO 1
559 #endif
560 
561 #ifndef STB_VORBIS_NO_INTEGER_CONVERSION
562 #ifndef STB_VORBIS_NO_FAST_SCALED_FLOAT
563 
564  // only need endianness for fast-float-to-int, which we don't
565  // use for pushdata
566 
567  #ifndef STB_VORBIS_BIG_ENDIAN
568  #define STB_VORBIS_ENDIAN 0
569  #else
570  #define STB_VORBIS_ENDIAN 1
571  #endif
572 
573 #endif
574 #endif
575 
576 
577 #ifndef STB_VORBIS_NO_STDIO
578 #include <stdio.h>
579 #endif
580 
581 #ifndef STB_VORBIS_NO_CRT
582  #include <stdlib.h>
583  #include <string.h>
584  #include <assert.h>
585  #include <math.h>
586 
587  // find definition of alloca if it's not in stdlib.h:
588  #if defined(_MSC_VER) || defined(__MINGW32__)
589  #include <malloc.h>
590  #endif
591  #if defined(__linux__) || defined(__linux) || defined(__sun__) || defined(__EMSCRIPTEN__) || defined(__NEWLIB__)
592  #include <alloca.h>
593  #endif
594 #else // STB_VORBIS_NO_CRT
595  #define NULL 0
596  #define malloc(s) 0
597  #define free(s) ((void) 0)
598  #define realloc(s) 0
599 #endif // STB_VORBIS_NO_CRT
600 
601 #include <limits.h>
602 
603 #ifdef __MINGW32__
604  // eff you mingw:
605  // "fixed":
606  // http://sourceforge.net/p/mingw-w64/mailman/message/32882927/
607  // "no that broke the build, reverted, who cares about C":
608  // http://sourceforge.net/p/mingw-w64/mailman/message/32890381/
609  #ifdef __forceinline
610  #undef __forceinline
611  #endif
612  #define __forceinline
613  #ifndef alloca
614  #define alloca __builtin_alloca
615  #endif
616 #elif !defined(_MSC_VER)
617  #if __GNUC__
618  #define __forceinline inline
619  #else
620  #define __forceinline
621  #endif
622 #endif
623 
624 #if STB_VORBIS_MAX_CHANNELS > 256
625 #error "Value of STB_VORBIS_MAX_CHANNELS outside of allowed range"
626 #endif
627 
628 #if STB_VORBIS_FAST_HUFFMAN_LENGTH > 24
629 #error "Value of STB_VORBIS_FAST_HUFFMAN_LENGTH outside of allowed range"
630 #endif
631 
632 
633 #if 0
634 #include <crtdbg.h>
635 #define CHECK(f) _CrtIsValidHeapPointer(f->channel_buffers[1])
636 #else
637 #define CHECK(f) ((void) 0)
638 #endif
639 
640 #define MAX_BLOCKSIZE_LOG 13 // from specification
641 #define MAX_BLOCKSIZE (1 << MAX_BLOCKSIZE_LOG)
642 
643 
644 typedef unsigned char uint8;
645 typedef signed char int8;
646 typedef unsigned short uint16;
647 typedef signed short int16;
648 typedef unsigned int uint32;
649 typedef signed int int32;
650 
651 #ifndef TRUE
652 #define TRUE 1
653 #define FALSE 0
654 #endif
655 
656 typedef float codetype;
657 
658 #ifdef _MSC_VER
659 #define STBV_NOTUSED(v) (void)(v)
660 #else
661 #define STBV_NOTUSED(v) (void)sizeof(v)
662 #endif
663 
664 // @NOTE
665 //
666 // Some arrays below are tagged "//varies", which means it's actually
667 // a variable-sized piece of data, but rather than malloc I assume it's
668 // small enough it's better to just allocate it all together with the
669 // main thing
670 //
671 // Most of the variables are specified with the smallest size I could pack
672 // them into. It might give better performance to make them all full-sized
673 // integers. It should be safe to freely rearrange the structures or change
674 // the sizes larger--nothing relies on silently truncating etc., nor the
675 // order of variables.
676 
677 #define FAST_HUFFMAN_TABLE_SIZE (1 << STB_VORBIS_FAST_HUFFMAN_LENGTH)
678 #define FAST_HUFFMAN_TABLE_MASK (FAST_HUFFMAN_TABLE_SIZE - 1)
679 
680 typedef struct
681 {
682  int dimensions, entries;
685  float delta_value;
693  #ifdef STB_VORBIS_FAST_HUFFMAN_SHORT
695  #else
696  int32 fast_huffman[FAST_HUFFMAN_TABLE_SIZE];
697  #endif
701 } Codebook;
702 
703 typedef struct
704 {
711  uint8 book_list[16]; // varies
712 } Floor0;
713 
714 typedef struct
715 {
717  uint8 partition_class_list[32]; // varies
718  uint8 class_dimensions[16]; // varies
719  uint8 class_subclasses[16]; // varies
720  uint8 class_masterbooks[16]; // varies
721  int16 subclass_books[16][8]; // varies
722  uint16 Xlist[31*8+2]; // varies
723  uint8 sorted_order[31*8+2];
724  uint8 neighbors[31*8+2][2];
727  int values;
728 } Floor1;
729 
730 typedef union
731 {
734 } Floor;
735 
736 typedef struct
737 {
738  uint32 begin, end;
743  int16 (*residue_books)[8];
744 } Residue;
745 
746 typedef struct
747 {
752 
753 typedef struct
754 {
758  uint8 submap_floor[15]; // varies
759  uint8 submap_residue[15]; // varies
760 } Mapping;
761 
762 typedef struct
763 {
768 } Mode;
769 
770 typedef struct
771 {
772  uint32 goal_crc; // expected crc if match
773  int bytes_left; // bytes left in packet
774  uint32 crc_so_far; // running crc
775  int bytes_done; // bytes processed in _current_ chunk
776  uint32 sample_loc; // granule pos encoded in page
777 } CRCscan;
778 
779 typedef struct
780 {
781  uint32 page_start, page_end;
783 } ProbedPage;
784 
786 {
787  // user-accessible info
788  unsigned int sample_rate;
789  int channels;
790 
791  unsigned int setup_memory_required;
792  unsigned int temp_memory_required;
794 
795  char *vendor;
797  char **comment_list;
798 
799  // input config
800 #ifndef STB_VORBIS_NO_STDIO
801  FILE *f;
804 #endif
805 
809 
811 
813 
814  // the page to seek to when seeking to start, may be zero
816 
817  // p_first is the page on which the first audio packet ends
818  // (but not necessarily the page on which it starts)
820 
821  // memory management
825 
826  // run-time results
827  int eof;
828  enum STBVorbisError error;
829 
830  // user-useful data
831 
832  // header info
833  int blocksize[2];
838  uint16 floor_types[64]; // varies
841  uint16 residue_types[64]; // varies
846  Mode mode_config[64]; // varies
847 
849 
850  // decode buffer
853 
856 
857  #ifndef STB_VORBIS_NO_DEFER_FLOOR
859  #else
860  float *floor_buffers[STB_VORBIS_MAX_CHANNELS];
861  #endif
862 
863  uint32 current_loc; // sample location of next frame to decode
865 
866  // per-blocksize precomputed data
867 
868  // twiddle factors
869  float *A[2],*B[2],*C[2];
870  float *window[2];
872 
873  // current page/packet/segment streaming info
874  uint32 serial; // stream serial number for verification
881  int next_seg;
882  int last_seg; // flag that we're on the last segment
883  int last_seg_which; // what was the segment number of the last seg?
891 
892  // push mode scanning
893  int page_crc_tests; // only in push_mode: number of tests active; -1 if not searching
894 #ifndef STB_VORBIS_NO_PUSHDATA_API
896 #endif
897 
898  // sample-access
901 };
902 
903 #if defined(STB_VORBIS_NO_PUSHDATA_API)
904  #define IS_PUSH_MODE(f) FALSE
905 #elif defined(STB_VORBIS_NO_PULLDATA_API)
906  #define IS_PUSH_MODE(f) TRUE
907 #else
908  #define IS_PUSH_MODE(f) ((f)->push_mode)
909 #endif
910 
911 typedef struct stb_vorbis vorb;
912 
913 static int error(vorb *f, enum STBVorbisError e)
914 {
915  f->error = e;
916  if (!f->eof && e != VORBIS_need_more_data) {
917  f->error=e; // breakpoint for debugging
918  }
919  return 0;
920 }
921 
922 
923 // these functions are used for allocating temporary memory
924 // while decoding. if you can afford the stack space, use
925 // alloca(); otherwise, provide a temp buffer and it will
926 // allocate out of those.
927 
928 #define array_size_required(count,size) (count*(sizeof(void *)+(size)))
929 
930 #define temp_alloc(f,size) (f->alloc.alloc_buffer ? setup_temp_malloc(f,size) : alloca(size))
931 #define temp_free(f,p) (void)0
932 #define temp_alloc_save(f) ((f)->temp_offset)
933 #define temp_alloc_restore(f,p) ((f)->temp_offset = (p))
934 
935 #define temp_block_array(f,count,size) make_block_array(temp_alloc(f,array_size_required(count,size)), count, size)
936 
937 // given a sufficiently large block of memory, make an array of pointers to subblocks of it
938 static void *make_block_array(void *mem, int count, int size)
939 {
940  int i;
941  void ** p = (void **) mem;
942  char *q = (char *) (p + count);
943  for (i=0; i < count; ++i) {
944  p[i] = q;
945  q += size;
946  }
947  return p;
948 }
949 
950 static void *setup_malloc(vorb *f, int sz)
951 {
952  sz = (sz+7) & ~7; // round up to nearest 8 for alignment of future allocs.
953  f->setup_memory_required += sz;
954  if (f->alloc.alloc_buffer) {
955  void *p = (char *) f->alloc.alloc_buffer + f->setup_offset;
956  if (f->setup_offset + sz > f->temp_offset) return NULL;
957  f->setup_offset += sz;
958  return p;
959  }
960  return sz ? malloc(sz) : NULL;
961 }
962 
963 static void setup_free(vorb *f, void *p)
964 {
965  if (f->alloc.alloc_buffer) return; // do nothing; setup mem is a stack
966  free(p);
967 }
968 
969 static void *setup_temp_malloc(vorb *f, int sz)
970 {
971  sz = (sz+7) & ~7; // round up to nearest 8 for alignment of future allocs.
972  if (f->alloc.alloc_buffer) {
973  if (f->temp_offset - sz < f->setup_offset) return NULL;
974  f->temp_offset -= sz;
975  return (char *) f->alloc.alloc_buffer + f->temp_offset;
976  }
977  return malloc(sz);
978 }
979 
980 static void setup_temp_free(vorb *f, void *p, int sz)
981 {
982  if (f->alloc.alloc_buffer) {
983  f->temp_offset += (sz+7)&~7;
984  return;
985  }
986  free(p);
987 }
988 
989 #define CRC32_POLY 0x04c11db7 // from spec
990 
991 static uint32 crc_table[256];
992 static void crc32_init(void)
993 {
994  int i,j;
995  uint32 s;
996  for(i=0; i < 256; i++) {
997  for (s=(uint32) i << 24, j=0; j < 8; ++j)
998  s = (s << 1) ^ (s >= (1U<<31) ? CRC32_POLY : 0);
999  crc_table[i] = s;
1000  }
1001 }
1002 
1003 static __forceinline uint32 crc32_update(uint32 crc, uint8 byte)
1004 {
1005  return (crc << 8) ^ crc_table[byte ^ (crc >> 24)];
1006 }
1007 
1008 
1009 // used in setup, and for huffman that doesn't go fast path
1010 static unsigned int bit_reverse(unsigned int n)
1011 {
1012  n = ((n & 0xAAAAAAAA) >> 1) | ((n & 0x55555555) << 1);
1013  n = ((n & 0xCCCCCCCC) >> 2) | ((n & 0x33333333) << 2);
1014  n = ((n & 0xF0F0F0F0) >> 4) | ((n & 0x0F0F0F0F) << 4);
1015  n = ((n & 0xFF00FF00) >> 8) | ((n & 0x00FF00FF) << 8);
1016  return (n >> 16) | (n << 16);
1017 }
1018 
1019 static float square(float x)
1020 {
1021  return x*x;
1022 }
1023 
1024 // this is a weird definition of log2() for which log2(1) = 1, log2(2) = 2, log2(4) = 3
1025 // as required by the specification. fast(?) implementation from stb.h
1026 // @OPTIMIZE: called multiple times per-packet with "constants"; move to setup
1027 static int ilog(int32 n)
1028 {
1029  static signed char log2_4[16] = { 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4 };
1030 
1031  if (n < 0) return 0; // signed n returns 0
1032 
1033  // 2 compares if n < 16, 3 compares otherwise (4 if signed or n > 1<<29)
1034  if (n < (1 << 14))
1035  if (n < (1 << 4)) return 0 + log2_4[n ];
1036  else if (n < (1 << 9)) return 5 + log2_4[n >> 5];
1037  else return 10 + log2_4[n >> 10];
1038  else if (n < (1 << 24))
1039  if (n < (1 << 19)) return 15 + log2_4[n >> 15];
1040  else return 20 + log2_4[n >> 20];
1041  else if (n < (1 << 29)) return 25 + log2_4[n >> 25];
1042  else return 30 + log2_4[n >> 30];
1043 }
1044 
1045 #ifndef M_PI
1046  #define M_PI 3.14159265358979323846264f // from CRC
1047 #endif
1048 
1049 // code length assigned to a value with no huffman encoding
1050 #define NO_CODE 255
1051 
1053 //
1054 // these functions are only called at setup, and only a few times
1055 // per file
1056 
1057 static float float32_unpack(uint32 x)
1058 {
1059  // from the specification
1060  uint32 mantissa = x & 0x1fffff;
1061  uint32 sign = x & 0x80000000;
1062  uint32 exp = (x & 0x7fe00000) >> 21;
1063  double res = sign ? -(double)mantissa : (double)mantissa;
1064  return (float) ldexp((float)res, (int)exp-788);
1065 }
1066 
1067 
1068 // zlib & jpeg huffman tables assume that the output symbols
1069 // can either be arbitrarily arranged, or have monotonically
1070 // increasing frequencies--they rely on the lengths being sorted;
1071 // this makes for a very simple generation algorithm.
1072 // vorbis allows a huffman table with non-sorted lengths. This
1073 // requires a more sophisticated construction, since symbols in
1074 // order do not map to huffman codes "in order".
1075 static void add_entry(Codebook *c, uint32 huff_code, int symbol, int count, int len, uint32 *values)
1076 {
1077  if (!c->sparse) {
1078  c->codewords [symbol] = huff_code;
1079  } else {
1080  c->codewords [count] = huff_code;
1081  c->codeword_lengths[count] = len;
1082  values [count] = symbol;
1083  }
1084 }
1085 
1086 static int compute_codewords(Codebook *c, uint8 *len, int n, uint32 *values)
1087 {
1088  int i,k,m=0;
1089  uint32 available[32];
1090 
1091  memset(available, 0, sizeof(available));
1092  // find the first entry
1093  for (k=0; k < n; ++k) if (len[k] < NO_CODE) break;
1094  if (k == n) { assert(c->sorted_entries == 0); return TRUE; }
1095  assert(len[k] < 32); // no error return required, code reading lens checks this
1096  // add to the list
1097  add_entry(c, 0, k, m++, len[k], values);
1098  // add all available leaves
1099  for (i=1; i <= len[k]; ++i)
1100  available[i] = 1U << (32-i);
1101  // note that the above code treats the first case specially,
1102  // but it's really the same as the following code, so they
1103  // could probably be combined (except the initial code is 0,
1104  // and I use 0 in available[] to mean 'empty')
1105  for (i=k+1; i < n; ++i) {
1106  uint32 res;
1107  int z = len[i], y;
1108  if (z == NO_CODE) continue;
1109  assert(z < 32); // no error return required, code reading lens checks this
1110  // find lowest available leaf (should always be earliest,
1111  // which is what the specification calls for)
1112  // note that this property, and the fact we can never have
1113  // more than one free leaf at a given level, isn't totally
1114  // trivial to prove, but it seems true and the assert never
1115  // fires, so!
1116  while (z > 0 && !available[z]) --z;
1117  if (z == 0) { return FALSE; }
1118  res = available[z];
1119  available[z] = 0;
1120  add_entry(c, bit_reverse(res), i, m++, len[i], values);
1121  // propagate availability up the tree
1122  if (z != len[i]) {
1123  for (y=len[i]; y > z; --y) {
1124  assert(available[y] == 0);
1125  available[y] = res + (1 << (32-y));
1126  }
1127  }
1128  }
1129  return TRUE;
1130 }
1131 
1132 // accelerated huffman table allows fast O(1) match of all symbols
1133 // of length <= STB_VORBIS_FAST_HUFFMAN_LENGTH
1134 static void compute_accelerated_huffman(Codebook *c)
1135 {
1136  int i, len;
1137  for (i=0; i < FAST_HUFFMAN_TABLE_SIZE; ++i)
1138  c->fast_huffman[i] = -1;
1139 
1140  len = c->sparse ? c->sorted_entries : c->entries;
1142  if (len > 32767) len = 32767; // largest possible value we can encode!
1143  #endif
1144  for (i=0; i < len; ++i) {
1146  uint32 z = c->sparse ? bit_reverse(c->sorted_codewords[i]) : c->codewords[i];
1147  // set table entries for all bit combinations in the higher bits
1148  while (z < FAST_HUFFMAN_TABLE_SIZE) {
1149  c->fast_huffman[z] = i;
1150  z += 1 << c->codeword_lengths[i];
1151  }
1152  }
1153  }
1154 }
1155 
1156 #ifdef _MSC_VER
1157 #define STBV_CDECL __cdecl
1158 #else
1159 #define STBV_CDECL
1160 #endif
1161 
1162 static int STBV_CDECL uint32_compare(const void *p, const void *q)
1163 {
1164  uint32 x = * (uint32 *) p;
1165  uint32 y = * (uint32 *) q;
1166  return x < y ? -1 : x > y;
1167 }
1168 
1169 static int include_in_sort(Codebook *c, uint8 len)
1170 {
1171  if (c->sparse) { assert(len != NO_CODE); return TRUE; }
1172  if (len == NO_CODE) return FALSE;
1173  if (len > STB_VORBIS_FAST_HUFFMAN_LENGTH) return TRUE;
1174  return FALSE;
1175 }
1176 
1177 // if the fast table above doesn't work, we want to binary
1178 // search them... need to reverse the bits
1179 static void compute_sorted_huffman(Codebook *c, uint8 *lengths, uint32 *values)
1180 {
1181  int i, len;
1182  // build a list of all the entries
1183  // OPTIMIZATION: don't include the short ones, since they'll be caught by FAST_HUFFMAN.
1184  // this is kind of a frivolous optimization--I don't see any performance improvement,
1185  // but it's like 4 extra lines of code, so.
1186  if (!c->sparse) {
1187  int k = 0;
1188  for (i=0; i < c->entries; ++i)
1189  if (include_in_sort(c, lengths[i]))
1190  c->sorted_codewords[k++] = bit_reverse(c->codewords[i]);
1191  assert(k == c->sorted_entries);
1192  } else {
1193  for (i=0; i < c->sorted_entries; ++i)
1194  c->sorted_codewords[i] = bit_reverse(c->codewords[i]);
1195  }
1196 
1197  qsort(c->sorted_codewords, c->sorted_entries, sizeof(c->sorted_codewords[0]), uint32_compare);
1198  c->sorted_codewords[c->sorted_entries] = 0xffffffff;
1199 
1200  len = c->sparse ? c->sorted_entries : c->entries;
1201  // now we need to indicate how they correspond; we could either
1202  // #1: sort a different data structure that says who they correspond to
1203  // #2: for each sorted entry, search the original list to find who corresponds
1204  // #3: for each original entry, find the sorted entry
1205  // #1 requires extra storage, #2 is slow, #3 can use binary search!
1206  for (i=0; i < len; ++i) {
1207  int huff_len = c->sparse ? lengths[values[i]] : lengths[i];
1208  if (include_in_sort(c,huff_len)) {
1209  uint32 code = bit_reverse(c->codewords[i]);
1210  int x=0, n=c->sorted_entries;
1211  while (n > 1) {
1212  // invariant: sc[x] <= code < sc[x+n]
1213  int m = x + (n >> 1);
1214  if (c->sorted_codewords[m] <= code) {
1215  x = m;
1216  n -= (n>>1);
1217  } else {
1218  n >>= 1;
1219  }
1220  }
1221  assert(c->sorted_codewords[x] == code);
1222  if (c->sparse) {
1223  c->sorted_values[x] = values[i];
1224  c->codeword_lengths[x] = huff_len;
1225  } else {
1226  c->sorted_values[x] = i;
1227  }
1228  }
1229  }
1230 }
1231 
1232 // only run while parsing the header (3 times)
1233 static int vorbis_validate(uint8 *data)
1234 {
1235  static uint8 vorbis[6] = { 'v', 'o', 'r', 'b', 'i', 's' };
1236  return memcmp(data, vorbis, 6) == 0;
1237 }
1238 
1239 // called from setup only, once per code book
1240 // (formula implied by specification)
1241 static int lookup1_values(int entries, int dim)
1242 {
1243  int r = (int) floor(exp((float) log((float) entries) / dim));
1244  if ((int) floor(pow((float) r+1, dim)) <= entries) // (int) cast for MinGW warning;
1245  ++r; // floor() to avoid _ftol() when non-CRT
1246  if (pow((float) r+1, dim) <= entries)
1247  return -1;
1248  if ((int) floor(pow((float) r, dim)) > entries)
1249  return -1;
1250  return r;
1251 }
1252 
1253 // called twice per file
1254 static void compute_twiddle_factors(int n, float *A, float *B, float *C)
1255 {
1256  int n4 = n >> 2, n8 = n >> 3;
1257  int k,k2;
1258 
1259  for (k=k2=0; k < n4; ++k,k2+=2) {
1260  A[k2 ] = (float) cos(4*k*M_PI/n);
1261  A[k2+1] = (float) -sin(4*k*M_PI/n);
1262  B[k2 ] = (float) cos((k2+1)*M_PI/n/2) * 0.5f;
1263  B[k2+1] = (float) sin((k2+1)*M_PI/n/2) * 0.5f;
1264  }
1265  for (k=k2=0; k < n8; ++k,k2+=2) {
1266  C[k2 ] = (float) cos(2*(k2+1)*M_PI/n);
1267  C[k2+1] = (float) -sin(2*(k2+1)*M_PI/n);
1268  }
1269 }
1270 
1271 static void compute_window(int n, float *window)
1272 {
1273  int n2 = n >> 1, i;
1274  for (i=0; i < n2; ++i)
1275  window[i] = (float) sin(0.5 * M_PI * square((float) sin((i - 0 + 0.5) / n2 * 0.5 * M_PI)));
1276 }
1277 
1278 static void compute_bitreverse(int n, uint16 *rev)
1279 {
1280  int ld = ilog(n) - 1; // ilog is off-by-one from normal definitions
1281  int i, n8 = n >> 3;
1282  for (i=0; i < n8; ++i)
1283  rev[i] = (bit_reverse(i) >> (32-ld+3)) << 2;
1284 }
1285 
1286 static int init_blocksize(vorb *f, int b, int n)
1287 {
1288  int n2 = n >> 1, n4 = n >> 2, n8 = n >> 3;
1289  f->A[b] = (float *) setup_malloc(f, sizeof(float) * n2);
1290  f->B[b] = (float *) setup_malloc(f, sizeof(float) * n2);
1291  f->C[b] = (float *) setup_malloc(f, sizeof(float) * n4);
1292  if (!f->A[b] || !f->B[b] || !f->C[b]) return error(f, VORBIS_outofmem);
1293  compute_twiddle_factors(n, f->A[b], f->B[b], f->C[b]);
1294  f->window[b] = (float *) setup_malloc(f, sizeof(float) * n2);
1295  if (!f->window[b]) return error(f, VORBIS_outofmem);
1296  compute_window(n, f->window[b]);
1297  f->bit_reverse[b] = (uint16 *) setup_malloc(f, sizeof(uint16) * n8);
1298  if (!f->bit_reverse[b]) return error(f, VORBIS_outofmem);
1299  compute_bitreverse(n, f->bit_reverse[b]);
1300  return TRUE;
1301 }
1302 
1303 static void neighbors(uint16 *x, int n, int *plow, int *phigh)
1304 {
1305  int low = -1;
1306  int high = 65536;
1307  int i;
1308  for (i=0; i < n; ++i) {
1309  if (x[i] > low && x[i] < x[n]) { *plow = i; low = x[i]; }
1310  if (x[i] < high && x[i] > x[n]) { *phigh = i; high = x[i]; }
1311  }
1312 }
1313 
1314 // this has been repurposed so y is now the original index instead of y
1315 typedef struct
1316 {
1319 
1320 static int STBV_CDECL point_compare(const void *p, const void *q)
1321 {
1324  return a->x < b->x ? -1 : a->x > b->x;
1325 }
1326 
1327 //
1329 
1330 
1331 #if defined(STB_VORBIS_NO_STDIO)
1332  #define USE_MEMORY(z) TRUE
1333 #else
1334  #define USE_MEMORY(z) ((z)->stream)
1335 #endif
1336 
1337 static uint8 get8(vorb *z)
1338 {
1339  if (USE_MEMORY(z)) {
1340  if (z->stream >= z->stream_end) { z->eof = TRUE; return 0; }
1341  return *z->stream++;
1342  }
1343 
1344  #ifndef STB_VORBIS_NO_STDIO
1345  {
1346  int c = fgetc(z->f);
1347  if (c == EOF) { z->eof = TRUE; return 0; }
1348  return c;
1349  }
1350  #endif
1351 }
1352 
1353 static uint32 get32(vorb *f)
1354 {
1355  uint32 x;
1356  x = get8(f);
1357  x += get8(f) << 8;
1358  x += get8(f) << 16;
1359  x += (uint32) get8(f) << 24;
1360  return x;
1361 }
1362 
1363 static int getn(vorb *z, uint8 *data, int n)
1364 {
1365  if (USE_MEMORY(z)) {
1366  if (z->stream+n > z->stream_end) { z->eof = 1; return 0; }
1367  memcpy(data, z->stream, n);
1368  z->stream += n;
1369  return 1;
1370  }
1371 
1372  #ifndef STB_VORBIS_NO_STDIO
1373  if (fread(data, n, 1, z->f) == 1)
1374  return 1;
1375  else {
1376  z->eof = 1;
1377  return 0;
1378  }
1379  #endif
1380 }
1381 
1382 static void skip(vorb *z, int n)
1383 {
1384  if (USE_MEMORY(z)) {
1385  z->stream += n;
1386  if (z->stream >= z->stream_end) z->eof = 1;
1387  return;
1388  }
1389  #ifndef STB_VORBIS_NO_STDIO
1390  {
1391  long x = ftell(z->f);
1392  fseek(z->f, x+n, SEEK_SET);
1393  }
1394  #endif
1395 }
1396 
1397 static int set_file_offset(stb_vorbis *f, unsigned int loc)
1398 {
1399  #ifndef STB_VORBIS_NO_PUSHDATA_API
1400  if (f->push_mode) return 0;
1401  #endif
1402  f->eof = 0;
1403  if (USE_MEMORY(f)) {
1404  if (f->stream_start + loc >= f->stream_end || f->stream_start + loc < f->stream_start) {
1405  f->stream = f->stream_end;
1406  f->eof = 1;
1407  return 0;
1408  } else {
1409  f->stream = f->stream_start + loc;
1410  return 1;
1411  }
1412  }
1413  #ifndef STB_VORBIS_NO_STDIO
1414  if (loc + f->f_start < loc || loc >= 0x80000000) {
1415  loc = 0x7fffffff;
1416  f->eof = 1;
1417  } else {
1418  loc += f->f_start;
1419  }
1420  if (!fseek(f->f, loc, SEEK_SET))
1421  return 1;
1422  f->eof = 1;
1423  fseek(f->f, f->f_start, SEEK_END);
1424  return 0;
1425  #endif
1426 }
1427 
1428 
1429 static uint8 ogg_page_header[4] = { 0x4f, 0x67, 0x67, 0x53 };
1430 
1431 static int capture_pattern(vorb *f)
1432 {
1433  if (0x4f != get8(f)) return FALSE;
1434  if (0x67 != get8(f)) return FALSE;
1435  if (0x67 != get8(f)) return FALSE;
1436  if (0x53 != get8(f)) return FALSE;
1437  return TRUE;
1438 }
1439 
1440 #define PAGEFLAG_continued_packet 1
1441 #define PAGEFLAG_first_page 2
1442 #define PAGEFLAG_last_page 4
1443 
1444 static int start_page_no_capturepattern(vorb *f)
1445 {
1446  uint32 loc0,loc1,n;
1447  if (f->first_decode && !IS_PUSH_MODE(f)) {
1448  f->p_first.page_start = stb_vorbis_get_file_offset(f) - 4;
1449  }
1450  // stream structure version
1451  if (0 != get8(f)) return error(f, VORBIS_invalid_stream_structure_version);
1452  // header flag
1453  f->page_flag = get8(f);
1454  // absolute granule position
1455  loc0 = get32(f);
1456  loc1 = get32(f);
1457  // @TODO: validate loc0,loc1 as valid positions?
1458  // stream serial number -- vorbis doesn't interleave, so discard
1459  get32(f);
1460  //if (f->serial != get32(f)) return error(f, VORBIS_incorrect_stream_serial_number);
1461  // page sequence number
1462  n = get32(f);
1463  f->last_page = n;
1464  // CRC32
1465  get32(f);
1466  // page_segments
1467  f->segment_count = get8(f);
1468  if (!getn(f, f->segments, f->segment_count))
1469  return error(f, VORBIS_unexpected_eof);
1470  // assume we _don't_ know any the sample position of any segments
1471  f->end_seg_with_known_loc = -2;
1472  if (loc0 != ~0U || loc1 != ~0U) {
1473  int i;
1474  // determine which packet is the last one that will complete
1475  for (i=f->segment_count-1; i >= 0; --i)
1476  if (f->segments[i] < 255)
1477  break;
1478  // 'i' is now the index of the _last_ segment of a packet that ends
1479  if (i >= 0) {
1480  f->end_seg_with_known_loc = i;
1481  f->known_loc_for_packet = loc0;
1482  }
1483  }
1484  if (f->first_decode) {
1485  int i,len;
1486  len = 0;
1487  for (i=0; i < f->segment_count; ++i)
1488  len += f->segments[i];
1489  len += 27 + f->segment_count;
1490  f->p_first.page_end = f->p_first.page_start + len;
1491  f->p_first.last_decoded_sample = loc0;
1492  }
1493  f->next_seg = 0;
1494  return TRUE;
1495 }
1496 
1497 static int start_page(vorb *f)
1498 {
1499  if (!capture_pattern(f)) return error(f, VORBIS_missing_capture_pattern);
1500  return start_page_no_capturepattern(f);
1501 }
1502 
1503 static int start_packet(vorb *f)
1504 {
1505  while (f->next_seg == -1) {
1506  if (!start_page(f)) return FALSE;
1507  if (f->page_flag & PAGEFLAG_continued_packet)
1509  }
1510  f->last_seg = FALSE;
1511  f->valid_bits = 0;
1512  f->packet_bytes = 0;
1513  f->bytes_in_seg = 0;
1514  // f->next_seg is now valid
1515  return TRUE;
1516 }
1517 
1518 static int maybe_start_packet(vorb *f)
1519 {
1520  if (f->next_seg == -1) {
1521  int x = get8(f);
1522  if (f->eof) return FALSE; // EOF at page boundary is not an error!
1523  if (0x4f != x ) return error(f, VORBIS_missing_capture_pattern);
1524  if (0x67 != get8(f)) return error(f, VORBIS_missing_capture_pattern);
1525  if (0x67 != get8(f)) return error(f, VORBIS_missing_capture_pattern);
1526  if (0x53 != get8(f)) return error(f, VORBIS_missing_capture_pattern);
1527  if (!start_page_no_capturepattern(f)) return FALSE;
1528  if (f->page_flag & PAGEFLAG_continued_packet) {
1529  // set up enough state that we can read this packet if we want,
1530  // e.g. during recovery
1531  f->last_seg = FALSE;
1532  f->bytes_in_seg = 0;
1534  }
1535  }
1536  return start_packet(f);
1537 }
1538 
1539 static int next_segment(vorb *f)
1540 {
1541  int len;
1542  if (f->last_seg) return 0;
1543  if (f->next_seg == -1) {
1544  f->last_seg_which = f->segment_count-1; // in case start_page fails
1545  if (!start_page(f)) { f->last_seg = 1; return 0; }
1547  }
1548  len = f->segments[f->next_seg++];
1549  if (len < 255) {
1550  f->last_seg = TRUE;
1551  f->last_seg_which = f->next_seg-1;
1552  }
1553  if (f->next_seg >= f->segment_count)
1554  f->next_seg = -1;
1555  assert(f->bytes_in_seg == 0);
1556  f->bytes_in_seg = len;
1557  return len;
1558 }
1559 
1560 #define EOP (-1)
1561 #define INVALID_BITS (-1)
1562 
1563 static int get8_packet_raw(vorb *f)
1564 {
1565  if (!f->bytes_in_seg) { // CLANG!
1566  if (f->last_seg) return EOP;
1567  else if (!next_segment(f)) return EOP;
1568  }
1569  assert(f->bytes_in_seg > 0);
1570  --f->bytes_in_seg;
1571  ++f->packet_bytes;
1572  return get8(f);
1573 }
1574 
1575 static int get8_packet(vorb *f)
1576 {
1577  int x = get8_packet_raw(f);
1578  f->valid_bits = 0;
1579  return x;
1580 }
1581 
1582 static int get32_packet(vorb *f)
1583 {
1584  uint32 x;
1585  x = get8_packet(f);
1586  x += get8_packet(f) << 8;
1587  x += get8_packet(f) << 16;
1588  x += (uint32) get8_packet(f) << 24;
1589  return x;
1590 }
1591 
1592 static void flush_packet(vorb *f)
1593 {
1594  while (get8_packet_raw(f) != EOP);
1595 }
1596 
1597 // @OPTIMIZE: this is the secondary bit decoder, so it's probably not as important
1598 // as the huffman decoder?
1599 static uint32 get_bits(vorb *f, int n)
1600 {
1601  uint32 z;
1602 
1603  if (f->valid_bits < 0) return 0;
1604  if (f->valid_bits < n) {
1605  if (n > 24) {
1606  // the accumulator technique below would not work correctly in this case
1607  z = get_bits(f, 24);
1608  z += get_bits(f, n-24) << 24;
1609  return z;
1610  }
1611  if (f->valid_bits == 0) f->acc = 0;
1612  while (f->valid_bits < n) {
1613  int z = get8_packet_raw(f);
1614  if (z == EOP) {
1615  f->valid_bits = INVALID_BITS;
1616  return 0;
1617  }
1618  f->acc += z << f->valid_bits;
1619  f->valid_bits += 8;
1620  }
1621  }
1622 
1623  assert(f->valid_bits >= n);
1624  z = f->acc & ((1 << n)-1);
1625  f->acc >>= n;
1626  f->valid_bits -= n;
1627  return z;
1628 }
1629 
1630 // @OPTIMIZE: primary accumulator for huffman
1631 // expand the buffer to as many bits as possible without reading off end of packet
1632 // it might be nice to allow f->valid_bits and f->acc to be stored in registers,
1633 // e.g. cache them locally and decode locally
1634 static __forceinline void prep_huffman(vorb *f)
1635 {
1636  if (f->valid_bits <= 24) {
1637  if (f->valid_bits == 0) f->acc = 0;
1638  do {
1639  int z;
1640  if (f->last_seg && !f->bytes_in_seg) return;
1641  z = get8_packet_raw(f);
1642  if (z == EOP) return;
1643  f->acc += (unsigned) z << f->valid_bits;
1644  f->valid_bits += 8;
1645  } while (f->valid_bits <= 24);
1646  }
1647 }
1648 
1649 enum
1650 {
1654 };
1655 
1656 static int codebook_decode_scalar_raw(vorb *f, Codebook *c)
1657 {
1658  int i;
1659  prep_huffman(f);
1660 
1661  if (c->codewords == NULL && c->sorted_codewords == NULL)
1662  return -1;
1663 
1664  // cases to use binary search: sorted_codewords && !c->codewords
1665  // sorted_codewords && c->entries > 8
1666  if (c->entries > 8 ? c->sorted_codewords!=NULL : !c->codewords) {
1667  // binary search
1668  uint32 code = bit_reverse(f->acc);
1669  int x=0, n=c->sorted_entries, len;
1670 
1671  while (n > 1) {
1672  // invariant: sc[x] <= code < sc[x+n]
1673  int m = x + (n >> 1);
1674  if (c->sorted_codewords[m] <= code) {
1675  x = m;
1676  n -= (n>>1);
1677  } else {
1678  n >>= 1;
1679  }
1680  }
1681  // x is now the sorted index
1682  if (!c->sparse) x = c->sorted_values[x];
1683  // x is now sorted index if sparse, or symbol otherwise
1684  len = c->codeword_lengths[x];
1685  if (f->valid_bits >= len) {
1686  f->acc >>= len;
1687  f->valid_bits -= len;
1688  return x;
1689  }
1690 
1691  f->valid_bits = 0;
1692  return -1;
1693  }
1694 
1695  // if small, linear search
1696  assert(!c->sparse);
1697  for (i=0; i < c->entries; ++i) {
1698  if (c->codeword_lengths[i] == NO_CODE) continue;
1699  if (c->codewords[i] == (f->acc & ((1 << c->codeword_lengths[i])-1))) {
1700  if (f->valid_bits >= c->codeword_lengths[i]) {
1701  f->acc >>= c->codeword_lengths[i];
1702  f->valid_bits -= c->codeword_lengths[i];
1703  return i;
1704  }
1705  f->valid_bits = 0;
1706  return -1;
1707  }
1708  }
1709 
1711  f->valid_bits = 0;
1712  return -1;
1713 }
1714 
1715 #ifndef STB_VORBIS_NO_INLINE_DECODE
1716 
1717 #define DECODE_RAW(var, f,c) \
1718  if (f->valid_bits < STB_VORBIS_FAST_HUFFMAN_LENGTH) \
1719  prep_huffman(f); \
1720  var = f->acc & FAST_HUFFMAN_TABLE_MASK; \
1721  var = c->fast_huffman[var]; \
1722  if (var >= 0) { \
1723  int n = c->codeword_lengths[var]; \
1724  f->acc >>= n; \
1725  f->valid_bits -= n; \
1726  if (f->valid_bits < 0) { f->valid_bits = 0; var = -1; } \
1727  } else { \
1728  var = codebook_decode_scalar_raw(f,c); \
1729  }
1730 
1731 #else
1732 
1733 static int codebook_decode_scalar(vorb *f, Codebook *c)
1734 {
1735  int i;
1736  if (f->valid_bits < STB_VORBIS_FAST_HUFFMAN_LENGTH)
1737  prep_huffman(f);
1738  // fast huffman table lookup
1739  i = f->acc & FAST_HUFFMAN_TABLE_MASK;
1740  i = c->fast_huffman[i];
1741  if (i >= 0) {
1742  f->acc >>= c->codeword_lengths[i];
1743  f->valid_bits -= c->codeword_lengths[i];
1744  if (f->valid_bits < 0) { f->valid_bits = 0; return -1; }
1745  return i;
1746  }
1747  return codebook_decode_scalar_raw(f,c);
1748 }
1749 
1750 #define DECODE_RAW(var,f,c) var = codebook_decode_scalar(f,c);
1751 
1752 #endif
1753 
1754 #define DECODE(var,f,c) \
1755  DECODE_RAW(var,f,c) \
1756  if (c->sparse) var = c->sorted_values[var];
1757 
1758 #ifndef STB_VORBIS_DIVIDES_IN_CODEBOOK
1759  #define DECODE_VQ(var,f,c) DECODE_RAW(var,f,c)
1760 #else
1761  #define DECODE_VQ(var,f,c) DECODE(var,f,c)
1762 #endif
1763 
1764 
1765 
1766 
1767 
1768 
1769 // CODEBOOK_ELEMENT_FAST is an optimization for the CODEBOOK_FLOATS case
1770 // where we avoid one addition
1771 #define CODEBOOK_ELEMENT(c,off) (c->multiplicands[off])
1772 #define CODEBOOK_ELEMENT_FAST(c,off) (c->multiplicands[off])
1773 #define CODEBOOK_ELEMENT_BASE(c) (0)
1774 
1775 static int codebook_decode_start(vorb *f, Codebook *c)
1776 {
1777  int z = -1;
1778 
1779  // type 0 is only legal in a scalar context
1780  if (c->lookup_type == 0)
1782  else {
1783  DECODE_VQ(z,f,c);
1784  if (c->sparse) assert(z < c->sorted_entries);
1785  if (z < 0) { // check for EOP
1786  if (!f->bytes_in_seg)
1787  if (f->last_seg)
1788  return z;
1790  }
1791  }
1792  return z;
1793 }
1794 
1795 static int codebook_decode(vorb *f, Codebook *c, float *output, int len)
1796 {
1797  int i,z = codebook_decode_start(f,c);
1798  if (z < 0) return FALSE;
1799  if (len > c->dimensions) len = c->dimensions;
1800 
1801 #ifdef STB_VORBIS_DIVIDES_IN_CODEBOOK
1802  if (c->lookup_type == 1) {
1803  float last = CODEBOOK_ELEMENT_BASE(c);
1804  int div = 1;
1805  for (i=0; i < len; ++i) {
1806  int off = (z / div) % c->lookup_values;
1807  float val = CODEBOOK_ELEMENT_FAST(c,off) + last;
1808  output[i] += val;
1809  if (c->sequence_p) last = val + c->minimum_value;
1810  div *= c->lookup_values;
1811  }
1812  return TRUE;
1813  }
1814 #endif
1815 
1816  z *= c->dimensions;
1817  if (c->sequence_p) {
1818  float last = CODEBOOK_ELEMENT_BASE(c);
1819  for (i=0; i < len; ++i) {
1820  float val = CODEBOOK_ELEMENT_FAST(c,z+i) + last;
1821  output[i] += val;
1822  last = val + c->minimum_value;
1823  }
1824  } else {
1825  float last = CODEBOOK_ELEMENT_BASE(c);
1826  for (i=0; i < len; ++i) {
1827  output[i] += CODEBOOK_ELEMENT_FAST(c,z+i) + last;
1828  }
1829  }
1830 
1831  return TRUE;
1832 }
1833 
1834 static int codebook_decode_step(vorb *f, Codebook *c, float *output, int len, int step)
1835 {
1836  int i,z = codebook_decode_start(f,c);
1837  float last = CODEBOOK_ELEMENT_BASE(c);
1838  if (z < 0) return FALSE;
1839  if (len > c->dimensions) len = c->dimensions;
1840 
1841 #ifdef STB_VORBIS_DIVIDES_IN_CODEBOOK
1842  if (c->lookup_type == 1) {
1843  int div = 1;
1844  for (i=0; i < len; ++i) {
1845  int off = (z / div) % c->lookup_values;
1846  float val = CODEBOOK_ELEMENT_FAST(c,off) + last;
1847  output[i*step] += val;
1848  if (c->sequence_p) last = val;
1849  div *= c->lookup_values;
1850  }
1851  return TRUE;
1852  }
1853 #endif
1854 
1855  z *= c->dimensions;
1856  for (i=0; i < len; ++i) {
1857  float val = CODEBOOK_ELEMENT_FAST(c,z+i) + last;
1858  output[i*step] += val;
1859  if (c->sequence_p) last = val;
1860  }
1861 
1862  return TRUE;
1863 }
1864 
1865 static int codebook_decode_deinterleave_repeat(vorb *f, Codebook *c, float **outputs, int ch, int *c_inter_p, int *p_inter_p, int len, int total_decode)
1866 {
1867  int c_inter = *c_inter_p;
1868  int p_inter = *p_inter_p;
1869  int i,z, effective = c->dimensions;
1870 
1871  // type 0 is only legal in a scalar context
1872  if (c->lookup_type == 0) return error(f, VORBIS_invalid_stream);
1873 
1874  while (total_decode > 0) {
1875  float last = CODEBOOK_ELEMENT_BASE(c);
1876  DECODE_VQ(z,f,c);
1877  #ifndef STB_VORBIS_DIVIDES_IN_CODEBOOK
1878  assert(!c->sparse || z < c->sorted_entries);
1879  #endif
1880  if (z < 0) {
1881  if (!f->bytes_in_seg)
1882  if (f->last_seg) return FALSE;
1883  return error(f, VORBIS_invalid_stream);
1884  }
1885 
1886  // if this will take us off the end of the buffers, stop short!
1887  // we check by computing the length of the virtual interleaved
1888  // buffer (len*ch), our current offset within it (p_inter*ch)+(c_inter),
1889  // and the length we'll be using (effective)
1890  if (c_inter + p_inter*ch + effective > len * ch) {
1891  effective = len*ch - (p_inter*ch - c_inter);
1892  }
1893 
1894  #ifdef STB_VORBIS_DIVIDES_IN_CODEBOOK
1895  if (c->lookup_type == 1) {
1896  int div = 1;
1897  for (i=0; i < effective; ++i) {
1898  int off = (z / div) % c->lookup_values;
1899  float val = CODEBOOK_ELEMENT_FAST(c,off) + last;
1900  if (outputs[c_inter])
1901  outputs[c_inter][p_inter] += val;
1902  if (++c_inter == ch) { c_inter = 0; ++p_inter; }
1903  if (c->sequence_p) last = val;
1904  div *= c->lookup_values;
1905  }
1906  } else
1907  #endif
1908  {
1909  z *= c->dimensions;
1910  if (c->sequence_p) {
1911  for (i=0; i < effective; ++i) {
1912  float val = CODEBOOK_ELEMENT_FAST(c,z+i) + last;
1913  if (outputs[c_inter])
1914  outputs[c_inter][p_inter] += val;
1915  if (++c_inter == ch) { c_inter = 0; ++p_inter; }
1916  last = val;
1917  }
1918  } else {
1919  for (i=0; i < effective; ++i) {
1920  float val = CODEBOOK_ELEMENT_FAST(c,z+i) + last;
1921  if (outputs[c_inter])
1922  outputs[c_inter][p_inter] += val;
1923  if (++c_inter == ch) { c_inter = 0; ++p_inter; }
1924  }
1925  }
1926  }
1927 
1928  total_decode -= effective;
1929  }
1930  *c_inter_p = c_inter;
1931  *p_inter_p = p_inter;
1932  return TRUE;
1933 }
1934 
1935 static int predict_point(int x, int x0, int x1, int y0, int y1)
1936 {
1937  int dy = y1 - y0;
1938  int adx = x1 - x0;
1939  // @OPTIMIZE: force int division to round in the right direction... is this necessary on x86?
1940  int err = abs(dy) * (x - x0);
1941  int off = err / adx;
1942  return dy < 0 ? y0 - off : y0 + off;
1943 }
1944 
1945 // the following table is block-copied from the specification
1946 static float inverse_db_table[256] =
1947 {
1948  1.0649863e-07f, 1.1341951e-07f, 1.2079015e-07f, 1.2863978e-07f,
1949  1.3699951e-07f, 1.4590251e-07f, 1.5538408e-07f, 1.6548181e-07f,
1950  1.7623575e-07f, 1.8768855e-07f, 1.9988561e-07f, 2.1287530e-07f,
1951  2.2670913e-07f, 2.4144197e-07f, 2.5713223e-07f, 2.7384213e-07f,
1952  2.9163793e-07f, 3.1059021e-07f, 3.3077411e-07f, 3.5226968e-07f,
1953  3.7516214e-07f, 3.9954229e-07f, 4.2550680e-07f, 4.5315863e-07f,
1954  4.8260743e-07f, 5.1396998e-07f, 5.4737065e-07f, 5.8294187e-07f,
1955  6.2082472e-07f, 6.6116941e-07f, 7.0413592e-07f, 7.4989464e-07f,
1956  7.9862701e-07f, 8.5052630e-07f, 9.0579828e-07f, 9.6466216e-07f,
1957  1.0273513e-06f, 1.0941144e-06f, 1.1652161e-06f, 1.2409384e-06f,
1958  1.3215816e-06f, 1.4074654e-06f, 1.4989305e-06f, 1.5963394e-06f,
1959  1.7000785e-06f, 1.8105592e-06f, 1.9282195e-06f, 2.0535261e-06f,
1960  2.1869758e-06f, 2.3290978e-06f, 2.4804557e-06f, 2.6416497e-06f,
1961  2.8133190e-06f, 2.9961443e-06f, 3.1908506e-06f, 3.3982101e-06f,
1962  3.6190449e-06f, 3.8542308e-06f, 4.1047004e-06f, 4.3714470e-06f,
1963  4.6555282e-06f, 4.9580707e-06f, 5.2802740e-06f, 5.6234160e-06f,
1964  5.9888572e-06f, 6.3780469e-06f, 6.7925283e-06f, 7.2339451e-06f,
1965  7.7040476e-06f, 8.2047000e-06f, 8.7378876e-06f, 9.3057248e-06f,
1966  9.9104632e-06f, 1.0554501e-05f, 1.1240392e-05f, 1.1970856e-05f,
1967  1.2748789e-05f, 1.3577278e-05f, 1.4459606e-05f, 1.5399272e-05f,
1968  1.6400004e-05f, 1.7465768e-05f, 1.8600792e-05f, 1.9809576e-05f,
1969  2.1096914e-05f, 2.2467911e-05f, 2.3928002e-05f, 2.5482978e-05f,
1970  2.7139006e-05f, 2.8902651e-05f, 3.0780908e-05f, 3.2781225e-05f,
1971  3.4911534e-05f, 3.7180282e-05f, 3.9596466e-05f, 4.2169667e-05f,
1972  4.4910090e-05f, 4.7828601e-05f, 5.0936773e-05f, 5.4246931e-05f,
1973  5.7772202e-05f, 6.1526565e-05f, 6.5524908e-05f, 6.9783085e-05f,
1974  7.4317983e-05f, 7.9147585e-05f, 8.4291040e-05f, 8.9768747e-05f,
1975  9.5602426e-05f, 0.00010181521f, 0.00010843174f, 0.00011547824f,
1976  0.00012298267f, 0.00013097477f, 0.00013948625f, 0.00014855085f,
1977  0.00015820453f, 0.00016848555f, 0.00017943469f, 0.00019109536f,
1978  0.00020351382f, 0.00021673929f, 0.00023082423f, 0.00024582449f,
1979  0.00026179955f, 0.00027881276f, 0.00029693158f, 0.00031622787f,
1980  0.00033677814f, 0.00035866388f, 0.00038197188f, 0.00040679456f,
1981  0.00043323036f, 0.00046138411f, 0.00049136745f, 0.00052329927f,
1982  0.00055730621f, 0.00059352311f, 0.00063209358f, 0.00067317058f,
1983  0.00071691700f, 0.00076350630f, 0.00081312324f, 0.00086596457f,
1984  0.00092223983f, 0.00098217216f, 0.0010459992f, 0.0011139742f,
1985  0.0011863665f, 0.0012634633f, 0.0013455702f, 0.0014330129f,
1986  0.0015261382f, 0.0016253153f, 0.0017309374f, 0.0018434235f,
1987  0.0019632195f, 0.0020908006f, 0.0022266726f, 0.0023713743f,
1988  0.0025254795f, 0.0026895994f, 0.0028643847f, 0.0030505286f,
1989  0.0032487691f, 0.0034598925f, 0.0036847358f, 0.0039241906f,
1990  0.0041792066f, 0.0044507950f, 0.0047400328f, 0.0050480668f,
1991  0.0053761186f, 0.0057254891f, 0.0060975636f, 0.0064938176f,
1992  0.0069158225f, 0.0073652516f, 0.0078438871f, 0.0083536271f,
1993  0.0088964928f, 0.009474637f, 0.010090352f, 0.010746080f,
1994  0.011444421f, 0.012188144f, 0.012980198f, 0.013823725f,
1995  0.014722068f, 0.015678791f, 0.016697687f, 0.017782797f,
1996  0.018938423f, 0.020169149f, 0.021479854f, 0.022875735f,
1997  0.024362330f, 0.025945531f, 0.027631618f, 0.029427276f,
1998  0.031339626f, 0.033376252f, 0.035545228f, 0.037855157f,
1999  0.040315199f, 0.042935108f, 0.045725273f, 0.048696758f,
2000  0.051861348f, 0.055231591f, 0.058820850f, 0.062643361f,
2001  0.066714279f, 0.071049749f, 0.075666962f, 0.080584227f,
2002  0.085821044f, 0.091398179f, 0.097337747f, 0.10366330f,
2003  0.11039993f, 0.11757434f, 0.12521498f, 0.13335215f,
2004  0.14201813f, 0.15124727f, 0.16107617f, 0.17154380f,
2005  0.18269168f, 0.19456402f, 0.20720788f, 0.22067342f,
2006  0.23501402f, 0.25028656f, 0.26655159f, 0.28387361f,
2007  0.30232132f, 0.32196786f, 0.34289114f, 0.36517414f,
2008  0.38890521f, 0.41417847f, 0.44109412f, 0.46975890f,
2009  0.50028648f, 0.53279791f, 0.56742212f, 0.60429640f,
2010  0.64356699f, 0.68538959f, 0.72993007f, 0.77736504f,
2011  0.82788260f, 0.88168307f, 0.9389798f, 1.0f
2012 };
2013 
2014 
2015 // @OPTIMIZE: if you want to replace this bresenham line-drawing routine,
2016 // note that you must produce bit-identical output to decode correctly;
2017 // this specific sequence of operations is specified in the spec (it's
2018 // drawing integer-quantized frequency-space lines that the encoder
2019 // expects to be exactly the same)
2020 // ... also, isn't the whole point of Bresenham's algorithm to NOT
2021 // have to divide in the setup? sigh.
2022 #ifndef STB_VORBIS_NO_DEFER_FLOOR
2023 #define LINE_OP(a,b) a *= b
2024 #else
2025 #define LINE_OP(a,b) a = b
2026 #endif
2027 
2028 #ifdef STB_VORBIS_DIVIDE_TABLE
2029 #define DIVTAB_NUMER 32
2030 #define DIVTAB_DENOM 64
2031 int8 integer_divide_table[DIVTAB_NUMER][DIVTAB_DENOM]; // 2KB
2032 #endif
2033 
2034 static __forceinline void draw_line(float *output, int x0, int y0, int x1, int y1, int n)
2035 {
2036  int dy = y1 - y0;
2037  int adx = x1 - x0;
2038  int ady = abs(dy);
2039  int base;
2040  int x=x0,y=y0;
2041  int err = 0;
2042  int sy;
2043 
2044 #ifdef STB_VORBIS_DIVIDE_TABLE
2045  if (adx < DIVTAB_DENOM && ady < DIVTAB_NUMER) {
2046  if (dy < 0) {
2047  base = -integer_divide_table[ady][adx];
2048  sy = base-1;
2049  } else {
2050  base = integer_divide_table[ady][adx];
2051  sy = base+1;
2052  }
2053  } else {
2054  base = dy / adx;
2055  if (dy < 0)
2056  sy = base - 1;
2057  else
2058  sy = base+1;
2059  }
2060 #else
2061  base = dy / adx;
2062  if (dy < 0)
2063  sy = base - 1;
2064  else
2065  sy = base+1;
2066 #endif
2067  ady -= abs(base) * adx;
2068  if (x1 > n) x1 = n;
2069  if (x < x1) {
2070  LINE_OP(output[x], inverse_db_table[y&255]);
2071  for (++x; x < x1; ++x) {
2072  err += ady;
2073  if (err >= adx) {
2074  err -= adx;
2075  y += sy;
2076  } else
2077  y += base;
2078  LINE_OP(output[x], inverse_db_table[y&255]);
2079  }
2080  }
2081 }
2082 
2083 static int residue_decode(vorb *f, Codebook *book, float *target, int offset, int n, int rtype)
2084 {
2085  int k;
2086  if (rtype == 0) {
2087  int step = n / book->dimensions;
2088  for (k=0; k < step; ++k)
2089  if (!codebook_decode_step(f, book, target+offset+k, n-offset-k, step))
2090  return FALSE;
2091  } else {
2092  for (k=0; k < n; ) {
2093  if (!codebook_decode(f, book, target+offset, n-k))
2094  return FALSE;
2095  k += book->dimensions;
2096  offset += book->dimensions;
2097  }
2098  }
2099  return TRUE;
2100 }
2101 
2102 // n is 1/2 of the blocksize --
2103 // specification: "Correct per-vector decode length is [n]/2"
2104 static void decode_residue(vorb *f, float *residue_buffers[], int ch, int n, int rn, uint8 *do_not_decode)
2105 {
2106  int i,j,pass;
2107  Residue *r = f->residue_config + rn;
2108  int rtype = f->residue_types[rn];
2109  int c = r->classbook;
2110  int classwords = f->codebooks[c].dimensions;
2111  unsigned int actual_size = rtype == 2 ? n*2 : n;
2112  unsigned int limit_r_begin = (r->begin < actual_size ? r->begin : actual_size);
2113  unsigned int limit_r_end = (r->end < actual_size ? r->end : actual_size);
2114  int n_read = limit_r_end - limit_r_begin;
2115  int part_read = n_read / r->part_size;
2116  int temp_alloc_point = temp_alloc_save(f);
2117  #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE
2118  uint8 ***part_classdata = (uint8 ***) temp_block_array(f,f->channels, part_read * sizeof(**part_classdata));
2119  #else
2120  int **classifications = (int **) temp_block_array(f,f->channels, part_read * sizeof(**classifications));
2121  #endif
2122 
2123  CHECK(f);
2124 
2125  for (i=0; i < ch; ++i)
2126  if (!do_not_decode[i])
2127  memset(residue_buffers[i], 0, sizeof(float) * n);
2128 
2129  if (rtype == 2 && ch != 1) {
2130  for (j=0; j < ch; ++j)
2131  if (!do_not_decode[j])
2132  break;
2133  if (j == ch)
2134  goto done;
2135 
2136  for (pass=0; pass < 8; ++pass) {
2137  int pcount = 0, class_set = 0;
2138  if (ch == 2) {
2139  while (pcount < part_read) {
2140  int z = r->begin + pcount*r->part_size;
2141  int c_inter = (z & 1), p_inter = z>>1;
2142  if (pass == 0) {
2143  Codebook *c = f->codebooks+r->classbook;
2144  int q;
2145  DECODE(q,f,c);
2146  if (q == EOP) goto done;
2147  #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE
2148  part_classdata[0][class_set] = r->classdata[q];
2149  #else
2150  for (i=classwords-1; i >= 0; --i) {
2151  classifications[0][i+pcount] = q % r->classifications;
2152  q /= r->classifications;
2153  }
2154  #endif
2155  }
2156  for (i=0; i < classwords && pcount < part_read; ++i, ++pcount) {
2157  int z = r->begin + pcount*r->part_size;
2158  #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE
2159  int c = part_classdata[0][class_set][i];
2160  #else
2161  int c = classifications[0][pcount];
2162  #endif
2163  int b = r->residue_books[c][pass];
2164  if (b >= 0) {
2165  Codebook *book = f->codebooks + b;
2166  #ifdef STB_VORBIS_DIVIDES_IN_CODEBOOK
2167  if (!codebook_decode_deinterleave_repeat(f, book, residue_buffers, ch, &c_inter, &p_inter, n, r->part_size))
2168  goto done;
2169  #else
2170  // saves 1%
2171  if (!codebook_decode_deinterleave_repeat(f, book, residue_buffers, ch, &c_inter, &p_inter, n, r->part_size))
2172  goto done;
2173  #endif
2174  } else {
2175  z += r->part_size;
2176  c_inter = z & 1;
2177  p_inter = z >> 1;
2178  }
2179  }
2180  #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE
2181  ++class_set;
2182  #endif
2183  }
2184  } else if (ch > 2) {
2185  while (pcount < part_read) {
2186  int z = r->begin + pcount*r->part_size;
2187  int c_inter = z % ch, p_inter = z/ch;
2188  if (pass == 0) {
2189  Codebook *c = f->codebooks+r->classbook;
2190  int q;
2191  DECODE(q,f,c);
2192  if (q == EOP) goto done;
2193  #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE
2194  part_classdata[0][class_set] = r->classdata[q];
2195  #else
2196  for (i=classwords-1; i >= 0; --i) {
2197  classifications[0][i+pcount] = q % r->classifications;
2198  q /= r->classifications;
2199  }
2200  #endif
2201  }
2202  for (i=0; i < classwords && pcount < part_read; ++i, ++pcount) {
2203  int z = r->begin + pcount*r->part_size;
2204  #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE
2205  int c = part_classdata[0][class_set][i];
2206  #else
2207  int c = classifications[0][pcount];
2208  #endif
2209  int b = r->residue_books[c][pass];
2210  if (b >= 0) {
2211  Codebook *book = f->codebooks + b;
2212  if (!codebook_decode_deinterleave_repeat(f, book, residue_buffers, ch, &c_inter, &p_inter, n, r->part_size))
2213  goto done;
2214  } else {
2215  z += r->part_size;
2216  c_inter = z % ch;
2217  p_inter = z / ch;
2218  }
2219  }
2220  #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE
2221  ++class_set;
2222  #endif
2223  }
2224  }
2225  }
2226  goto done;
2227  }
2228  CHECK(f);
2229 
2230  for (pass=0; pass < 8; ++pass) {
2231  int pcount = 0, class_set=0;
2232  while (pcount < part_read) {
2233  if (pass == 0) {
2234  for (j=0; j < ch; ++j) {
2235  if (!do_not_decode[j]) {
2236  Codebook *c = f->codebooks+r->classbook;
2237  int temp;
2238  DECODE(temp,f,c);
2239  if (temp == EOP) goto done;
2240  #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE
2241  part_classdata[j][class_set] = r->classdata[temp];
2242  #else
2243  for (i=classwords-1; i >= 0; --i) {
2244  classifications[j][i+pcount] = temp % r->classifications;
2245  temp /= r->classifications;
2246  }
2247  #endif
2248  }
2249  }
2250  }
2251  for (i=0; i < classwords && pcount < part_read; ++i, ++pcount) {
2252  for (j=0; j < ch; ++j) {
2253  if (!do_not_decode[j]) {
2254  #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE
2255  int c = part_classdata[j][class_set][i];
2256  #else
2257  int c = classifications[j][pcount];
2258  #endif
2259  int b = r->residue_books[c][pass];
2260  if (b >= 0) {
2261  float *target = residue_buffers[j];
2262  int offset = r->begin + pcount * r->part_size;
2263  int n = r->part_size;
2264  Codebook *book = f->codebooks + b;
2265  if (!residue_decode(f, book, target, offset, n, rtype))
2266  goto done;
2267  }
2268  }
2269  }
2270  }
2271  #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE
2272  ++class_set;
2273  #endif
2274  }
2275  }
2276  done:
2277  CHECK(f);
2278  #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE
2279  temp_free(f,part_classdata);
2280  #else
2281  temp_free(f,classifications);
2282  #endif
2283  temp_alloc_restore(f,temp_alloc_point);
2284 }
2285 
2286 
2287 #if 0
2288 // slow way for debugging
2289 void inverse_mdct_slow(float *buffer, int n)
2290 {
2291  int i,j;
2292  int n2 = n >> 1;
2293  float *x = (float *) malloc(sizeof(*x) * n2);
2294  memcpy(x, buffer, sizeof(*x) * n2);
2295  for (i=0; i < n; ++i) {
2296  float acc = 0;
2297  for (j=0; j < n2; ++j)
2298  // formula from paper:
2299  //acc += n/4.0f * x[j] * (float) cos(M_PI / 2 / n * (2 * i + 1 + n/2.0)*(2*j+1));
2300  // formula from wikipedia
2301  //acc += 2.0f / n2 * x[j] * (float) cos(M_PI/n2 * (i + 0.5 + n2/2)*(j + 0.5));
2302  // these are equivalent, except the formula from the paper inverts the multiplier!
2303  // however, what actually works is NO MULTIPLIER!?!
2304  //acc += 64 * 2.0f / n2 * x[j] * (float) cos(M_PI/n2 * (i + 0.5 + n2/2)*(j + 0.5));
2305  acc += x[j] * (float) cos(M_PI / 2 / n * (2 * i + 1 + n/2.0)*(2*j+1));
2306  buffer[i] = acc;
2307  }
2308  free(x);
2309 }
2310 #elif 0
2311 // same as above, but just barely able to run in real time on modern machines
2312 void inverse_mdct_slow(float *buffer, int n, vorb *f, int blocktype)
2313 {
2314  float mcos[16384];
2315  int i,j;
2316  int n2 = n >> 1, nmask = (n << 2) -1;
2317  float *x = (float *) malloc(sizeof(*x) * n2);
2318  memcpy(x, buffer, sizeof(*x) * n2);
2319  for (i=0; i < 4*n; ++i)
2320  mcos[i] = (float) cos(M_PI / 2 * i / n);
2321 
2322  for (i=0; i < n; ++i) {
2323  float acc = 0;
2324  for (j=0; j < n2; ++j)
2325  acc += x[j] * mcos[(2 * i + 1 + n2)*(2*j+1) & nmask];
2326  buffer[i] = acc;
2327  }
2328  free(x);
2329 }
2330 #elif 0
2331 // transform to use a slow dct-iv; this is STILL basically trivial,
2332 // but only requires half as many ops
2333 void dct_iv_slow(float *buffer, int n)
2334 {
2335  float mcos[16384];
2336  float x[2048];
2337  int i,j;
2338  int n2 = n >> 1, nmask = (n << 3) - 1;
2339  memcpy(x, buffer, sizeof(*x) * n);
2340  for (i=0; i < 8*n; ++i)
2341  mcos[i] = (float) cos(M_PI / 4 * i / n);
2342  for (i=0; i < n; ++i) {
2343  float acc = 0;
2344  for (j=0; j < n; ++j)
2345  acc += x[j] * mcos[((2 * i + 1)*(2*j+1)) & nmask];
2346  buffer[i] = acc;
2347  }
2348 }
2349 
2350 void inverse_mdct_slow(float *buffer, int n, vorb *f, int blocktype)
2351 {
2352  int i, n4 = n >> 2, n2 = n >> 1, n3_4 = n - n4;
2353  float temp[4096];
2354 
2355  memcpy(temp, buffer, n2 * sizeof(float));
2356  dct_iv_slow(temp, n2); // returns -c'-d, a-b'
2357 
2358  for (i=0; i < n4 ; ++i) buffer[i] = temp[i+n4]; // a-b'
2359  for ( ; i < n3_4; ++i) buffer[i] = -temp[n3_4 - i - 1]; // b-a', c+d'
2360  for ( ; i < n ; ++i) buffer[i] = -temp[i - n3_4]; // c'+d
2361 }
2362 #endif
2363 
2364 #ifndef LIBVORBIS_MDCT
2365 #define LIBVORBIS_MDCT 0
2366 #endif
2367 
2368 #if LIBVORBIS_MDCT
2369 // directly call the vorbis MDCT using an interface documented
2370 // by Jeff Roberts... useful for performance comparison
2371 typedef struct
2372 {
2373  int n;
2374  int log2n;
2375 
2376  float *trig;
2377  int *bitrev;
2378 
2379  float scale;
2380 } mdct_lookup;
2381 
2382 extern void mdct_init(mdct_lookup *lookup, int n);
2383 extern void mdct_clear(mdct_lookup *l);
2384 extern void mdct_backward(mdct_lookup *init, float *in, float *out);
2385 
2386 mdct_lookup M1,M2;
2387 
2388 void inverse_mdct(float *buffer, int n, vorb *f, int blocktype)
2389 {
2390  mdct_lookup *M;
2391  if (M1.n == n) M = &M1;
2392  else if (M2.n == n) M = &M2;
2393  else if (M1.n == 0) { mdct_init(&M1, n); M = &M1; }
2394  else {
2395  if (M2.n) __asm int 3;
2396  mdct_init(&M2, n);
2397  M = &M2;
2398  }
2399 
2400  mdct_backward(M, buffer, buffer);
2401 }
2402 #endif
2403 
2404 
2405 // the following were split out into separate functions while optimizing;
2406 // they could be pushed back up but eh. __forceinline showed no change;
2407 // they're probably already being inlined.
2408 static void imdct_step3_iter0_loop(int n, float *e, int i_off, int k_off, float *A)
2409 {
2410  float *ee0 = e + i_off;
2411  float *ee2 = ee0 + k_off;
2412  int i;
2413 
2414  assert((n & 3) == 0);
2415  for (i=(n>>2); i > 0; --i) {
2416  float k00_20, k01_21;
2417  k00_20 = ee0[ 0] - ee2[ 0];
2418  k01_21 = ee0[-1] - ee2[-1];
2419  ee0[ 0] += ee2[ 0];//ee0[ 0] = ee0[ 0] + ee2[ 0];
2420  ee0[-1] += ee2[-1];//ee0[-1] = ee0[-1] + ee2[-1];
2421  ee2[ 0] = k00_20 * A[0] - k01_21 * A[1];
2422  ee2[-1] = k01_21 * A[0] + k00_20 * A[1];
2423  A += 8;
2424 
2425  k00_20 = ee0[-2] - ee2[-2];
2426  k01_21 = ee0[-3] - ee2[-3];
2427  ee0[-2] += ee2[-2];//ee0[-2] = ee0[-2] + ee2[-2];
2428  ee0[-3] += ee2[-3];//ee0[-3] = ee0[-3] + ee2[-3];
2429  ee2[-2] = k00_20 * A[0] - k01_21 * A[1];
2430  ee2[-3] = k01_21 * A[0] + k00_20 * A[1];
2431  A += 8;
2432 
2433  k00_20 = ee0[-4] - ee2[-4];
2434  k01_21 = ee0[-5] - ee2[-5];
2435  ee0[-4] += ee2[-4];//ee0[-4] = ee0[-4] + ee2[-4];
2436  ee0[-5] += ee2[-5];//ee0[-5] = ee0[-5] + ee2[-5];
2437  ee2[-4] = k00_20 * A[0] - k01_21 * A[1];
2438  ee2[-5] = k01_21 * A[0] + k00_20 * A[1];
2439  A += 8;
2440 
2441  k00_20 = ee0[-6] - ee2[-6];
2442  k01_21 = ee0[-7] - ee2[-7];
2443  ee0[-6] += ee2[-6];//ee0[-6] = ee0[-6] + ee2[-6];
2444  ee0[-7] += ee2[-7];//ee0[-7] = ee0[-7] + ee2[-7];
2445  ee2[-6] = k00_20 * A[0] - k01_21 * A[1];
2446  ee2[-7] = k01_21 * A[0] + k00_20 * A[1];
2447  A += 8;
2448  ee0 -= 8;
2449  ee2 -= 8;
2450  }
2451 }
2452 
2453 static void imdct_step3_inner_r_loop(int lim, float *e, int d0, int k_off, float *A, int k1)
2454 {
2455  int i;
2456  float k00_20, k01_21;
2457 
2458  float *e0 = e + d0;
2459  float *e2 = e0 + k_off;
2460 
2461  for (i=lim >> 2; i > 0; --i) {
2462  k00_20 = e0[-0] - e2[-0];
2463  k01_21 = e0[-1] - e2[-1];
2464  e0[-0] += e2[-0];//e0[-0] = e0[-0] + e2[-0];
2465  e0[-1] += e2[-1];//e0[-1] = e0[-1] + e2[-1];
2466  e2[-0] = (k00_20)*A[0] - (k01_21) * A[1];
2467  e2[-1] = (k01_21)*A[0] + (k00_20) * A[1];
2468 
2469  A += k1;
2470 
2471  k00_20 = e0[-2] - e2[-2];
2472  k01_21 = e0[-3] - e2[-3];
2473  e0[-2] += e2[-2];//e0[-2] = e0[-2] + e2[-2];
2474  e0[-3] += e2[-3];//e0[-3] = e0[-3] + e2[-3];
2475  e2[-2] = (k00_20)*A[0] - (k01_21) * A[1];
2476  e2[-3] = (k01_21)*A[0] + (k00_20) * A[1];
2477 
2478  A += k1;
2479 
2480  k00_20 = e0[-4] - e2[-4];
2481  k01_21 = e0[-5] - e2[-5];
2482  e0[-4] += e2[-4];//e0[-4] = e0[-4] + e2[-4];
2483  e0[-5] += e2[-5];//e0[-5] = e0[-5] + e2[-5];
2484  e2[-4] = (k00_20)*A[0] - (k01_21) * A[1];
2485  e2[-5] = (k01_21)*A[0] + (k00_20) * A[1];
2486 
2487  A += k1;
2488 
2489  k00_20 = e0[-6] - e2[-6];
2490  k01_21 = e0[-7] - e2[-7];
2491  e0[-6] += e2[-6];//e0[-6] = e0[-6] + e2[-6];
2492  e0[-7] += e2[-7];//e0[-7] = e0[-7] + e2[-7];
2493  e2[-6] = (k00_20)*A[0] - (k01_21) * A[1];
2494  e2[-7] = (k01_21)*A[0] + (k00_20) * A[1];
2495 
2496  e0 -= 8;
2497  e2 -= 8;
2498 
2499  A += k1;
2500  }
2501 }
2502 
2503 static void imdct_step3_inner_s_loop(int n, float *e, int i_off, int k_off, float *A, int a_off, int k0)
2504 {
2505  int i;
2506  float A0 = A[0];
2507  float A1 = A[0+1];
2508  float A2 = A[0+a_off];
2509  float A3 = A[0+a_off+1];
2510  float A4 = A[0+a_off*2+0];
2511  float A5 = A[0+a_off*2+1];
2512  float A6 = A[0+a_off*3+0];
2513  float A7 = A[0+a_off*3+1];
2514 
2515  float k00,k11;
2516 
2517  float *ee0 = e +i_off;
2518  float *ee2 = ee0+k_off;
2519 
2520  for (i=n; i > 0; --i) {
2521  k00 = ee0[ 0] - ee2[ 0];
2522  k11 = ee0[-1] - ee2[-1];
2523  ee0[ 0] = ee0[ 0] + ee2[ 0];
2524  ee0[-1] = ee0[-1] + ee2[-1];
2525  ee2[ 0] = (k00) * A0 - (k11) * A1;
2526  ee2[-1] = (k11) * A0 + (k00) * A1;
2527 
2528  k00 = ee0[-2] - ee2[-2];
2529  k11 = ee0[-3] - ee2[-3];
2530  ee0[-2] = ee0[-2] + ee2[-2];
2531  ee0[-3] = ee0[-3] + ee2[-3];
2532  ee2[-2] = (k00) * A2 - (k11) * A3;
2533  ee2[-3] = (k11) * A2 + (k00) * A3;
2534 
2535  k00 = ee0[-4] - ee2[-4];
2536  k11 = ee0[-5] - ee2[-5];
2537  ee0[-4] = ee0[-4] + ee2[-4];
2538  ee0[-5] = ee0[-5] + ee2[-5];
2539  ee2[-4] = (k00) * A4 - (k11) * A5;
2540  ee2[-5] = (k11) * A4 + (k00) * A5;
2541 
2542  k00 = ee0[-6] - ee2[-6];
2543  k11 = ee0[-7] - ee2[-7];
2544  ee0[-6] = ee0[-6] + ee2[-6];
2545  ee0[-7] = ee0[-7] + ee2[-7];
2546  ee2[-6] = (k00) * A6 - (k11) * A7;
2547  ee2[-7] = (k11) * A6 + (k00) * A7;
2548 
2549  ee0 -= k0;
2550  ee2 -= k0;
2551  }
2552 }
2553 
2554 static __forceinline void iter_54(float *z)
2555 {
2556  float k00,k11,k22,k33;
2557  float y0,y1,y2,y3;
2558 
2559  k00 = z[ 0] - z[-4];
2560  y0 = z[ 0] + z[-4];
2561  y2 = z[-2] + z[-6];
2562  k22 = z[-2] - z[-6];
2563 
2564  z[-0] = y0 + y2; // z0 + z4 + z2 + z6
2565  z[-2] = y0 - y2; // z0 + z4 - z2 - z6
2566 
2567  // done with y0,y2
2568 
2569  k33 = z[-3] - z[-7];
2570 
2571  z[-4] = k00 + k33; // z0 - z4 + z3 - z7
2572  z[-6] = k00 - k33; // z0 - z4 - z3 + z7
2573 
2574  // done with k33
2575 
2576  k11 = z[-1] - z[-5];
2577  y1 = z[-1] + z[-5];
2578  y3 = z[-3] + z[-7];
2579 
2580  z[-1] = y1 + y3; // z1 + z5 + z3 + z7
2581  z[-3] = y1 - y3; // z1 + z5 - z3 - z7
2582  z[-5] = k11 - k22; // z1 - z5 + z2 - z6
2583  z[-7] = k11 + k22; // z1 - z5 - z2 + z6
2584 }
2585 
2586 static void imdct_step3_inner_s_loop_ld654(int n, float *e, int i_off, float *A, int base_n)
2587 {
2588  int a_off = base_n >> 3;
2589  float A2 = A[0+a_off];
2590  float *z = e + i_off;
2591  float *base = z - 16 * n;
2592 
2593  while (z > base) {
2594  float k00,k11;
2595  float l00,l11;
2596 
2597  k00 = z[-0] - z[ -8];
2598  k11 = z[-1] - z[ -9];
2599  l00 = z[-2] - z[-10];
2600  l11 = z[-3] - z[-11];
2601  z[ -0] = z[-0] + z[ -8];
2602  z[ -1] = z[-1] + z[ -9];
2603  z[ -2] = z[-2] + z[-10];
2604  z[ -3] = z[-3] + z[-11];
2605  z[ -8] = k00;
2606  z[ -9] = k11;
2607  z[-10] = (l00+l11) * A2;
2608  z[-11] = (l11-l00) * A2;
2609 
2610  k00 = z[ -4] - z[-12];
2611  k11 = z[ -5] - z[-13];
2612  l00 = z[ -6] - z[-14];
2613  l11 = z[ -7] - z[-15];
2614  z[ -4] = z[ -4] + z[-12];
2615  z[ -5] = z[ -5] + z[-13];
2616  z[ -6] = z[ -6] + z[-14];
2617  z[ -7] = z[ -7] + z[-15];
2618  z[-12] = k11;
2619  z[-13] = -k00;
2620  z[-14] = (l11-l00) * A2;
2621  z[-15] = (l00+l11) * -A2;
2622 
2623  iter_54(z);
2624  iter_54(z-8);
2625  z -= 16;
2626  }
2627 }
2628 
2629 static void inverse_mdct(float *buffer, int n, vorb *f, int blocktype)
2630 {
2631  int n2 = n >> 1, n4 = n >> 2, n8 = n >> 3, l;
2632  int ld;
2633  // @OPTIMIZE: reduce register pressure by using fewer variables?
2634  int save_point = temp_alloc_save(f);
2635  float *buf2 = (float *) temp_alloc(f, n2 * sizeof(*buf2));
2636  float *u=NULL,*v=NULL;
2637  // twiddle factors
2638  float *A = f->A[blocktype];
2639 
2640  // IMDCT algorithm from "The use of multirate filter banks for coding of high quality digital audio"
2641  // See notes about bugs in that paper in less-optimal implementation 'inverse_mdct_old' after this function.
2642 
2643  // kernel from paper
2644 
2645 
2646  // merged:
2647  // copy and reflect spectral data
2648  // step 0
2649 
2650  // note that it turns out that the items added together during
2651  // this step are, in fact, being added to themselves (as reflected
2652  // by step 0). inexplicable inefficiency! this became obvious
2653  // once I combined the passes.
2654 
2655  // so there's a missing 'times 2' here (for adding X to itself).
2656  // this propagates through linearly to the end, where the numbers
2657  // are 1/2 too small, and need to be compensated for.
2658 
2659  {
2660  float *d,*e, *AA, *e_stop;
2661  d = &buf2[n2-2];
2662  AA = A;
2663  e = &buffer[0];
2664  e_stop = &buffer[n2];
2665  while (e != e_stop) {
2666  d[1] = (e[0] * AA[0] - e[2]*AA[1]);
2667  d[0] = (e[0] * AA[1] + e[2]*AA[0]);
2668  d -= 2;
2669  AA += 2;
2670  e += 4;
2671  }
2672 
2673  e = &buffer[n2-3];
2674  while (d >= buf2) {
2675  d[1] = (-e[2] * AA[0] - -e[0]*AA[1]);
2676  d[0] = (-e[2] * AA[1] + -e[0]*AA[0]);
2677  d -= 2;
2678  AA += 2;
2679  e -= 4;
2680  }
2681  }
2682 
2683  // now we use symbolic names for these, so that we can
2684  // possibly swap their meaning as we change which operations
2685  // are in place
2686 
2687  u = buffer;
2688  v = buf2;
2689 
2690  // step 2 (paper output is w, now u)
2691  // this could be in place, but the data ends up in the wrong
2692  // place... _somebody_'s got to swap it, so this is nominated
2693  {
2694  float *AA = &A[n2-8];
2695  float *d0,*d1, *e0, *e1;
2696 
2697  e0 = &v[n4];
2698  e1 = &v[0];
2699 
2700  d0 = &u[n4];
2701  d1 = &u[0];
2702 
2703  while (AA >= A) {
2704  float v40_20, v41_21;
2705 
2706  v41_21 = e0[1] - e1[1];
2707  v40_20 = e0[0] - e1[0];
2708  d0[1] = e0[1] + e1[1];
2709  d0[0] = e0[0] + e1[0];
2710  d1[1] = v41_21*AA[4] - v40_20*AA[5];
2711  d1[0] = v40_20*AA[4] + v41_21*AA[5];
2712 
2713  v41_21 = e0[3] - e1[3];
2714  v40_20 = e0[2] - e1[2];
2715  d0[3] = e0[3] + e1[3];
2716  d0[2] = e0[2] + e1[2];
2717  d1[3] = v41_21*AA[0] - v40_20*AA[1];
2718  d1[2] = v40_20*AA[0] + v41_21*AA[1];
2719 
2720  AA -= 8;
2721 
2722  d0 += 4;
2723  d1 += 4;
2724  e0 += 4;
2725  e1 += 4;
2726  }
2727  }
2728 
2729  // step 3
2730  ld = ilog(n) - 1; // ilog is off-by-one from normal definitions
2731 
2732  // optimized step 3:
2733 
2734  // the original step3 loop can be nested r inside s or s inside r;
2735  // it's written originally as s inside r, but this is dumb when r
2736  // iterates many times, and s few. So I have two copies of it and
2737  // switch between them halfway.
2738 
2739  // this is iteration 0 of step 3
2740  imdct_step3_iter0_loop(n >> 4, u, n2-1-n4*0, -(n >> 3), A);
2741  imdct_step3_iter0_loop(n >> 4, u, n2-1-n4*1, -(n >> 3), A);
2742 
2743  // this is iteration 1 of step 3
2744  imdct_step3_inner_r_loop(n >> 5, u, n2-1 - n8*0, -(n >> 4), A, 16);
2745  imdct_step3_inner_r_loop(n >> 5, u, n2-1 - n8*1, -(n >> 4), A, 16);
2746  imdct_step3_inner_r_loop(n >> 5, u, n2-1 - n8*2, -(n >> 4), A, 16);
2747  imdct_step3_inner_r_loop(n >> 5, u, n2-1 - n8*3, -(n >> 4), A, 16);
2748 
2749  l=2;
2750  for (; l < (ld-3)>>1; ++l) {
2751  int k0 = n >> (l+2), k0_2 = k0>>1;
2752  int lim = 1 << (l+1);
2753  int i;
2754  for (i=0; i < lim; ++i)
2755  imdct_step3_inner_r_loop(n >> (l+4), u, n2-1 - k0*i, -k0_2, A, 1 << (l+3));
2756  }
2757 
2758  for (; l < ld-6; ++l) {
2759  int k0 = n >> (l+2), k1 = 1 << (l+3), k0_2 = k0>>1;
2760  int rlim = n >> (l+6), r;
2761  int lim = 1 << (l+1);
2762  int i_off;
2763  float *A0 = A;
2764  i_off = n2-1;
2765  for (r=rlim; r > 0; --r) {
2766  imdct_step3_inner_s_loop(lim, u, i_off, -k0_2, A0, k1, k0);
2767  A0 += k1*4;
2768  i_off -= 8;
2769  }
2770  }
2771 
2772  // iterations with count:
2773  // ld-6,-5,-4 all interleaved together
2774  // the big win comes from getting rid of needless flops
2775  // due to the constants on pass 5 & 4 being all 1 and 0;
2776  // combining them to be simultaneous to improve cache made little difference
2777  imdct_step3_inner_s_loop_ld654(n >> 5, u, n2-1, A, n);
2778 
2779  // output is u
2780 
2781  // step 4, 5, and 6
2782  // cannot be in-place because of step 5
2783  {
2784  uint16 *bitrev = f->bit_reverse[blocktype];
2785  // weirdly, I'd have thought reading sequentially and writing
2786  // erratically would have been better than vice-versa, but in
2787  // fact that's not what my testing showed. (That is, with
2788  // j = bitreverse(i), do you read i and write j, or read j and write i.)
2789 
2790  float *d0 = &v[n4-4];
2791  float *d1 = &v[n2-4];
2792  while (d0 >= v) {
2793  int k4;
2794 
2795  k4 = bitrev[0];
2796  d1[3] = u[k4+0];
2797  d1[2] = u[k4+1];
2798  d0[3] = u[k4+2];
2799  d0[2] = u[k4+3];
2800 
2801  k4 = bitrev[1];
2802  d1[1] = u[k4+0];
2803  d1[0] = u[k4+1];
2804  d0[1] = u[k4+2];
2805  d0[0] = u[k4+3];
2806 
2807  d0 -= 4;
2808  d1 -= 4;
2809  bitrev += 2;
2810  }
2811  }
2812  // (paper output is u, now v)
2813 
2814 
2815  // data must be in buf2
2816  assert(v == buf2);
2817 
2818  // step 7 (paper output is v, now v)
2819  // this is now in place
2820  {
2821  float *C = f->C[blocktype];
2822  float *d, *e;
2823 
2824  d = v;
2825  e = v + n2 - 4;
2826 
2827  while (d < e) {
2828  float a02,a11,b0,b1,b2,b3;
2829 
2830  a02 = d[0] - e[2];
2831  a11 = d[1] + e[3];
2832 
2833  b0 = C[1]*a02 + C[0]*a11;
2834  b1 = C[1]*a11 - C[0]*a02;
2835 
2836  b2 = d[0] + e[ 2];
2837  b3 = d[1] - e[ 3];
2838 
2839  d[0] = b2 + b0;
2840  d[1] = b3 + b1;
2841  e[2] = b2 - b0;
2842  e[3] = b1 - b3;
2843 
2844  a02 = d[2] - e[0];
2845  a11 = d[3] + e[1];
2846 
2847  b0 = C[3]*a02 + C[2]*a11;
2848  b1 = C[3]*a11 - C[2]*a02;
2849 
2850  b2 = d[2] + e[ 0];
2851  b3 = d[3] - e[ 1];
2852 
2853  d[2] = b2 + b0;
2854  d[3] = b3 + b1;
2855  e[0] = b2 - b0;
2856  e[1] = b1 - b3;
2857 
2858  C += 4;
2859  d += 4;
2860  e -= 4;
2861  }
2862  }
2863 
2864  // data must be in buf2
2865 
2866 
2867  // step 8+decode (paper output is X, now buffer)
2868  // this generates pairs of data a la 8 and pushes them directly through
2869  // the decode kernel (pushing rather than pulling) to avoid having
2870  // to make another pass later
2871 
2872  // this cannot POSSIBLY be in place, so we refer to the buffers directly
2873 
2874  {
2875  float *d0,*d1,*d2,*d3;
2876 
2877  float *B = f->B[blocktype] + n2 - 8;
2878  float *e = buf2 + n2 - 8;
2879  d0 = &buffer[0];
2880  d1 = &buffer[n2-4];
2881  d2 = &buffer[n2];
2882  d3 = &buffer[n-4];
2883  while (e >= v) {
2884  float p0,p1,p2,p3;
2885 
2886  p3 = e[6]*B[7] - e[7]*B[6];
2887  p2 = -e[6]*B[6] - e[7]*B[7];
2888 
2889  d0[0] = p3;
2890  d1[3] = - p3;
2891  d2[0] = p2;
2892  d3[3] = p2;
2893 
2894  p1 = e[4]*B[5] - e[5]*B[4];
2895  p0 = -e[4]*B[4] - e[5]*B[5];
2896 
2897  d0[1] = p1;
2898  d1[2] = - p1;
2899  d2[1] = p0;
2900  d3[2] = p0;
2901 
2902  p3 = e[2]*B[3] - e[3]*B[2];
2903  p2 = -e[2]*B[2] - e[3]*B[3];
2904 
2905  d0[2] = p3;
2906  d1[1] = - p3;
2907  d2[2] = p2;
2908  d3[1] = p2;
2909 
2910  p1 = e[0]*B[1] - e[1]*B[0];
2911  p0 = -e[0]*B[0] - e[1]*B[1];
2912 
2913  d0[3] = p1;
2914  d1[0] = - p1;
2915  d2[3] = p0;
2916  d3[0] = p0;
2917 
2918  B -= 8;
2919  e -= 8;
2920  d0 += 4;
2921  d2 += 4;
2922  d1 -= 4;
2923  d3 -= 4;
2924  }
2925  }
2926 
2927  temp_free(f,buf2);
2928  temp_alloc_restore(f,save_point);
2929 }
2930 
2931 #if 0
2932 // this is the original version of the above code, if you want to optimize it from scratch
2933 void inverse_mdct_naive(float *buffer, int n)
2934 {
2935  float s;
2936  float A[1 << 12], B[1 << 12], C[1 << 11];
2937  int i,k,k2,k4, n2 = n >> 1, n4 = n >> 2, n8 = n >> 3, l;
2938  int n3_4 = n - n4, ld;
2939  // how can they claim this only uses N words?!
2940  // oh, because they're only used sparsely, whoops
2941  float u[1 << 13], X[1 << 13], v[1 << 13], w[1 << 13];
2942  // set up twiddle factors
2943 
2944  for (k=k2=0; k < n4; ++k,k2+=2) {
2945  A[k2 ] = (float) cos(4*k*M_PI/n);
2946  A[k2+1] = (float) -sin(4*k*M_PI/n);
2947  B[k2 ] = (float) cos((k2+1)*M_PI/n/2);
2948  B[k2+1] = (float) sin((k2+1)*M_PI/n/2);
2949  }
2950  for (k=k2=0; k < n8; ++k,k2+=2) {
2951  C[k2 ] = (float) cos(2*(k2+1)*M_PI/n);
2952  C[k2+1] = (float) -sin(2*(k2+1)*M_PI/n);
2953  }
2954 
2955  // IMDCT algorithm from "The use of multirate filter banks for coding of high quality digital audio"
2956  // Note there are bugs in that pseudocode, presumably due to them attempting
2957  // to rename the arrays nicely rather than representing the way their actual
2958  // implementation bounces buffers back and forth. As a result, even in the
2959  // "some formulars corrected" version, a direct implementation fails. These
2960  // are noted below as "paper bug".
2961 
2962  // copy and reflect spectral data
2963  for (k=0; k < n2; ++k) u[k] = buffer[k];
2964  for ( ; k < n ; ++k) u[k] = -buffer[n - k - 1];
2965  // kernel from paper
2966  // step 1
2967  for (k=k2=k4=0; k < n4; k+=1, k2+=2, k4+=4) {
2968  v[n-k4-1] = (u[k4] - u[n-k4-1]) * A[k2] - (u[k4+2] - u[n-k4-3])*A[k2+1];
2969  v[n-k4-3] = (u[k4] - u[n-k4-1]) * A[k2+1] + (u[k4+2] - u[n-k4-3])*A[k2];
2970  }
2971  // step 2
2972  for (k=k4=0; k < n8; k+=1, k4+=4) {
2973  w[n2+3+k4] = v[n2+3+k4] + v[k4+3];
2974  w[n2+1+k4] = v[n2+1+k4] + v[k4+1];
2975  w[k4+3] = (v[n2+3+k4] - v[k4+3])*A[n2-4-k4] - (v[n2+1+k4]-v[k4+1])*A[n2-3-k4];
2976  w[k4+1] = (v[n2+1+k4] - v[k4+1])*A[n2-4-k4] + (v[n2+3+k4]-v[k4+3])*A[n2-3-k4];
2977  }
2978  // step 3
2979  ld = ilog(n) - 1; // ilog is off-by-one from normal definitions
2980  for (l=0; l < ld-3; ++l) {
2981  int k0 = n >> (l+2), k1 = 1 << (l+3);
2982  int rlim = n >> (l+4), r4, r;
2983  int s2lim = 1 << (l+2), s2;
2984  for (r=r4=0; r < rlim; r4+=4,++r) {
2985  for (s2=0; s2 < s2lim; s2+=2) {
2986  u[n-1-k0*s2-r4] = w[n-1-k0*s2-r4] + w[n-1-k0*(s2+1)-r4];
2987  u[n-3-k0*s2-r4] = w[n-3-k0*s2-r4] + w[n-3-k0*(s2+1)-r4];
2988  u[n-1-k0*(s2+1)-r4] = (w[n-1-k0*s2-r4] - w[n-1-k0*(s2+1)-r4]) * A[r*k1]
2989  - (w[n-3-k0*s2-r4] - w[n-3-k0*(s2+1)-r4]) * A[r*k1+1];
2990  u[n-3-k0*(s2+1)-r4] = (w[n-3-k0*s2-r4] - w[n-3-k0*(s2+1)-r4]) * A[r*k1]
2991  + (w[n-1-k0*s2-r4] - w[n-1-k0*(s2+1)-r4]) * A[r*k1+1];
2992  }
2993  }
2994  if (l+1 < ld-3) {
2995  // paper bug: ping-ponging of u&w here is omitted
2996  memcpy(w, u, sizeof(u));
2997  }
2998  }
2999 
3000  // step 4
3001  for (i=0; i < n8; ++i) {
3002  int j = bit_reverse(i) >> (32-ld+3);
3003  assert(j < n8);
3004  if (i == j) {
3005  // paper bug: original code probably swapped in place; if copying,
3006  // need to directly copy in this case
3007  int i8 = i << 3;
3008  v[i8+1] = u[i8+1];
3009  v[i8+3] = u[i8+3];
3010  v[i8+5] = u[i8+5];
3011  v[i8+7] = u[i8+7];
3012  } else if (i < j) {
3013  int i8 = i << 3, j8 = j << 3;
3014  v[j8+1] = u[i8+1], v[i8+1] = u[j8 + 1];
3015  v[j8+3] = u[i8+3], v[i8+3] = u[j8 + 3];
3016  v[j8+5] = u[i8+5], v[i8+5] = u[j8 + 5];
3017  v[j8+7] = u[i8+7], v[i8+7] = u[j8 + 7];
3018  }
3019  }
3020  // step 5
3021  for (k=0; k < n2; ++k) {
3022  w[k] = v[k*2+1];
3023  }
3024  // step 6
3025  for (k=k2=k4=0; k < n8; ++k, k2 += 2, k4 += 4) {
3026  u[n-1-k2] = w[k4];
3027  u[n-2-k2] = w[k4+1];
3028  u[n3_4 - 1 - k2] = w[k4+2];
3029  u[n3_4 - 2 - k2] = w[k4+3];
3030  }
3031  // step 7
3032  for (k=k2=0; k < n8; ++k, k2 += 2) {
3033  v[n2 + k2 ] = ( u[n2 + k2] + u[n-2-k2] + C[k2+1]*(u[n2+k2]-u[n-2-k2]) + C[k2]*(u[n2+k2+1]+u[n-2-k2+1]))/2;
3034  v[n-2 - k2] = ( u[n2 + k2] + u[n-2-k2] - C[k2+1]*(u[n2+k2]-u[n-2-k2]) - C[k2]*(u[n2+k2+1]+u[n-2-k2+1]))/2;
3035  v[n2+1+ k2] = ( u[n2+1+k2] - u[n-1-k2] + C[k2+1]*(u[n2+1+k2]+u[n-1-k2]) - C[k2]*(u[n2+k2]-u[n-2-k2]))/2;
3036  v[n-1 - k2] = (-u[n2+1+k2] + u[n-1-k2] + C[k2+1]*(u[n2+1+k2]+u[n-1-k2]) - C[k2]*(u[n2+k2]-u[n-2-k2]))/2;
3037  }
3038  // step 8
3039  for (k=k2=0; k < n4; ++k,k2 += 2) {
3040  X[k] = v[k2+n2]*B[k2 ] + v[k2+1+n2]*B[k2+1];
3041  X[n2-1-k] = v[k2+n2]*B[k2+1] - v[k2+1+n2]*B[k2 ];
3042  }
3043 
3044  // decode kernel to output
3045  // determined the following value experimentally
3046  // (by first figuring out what made inverse_mdct_slow work); then matching that here
3047  // (probably vorbis encoder premultiplies by n or n/2, to save it on the decoder?)
3048  s = 0.5; // theoretically would be n4
3049 
3050  // [[[ note! the s value of 0.5 is compensated for by the B[] in the current code,
3051  // so it needs to use the "old" B values to behave correctly, or else
3052  // set s to 1.0 ]]]
3053  for (i=0; i < n4 ; ++i) buffer[i] = s * X[i+n4];
3054  for ( ; i < n3_4; ++i) buffer[i] = -s * X[n3_4 - i - 1];
3055  for ( ; i < n ; ++i) buffer[i] = -s * X[i - n3_4];
3056 }
3057 #endif
3058 
3059 static float *get_window(vorb *f, int len)
3060 {
3061  len <<= 1;
3062  if (len == f->blocksize_0) return f->window[0];
3063  if (len == f->blocksize_1) return f->window[1];
3064  return NULL;
3065 }
3066 
3067 #ifndef STB_VORBIS_NO_DEFER_FLOOR
3068 typedef int16 YTYPE;
3069 #else
3070 typedef int YTYPE;
3071 #endif
3072 static int do_floor(vorb *f, Mapping *map, int i, int n, float *target, YTYPE *finalY, uint8 *step2_flag)
3073 {
3074  int n2 = n >> 1;
3075  int s = map->chan[i].mux, floor;
3076  floor = map->submap_floor[s];
3077  if (f->floor_types[floor] == 0) {
3078  return error(f, VORBIS_invalid_stream);
3079  } else {
3080  Floor1 *g = &f->floor_config[floor].floor1;
3081  int j,q;
3082  int lx = 0, ly = finalY[0] * g->floor1_multiplier;
3083  for (q=1; q < g->values; ++q) {
3084  j = g->sorted_order[q];
3085  #ifndef STB_VORBIS_NO_DEFER_FLOOR
3086  STBV_NOTUSED(step2_flag);
3087  if (finalY[j] >= 0)
3088  #else
3089  if (step2_flag[j])
3090  #endif
3091  {
3092  int hy = finalY[j] * g->floor1_multiplier;
3093  int hx = g->Xlist[j];
3094  if (lx != hx)
3095  draw_line(target, lx,ly, hx,hy, n2);
3096  CHECK(f);
3097  lx = hx, ly = hy;
3098  }
3099  }
3100  if (lx < n2) {
3101  // optimization of: draw_line(target, lx,ly, n,ly, n2);
3102  for (j=lx; j < n2; ++j)
3103  LINE_OP(target[j], inverse_db_table[ly]);
3104  CHECK(f);
3105  }
3106  }
3107  return TRUE;
3108 }
3109 
3110 // The meaning of "left" and "right"
3111 //
3112 // For a given frame:
3113 // we compute samples from 0..n
3114 // window_center is n/2
3115 // we'll window and mix the samples from left_start to left_end with data from the previous frame
3116 // all of the samples from left_end to right_start can be output without mixing; however,
3117 // this interval is 0-length except when transitioning between short and long frames
3118 // all of the samples from right_start to right_end need to be mixed with the next frame,
3119 // which we don't have, so those get saved in a buffer
3120 // frame N's right_end-right_start, the number of samples to mix with the next frame,
3121 // has to be the same as frame N+1's left_end-left_start (which they are by
3122 // construction)
3123 
3124 static int vorbis_decode_initial(vorb *f, int *p_left_start, int *p_left_end, int *p_right_start, int *p_right_end, int *mode)
3125 {
3126  Mode *m;
3127  int i, n, prev, next, window_center;
3128  f->channel_buffer_start = f->channel_buffer_end = 0;
3129 
3130  retry:
3131  if (f->eof) return FALSE;
3132  if (!maybe_start_packet(f))
3133  return FALSE;
3134  // check packet type
3135  if (get_bits(f,1) != 0) {
3136  if (IS_PUSH_MODE(f))
3137  return error(f,VORBIS_bad_packet_type);
3138  while (EOP != get8_packet(f));
3139  goto retry;
3140  }
3141 
3142  if (f->alloc.alloc_buffer)
3143  assert(f->alloc.alloc_buffer_length_in_bytes == f->temp_offset);
3144 
3145  i = get_bits(f, ilog(f->mode_count-1));
3146  if (i == EOP) return FALSE;
3147  if (i >= f->mode_count) return FALSE;
3148  *mode = i;
3149  m = f->mode_config + i;
3150  if (m->blockflag) {
3151  n = f->blocksize_1;
3152  prev = get_bits(f,1);
3153  next = get_bits(f,1);
3154  } else {
3155  prev = next = 0;
3156  n = f->blocksize_0;
3157  }
3158 
3159 // WINDOWING
3160 
3161  window_center = n >> 1;
3162  if (m->blockflag && !prev) {
3163  *p_left_start = (n - f->blocksize_0) >> 2;
3164  *p_left_end = (n + f->blocksize_0) >> 2;
3165  } else {
3166  *p_left_start = 0;
3167  *p_left_end = window_center;
3168  }
3169  if (m->blockflag && !next) {
3170  *p_right_start = (n*3 - f->blocksize_0) >> 2;
3171  *p_right_end = (n*3 + f->blocksize_0) >> 2;
3172  } else {
3173  *p_right_start = window_center;
3174  *p_right_end = n;
3175  }
3176 
3177  return TRUE;
3178 }
3179 
3180 static int vorbis_decode_packet_rest(vorb *f, int *len, Mode *m, int left_start, int left_end, int right_start, int right_end, int *p_left)
3181 {
3182  Mapping *map;
3183  int i,j,k,n,n2;
3184  int zero_channel[256];
3185  int really_zero_channel[256];
3186 
3187 // WINDOWING
3188 
3189  STBV_NOTUSED(left_end);
3190  n = f->blocksize[m->blockflag];
3191  map = &f->mapping[m->mapping];
3192 
3193 // FLOORS
3194  n2 = n >> 1;
3195 
3196  CHECK(f);
3197 
3198  for (i=0; i < f->channels; ++i) {
3199  int s = map->chan[i].mux, floor;
3200  zero_channel[i] = FALSE;
3201  floor = map->submap_floor[s];
3202  if (f->floor_types[floor] == 0) {
3203  return error(f, VORBIS_invalid_stream);
3204  } else {
3205  Floor1 *g = &f->floor_config[floor].floor1;
3206  if (get_bits(f, 1)) {
3207  short *finalY;
3208  uint8 step2_flag[256];
3209  static int range_list[4] = { 256, 128, 86, 64 };
3210  int range = range_list[g->floor1_multiplier-1];
3211  int offset = 2;
3212  finalY = f->finalY[i];
3213  finalY[0] = get_bits(f, ilog(range)-1);
3214  finalY[1] = get_bits(f, ilog(range)-1);
3215  for (j=0; j < g->partitions; ++j) {
3216  int pclass = g->partition_class_list[j];
3217  int cdim = g->class_dimensions[pclass];
3218  int cbits = g->class_subclasses[pclass];
3219  int csub = (1 << cbits)-1;
3220  int cval = 0;
3221  if (cbits) {
3222  Codebook *c = f->codebooks + g->class_masterbooks[pclass];
3223  DECODE(cval,f,c);
3224  }
3225  for (k=0; k < cdim; ++k) {
3226  int book = g->subclass_books[pclass][cval & csub];
3227  cval = cval >> cbits;
3228  if (book >= 0) {
3229  int temp;
3230  Codebook *c = f->codebooks + book;
3231  DECODE(temp,f,c);
3232  finalY[offset++] = temp;
3233  } else
3234  finalY[offset++] = 0;
3235  }
3236  }
3237  if (f->valid_bits == INVALID_BITS) goto error; // behavior according to spec
3238  step2_flag[0] = step2_flag[1] = 1;
3239  for (j=2; j < g->values; ++j) {
3240  int low, high, pred, highroom, lowroom, room, val;
3241  low = g->neighbors[j][0];
3242  high = g->neighbors[j][1];
3243  //neighbors(g->Xlist, j, &low, &high);
3244  pred = predict_point(g->Xlist[j], g->Xlist[low], g->Xlist[high], finalY[low], finalY[high]);
3245  val = finalY[j];
3246  highroom = range - pred;
3247  lowroom = pred;
3248  if (highroom < lowroom)
3249  room = highroom * 2;
3250  else
3251  room = lowroom * 2;
3252  if (val) {
3253  step2_flag[low] = step2_flag[high] = 1;
3254  step2_flag[j] = 1;
3255  if (val >= room)
3256  if (highroom > lowroom)
3257  finalY[j] = val - lowroom + pred;
3258  else
3259  finalY[j] = pred - val + highroom - 1;
3260  else
3261  if (val & 1)
3262  finalY[j] = pred - ((val+1)>>1);
3263  else
3264  finalY[j] = pred + (val>>1);
3265  } else {
3266  step2_flag[j] = 0;
3267  finalY[j] = pred;
3268  }
3269  }
3270 
3271 #ifdef STB_VORBIS_NO_DEFER_FLOOR
3272  do_floor(f, map, i, n, f->floor_buffers[i], finalY, step2_flag);
3273 #else
3274  // defer final floor computation until _after_ residue
3275  for (j=0; j < g->values; ++j) {
3276  if (!step2_flag[j])
3277  finalY[j] = -1;
3278  }
3279 #endif
3280  } else {
3281  error:
3282  zero_channel[i] = TRUE;
3283  }
3284  // So we just defer everything else to later
3285 
3286  // at this point we've decoded the floor into buffer
3287  }
3288  }
3289  CHECK(f);
3290  // at this point we've decoded all floors
3291 
3292  if (f->alloc.alloc_buffer)
3293  assert(f->alloc.alloc_buffer_length_in_bytes == f->temp_offset);
3294 
3295  // re-enable coupled channels if necessary
3296  memcpy(really_zero_channel, zero_channel, sizeof(really_zero_channel[0]) * f->channels);
3297  for (i=0; i < map->coupling_steps; ++i)
3298  if (!zero_channel[map->chan[i].magnitude] || !zero_channel[map->chan[i].angle]) {
3299  zero_channel[map->chan[i].magnitude] = zero_channel[map->chan[i].angle] = FALSE;
3300  }
3301 
3302  CHECK(f);
3303 // RESIDUE DECODE
3304  for (i=0; i < map->submaps; ++i) {
3305  float *residue_buffers[STB_VORBIS_MAX_CHANNELS];
3306  int r;
3307  uint8 do_not_decode[256];
3308  int ch = 0;
3309  for (j=0; j < f->channels; ++j) {
3310  if (map->chan[j].mux == i) {
3311  if (zero_channel[j]) {
3312  do_not_decode[ch] = TRUE;
3313  residue_buffers[ch] = NULL;
3314  } else {
3315  do_not_decode[ch] = FALSE;
3316  residue_buffers[ch] = f->channel_buffers[j];
3317  }
3318  ++ch;
3319  }
3320  }
3321  r = map->submap_residue[i];
3322  decode_residue(f, residue_buffers, ch, n2, r, do_not_decode);
3323  }
3324 
3325  if (f->alloc.alloc_buffer)
3326  assert(f->alloc.alloc_buffer_length_in_bytes == f->temp_offset);
3327  CHECK(f);
3328 
3329 // INVERSE COUPLING
3330  for (i = map->coupling_steps-1; i >= 0; --i) {
3331  int n2 = n >> 1;
3332  float *m = f->channel_buffers[map->chan[i].magnitude];
3333  float *a = f->channel_buffers[map->chan[i].angle ];
3334  for (j=0; j < n2; ++j) {
3335  float a2,m2;
3336  if (m[j] > 0)
3337  if (a[j] > 0)
3338  m2 = m[j], a2 = m[j] - a[j];
3339  else
3340  a2 = m[j], m2 = m[j] + a[j];
3341  else
3342  if (a[j] > 0)
3343  m2 = m[j], a2 = m[j] + a[j];
3344  else
3345  a2 = m[j], m2 = m[j] - a[j];
3346  m[j] = m2;
3347  a[j] = a2;
3348  }
3349  }
3350  CHECK(f);
3351 
3352  // finish decoding the floors
3353 #ifndef STB_VORBIS_NO_DEFER_FLOOR
3354  for (i=0; i < f->channels; ++i) {
3355  if (really_zero_channel[i]) {
3356  memset(f->channel_buffers[i], 0, sizeof(*f->channel_buffers[i]) * n2);
3357  } else {
3358  do_floor(f, map, i, n, f->channel_buffers[i], f->finalY[i], NULL);
3359  }
3360  }
3361 #else
3362  for (i=0; i < f->channels; ++i) {
3363  if (really_zero_channel[i]) {
3364  memset(f->channel_buffers[i], 0, sizeof(*f->channel_buffers[i]) * n2);
3365  } else {
3366  for (j=0; j < n2; ++j)
3367  f->channel_buffers[i][j] *= f->floor_buffers[i][j];
3368  }
3369  }
3370 #endif
3371 
3372 // INVERSE MDCT
3373  CHECK(f);
3374  for (i=0; i < f->channels; ++i)
3375  inverse_mdct(f->channel_buffers[i], n, f, m->blockflag);
3376  CHECK(f);
3377 
3378  // this shouldn't be necessary, unless we exited on an error
3379  // and want to flush to get to the next packet
3380  flush_packet(f);
3381 
3382  if (f->first_decode) {
3383  // assume we start so first non-discarded sample is sample 0
3384  // this isn't to spec, but spec would require us to read ahead
3385  // and decode the size of all current frames--could be done,
3386  // but presumably it's not a commonly used feature
3387  f->current_loc = 0u - n2; // start of first frame is positioned for discard (NB this is an intentional unsigned overflow/wrap-around)
3388  // we might have to discard samples "from" the next frame too,
3389  // if we're lapping a large block then a small at the start?
3390  f->discard_samples_deferred = n - right_end;
3391  f->current_loc_valid = TRUE;
3392  f->first_decode = FALSE;
3393  } else if (f->discard_samples_deferred) {
3394  if (f->discard_samples_deferred >= right_start - left_start) {
3395  f->discard_samples_deferred -= (right_start - left_start);
3396  left_start = right_start;
3397  *p_left = left_start;
3398  } else {
3399  left_start += f->discard_samples_deferred;
3400  *p_left = left_start;
3401  f->discard_samples_deferred = 0;
3402  }
3403  } else if (f->previous_length == 0 && f->current_loc_valid) {
3404  // we're recovering from a seek... that means we're going to discard
3405  // the samples from this packet even though we know our position from
3406  // the last page header, so we need to update the position based on
3407  // the discarded samples here
3408  // but wait, the code below is going to add this in itself even
3409  // on a discard, so we don't need to do it here...
3410  }
3411 
3412  // check if we have ogg information about the sample # for this packet
3413  if (f->last_seg_which == f->end_seg_with_known_loc) {
3414  // if we have a valid current loc, and this is final:
3415  if (f->current_loc_valid && (f->page_flag & PAGEFLAG_last_page)) {
3416  uint32 current_end = f->known_loc_for_packet;
3417  // then let's infer the size of the (probably) short final frame
3418  if (current_end < f->current_loc + (right_end-left_start)) {
3419  if (current_end < f->current_loc) {
3420  // negative truncation, that's impossible!
3421  *len = 0;
3422  } else {
3423  *len = current_end - f->current_loc;
3424  }
3425  *len += left_start; // this doesn't seem right, but has no ill effect on my test files
3426  if (*len > right_end) *len = right_end; // this should never happen
3427  f->current_loc += *len;
3428  return TRUE;
3429  }
3430  }
3431  // otherwise, just set our sample loc
3432  // guess that the ogg granule pos refers to the _middle_ of the
3433  // last frame?
3434  // set f->current_loc to the position of left_start
3435  f->current_loc = f->known_loc_for_packet - (n2-left_start);
3436  f->current_loc_valid = TRUE;
3437  }
3438  if (f->current_loc_valid)
3439  f->current_loc += (right_start - left_start);
3440 
3441  if (f->alloc.alloc_buffer)
3442  assert(f->alloc.alloc_buffer_length_in_bytes == f->temp_offset);
3443  *len = right_end; // ignore samples after the window goes to 0
3444  CHECK(f);
3445 
3446  return TRUE;
3447 }
3448 
3449 static int vorbis_decode_packet(vorb *f, int *len, int *p_left, int *p_right)
3450 {
3451  int mode, left_end, right_end;
3452  if (!vorbis_decode_initial(f, p_left, &left_end, p_right, &right_end, &mode)) return 0;
3453  return vorbis_decode_packet_rest(f, len, f->mode_config + mode, *p_left, left_end, *p_right, right_end, p_left);
3454 }
3455 
3456 static int vorbis_finish_frame(stb_vorbis *f, int len, int left, int right)
3457 {
3458  int prev,i,j;
3459  // we use right&left (the start of the right- and left-window sin()-regions)
3460  // to determine how much to return, rather than inferring from the rules
3461  // (same result, clearer code); 'left' indicates where our sin() window
3462  // starts, therefore where the previous window's right edge starts, and
3463  // therefore where to start mixing from the previous buffer. 'right'
3464  // indicates where our sin() ending-window starts, therefore that's where
3465  // we start saving, and where our returned-data ends.
3466 
3467  // mixin from previous window
3468  if (f->previous_length) {
3469  int i,j, n = f->previous_length;
3470  float *w = get_window(f, n);
3471  if (w == NULL) return 0;
3472  for (i=0; i < f->channels; ++i) {
3473  for (j=0; j < n; ++j)
3474  f->channel_buffers[i][left+j] =
3475  f->channel_buffers[i][left+j]*w[ j] +
3476  f->previous_window[i][ j]*w[n-1-j];
3477  }
3478  }
3479 
3480  prev = f->previous_length;
3481 
3482  // last half of this data becomes previous window
3483  f->previous_length = len - right;
3484 
3485  // @OPTIMIZE: could avoid this copy by double-buffering the
3486  // output (flipping previous_window with channel_buffers), but
3487  // then previous_window would have to be 2x as large, and
3488  // channel_buffers couldn't be temp mem (although they're NOT
3489  // currently temp mem, they could be (unless we want to level
3490  // performance by spreading out the computation))
3491  for (i=0; i < f->channels; ++i)
3492  for (j=0; right+j < len; ++j)
3493  f->previous_window[i][j] = f->channel_buffers[i][right+j];
3494 
3495  if (!prev)
3496  // there was no previous packet, so this data isn't valid...
3497  // this isn't entirely true, only the would-have-overlapped data
3498  // isn't valid, but this seems to be what the spec requires
3499  return 0;
3500 
3501  // truncate a short frame
3502  if (len < right) right = len;
3503 
3504  f->samples_output += right-left;
3505 
3506  return right - left;
3507 }
3508 
3509 static int vorbis_pump_first_frame(stb_vorbis *f)
3510 {
3511  int len, right, left, res;
3512  res = vorbis_decode_packet(f, &len, &left, &right);
3513  if (res)
3514  vorbis_finish_frame(f, len, left, right);
3515  return res;
3516 }
3517 
3518 #ifndef STB_VORBIS_NO_PUSHDATA_API
3519 static int is_whole_packet_present(stb_vorbis *f)
3520 {
3521  // make sure that we have the packet available before continuing...
3522  // this requires a full ogg parse, but we know we can fetch from f->stream
3523 
3524  // instead of coding this out explicitly, we could save the current read state,
3525  // read the next packet with get8() until end-of-packet, check f->eof, then
3526  // reset the state? but that would be slower, esp. since we'd have over 256 bytes
3527  // of state to restore (primarily the page segment table)
3528 
3529  int s = f->next_seg, first = TRUE;
3530  uint8 *p = f->stream;
3531 
3532  if (s != -1) { // if we're not starting the packet with a 'continue on next page' flag
3533  for (; s < f->segment_count; ++s) {
3534  p += f->segments[s];
3535  if (f->segments[s] < 255) // stop at first short segment
3536  break;
3537  }
3538  // either this continues, or it ends it...
3539  if (s == f->segment_count)
3540  s = -1; // set 'crosses page' flag
3541  if (p > f->stream_end) return error(f, VORBIS_need_more_data);
3542  first = FALSE;
3543  }
3544  for (; s == -1;) {
3545  uint8 *q;
3546  int n;
3547 
3548  // check that we have the page header ready
3549  if (p + 26 >= f->stream_end) return error(f, VORBIS_need_more_data);
3550  // validate the page
3551  if (memcmp(p, ogg_page_header, 4)) return error(f, VORBIS_invalid_stream);
3552  if (p[4] != 0) return error(f, VORBIS_invalid_stream);
3553  if (first) { // the first segment must NOT have 'continued_packet', later ones MUST
3554  if (f->previous_length)
3555  if ((p[5] & PAGEFLAG_continued_packet)) return error(f, VORBIS_invalid_stream);
3556  // if no previous length, we're resynching, so we can come in on a continued-packet,
3557  // which we'll just drop
3558  } else {
3559  if (!(p[5] & PAGEFLAG_continued_packet)) return error(f, VORBIS_invalid_stream);
3560  }
3561  n = p[26]; // segment counts
3562  q = p+27; // q points to segment table
3563  p = q + n; // advance past header
3564  // make sure we've read the segment table
3565  if (p > f->stream_end) return error(f, VORBIS_need_more_data);
3566  for (s=0; s < n; ++s) {
3567  p += q[s];
3568  if (q[s] < 255)
3569  break;
3570  }
3571  if (s == n)
3572  s = -1; // set 'crosses page' flag
3573  if (p > f->stream_end) return error(f, VORBIS_need_more_data);
3574  first = FALSE;
3575  }
3576  return TRUE;
3577 }
3578 #endif // !STB_VORBIS_NO_PUSHDATA_API
3579 
3580 static int start_decoder(vorb *f)
3581 {
3582  uint8 header[6], x,y;
3583  int len,i,j,k, max_submaps = 0;
3584  int longest_floorlist=0;
3585 
3586  // first page, first packet
3587  f->first_decode = TRUE;
3588 
3589  if (!start_page(f)) return FALSE;
3590  // validate page flag
3591  if (!(f->page_flag & PAGEFLAG_first_page)) return error(f, VORBIS_invalid_first_page);
3592  if (f->page_flag & PAGEFLAG_last_page) return error(f, VORBIS_invalid_first_page);
3593  if (f->page_flag & PAGEFLAG_continued_packet) return error(f, VORBIS_invalid_first_page);
3594  // check for expected packet length
3595  if (f->segment_count != 1) return error(f, VORBIS_invalid_first_page);
3596  if (f->segments[0] != 30) {
3597  // check for the Ogg skeleton fishead identifying header to refine our error
3598  if (f->segments[0] == 64 &&
3599  getn(f, header, 6) &&
3600  header[0] == 'f' &&
3601  header[1] == 'i' &&
3602  header[2] == 's' &&
3603  header[3] == 'h' &&
3604  header[4] == 'e' &&
3605  header[5] == 'a' &&
3606  get8(f) == 'd' &&
3607  get8(f) == '\0') return error(f, VORBIS_ogg_skeleton_not_supported);
3608  else
3610  }
3611 
3612  // read packet
3613  // check packet header
3614  if (get8(f) != VORBIS_packet_id) return error(f, VORBIS_invalid_first_page);
3615  if (!getn(f, header, 6)) return error(f, VORBIS_unexpected_eof);
3616  if (!vorbis_validate(header)) return error(f, VORBIS_invalid_first_page);
3617  // vorbis_version
3618  if (get32(f) != 0) return error(f, VORBIS_invalid_first_page);
3619  f->channels = get8(f); if (!f->channels) return error(f, VORBIS_invalid_first_page);
3620  if (f->channels > STB_VORBIS_MAX_CHANNELS) return error(f, VORBIS_too_many_channels);
3621  f->sample_rate = get32(f); if (!f->sample_rate) return error(f, VORBIS_invalid_first_page);
3622  get32(f); // bitrate_maximum
3623  get32(f); // bitrate_nominal
3624  get32(f); // bitrate_minimum
3625  x = get8(f);
3626  {
3627  int log0,log1;
3628  log0 = x & 15;
3629  log1 = x >> 4;
3630  f->blocksize_0 = 1 << log0;
3631  f->blocksize_1 = 1 << log1;
3632  if (log0 < 6 || log0 > 13) return error(f, VORBIS_invalid_setup);
3633  if (log1 < 6 || log1 > 13) return error(f, VORBIS_invalid_setup);
3634  if (log0 > log1) return error(f, VORBIS_invalid_setup);
3635  }
3636 
3637  // framing_flag
3638  x = get8(f);
3639  if (!(x & 1)) return error(f, VORBIS_invalid_first_page);
3640 
3641  // second packet!
3642  if (!start_page(f)) return FALSE;
3643 
3644  if (!start_packet(f)) return FALSE;
3645 
3646  if (!next_segment(f)) return FALSE;
3647 
3648  if (get8_packet(f) != VORBIS_packet_comment) return error(f, VORBIS_invalid_setup);
3649  for (i=0; i < 6; ++i) header[i] = get8_packet(f);
3650  if (!vorbis_validate(header)) return error(f, VORBIS_invalid_setup);
3651  //file vendor
3652  len = get32_packet(f);
3653  f->vendor = (char*)setup_malloc(f, sizeof(char) * (len+1));
3654  if (f->vendor == NULL) return error(f, VORBIS_outofmem);
3655  for(i=0; i < len; ++i) {
3656  f->vendor[i] = get8_packet(f);
3657  }
3658  f->vendor[len] = (char)'\0';
3659  //user comments
3660  f->comment_list_length = get32_packet(f);
3661  f->comment_list = NULL;
3662  if (f->comment_list_length > 0)
3663  {
3664  f->comment_list = (char**) setup_malloc(f, sizeof(char*) * (f->comment_list_length));
3665  if (f->comment_list == NULL) return error(f, VORBIS_outofmem);
3666  }
3667 
3668  for(i=0; i < f->comment_list_length; ++i) {
3669  len = get32_packet(f);
3670  f->comment_list[i] = (char*)setup_malloc(f, sizeof(char) * (len+1));
3671  if (f->comment_list[i] == NULL) return error(f, VORBIS_outofmem);
3672 
3673  for(j=0; j < len; ++j) {
3674  f->comment_list[i][j] = get8_packet(f);
3675  }
3676  f->comment_list[i][len] = (char)'\0';
3677  }
3678 
3679  // framing_flag
3680  x = get8_packet(f);
3681  if (!(x & 1)) return error(f, VORBIS_invalid_setup);
3682 
3683 
3684  skip(f, f->bytes_in_seg);
3685  f->bytes_in_seg = 0;
3686 
3687  do {
3688  len = next_segment(f);
3689  skip(f, len);
3690  f->bytes_in_seg = 0;
3691  } while (len);
3692 
3693  // third packet!
3694  if (!start_packet(f)) return FALSE;
3695 
3696  #ifndef STB_VORBIS_NO_PUSHDATA_API
3697  if (IS_PUSH_MODE(f)) {
3698  if (!is_whole_packet_present(f)) {
3699  // convert error in ogg header to write type
3700  if (f->error == VORBIS_invalid_stream)
3701  f->error = VORBIS_invalid_setup;
3702  return FALSE;
3703  }
3704  }
3705  #endif
3706 
3707  crc32_init(); // always init it, to avoid multithread race conditions
3708 
3709  if (get8_packet(f) != VORBIS_packet_setup) return error(f, VORBIS_invalid_setup);
3710  for (i=0; i < 6; ++i) header[i] = get8_packet(f);
3711  if (!vorbis_validate(header)) return error(f, VORBIS_invalid_setup);
3712 
3713  // codebooks
3714 
3715  f->codebook_count = get_bits(f,8) + 1;
3716  f->codebooks = (Codebook *) setup_malloc(f, sizeof(*f->codebooks) * f->codebook_count);
3717  if (f->codebooks == NULL) return error(f, VORBIS_outofmem);
3718  memset(f->codebooks, 0, sizeof(*f->codebooks) * f->codebook_count);
3719  for (i=0; i < f->codebook_count; ++i) {
3720  uint32 *values;
3721  int ordered, sorted_count;
3722  int total=0;
3723  uint8 *lengths;
3724  Codebook *c = f->codebooks+i;
3725  CHECK(f);
3726  x = get_bits(f, 8); if (x != 0x42) return error(f, VORBIS_invalid_setup);
3727  x = get_bits(f, 8); if (x != 0x43) return error(f, VORBIS_invalid_setup);
3728  x = get_bits(f, 8); if (x != 0x56) return error(f, VORBIS_invalid_setup);
3729  x = get_bits(f, 8);
3730  c->dimensions = (get_bits(f, 8)<<8) + x;
3731  x = get_bits(f, 8);
3732  y = get_bits(f, 8);
3733  c->entries = (get_bits(f, 8)<<16) + (y<<8) + x;
3734  ordered = get_bits(f,1);
3735  c->sparse = ordered ? 0 : get_bits(f,1);
3736 
3737  if (c->dimensions == 0 && c->entries != 0) return error(f, VORBIS_invalid_setup);
3738 
3739  if (c->sparse)
3740  lengths = (uint8 *) setup_temp_malloc(f, c->entries);
3741  else
3742  lengths = c->codeword_lengths = (uint8 *) setup_malloc(f, c->entries);
3743 
3744  if (!lengths) return error(f, VORBIS_outofmem);
3745 
3746  if (ordered) {
3747  int current_entry = 0;
3748  int current_length = get_bits(f,5) + 1;
3749  while (current_entry < c->entries) {
3750  int limit = c->entries - current_entry;
3751  int n = get_bits(f, ilog(limit));
3752  if (current_length >= 32) return error(f, VORBIS_invalid_setup);
3753  if (current_entry + n > (int) c->entries) { return error(f, VORBIS_invalid_setup); }
3754  memset(lengths + current_entry, current_length, n);
3755  current_entry += n;
3756  ++current_length;
3757  }
3758  } else {
3759  for (j=0; j < c->entries; ++j) {
3760  int present = c->sparse ? get_bits(f,1) : 1;
3761  if (present) {
3762  lengths[j] = get_bits(f, 5) + 1;
3763  ++total;
3764  if (lengths[j] == 32)
3765  return error(f, VORBIS_invalid_setup);
3766  } else {
3767  lengths[j] = NO_CODE;
3768  }
3769  }
3770  }
3771 
3772  if (c->sparse && total >= c->entries >> 2) {
3773  // convert sparse items to non-sparse!
3774  if (c->entries > (int) f->setup_temp_memory_required)
3775  f->setup_temp_memory_required = c->entries;
3776 
3777  c->codeword_lengths = (uint8 *) setup_malloc(f, c->entries);
3778  if (c->codeword_lengths == NULL) return error(f, VORBIS_outofmem);
3779  memcpy(c->codeword_lengths, lengths, c->entries);
3780  setup_temp_free(f, lengths, c->entries); // note this is only safe if there have been no intervening temp mallocs!
3781  lengths = c->codeword_lengths;
3782  c->sparse = 0;
3783  }
3784 
3785  // compute the size of the sorted tables
3786  if (c->sparse) {
3787  sorted_count = total;
3788  } else {
3789  sorted_count = 0;
3790  #ifndef STB_VORBIS_NO_HUFFMAN_BINARY_SEARCH
3791  for (j=0; j < c->entries; ++j)
3792  if (lengths[j] > STB_VORBIS_FAST_HUFFMAN_LENGTH && lengths[j] != NO_CODE)
3793  ++sorted_count;
3794  #endif
3795  }
3796 
3797  c->sorted_entries = sorted_count;
3798  values = NULL;
3799 
3800  CHECK(f);
3801  if (!c->sparse) {
3802  c->codewords = (uint32 *) setup_malloc(f, sizeof(c->codewords[0]) * c->entries);
3803  if (!c->codewords) return error(f, VORBIS_outofmem);
3804  } else {
3805  unsigned int size;
3806  if (c->sorted_entries) {
3807  c->codeword_lengths = (uint8 *) setup_malloc(f, c->sorted_entries);
3808  if (!c->codeword_lengths) return error(f, VORBIS_outofmem);
3809  c->codewords = (uint32 *) setup_temp_malloc(f, sizeof(*c->codewords) * c->sorted_entries);
3810  if (!c->codewords) return error(f, VORBIS_outofmem);
3811  values = (uint32 *) setup_temp_malloc(f, sizeof(*values) * c->sorted_entries);
3812  if (!values) return error(f, VORBIS_outofmem);
3813  }
3814  size = c->entries + (sizeof(*c->codewords) + sizeof(*values)) * c->sorted_entries;
3815  if (size > f->setup_temp_memory_required)
3816  f->setup_temp_memory_required = size;
3817  }
3818 
3819  if (!compute_codewords(c, lengths, c->entries, values)) {
3820  if (c->sparse) setup_temp_free(f, values, 0);
3821  return error(f, VORBIS_invalid_setup);
3822  }
3823 
3824  if (c->sorted_entries) {
3825  // allocate an extra slot for sentinels
3826  c->sorted_codewords = (uint32 *) setup_malloc(f, sizeof(*c->sorted_codewords) * (c->sorted_entries+1));
3827  if (c->sorted_codewords == NULL) return error(f, VORBIS_outofmem);
3828  // allocate an extra slot at the front so that c->sorted_values[-1] is defined
3829  // so that we can catch that case without an extra if
3830  c->sorted_values = ( int *) setup_malloc(f, sizeof(*c->sorted_values ) * (c->sorted_entries+1));
3831  if (c->sorted_values == NULL) return error(f, VORBIS_outofmem);
3832  ++c->sorted_values;
3833  c->sorted_values[-1] = -1;
3834  compute_sorted_huffman(c, lengths, values);
3835  }
3836 
3837  if (c->sparse) {
3838  setup_temp_free(f, values, sizeof(*values)*c->sorted_entries);
3839  setup_temp_free(f, c->codewords, sizeof(*c->codewords)*c->sorted_entries);
3840  setup_temp_free(f, lengths, c->entries);
3841  c->codewords = NULL;
3842  }
3843 
3844  compute_accelerated_huffman(c);
3845 
3846  CHECK(f);
3847  c->lookup_type = get_bits(f, 4);
3848  if (c->lookup_type > 2) return error(f, VORBIS_invalid_setup);
3849  if (c->lookup_type > 0) {
3850  uint16 *mults;
3851  c->minimum_value = float32_unpack(get_bits(f, 32));
3852  c->delta_value = float32_unpack(get_bits(f, 32));
3853  c->value_bits = get_bits(f, 4)+1;
3854  c->sequence_p = get_bits(f,1);
3855  if (c->lookup_type == 1) {
3856  int values = lookup1_values(c->entries, c->dimensions);
3857  if (values < 0) return error(f, VORBIS_invalid_setup);
3858  c->lookup_values = (uint32) values;
3859  } else {
3860  c->lookup_values = c->entries * c->dimensions;
3861  }
3862  if (c->lookup_values == 0) return error(f, VORBIS_invalid_setup);
3863  mults = (uint16 *) setup_temp_malloc(f, sizeof(mults[0]) * c->lookup_values);
3864  if (mults == NULL) return error(f, VORBIS_outofmem);
3865  for (j=0; j < (int) c->lookup_values; ++j) {
3866  int q = get_bits(f, c->value_bits);
3867  if (q == EOP) { setup_temp_free(f,mults,sizeof(mults[0])*c->lookup_values); return error(f, VORBIS_invalid_setup); }
3868  mults[j] = q;
3869  }
3870 
3871 #ifndef STB_VORBIS_DIVIDES_IN_CODEBOOK
3872  if (c->lookup_type == 1) {
3873  int len, sparse = c->sparse;
3874  float last=0;
3875  // pre-expand the lookup1-style multiplicands, to avoid a divide in the inner loop
3876  if (sparse) {
3877  if (c->sorted_entries == 0) goto skip;
3878  c->multiplicands = (codetype *) setup_malloc(f, sizeof(c->multiplicands[0]) * c->sorted_entries * c->dimensions);
3879  } else
3880  c->multiplicands = (codetype *) setup_malloc(f, sizeof(c->multiplicands[0]) * c->entries * c->dimensions);
3881  if (c->multiplicands == NULL) { setup_temp_free(f,mults,sizeof(mults[0])*c->lookup_values); return error(f, VORBIS_outofmem); }
3882  len = sparse ? c->sorted_entries : c->entries;
3883  for (j=0; j < len; ++j) {
3884  unsigned int z = sparse ? c->sorted_values[j] : j;
3885  unsigned int div=1;
3886  for (k=0; k < c->dimensions; ++k) {
3887  int off = (z / div) % c->lookup_values;
3888  float val = mults[off]*c->delta_value + c->minimum_value + last;
3889  c->multiplicands[j*c->dimensions + k] = val;
3890  if (c->sequence_p)
3891  last = val;
3892  if (k+1 < c->dimensions) {
3893  if (div > UINT_MAX / (unsigned int) c->lookup_values) {
3894  setup_temp_free(f, mults,sizeof(mults[0])*c->lookup_values);
3895  return error(f, VORBIS_invalid_setup);
3896  }
3897  div *= c->lookup_values;
3898  }
3899  }
3900  }
3901  c->lookup_type = 2;
3902  }
3903  else
3904 #endif
3905  {
3906  float last=0;
3907  CHECK(f);
3908  c->multiplicands = (codetype *) setup_malloc(f, sizeof(c->multiplicands[0]) * c->lookup_values);
3909  if (c->multiplicands == NULL) { setup_temp_free(f, mults,sizeof(mults[0])*c->lookup_values); return error(f, VORBIS_outofmem); }
3910  for (j=0; j < (int) c->lookup_values; ++j) {
3911  float val = mults[j] * c->delta_value + c->minimum_value + last;
3912  c->multiplicands[j] = val;
3913  if (c->sequence_p)
3914  last = val;
3915  }
3916  }
3917 #ifndef STB_VORBIS_DIVIDES_IN_CODEBOOK
3918  skip:;
3919 #endif
3920  setup_temp_free(f, mults, sizeof(mults[0])*c->lookup_values);
3921 
3922  CHECK(f);
3923  }
3924  CHECK(f);
3925  }
3926 
3927  // time domain transfers (notused)
3928 
3929  x = get_bits(f, 6) + 1;
3930  for (i=0; i < x; ++i) {
3931  uint32 z = get_bits(f, 16);
3932  if (z != 0) return error(f, VORBIS_invalid_setup);
3933  }
3934 
3935  // Floors
3936  f->floor_count = get_bits(f, 6)+1;
3937  f->floor_config = (Floor *) setup_malloc(f, f->floor_count * sizeof(*f->floor_config));
3938  if (f->floor_config == NULL) return error(f, VORBIS_outofmem);
3939  for (i=0; i < f->floor_count; ++i) {
3940  f->floor_types[i] = get_bits(f, 16);
3941  if (f->floor_types[i] > 1) return error(f, VORBIS_invalid_setup);
3942  if (f->floor_types[i] == 0) {
3943  Floor0 *g = &f->floor_config[i].floor0;
3944  g->order = get_bits(f,8);
3945  g->rate = get_bits(f,16);
3946  g->bark_map_size = get_bits(f,16);
3947  g->amplitude_bits = get_bits(f,6);
3948  g->amplitude_offset = get_bits(f,8);
3949  g->number_of_books = get_bits(f,4) + 1;
3950  for (j=0; j < g->number_of_books; ++j)
3951  g->book_list[j] = get_bits(f,8);
3953  } else {
3954  stbv__floor_ordering p[31*8+2];
3955  Floor1 *g = &f->floor_config[i].floor1;
3956  int max_class = -1;
3957  g->partitions = get_bits(f, 5);
3958  for (j=0; j < g->partitions; ++j) {
3959  g->partition_class_list[j] = get_bits(f, 4);
3960  if (g->partition_class_list[j] > max_class)
3961  max_class = g->partition_class_list[j];
3962  }
3963  for (j=0; j <= max_class; ++j) {
3964  g->class_dimensions[j] = get_bits(f, 3)+1;
3965  g->class_subclasses[j] = get_bits(f, 2);
3966  if (g->class_subclasses[j]) {
3967  g->class_masterbooks[j] = get_bits(f, 8);
3968  if (g->class_masterbooks[j] >= f->codebook_count) return error(f, VORBIS_invalid_setup);
3969  }
3970  for (k=0; k < 1 << g->class_subclasses[j]; ++k) {
3971  g->subclass_books[j][k] = (int16)get_bits(f,8)-1;
3972  if (g->subclass_books[j][k] >= f->codebook_count) return error(f, VORBIS_invalid_setup);
3973  }
3974  }
3975  g->floor1_multiplier = get_bits(f,2)+1;
3976  g->rangebits = get_bits(f,4);
3977  g->Xlist[0] = 0;
3978  g->Xlist[1] = 1 << g->rangebits;
3979  g->values = 2;
3980  for (j=0; j < g->partitions; ++j) {
3981  int c = g->partition_class_list[j];
3982  for (k=0; k < g->class_dimensions[c]; ++k) {
3983  g->Xlist[g->values] = get_bits(f, g->rangebits);
3984  ++g->values;
3985  }
3986  }
3987  // precompute the sorting
3988  for (j=0; j < g->values; ++j) {
3989  p[j].x = g->Xlist[j];
3990  p[j].id = j;
3991  }
3992  qsort(p, g->values, sizeof(p[0]), point_compare);
3993  for (j=0; j < g->values-1; ++j)
3994  if (p[j].x == p[j+1].x)
3995  return error(f, VORBIS_invalid_setup);
3996  for (j=0; j < g->values; ++j)
3997  g->sorted_order[j] = (uint8) p[j].id;
3998  // precompute the neighbors
3999  for (j=2; j < g->values; ++j) {
4000  int low = 0,hi = 0;
4001  neighbors(g->Xlist, j, &low,&hi);
4002  g->neighbors[j][0] = low;
4003  g->neighbors[j][1] = hi;
4004  }
4005 
4006  if (g->values > longest_floorlist)
4007  longest_floorlist = g->values;
4008  }
4009  }
4010 
4011  // Residue
4012  f->residue_count = get_bits(f, 6)+1;
4013  f->residue_config = (Residue *) setup_malloc(f, f->residue_count * sizeof(f->residue_config[0]));
4014  if (f->residue_config == NULL) return error(f, VORBIS_outofmem);
4015  memset(f->residue_config, 0, f->residue_count * sizeof(f->residue_config[0]));
4016  for (i=0; i < f->residue_count; ++i) {
4017  uint8 residue_cascade[64];
4018  Residue *r = f->residue_config+i;
4019  f->residue_types[i] = get_bits(f, 16);
4020  if (f->residue_types[i] > 2) return error(f, VORBIS_invalid_setup);
4021  r->begin = get_bits(f, 24);
4022  r->end = get_bits(f, 24);
4023  if (r->end < r->begin) return error(f, VORBIS_invalid_setup);
4024  r->part_size = get_bits(f,24)+1;
4025  r->classifications = get_bits(f,6)+1;
4026  r->classbook = get_bits(f,8);
4027  if (r->classbook >= f->codebook_count) return error(f, VORBIS_invalid_setup);
4028  for (j=0; j < r->classifications; ++j) {
4029  uint8 high_bits=0;
4030  uint8 low_bits=get_bits(f,3);
4031  if (get_bits(f,1))
4032  high_bits = get_bits(f,5);
4033  residue_cascade[j] = high_bits*8 + low_bits;
4034  }
4035  r->residue_books = (short (*)[8]) setup_malloc(f, sizeof(r->residue_books[0]) * r->classifications);
4036  if (r->residue_books == NULL) return error(f, VORBIS_outofmem);
4037  for (j=0; j < r->classifications; ++j) {
4038  for (k=0; k < 8; ++k) {
4039  if (residue_cascade[j] & (1 << k)) {
4040  r->residue_books[j][k] = get_bits(f, 8);
4041  if (r->residue_books[j][k] >= f->codebook_count) return error(f, VORBIS_invalid_setup);
4042  } else {
4043  r->residue_books[j][k] = -1;
4044  }
4045  }
4046  }
4047  // precompute the classifications[] array to avoid inner-loop mod/divide
4048  // call it 'classdata' since we already have r->classifications
4049  r->classdata = (uint8 **) setup_malloc(f, sizeof(*r->classdata) * f->codebooks[r->classbook].entries);
4050  if (!r->classdata) return error(f, VORBIS_outofmem);
4051  memset(r->classdata, 0, sizeof(*r->classdata) * f->codebooks[r->classbook].entries);
4052  for (j=0; j < f->codebooks[r->classbook].entries; ++j) {
4053  int classwords = f->codebooks[r->classbook].dimensions;
4054  int temp = j;
4055  r->classdata[j] = (uint8 *) setup_malloc(f, sizeof(r->classdata[j][0]) * classwords);
4056  if (r->classdata[j] == NULL) return error(f, VORBIS_outofmem);
4057  for (k=classwords-1; k >= 0; --k) {
4058  r->classdata[j][k] = temp % r->classifications;
4059  temp /= r->classifications;
4060  }
4061  }
4062  }
4063 
4064  f->mapping_count = get_bits(f,6)+1;
4065  f->mapping = (Mapping *) setup_malloc(f, f->mapping_count * sizeof(*f->mapping));
4066  if (f->mapping == NULL) return error(f, VORBIS_outofmem);
4067  memset(f->mapping, 0, f->mapping_count * sizeof(*f->mapping));
4068  for (i=0; i < f->mapping_count; ++i) {
4069  Mapping *m = f->mapping + i;
4070  int mapping_type = get_bits(f,16);
4071  if (mapping_type != 0) return error(f, VORBIS_invalid_setup);
4072  m->chan = (MappingChannel *) setup_malloc(f, f->channels * sizeof(*m->chan));
4073  if (m->chan == NULL) return error(f, VORBIS_outofmem);
4074  if (get_bits(f,1))
4075  m->submaps = get_bits(f,4)+1;
4076  else
4077  m->submaps = 1;
4078  if (m->submaps > max_submaps)
4079  max_submaps = m->submaps;
4080  if (get_bits(f,1)) {
4081  m->coupling_steps = get_bits(f,8)+1;
4082  if (m->coupling_steps > f->channels) return error(f, VORBIS_invalid_setup);
4083  for (k=0; k < m->coupling_steps; ++k) {
4084  m->chan[k].magnitude = get_bits(f, ilog(f->channels-1));
4085  m->chan[k].angle = get_bits(f, ilog(f->channels-1));
4086  if (m->chan[k].magnitude >= f->channels) return error(f, VORBIS_invalid_setup);
4087  if (m->chan[k].angle >= f->channels) return error(f, VORBIS_invalid_setup);
4088  if (m->chan[k].magnitude == m->chan[k].angle) return error(f, VORBIS_invalid_setup);
4089  }
4090  } else
4091  m->coupling_steps = 0;
4092 
4093  // reserved field
4094  if (get_bits(f,2)) return error(f, VORBIS_invalid_setup);
4095  if (m->submaps > 1) {
4096  for (j=0; j < f->channels; ++j) {
4097  m->chan[j].mux = get_bits(f, 4);
4098  if (m->chan[j].mux >= m->submaps) return error(f, VORBIS_invalid_setup);
4099  }
4100  } else
4101  // @SPECIFICATION: this case is missing from the spec
4102  for (j=0; j < f->channels; ++j)
4103  m->chan[j].mux = 0;
4104 
4105  for (j=0; j < m->submaps; ++j) {
4106  get_bits(f,8); // discard
4107  m->submap_floor[j] = get_bits(f,8);
4108  m->submap_residue[j] = get_bits(f,8);
4109  if (m->submap_floor[j] >= f->floor_count) return error(f, VORBIS_invalid_setup);
4110  if (m->submap_residue[j] >= f->residue_count) return error(f, VORBIS_invalid_setup);
4111  }
4112  }
4113 
4114  // Modes
4115  f->mode_count = get_bits(f, 6)+1;
4116  for (i=0; i < f->mode_count; ++i) {
4117  Mode *m = f->mode_config+i;
4118  m->blockflag = get_bits(f,1);
4119  m->windowtype = get_bits(f,16);
4120  m->transformtype = get_bits(f,16);
4121  m->mapping = get_bits(f,8);
4122  if (m->windowtype != 0) return error(f, VORBIS_invalid_setup);
4123  if (m->transformtype != 0) return error(f, VORBIS_invalid_setup);
4124  if (m->mapping >= f->mapping_count) return error(f, VORBIS_invalid_setup);
4125  }
4126 
4127  flush_packet(f);
4128 
4129  f->previous_length = 0;
4130 
4131  for (i=0; i < f->channels; ++i) {
4132  f->channel_buffers[i] = (float *) setup_malloc(f, sizeof(float) * f->blocksize_1);
4133  f->previous_window[i] = (float *) setup_malloc(f, sizeof(float) * f->blocksize_1/2);
4134  f->finalY[i] = (int16 *) setup_malloc(f, sizeof(int16) * longest_floorlist);
4135  if (f->channel_buffers[i] == NULL || f->previous_window[i] == NULL || f->finalY[i] == NULL) return error(f, VORBIS_outofmem);
4136  memset(f->channel_buffers[i], 0, sizeof(float) * f->blocksize_1);
4137  #ifdef STB_VORBIS_NO_DEFER_FLOOR
4138  f->floor_buffers[i] = (float *) setup_malloc(f, sizeof(float) * f->blocksize_1/2);
4139  if (f->floor_buffers[i] == NULL) return error(f, VORBIS_outofmem);
4140  #endif
4141  }
4142 
4143  if (!init_blocksize(f, 0, f->blocksize_0)) return FALSE;
4144  if (!init_blocksize(f, 1, f->blocksize_1)) return FALSE;
4145  f->blocksize[0] = f->blocksize_0;
4146  f->blocksize[1] = f->blocksize_1;
4147 
4148 #ifdef STB_VORBIS_DIVIDE_TABLE
4149  if (integer_divide_table[1][1]==0)
4150  for (i=0; i < DIVTAB_NUMER; ++i)
4151  for (j=1; j < DIVTAB_DENOM; ++j)
4152  integer_divide_table[i][j] = i / j;
4153 #endif
4154 
4155  // compute how much temporary memory is needed
4156 
4157  // 1.
4158  {
4159  uint32 imdct_mem = (f->blocksize_1 * sizeof(float) >> 1);
4160  uint32 classify_mem;
4161  int i,max_part_read=0;
4162  for (i=0; i < f->residue_count; ++i) {
4163  Residue *r = f->residue_config + i;
4164  unsigned int actual_size = f->blocksize_1 / 2;
4165  unsigned int limit_r_begin = r->begin < actual_size ? r->begin : actual_size;
4166  unsigned int limit_r_end = r->end < actual_size ? r->end : actual_size;
4167  int n_read = limit_r_end - limit_r_begin;
4168  int part_read = n_read / r->part_size;
4169  if (part_read > max_part_read)
4170  max_part_read = part_read;
4171  }
4172  #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE
4173  classify_mem = f->channels * (sizeof(void*) + max_part_read * sizeof(uint8 *));
4174  #else
4175  classify_mem = f->channels * (sizeof(void*) + max_part_read * sizeof(int *));
4176  #endif
4177 
4178  // maximum reasonable partition size is f->blocksize_1
4179 
4180  f->temp_memory_required = classify_mem;
4181  if (imdct_mem > f->temp_memory_required)
4182  f->temp_memory_required = imdct_mem;
4183  }
4184 
4185 
4186  if (f->alloc.alloc_buffer) {
4187  assert(f->temp_offset == f->alloc.alloc_buffer_length_in_bytes);
4188  // check if there's enough temp memory so we don't error later
4189  if (f->setup_offset + sizeof(*f) + f->temp_memory_required > (unsigned) f->temp_offset)
4190  return error(f, VORBIS_outofmem);
4191  }
4192 
4193  // @TODO: stb_vorbis_seek_start expects first_audio_page_offset to point to a page
4194  // without PAGEFLAG_continued_packet, so this either points to the first page, or
4195  // the page after the end of the headers. It might be cleaner to point to a page
4196  // in the middle of the headers, when that's the page where the first audio packet
4197  // starts, but we'd have to also correctly skip the end of any continued packet in
4198  // stb_vorbis_seek_start.
4199  if (f->next_seg == -1) {
4200  f->first_audio_page_offset = stb_vorbis_get_file_offset(f);
4201  } else {
4202  f->first_audio_page_offset = 0;
4203  }
4204 
4205  return TRUE;
4206 }
4207 
4208 static void vorbis_deinit(stb_vorbis *p)
4209 {
4210  int i,j;
4211 
4212  setup_free(p, p->vendor);
4213  for (i=0; i < p->comment_list_length; ++i) {
4214  setup_free(p, p->comment_list[i]);
4215  }
4216  setup_free(p, p->comment_list);
4217 
4218  if (p->residue_config) {
4219  for (i=0; i < p->residue_count; ++i) {
4220  Residue *r = p->residue_config+i;
4221  if (r->classdata) {
4222  for (j=0; j < p->codebooks[r->classbook].entries; ++j)
4223  setup_free(p, r->classdata[j]);
4224  setup_free(p, r->classdata);
4225  }
4226  setup_free(p, r->residue_books);
4227  }
4228  }
4229 
4230  if (p->codebooks) {
4231  CHECK(p);
4232  for (i=0; i < p->codebook_count; ++i) {
4233  Codebook *c = p->codebooks + i;
4234  setup_free(p, c->codeword_lengths);
4235  setup_free(p, c->multiplicands);
4236  setup_free(p, c->codewords);
4237  setup_free(p, c->sorted_codewords);
4238  // c->sorted_values[-1] is the first entry in the array
4239  setup_free(p, c->sorted_values ? c->sorted_values-1 : NULL);
4240  }
4241  setup_free(p, p->codebooks);
4242  }
4243  setup_free(p, p->floor_config);
4244  setup_free(p, p->residue_config);
4245  if (p->mapping) {
4246  for (i=0; i < p->mapping_count; ++i)
4247  setup_free(p, p->mapping[i].chan);
4248  setup_free(p, p->mapping);
4249  }
4250  CHECK(p);
4251  for (i=0; i < p->channels && i < STB_VORBIS_MAX_CHANNELS; ++i) {
4252  setup_free(p, p->channel_buffers[i]);
4253  setup_free(p, p->previous_window[i]);
4254  #ifdef STB_VORBIS_NO_DEFER_FLOOR
4255  setup_free(p, p->floor_buffers[i]);
4256  #endif
4257  setup_free(p, p->finalY[i]);
4258  }
4259  for (i=0; i < 2; ++i) {
4260  setup_free(p, p->A[i]);
4261  setup_free(p, p->B[i]);
4262  setup_free(p, p->C[i]);
4263  setup_free(p, p->window[i]);
4264  setup_free(p, p->bit_reverse[i]);
4265  }
4266  #ifndef STB_VORBIS_NO_STDIO
4267  if (p->close_on_free) fclose(p->f);
4268  #endif
4269 }
4270 
4272 {
4273  if (p == NULL) return;
4274  vorbis_deinit(p);
4275  setup_free(p,p);
4276 }
4277 
4278 static void vorbis_init(stb_vorbis *p, const stb_vorbis_alloc *z)
4279 {
4280  memset(p, 0, sizeof(*p)); // NULL out all malloc'd pointers to start
4281  if (z) {
4282  p->alloc = *z;
4285  }
4286  p->eof = 0;
4287  p->error = VORBIS__no_error;
4288  p->stream = NULL;
4289  p->codebooks = NULL;
4290  p->page_crc_tests = -1;
4291  #ifndef STB_VORBIS_NO_STDIO
4292  p->close_on_free = FALSE;
4293  p->f = NULL;
4294  #endif
4295 }
4296 
4298 {
4299  if (f->current_loc_valid)
4300  return f->current_loc;
4301  else
4302  return -1;
4303 }
4304 
4306 {
4307  stb_vorbis_info d;
4308  d.channels = f->channels;
4309  d.sample_rate = f->sample_rate;
4310  d.setup_memory_required = f->setup_memory_required;
4311  d.setup_temp_memory_required = f->setup_temp_memory_required;
4312  d.temp_memory_required = f->temp_memory_required;
4313  d.max_frame_size = f->blocksize_1 >> 1;
4314  return d;
4315 }
4316 
4318 {
4320  d.vendor = f->vendor;
4321  d.comment_list_length = f->comment_list_length;
4322  d.comment_list = f->comment_list;
4323  return d;
4324 }
4325 
4327 {
4328  int e = f->error;
4329  f->error = VORBIS__no_error;
4330  return e;
4331 }
4332 
4333 static stb_vorbis * vorbis_alloc(stb_vorbis *f)
4334 {
4335  stb_vorbis *p = (stb_vorbis *) setup_malloc(f, sizeof(*p));
4336  return p;
4337 }
4338 
4339 #ifndef STB_VORBIS_NO_PUSHDATA_API
4340 
4342 {
4343  f->previous_length = 0;
4344  f->page_crc_tests = 0;
4345  f->discard_samples_deferred = 0;
4346  f->current_loc_valid = FALSE;
4347  f->first_decode = FALSE;
4348  f->samples_output = 0;
4349  f->channel_buffer_start = 0;
4350  f->channel_buffer_end = 0;
4351 }
4352 
4353 static int vorbis_search_for_page_pushdata(vorb *f, uint8 *data, int data_len)
4354 {
4355  int i,n;
4356  for (i=0; i < f->page_crc_tests; ++i)
4357  f->scan[i].bytes_done = 0;
4358 
4359  // if we have room for more scans, search for them first, because
4360  // they may cause us to stop early if their header is incomplete
4361  if (f->page_crc_tests < STB_VORBIS_PUSHDATA_CRC_COUNT) {
4362  if (data_len < 4) return 0;
4363  data_len -= 3; // need to look for 4-byte sequence, so don't miss
4364  // one that straddles a boundary
4365  for (i=0; i < data_len; ++i) {
4366  if (data[i] == 0x4f) {
4367  if (0==memcmp(data+i, ogg_page_header, 4)) {
4368  int j,len;
4369  uint32 crc;
4370  // make sure we have the whole page header
4371  if (i+26 >= data_len || i+27+data[i+26] >= data_len) {
4372  // only read up to this page start, so hopefully we'll
4373  // have the whole page header start next time
4374  data_len = i;
4375  break;
4376  }
4377  // ok, we have it all; compute the length of the page
4378  len = 27 + data[i+26];
4379  for (j=0; j < data[i+26]; ++j)
4380  len += data[i+27+j];
4381  // scan everything up to the embedded crc (which we must 0)
4382  crc = 0;
4383  for (j=0; j < 22; ++j)
4384  crc = crc32_update(crc, data[i+j]);
4385  // now process 4 0-bytes
4386  for ( ; j < 26; ++j)
4387  crc = crc32_update(crc, 0);
4388  // len is the total number of bytes we need to scan
4389  n = f->page_crc_tests++;
4390  f->scan[n].bytes_left = len-j;
4391  f->scan[n].crc_so_far = crc;
4392  f->scan[n].goal_crc = data[i+22] + (data[i+23] << 8) + (data[i+24]<<16) + (data[i+25]<<24);
4393  // if the last frame on a page is continued to the next, then
4394  // we can't recover the sample_loc immediately
4395  if (data[i+27+data[i+26]-1] == 255)
4396  f->scan[n].sample_loc = ~0;
4397  else
4398  f->scan[n].sample_loc = data[i+6] + (data[i+7] << 8) + (data[i+ 8]<<16) + (data[i+ 9]<<24);
4399  f->scan[n].bytes_done = i+j;
4400  if (f->page_crc_tests == STB_VORBIS_PUSHDATA_CRC_COUNT)
4401  break;
4402  // keep going if we still have room for more
4403  }
4404  }
4405  }
4406  }
4407 
4408  for (i=0; i < f->page_crc_tests;) {
4409  uint32 crc;
4410  int j;
4411  int n = f->scan[i].bytes_done;
4412  int m = f->scan[i].bytes_left;
4413  if (m > data_len - n) m = data_len - n;
4414  // m is the bytes to scan in the current chunk
4415  crc = f->scan[i].crc_so_far;
4416  for (j=0; j < m; ++j)
4417  crc = crc32_update(crc, data[n+j]);
4418  f->scan[i].bytes_left -= m;
4419  f->scan[i].crc_so_far = crc;
4420  if (f->scan[i].bytes_left == 0) {
4421  // does it match?
4422  if (f->scan[i].crc_so_far == f->scan[i].goal_crc) {
4423  // Houston, we have page
4424  data_len = n+m; // consumption amount is wherever that scan ended
4425  f->page_crc_tests = -1; // drop out of page scan mode
4426  f->previous_length = 0; // decode-but-don't-output one frame
4427  f->next_seg = -1; // start a new page
4428  f->current_loc = f->scan[i].sample_loc; // set the current sample location
4429  // to the amount we'd have decoded had we decoded this page
4430  f->current_loc_valid = f->current_loc != ~0U;
4431  return data_len;
4432  }
4433  // delete entry
4434  f->scan[i] = f->scan[--f->page_crc_tests];
4435  } else {
4436  ++i;
4437  }
4438  }
4439 
4440  return data_len;
4441 }
4442 
4443 // return value: number of bytes we used
4445  stb_vorbis *f, // the file we're decoding
4446  const uint8 *data, int data_len, // the memory available for decoding
4447  int *channels, // place to write number of float * buffers
4448  float ***output, // place to write float ** array of float * buffers
4449  int *samples // place to write number of output samples
4450  )
4451 {
4452  int i;
4453  int len,right,left;
4454 
4456 
4457  if (f->page_crc_tests >= 0) {
4458  *samples = 0;
4459  return vorbis_search_for_page_pushdata(f, (uint8 *) data, data_len);
4460  }
4461 
4462  f->stream = (uint8 *) data;
4463  f->stream_end = (uint8 *) data + data_len;
4464  f->error = VORBIS__no_error;
4465 
4466  // check that we have the entire packet in memory
4467  if (!is_whole_packet_present(f)) {
4468  *samples = 0;
4469  return 0;
4470  }
4471 
4472  if (!vorbis_decode_packet(f, &len, &left, &right)) {
4473  // save the actual error we encountered
4474  enum STBVorbisError error = f->error;
4475  if (error == VORBIS_bad_packet_type) {
4476  // flush and resynch
4477  f->error = VORBIS__no_error;
4478  while (get8_packet(f) != EOP)
4479  if (f->eof) break;
4480  *samples = 0;
4481  return (int) (f->stream - data);
4482  }
4484  if (f->previous_length == 0) {
4485  // we may be resynching, in which case it's ok to hit one
4486  // of these; just discard the packet
4487  f->error = VORBIS__no_error;
4488  while (get8_packet(f) != EOP)
4489  if (f->eof) break;
4490  *samples = 0;
4491  return (int) (f->stream - data);
4492  }
4493  }
4494  // if we get an error while parsing, what to do?
4495  // well, it DEFINITELY won't work to continue from where we are!
4497  // restore the error that actually made us bail
4498  f->error = error;
4499  *samples = 0;
4500  return 1;
4501  }
4502 
4503  // success!
4504  len = vorbis_finish_frame(f, len, left, right);
4505  for (i=0; i < f->channels; ++i)
4506  f->outputs[i] = f->channel_buffers[i] + left;
4507 
4508  if (channels) *channels = f->channels;
4509  *samples = len;
4510  *output = f->outputs;
4511  return (int) (f->stream - data);
4512 }
4513 
4515  const unsigned char *data, int data_len, // the memory available for decoding
4516  int *data_used, // only defined if result is not NULL
4517  int *error, const stb_vorbis_alloc *alloc)
4518 {
4519  stb_vorbis *f, p;
4520  vorbis_init(&p, alloc);
4521  p.stream = (uint8 *) data;
4522  p.stream_end = (uint8 *) data + data_len;
4523  p.push_mode = TRUE;
4524  if (!start_decoder(&p)) {
4525  if (p.eof)
4527  else
4528  *error = p.error;
4529  vorbis_deinit(&p);
4530  return NULL;
4531  }
4532  f = vorbis_alloc(&p);
4533  if (f) {
4534  *f = p;
4535  *data_used = (int) (f->stream - data);
4536  *error = 0;
4537  return f;
4538  } else {
4539  vorbis_deinit(&p);
4540  return NULL;
4541  }
4542 }
4543 #endif // STB_VORBIS_NO_PUSHDATA_API
4544 
4546 {
4547  #ifndef STB_VORBIS_NO_PUSHDATA_API
4548  if (f->push_mode) return 0;
4549  #endif
4550  if (USE_MEMORY(f)) return (unsigned int) (f->stream - f->stream_start);
4551  #ifndef STB_VORBIS_NO_STDIO
4552  return (unsigned int) (ftell(f->f) - f->f_start);
4553  #endif
4554 }
4555 
4556 #ifndef STB_VORBIS_NO_PULLDATA_API
4557 //
4558 // DATA-PULLING API
4559 //
4560 
4561 static uint32 vorbis_find_page(stb_vorbis *f, uint32 *end, uint32 *last)
4562 {
4563  for(;;) {
4564  int n;
4565  if (f->eof) return 0;
4566  n = get8(f);
4567  if (n == 0x4f) { // page header candidate
4568  unsigned int retry_loc = stb_vorbis_get_file_offset(f);
4569  int i;
4570  // check if we're off the end of a file_section stream
4571  if (retry_loc - 25 > f->stream_len)
4572  return 0;
4573  // check the rest of the header
4574  for (i=1; i < 4; ++i)
4575  if (get8(f) != ogg_page_header[i])
4576  break;
4577  if (f->eof) return 0;
4578  if (i == 4) {
4579  uint8 header[27];
4580  uint32 i, crc, goal, len;
4581  for (i=0; i < 4; ++i)
4582  header[i] = ogg_page_header[i];
4583  for (; i < 27; ++i)
4584  header[i] = get8(f);
4585  if (f->eof) return 0;
4586  if (header[4] != 0) goto invalid;
4587  goal = header[22] + (header[23] << 8) + (header[24]<<16) + ((uint32)header[25]<<24);
4588  for (i=22; i < 26; ++i)
4589  header[i] = 0;
4590  crc = 0;
4591  for (i=0; i < 27; ++i)
4592  crc = crc32_update(crc, header[i]);
4593  len = 0;
4594  for (i=0; i < header[26]; ++i) {
4595  int s = get8(f);
4596  crc = crc32_update(crc, s);
4597  len += s;
4598  }
4599  if (len && f->eof) return 0;
4600  for (i=0; i < len; ++i)
4601  crc = crc32_update(crc, get8(f));
4602  // finished parsing probable page
4603  if (crc == goal) {
4604  // we could now check that it's either got the last
4605  // page flag set, OR it's followed by the capture
4606  // pattern, but I guess TECHNICALLY you could have
4607  // a file with garbage between each ogg page and recover
4608  // from it automatically? So even though that paranoia
4609  // might decrease the chance of an invalid decode by
4610  // another 2^32, not worth it since it would hose those
4611  // invalid-but-useful files?
4612  if (end)
4613  *end = stb_vorbis_get_file_offset(f);
4614  if (last) {
4615  if (header[5] & 0x04)
4616  *last = 1;
4617  else
4618  *last = 0;
4619  }
4620  set_file_offset(f, retry_loc-1);
4621  return 1;
4622  }
4623  }
4624  invalid:
4625  // not a valid page, so rewind and look for next one
4626  set_file_offset(f, retry_loc);
4627  }
4628  }
4629 }
4630 
4631 
4632 #define SAMPLE_unknown 0xffffffff
4633 
4634 // seeking is implemented with a binary search, which narrows down the range to
4635 // 64K, before using a linear search (because finding the synchronization
4636 // pattern can be expensive, and the chance we'd find the end page again is
4637 // relatively high for small ranges)
4638 //
4639 // two initial interpolation-style probes are used at the start of the search
4640 // to try to bound either side of the binary search sensibly, while still
4641 // working in O(log n) time if they fail.
4642 
4643 static int get_seek_page_info(stb_vorbis *f, ProbedPage *z)
4644 {
4645  uint8 header[27], lacing[255];
4646  int i,len;
4647 
4648  // record where the page starts
4650 
4651  // parse the header
4652  getn(f, header, 27);
4653  if (header[0] != 'O' || header[1] != 'g' || header[2] != 'g' || header[3] != 'S')
4654  return 0;
4655  getn(f, lacing, header[26]);
4656 
4657  // determine the length of the payload
4658  len = 0;
4659  for (i=0; i < header[26]; ++i)
4660  len += lacing[i];
4661 
4662  // this implies where the page ends
4663  z->page_end = z->page_start + 27 + header[26] + len;
4664 
4665  // read the last-decoded sample out of the data
4666  z->last_decoded_sample = header[6] + (header[7] << 8) + (header[8] << 16) + (header[9] << 24);
4667 
4668  // restore file state to where we were
4669  set_file_offset(f, z->page_start);
4670  return 1;
4671 }
4672 
4673 // rarely used function to seek back to the preceding page while finding the
4674 // start of a packet
4675 static int go_to_page_before(stb_vorbis *f, unsigned int limit_offset)
4676 {
4677  unsigned int previous_safe, end;
4678 
4679  // now we want to seek back 64K from the limit
4680  if (limit_offset >= 65536 && limit_offset-65536 >= f->first_audio_page_offset)
4681  previous_safe = limit_offset - 65536;
4682  else
4683  previous_safe = f->first_audio_page_offset;
4684 
4685  set_file_offset(f, previous_safe);
4686 
4687  while (vorbis_find_page(f, &end, NULL)) {
4688  if (end >= limit_offset && stb_vorbis_get_file_offset(f) < limit_offset)
4689  return 1;
4690  set_file_offset(f, end);
4691  }
4692 
4693  return 0;
4694 }
4695 
4696 // implements the search logic for finding a page and starting decoding. if
4697 // the function succeeds, current_loc_valid will be true and current_loc will
4698 // be less than or equal to the provided sample number (the closer the
4699 // better).
4700 static int seek_to_sample_coarse(stb_vorbis *f, uint32 sample_number)
4701 {
4702  ProbedPage left, right, mid;
4703  int i, start_seg_with_known_loc, end_pos, page_start;
4704  uint32 delta, stream_length, padding, last_sample_limit;
4705  double offset = 0.0, bytes_per_sample = 0.0;
4706  int probe = 0;
4707 
4708  // find the last page and validate the target sample
4709  stream_length = stb_vorbis_stream_length_in_samples(f);
4710  if (stream_length == 0) return error(f, VORBIS_seek_without_length);
4711  if (sample_number > stream_length) return error(f, VORBIS_seek_invalid);
4712 
4713  // this is the maximum difference between the window-center (which is the
4714  // actual granule position value), and the right-start (which the spec
4715  // indicates should be the granule position (give or take one)).
4716  padding = ((f->blocksize_1 - f->blocksize_0) >> 2);
4717  if (sample_number < padding)
4718  last_sample_limit = 0;
4719  else
4720  last_sample_limit = sample_number - padding;
4721 
4722  left = f->p_first;
4723  while (left.last_decoded_sample == ~0U) {
4724  // (untested) the first page does not have a 'last_decoded_sample'
4725  set_file_offset(f, left.page_end);
4726  if (!get_seek_page_info(f, &left)) goto error;
4727  }
4728 
4729  right = f->p_last;
4730  assert(right.last_decoded_sample != ~0U);
4731 
4732  // starting from the start is handled differently
4733  if (last_sample_limit <= left.last_decoded_sample) {
4734  if (stb_vorbis_seek_start(f)) {
4735  if (f->current_loc > sample_number)
4736  return error(f, VORBIS_seek_failed);
4737  return 1;
4738  }
4739  return 0;
4740  }
4741 
4742  while (left.page_end != right.page_start) {
4743  assert(left.page_end < right.page_start);
4744  // search range in bytes
4745  delta = right.page_start - left.page_end;
4746  if (delta <= 65536) {
4747  // there's only 64K left to search - handle it linearly
4748  set_file_offset(f, left.page_end);
4749  } else {
4750  if (probe < 2) {
4751  if (probe == 0) {
4752  // first probe (interpolate)
4753  double data_bytes = right.page_end - left.page_start;
4754  bytes_per_sample = data_bytes / right.last_decoded_sample;
4755  offset = left.page_start + bytes_per_sample * (last_sample_limit - left.last_decoded_sample);
4756  } else {
4757  // second probe (try to bound the other side)
4758  double error = ((double) last_sample_limit - mid.last_decoded_sample) * bytes_per_sample;
4759  if (error >= 0 && error < 8000) error = 8000;
4760  if (error < 0 && error > -8000) error = -8000;
4761  offset += error * 2;
4762  }
4763 
4764  // ensure the offset is valid
4765  if (offset < left.page_end)
4766  offset = left.page_end;
4767  if (offset > right.page_start - 65536)
4768  offset = right.page_start - 65536;
4769 
4770  set_file_offset(f, (unsigned int) offset);
4771  } else {
4772  // binary search for large ranges (offset by 32K to ensure
4773  // we don't hit the right page)
4774  set_file_offset(f, left.page_end + (delta / 2) - 32768);
4775  }
4776 
4777  if (!vorbis_find_page(f, NULL, NULL)) goto error;
4778  }
4779 
4780  for (;;) {
4781  if (!get_seek_page_info(f, &mid)) goto error;
4782  if (mid.last_decoded_sample != ~0U) break;
4783  // (untested) no frames end on this page
4784  set_file_offset(f, mid.page_end);
4785  assert(mid.page_start < right.page_start);
4786  }
4787 
4788  // if we've just found the last page again then we're in a tricky file,
4789  // and we're close enough (if it wasn't an interpolation probe).
4790  if (mid.page_start == right.page_start) {
4791  if (probe >= 2 || delta <= 65536)
4792  break;
4793  } else {
4794  if (last_sample_limit < mid.last_decoded_sample)
4795  right = mid;
4796  else
4797  left = mid;
4798  }
4799 
4800  ++probe;
4801  }
4802 
4803  // seek back to start of the last packet
4804  page_start = left.page_start;
4805  set_file_offset(f, page_start);
4806  if (!start_page(f)) return error(f, VORBIS_seek_failed);
4807  end_pos = f->end_seg_with_known_loc;
4808  assert(end_pos >= 0);
4809 
4810  for (;;) {
4811  for (i = end_pos; i > 0; --i)
4812  if (f->segments[i-1] != 255)
4813  break;
4814 
4815  start_seg_with_known_loc = i;
4816 
4817  if (start_seg_with_known_loc > 0 || !(f->page_flag & PAGEFLAG_continued_packet))
4818  break;
4819 
4820  // (untested) the final packet begins on an earlier page
4821  if (!go_to_page_before(f, page_start))
4822  goto error;
4823 
4824  page_start = stb_vorbis_get_file_offset(f);
4825  if (!start_page(f)) goto error;
4826  end_pos = f->segment_count - 1;
4827  }
4828 
4829  // prepare to start decoding
4830  f->current_loc_valid = FALSE;
4831  f->last_seg = FALSE;
4832  f->valid_bits = 0;
4833  f->packet_bytes = 0;
4834  f->bytes_in_seg = 0;
4835  f->previous_length = 0;
4836  f->next_seg = start_seg_with_known_loc;
4837 
4838  for (i = 0; i < start_seg_with_known_loc; i++)
4839  skip(f, f->segments[i]);
4840 
4841  // start decoding (optimizable - this frame is generally discarded)
4842  if (!vorbis_pump_first_frame(f))
4843  return 0;
4844  if (f->current_loc > sample_number)
4845  return error(f, VORBIS_seek_failed);
4846  return 1;
4847 
4848 error:
4849  // try to restore the file to a valid state
4851  return error(f, VORBIS_seek_failed);
4852 }
4853 
4854 // the same as vorbis_decode_initial, but without advancing
4855 static int peek_decode_initial(vorb *f, int *p_left_start, int *p_left_end, int *p_right_start, int *p_right_end, int *mode)
4856 {
4857  int bits_read, bytes_read;
4858 
4859  if (!vorbis_decode_initial(f, p_left_start, p_left_end, p_right_start, p_right_end, mode))
4860  return 0;
4861 
4862  // either 1 or 2 bytes were read, figure out which so we can rewind
4863  bits_read = 1 + ilog(f->mode_count-1);
4864  if (f->mode_config[*mode].blockflag)
4865  bits_read += 2;
4866  bytes_read = (bits_read + 7) / 8;
4867 
4868  f->bytes_in_seg += bytes_read;
4869  f->packet_bytes -= bytes_read;
4870  skip(f, -bytes_read);
4871  if (f->next_seg == -1)
4872  f->next_seg = f->segment_count - 1;
4873  else
4874  f->next_seg--;
4875  f->valid_bits = 0;
4876 
4877  return 1;
4878 }
4879 
4880 int stb_vorbis_seek_frame(stb_vorbis *f, unsigned int sample_number)
4881 {
4882  uint32 max_frame_samples;
4883 
4885 
4886  // fast page-level search
4887  if (!seek_to_sample_coarse(f, sample_number))
4888  return 0;
4889 
4890  assert(f->current_loc_valid);
4891  assert(f->current_loc <= sample_number);
4892 
4893  // linear search for the relevant packet
4894  max_frame_samples = (f->blocksize_1*3 - f->blocksize_0) >> 2;
4895  while (f->current_loc < sample_number) {
4896  int left_start, left_end, right_start, right_end, mode, frame_samples;
4897  if (!peek_decode_initial(f, &left_start, &left_end, &right_start, &right_end, &mode))
4898  return error(f, VORBIS_seek_failed);
4899  // calculate the number of samples returned by the next frame
4900  frame_samples = right_start - left_start;
4901  if (f->current_loc + frame_samples > sample_number) {
4902  return 1; // the next frame will contain the sample
4903  } else if (f->current_loc + frame_samples + max_frame_samples > sample_number) {
4904  // there's a chance the frame after this could contain the sample
4905  vorbis_pump_first_frame(f);
4906  } else {
4907  // this frame is too early to be relevant
4908  f->current_loc += frame_samples;
4909  f->previous_length = 0;
4910  maybe_start_packet(f);
4911  flush_packet(f);
4912  }
4913  }
4914  // the next frame should start with the sample
4915  if (f->current_loc != sample_number) return error(f, VORBIS_seek_failed);
4916  return 1;
4917 }
4918 
4919 int stb_vorbis_seek(stb_vorbis *f, unsigned int sample_number)
4920 {
4921  if (!stb_vorbis_seek_frame(f, sample_number))
4922  return 0;
4923 
4924  if (sample_number != f->current_loc) {
4925  int n;
4926  uint32 frame_start = f->current_loc;
4927  stb_vorbis_get_frame_float(f, &n, NULL);
4928  assert(sample_number > frame_start);
4929  assert(f->channel_buffer_start + (int) (sample_number-frame_start) <= f->channel_buffer_end);
4930  f->channel_buffer_start += (sample_number - frame_start);
4931  }
4932 
4933  return 1;
4934 }
4935 
4937 {
4938  if (IS_PUSH_MODE(f)) { return error(f, VORBIS_invalid_api_mixing); }
4939  set_file_offset(f, f->first_audio_page_offset);
4940  f->previous_length = 0;
4941  f->first_decode = TRUE;
4942  f->next_seg = -1;
4943  return vorbis_pump_first_frame(f);
4944 }
4945 
4947 {
4948  unsigned int restore_offset, previous_safe;
4949  unsigned int end, last_page_loc;
4950 
4952  if (!f->total_samples) {
4953  unsigned int last;
4954  uint32 lo,hi;
4955  char header[6];
4956 
4957  // first, store the current decode position so we can restore it
4958  restore_offset = stb_vorbis_get_file_offset(f);
4959 
4960  // now we want to seek back 64K from the end (the last page must
4961  // be at most a little less than 64K, but let's allow a little slop)
4962  if (f->stream_len >= 65536 && f->stream_len-65536 >= f->first_audio_page_offset)
4963  previous_safe = f->stream_len - 65536;
4964  else
4965  previous_safe = f->first_audio_page_offset;
4966 
4967  set_file_offset(f, previous_safe);
4968  // previous_safe is now our candidate 'earliest known place that seeking
4969  // to will lead to the final page'
4970 
4971  if (!vorbis_find_page(f, &end, &last)) {
4972  // if we can't find a page, we're hosed!
4973  f->error = VORBIS_cant_find_last_page;
4974  f->total_samples = 0xffffffff;
4975  goto done;
4976  }
4977 
4978  // check if there are more pages
4979  last_page_loc = stb_vorbis_get_file_offset(f);
4980 
4981  // stop when the last_page flag is set, not when we reach eof;
4982  // this allows us to stop short of a 'file_section' end without
4983  // explicitly checking the length of the section
4984  while (!last) {
4985  set_file_offset(f, end);
4986  if (!vorbis_find_page(f, &end, &last)) {
4987  // the last page we found didn't have the 'last page' flag
4988  // set. whoops!
4989  break;
4990  }
4991  //previous_safe = last_page_loc+1; // NOTE: not used after this point, but note for debugging
4992  last_page_loc = stb_vorbis_get_file_offset(f);
4993  }
4994 
4995  set_file_offset(f, last_page_loc);
4996 
4997  // parse the header
4998  getn(f, (unsigned char *)header, 6);
4999  // extract the absolute granule position
5000  lo = get32(f);
5001  hi = get32(f);
5002  if (lo == 0xffffffff && hi == 0xffffffff) {
5003  f->error = VORBIS_cant_find_last_page;
5004  f->total_samples = SAMPLE_unknown;
5005  goto done;
5006  }
5007  if (hi)
5008  lo = 0xfffffffe; // saturate
5009  f->total_samples = lo;
5010 
5011  f->p_last.page_start = last_page_loc;
5012  f->p_last.page_end = end;
5013  f->p_last.last_decoded_sample = lo;
5014 
5015  done:
5016  set_file_offset(f, restore_offset);
5017  }
5018  return f->total_samples == SAMPLE_unknown ? 0 : f->total_samples;
5019 }
5020 
5022 {
5023  return stb_vorbis_stream_length_in_samples(f) / (float) f->sample_rate;
5024 }
5025 
5026 
5027 
5028 int stb_vorbis_get_frame_float(stb_vorbis *f, int *channels, float ***output)
5029 {
5030  int len, right,left,i;
5032 
5033  if (!vorbis_decode_packet(f, &len, &left, &right)) {
5034  f->channel_buffer_start = f->channel_buffer_end = 0;
5035  return 0;
5036  }
5037 
5038  len = vorbis_finish_frame(f, len, left, right);
5039  for (i=0; i < f->channels; ++i)
5040  f->outputs[i] = f->channel_buffers[i] + left;
5041 
5042  f->channel_buffer_start = left;
5043  f->channel_buffer_end = left+len;
5044 
5045  if (channels) *channels = f->channels;
5046  if (output) *output = f->outputs;
5047  return len;
5048 }
5049 
5050 #ifndef STB_VORBIS_NO_STDIO
5051 
5052 stb_vorbis * stb_vorbis_open_file_section(FILE *file, int close_on_free, int *error, const stb_vorbis_alloc *alloc, unsigned int length)
5053 {
5054  stb_vorbis *f, p;
5055  vorbis_init(&p, alloc);
5056  p.f = file;
5057  p.f_start = (uint32) ftell(file);
5058  p.stream_len = length;
5060  if (start_decoder(&p)) {
5061  f = vorbis_alloc(&p);
5062  if (f) {
5063  *f = p;
5064  vorbis_pump_first_frame(f);
5065  return f;
5066  }
5067  }
5068  if (error) *error = p.error;
5069  vorbis_deinit(&p);
5070  return NULL;
5071 }
5072 
5074 {
5075  unsigned int len, start;
5076  start = (unsigned int) ftell(file);
5077  fseek(file, 0, SEEK_END);
5078  len = (unsigned int) (ftell(file) - start);
5079  fseek(file, start, SEEK_SET);
5081 }
5082 
5083 stb_vorbis * stb_vorbis_open_filename(const char *filename, int *error, const stb_vorbis_alloc *alloc)
5084 {
5085  FILE *f;
5086 #if defined(_WIN32) && defined(__STDC_WANT_SECURE_LIB__)
5087  if (0 != fopen_s(&f, filename, "rb"))
5088  f = NULL;
5089 #else
5090  f = fopen(filename, "rb");
5091 #endif
5092  if (f)
5093  return stb_vorbis_open_file(f, TRUE, error, alloc);
5095  return NULL;
5096 }
5097 #endif // STB_VORBIS_NO_STDIO
5098 
5099 stb_vorbis * stb_vorbis_open_memory(const unsigned char *data, int len, int *error, const stb_vorbis_alloc *alloc)
5100 {
5101  stb_vorbis *f, p;
5102  if (!data) {
5104  return NULL;
5105  }
5106  vorbis_init(&p, alloc);
5107  p.stream = (uint8 *) data;
5108  p.stream_end = (uint8 *) data + len;
5109  p.stream_start = (uint8 *) p.stream;
5110  p.stream_len = len;
5111  p.push_mode = FALSE;
5112  if (start_decoder(&p)) {
5113  f = vorbis_alloc(&p);
5114  if (f) {
5115  *f = p;
5116  vorbis_pump_first_frame(f);
5117  if (error) *error = VORBIS__no_error;
5118  return f;
5119  }
5120  }
5121  if (error) *error = p.error;
5122  vorbis_deinit(&p);
5123  return NULL;
5124 }
5125 
5126 #ifndef STB_VORBIS_NO_INTEGER_CONVERSION
5127 #define PLAYBACK_MONO 1
5128 #define PLAYBACK_LEFT 2
5129 #define PLAYBACK_RIGHT 4
5130 
5131 #define L (PLAYBACK_LEFT | PLAYBACK_MONO)
5132 #define C (PLAYBACK_LEFT | PLAYBACK_RIGHT | PLAYBACK_MONO)
5133 #define R (PLAYBACK_RIGHT | PLAYBACK_MONO)
5134 
5135 static int8 channel_position[7][6] =
5136 {
5137  { 0 },
5138  { C },
5139  { L, R },
5140  { L, C, R },
5141  { L, R, L, R },
5142  { L, C, R, L, R },
5143  { L, C, R, L, R, C },
5144 };
5145 
5146 
5147 #ifndef STB_VORBIS_NO_FAST_SCALED_FLOAT
5148  typedef union {
5149  float f;
5150  int i;
5151  } float_conv;
5152  typedef char stb_vorbis_float_size_test[sizeof(float)==4 && sizeof(int) == 4];
5153  #define FASTDEF(x) float_conv x
5154  // add (1<<23) to convert to int, then divide by 2^SHIFT, then add 0.5/2^SHIFT to round
5155  #define MAGIC(SHIFT) (1.5f * (1 << (23-SHIFT)) + 0.5f/(1 << SHIFT))
5156  #define ADDEND(SHIFT) (((150-SHIFT) << 23) + (1 << 22))
5157  #define FAST_SCALED_FLOAT_TO_INT(temp,x,s) (temp.f = (x) + MAGIC(s), temp.i - ADDEND(s))
5158  #define check_endianness()
5159 #else
5160  #define FAST_SCALED_FLOAT_TO_INT(temp,x,s) ((int) ((x) * (1 << (s))))
5161  #define check_endianness()
5162  #define FASTDEF(x)
5163 #endif
5164 
5165 static void copy_samples(short *dest, float *src, int len)
5166 {
5167  int i;
5168  check_endianness();
5169  for (i=0; i < len; ++i) {
5170  FASTDEF(temp);
5171  int v = FAST_SCALED_FLOAT_TO_INT(temp, src[i],15);
5172  if ((unsigned int) (v + 32768) > 65535)
5173  v = v < 0 ? -32768 : 32767;
5174  dest[i] = v;
5175  }
5176 }
5177 
5178 static void compute_samples(int mask, short *output, int num_c, float **data, int d_offset, int len)
5179 {
5180  #define STB_BUFFER_SIZE 32
5181  float buffer[STB_BUFFER_SIZE];
5182  int i,j,o,n = STB_BUFFER_SIZE;
5183  check_endianness();
5184  for (o = 0; o < len; o += STB_BUFFER_SIZE) {
5185  memset(buffer, 0, sizeof(buffer));
5186  if (o + n > len) n = len - o;
5187  for (j=0; j < num_c; ++j) {
5188  if (channel_position[num_c][j] & mask) {
5189  for (i=0; i < n; ++i)
5190  buffer[i] += data[j][d_offset+o+i];
5191  }
5192  }
5193  for (i=0; i < n; ++i) {
5194  FASTDEF(temp);
5195  int v = FAST_SCALED_FLOAT_TO_INT(temp,buffer[i],15);
5196  if ((unsigned int) (v + 32768) > 65535)
5197  v = v < 0 ? -32768 : 32767;
5198  output[o+i] = v;
5199  }
5200  }
5201  #undef STB_BUFFER_SIZE
5202 }
5203 
5204 static void compute_stereo_samples(short *output, int num_c, float **data, int d_offset, int len)
5205 {
5206  #define STB_BUFFER_SIZE 32
5207  float buffer[STB_BUFFER_SIZE];
5208  int i,j,o,n = STB_BUFFER_SIZE >> 1;
5209  // o is the offset in the source data
5210  check_endianness();
5211  for (o = 0; o < len; o += STB_BUFFER_SIZE >> 1) {
5212  // o2 is the offset in the output data
5213  int o2 = o << 1;
5214  memset(buffer, 0, sizeof(buffer));
5215  if (o + n > len) n = len - o;
5216  for (j=0; j < num_c; ++j) {
5217  int m = channel_position[num_c][j] & (PLAYBACK_LEFT | PLAYBACK_RIGHT);
5218  if (m == (PLAYBACK_LEFT | PLAYBACK_RIGHT)) {
5219  for (i=0; i < n; ++i) {
5220  buffer[i*2+0] += data[j][d_offset+o+i];
5221  buffer[i*2+1] += data[j][d_offset+o+i];
5222  }
5223  } else if (m == PLAYBACK_LEFT) {
5224  for (i=0; i < n; ++i) {
5225  buffer[i*2+0] += data[j][d_offset+o+i];
5226  }
5227  } else if (m == PLAYBACK_RIGHT) {
5228  for (i=0; i < n; ++i) {
5229  buffer[i*2+1] += data[j][d_offset+o+i];
5230  }
5231  }
5232  }
5233  for (i=0; i < (n<<1); ++i) {
5234  FASTDEF(temp);
5235  int v = FAST_SCALED_FLOAT_TO_INT(temp,buffer[i],15);
5236  if ((unsigned int) (v + 32768) > 65535)
5237  v = v < 0 ? -32768 : 32767;
5238  output[o2+i] = v;
5239  }
5240  }
5241  #undef STB_BUFFER_SIZE
5242 }
5243 
5244 static void convert_samples_short(int buf_c, short **buffer, int b_offset, int data_c, float **data, int d_offset, int samples)
5245 {
5246  int i;
5247  if (buf_c != data_c && buf_c <= 2 && data_c <= 6) {
5248  static int channel_selector[3][2] = { {0}, {PLAYBACK_MONO}, {PLAYBACK_LEFT, PLAYBACK_RIGHT} };
5249  for (i=0; i < buf_c; ++i)
5250  compute_samples(channel_selector[buf_c][i], buffer[i]+b_offset, data_c, data, d_offset, samples);
5251  } else {
5252  int limit = buf_c < data_c ? buf_c : data_c;
5253  for (i=0; i < limit; ++i)
5254  copy_samples(buffer[i]+b_offset, data[i]+d_offset, samples);
5255  for ( ; i < buf_c; ++i)
5256  memset(buffer[i]+b_offset, 0, sizeof(short) * samples);
5257  }
5258 }
5259 
5260 int stb_vorbis_get_frame_short(stb_vorbis *f, int num_c, short **buffer, int num_samples)
5261 {
5262  float **output = NULL;
5263  int len = stb_vorbis_get_frame_float(f, NULL, &output);
5264  if (len > num_samples) len = num_samples;
5265  if (len)
5266  convert_samples_short(num_c, buffer, 0, f->channels, output, 0, len);
5267  return len;
5268 }
5269 
5270 static void convert_channels_short_interleaved(int buf_c, short *buffer, int data_c, float **data, int d_offset, int len)
5271 {
5272  int i;
5273  check_endianness();
5274  if (buf_c != data_c && buf_c <= 2 && data_c <= 6) {
5275  assert(buf_c == 2);
5276  for (i=0; i < buf_c; ++i)
5277  compute_stereo_samples(buffer, data_c, data, d_offset, len);
5278  } else {
5279  int limit = buf_c < data_c ? buf_c : data_c;
5280  int j;
5281  for (j=0; j < len; ++j) {
5282  for (i=0; i < limit; ++i) {
5283  FASTDEF(temp);
5284  float f = data[i][d_offset+j];
5285  int v = FAST_SCALED_FLOAT_TO_INT(temp, f,15);//data[i][d_offset+j],15);
5286  if ((unsigned int) (v + 32768) > 65535)
5287  v = v < 0 ? -32768 : 32767;
5288  *buffer++ = v;
5289  }
5290  for ( ; i < buf_c; ++i)
5291  *buffer++ = 0;
5292  }
5293  }
5294 }
5295 
5296 int stb_vorbis_get_frame_short_interleaved(stb_vorbis *f, int num_c, short *buffer, int num_shorts)
5297 {
5298  float **output;
5299  int len;
5300  if (num_c == 1) return stb_vorbis_get_frame_short(f,num_c,&buffer, num_shorts);
5301  len = stb_vorbis_get_frame_float(f, NULL, &output);
5302  if (len) {
5303  if (len*num_c > num_shorts) len = num_shorts / num_c;
5304  convert_channels_short_interleaved(num_c, buffer, f->channels, output, 0, len);
5305  }
5306  return len;
5307 }
5308 
5309 int stb_vorbis_get_samples_short_interleaved(stb_vorbis *f, int channels, short *buffer, int num_shorts)
5310 {
5311  float **outputs;
5312  int len = num_shorts / channels;
5313  int n=0;
5314  while (n < len) {
5315  int k = f->channel_buffer_end - f->channel_buffer_start;
5316  if (n+k >= len) k = len - n;
5317  if (k)
5318  convert_channels_short_interleaved(channels, buffer, f->channels, f->channel_buffers, f->channel_buffer_start, k);
5319  buffer += k*channels;
5320  n += k;
5321  f->channel_buffer_start += k;
5322  if (n == len) break;
5323  if (!stb_vorbis_get_frame_float(f, NULL, &outputs)) break;
5324  }
5325  return n;
5326 }
5327 
5328 int stb_vorbis_get_samples_short(stb_vorbis *f, int channels, short **buffer, int len)
5329 {
5330  float **outputs;
5331  int n=0;
5332  while (n < len) {
5333  int k = f->channel_buffer_end - f->channel_buffer_start;
5334  if (n+k >= len) k = len - n;
5335  if (k)
5336  convert_samples_short(channels, buffer, n, f->channels, f->channel_buffers, f->channel_buffer_start, k);
5337  n += k;
5338  f->channel_buffer_start += k;
5339  if (n == len) break;
5340  if (!stb_vorbis_get_frame_float(f, NULL, &outputs)) break;
5341  }
5342  return n;
5343 }
5344 
5345 #ifndef STB_VORBIS_NO_STDIO
5346 int stb_vorbis_decode_filename(const char *filename, int *channels, int *sample_rate, short **output)
5347 {
5348  int data_len, offset, total, limit, error;
5349  short *data;
5350  stb_vorbis *v = stb_vorbis_open_filename(filename, &error, NULL);
5351  if (v == NULL) return -1;
5352  limit = v->channels * 4096;
5353  *channels = v->channels;
5354  if (sample_rate)
5355  *sample_rate = v->sample_rate;
5356  offset = data_len = 0;
5357  total = limit;
5358  data = (short *) malloc(total * sizeof(*data));
5359  if (data == NULL) {
5360  stb_vorbis_close(v);
5361  return -2;
5362  }
5363  for (;;) {
5364  int n = stb_vorbis_get_frame_short_interleaved(v, v->channels, data+offset, total-offset);
5365  if (n == 0) break;
5366  data_len += n;
5367  offset += n * v->channels;
5368  if (offset + limit > total) {
5369  short *data2;
5370  total *= 2;
5371  data2 = (short *) realloc(data, total * sizeof(*data));
5372  if (data2 == NULL) {
5373  free(data);
5374  stb_vorbis_close(v);
5375  return -2;
5376  }
5377  data = data2;
5378  }
5379  }
5380  *output = data;
5381  stb_vorbis_close(v);
5382  return data_len;
5383 }
5384 #endif // NO_STDIO
5385 
5386 int stb_vorbis_decode_memory(const uint8 *mem, int len, int *channels, int *sample_rate, short **output)
5387 {
5388  int data_len, offset, total, limit, error;
5389  short *data;
5390  stb_vorbis *v = stb_vorbis_open_memory(mem, len, &error, NULL);
5391  if (v == NULL) return -1;
5392  limit = v->channels * 4096;
5393  *channels = v->channels;
5394  if (sample_rate)
5395  *sample_rate = v->sample_rate;
5396  offset = data_len = 0;
5397  total = limit;
5398  data = (short *) malloc(total * sizeof(*data));
5399  if (data == NULL) {
5400  stb_vorbis_close(v);
5401  return -2;
5402  }
5403  for (;;) {
5404  int n = stb_vorbis_get_frame_short_interleaved(v, v->channels, data+offset, total-offset);
5405  if (n == 0) break;
5406  data_len += n;
5407  offset += n * v->channels;
5408  if (offset + limit > total) {
5409  short *data2;
5410  total *= 2;
5411  data2 = (short *) realloc(data, total * sizeof(*data));
5412  if (data2 == NULL) {
5413  free(data);
5414  stb_vorbis_close(v);
5415  return -2;
5416  }
5417  data = data2;
5418  }
5419  }
5420  *output = data;
5421  stb_vorbis_close(v);
5422  return data_len;
5423 }
5424 #endif // STB_VORBIS_NO_INTEGER_CONVERSION
5425 
5426 int stb_vorbis_get_samples_float_interleaved(stb_vorbis *f, int channels, float *buffer, int num_floats)
5427 {
5428  float **outputs;
5429  int len = num_floats / channels;
5430  int n=0;
5431  int z = f->channels;
5432  if (z > channels) z = channels;
5433  while (n < len) {
5434  int i,j;
5435  int k = f->channel_buffer_end - f->channel_buffer_start;
5436  if (n+k >= len) k = len - n;
5437  for (j=0; j < k; ++j) {
5438  for (i=0; i < z; ++i)
5439  *buffer++ = f->channel_buffers[i][f->channel_buffer_start+j];
5440  for ( ; i < channels; ++i)
5441  *buffer++ = 0;
5442  }
5443  n += k;
5444  f->channel_buffer_start += k;
5445  if (n == len)
5446  break;
5447  if (!stb_vorbis_get_frame_float(f, NULL, &outputs))
5448  break;
5449  }
5450  return n;
5451 }
5452 
5453 int stb_vorbis_get_samples_float(stb_vorbis *f, int channels, float **buffer, int num_samples)
5454 {
5455  float **outputs;
5456  int n=0;
5457  int z = f->channels;
5458  if (z > channels) z = channels;
5459  while (n < num_samples) {
5460  int i;
5461  int k = f->channel_buffer_end - f->channel_buffer_start;
5462  if (n+k >= num_samples) k = num_samples - n;
5463  if (k) {
5464  for (i=0; i < z; ++i)
5465  memcpy(buffer[i]+n, f->channel_buffers[i]+f->channel_buffer_start, sizeof(float)*k);
5466  for ( ; i < channels; ++i)
5467  memset(buffer[i]+n, 0, sizeof(float) * k);
5468  }
5469  n += k;
5470  f->channel_buffer_start += k;
5471  if (n == num_samples)
5472  break;
5473  if (!stb_vorbis_get_frame_float(f, NULL, &outputs))
5474  break;
5475  }
5476  return n;
5477 }
5478 #endif // STB_VORBIS_NO_PULLDATA_API
5479 
5480 /* Version history
5481  1.17 - 2019-07-08 - fix CVE-2019-13217, -13218, -13219, -13220, -13221, -13222, -13223
5482  found with Mayhem by ForAllSecure
5483  1.16 - 2019-03-04 - fix warnings
5484  1.15 - 2019-02-07 - explicit failure if Ogg Skeleton data is found
5485  1.14 - 2018-02-11 - delete bogus dealloca usage
5486  1.13 - 2018-01-29 - fix truncation of last frame (hopefully)
5487  1.12 - 2017-11-21 - limit residue begin/end to blocksize/2 to avoid large temp allocs in bad/corrupt files
5488  1.11 - 2017-07-23 - fix MinGW compilation
5489  1.10 - 2017-03-03 - more robust seeking; fix negative ilog(); clear error in open_memory
5490  1.09 - 2016-04-04 - back out 'avoid discarding last frame' fix from previous version
5491  1.08 - 2016-04-02 - fixed multiple warnings; fix setup memory leaks;
5492  avoid discarding last frame of audio data
5493  1.07 - 2015-01-16 - fixed some warnings, fix mingw, const-correct API
5494  some more crash fixes when out of memory or with corrupt files
5495  1.06 - 2015-08-31 - full, correct support for seeking API (Dougall Johnson)
5496  some crash fixes when out of memory or with corrupt files
5497  1.05 - 2015-04-19 - don't define __forceinline if it's redundant
5498  1.04 - 2014-08-27 - fix missing const-correct case in API
5499  1.03 - 2014-08-07 - Warning fixes
5500  1.02 - 2014-07-09 - Declare qsort compare function _cdecl on windows
5501  1.01 - 2014-06-18 - fix stb_vorbis_get_samples_float
5502  1.0 - 2014-05-26 - fix memory leaks; fix warnings; fix bugs in multichannel
5503  (API change) report sample rate for decode-full-file funcs
5504  0.99996 - bracket #include <malloc.h> for macintosh compilation by Laurent Gomila
5505  0.99995 - use union instead of pointer-cast for fast-float-to-int to avoid alias-optimization problem
5506  0.99994 - change fast-float-to-int to work in single-precision FPU mode, remove endian-dependence
5507  0.99993 - remove assert that fired on legal files with empty tables
5508  0.99992 - rewind-to-start
5509  0.99991 - bugfix to stb_vorbis_get_samples_short by Bernhard Wodo
5510  0.9999 - (should have been 0.99990) fix no-CRT support, compiling as C++
5511  0.9998 - add a full-decode function with a memory source
5512  0.9997 - fix a bug in the read-from-FILE case in 0.9996 addition
5513  0.9996 - query length of vorbis stream in samples/seconds
5514  0.9995 - bugfix to another optimization that only happened in certain files
5515  0.9994 - bugfix to one of the optimizations that caused significant (but inaudible?) errors
5516  0.9993 - performance improvements; runs in 99% to 104% of time of reference implementation
5517  0.9992 - performance improvement of IMDCT; now performs close to reference implementation
5518  0.9991 - performance improvement of IMDCT
5519  0.999 - (should have been 0.9990) performance improvement of IMDCT
5520  0.998 - no-CRT support from Casey Muratori
5521  0.997 - bugfixes for bugs found by Terje Mathisen
5522  0.996 - bugfix: fast-huffman decode initialized incorrectly for sparse codebooks; fixing gives 10% speedup - found by Terje Mathisen
5523  0.995 - bugfix: fix to 'effective' overrun detection - found by Terje Mathisen
5524  0.994 - bugfix: garbage decode on final VQ symbol of a non-multiple - found by Terje Mathisen
5525  0.993 - bugfix: pushdata API required 1 extra byte for empty page (failed to consume final page if empty) - found by Terje Mathisen
5526  0.992 - fixes for MinGW warning
5527  0.991 - turn fast-float-conversion on by default
5528  0.990 - fix push-mode seek recovery if you seek into the headers
5529  0.98b - fix to bad release of 0.98
5530  0.98 - fix push-mode seek recovery; robustify float-to-int and support non-fast mode
5531  0.97 - builds under c++ (typecasting, don't use 'class' keyword)
5532  0.96 - somehow MY 0.95 was right, but the web one was wrong, so here's my 0.95 rereleased as 0.96, fixes a typo in the clamping code
5533  0.95 - clamping code for 16-bit functions
5534  0.94 - not publically released
5535  0.93 - fixed all-zero-floor case (was decoding garbage)
5536  0.92 - fixed a memory leak
5537  0.91 - conditional compiles to omit parts of the API and the infrastructure to support them: STB_VORBIS_NO_PULLDATA_API, STB_VORBIS_NO_PUSHDATA_API, STB_VORBIS_NO_STDIO, STB_VORBIS_NO_INTEGER_CONVERSION
5538  0.90 - first public release
5539 */
5540 
5541 #endif // STB_VORBIS_HEADER_ONLY
5542 
5543 
5544 /*
5545 ------------------------------------------------------------------------------
5546 This software is available under 2 licenses -- choose whichever you prefer.
5547 ------------------------------------------------------------------------------
5548 ALTERNATIVE A - MIT License
5549 Copyright (c) 2017 Sean Barrett
5550 Permission is hereby granted, free of charge, to any person obtaining a copy of
5551 this software and associated documentation files (the "Software"), to deal in
5552 the Software without restriction, including without limitation the rights to
5553 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
5554 of the Software, and to permit persons to whom the Software is furnished to do
5555 so, subject to the following conditions:
5556 The above copyright notice and this permission notice shall be included in all
5557 copies or substantial portions of the Software.
5558 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
5559 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
5560 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
5561 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
5562 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
5563 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
5564 SOFTWARE.
5565 ------------------------------------------------------------------------------
5566 ALTERNATIVE B - Public Domain (www.unlicense.org)
5567 This is free and unencumbered software released into the public domain.
5568 Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
5569 software, either in source code form or as a compiled binary, for any purpose,
5570 commercial or non-commercial, and by any means.
5571 In jurisdictions that recognize copyright laws, the author or authors of this
5572 software dedicate any and all copyright interest in the software to the public
5573 domain. We make this dedication for the benefit of the public at large and to
5574 the detriment of our heirs and successors. We intend this dedication to be an
5575 overt act of relinquishment in perpetuity of all present and future rights to
5576 this software under copyright law.
5577 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
5578 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
5579 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
5580 AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
5581 ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
5582 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
5583 ------------------------------------------------------------------------------
5584 */
5585 
5586 #undef L
5587 #undef C
5588 #undef R
void init(World &world)
Definition: ai.cpp:57
void log(const std::string_view severity, const std::string_view category, const std::string_view msg)
Logs data to a file or console.
Definition: log.cpp:41
#define LINE_OP(a, b)
Definition: stb_vorbis.c:2023
#define temp_alloc_save(f)
Definition: stb_vorbis.c:932
unsigned short uint16
Definition: stb_vorbis.c:646
float stb_vorbis_stream_length_in_seconds(stb_vorbis *f)
Definition: stb_vorbis.c:5021
unsigned int uint32
Definition: stb_vorbis.c:648
#define SAMPLE_unknown
Definition: stb_vorbis.c:4632
#define temp_alloc(f, size)
Definition: stb_vorbis.c:930
signed char int8
Definition: stb_vorbis.c:645
#define PLAYBACK_LEFT
Definition: stb_vorbis.c:5128
#define FASTDEF(x)
Definition: stb_vorbis.c:5153
float codetype
Definition: stb_vorbis.c:656
signed short int16
Definition: stb_vorbis.c:647
STBVorbisError
Definition: stb_vorbis.c:375
@ VORBIS_seek_without_length
Definition: stb_vorbis.c:385
@ VORBIS_need_more_data
Definition: stb_vorbis.c:378
@ VORBIS_bad_packet_type
Definition: stb_vorbis.c:403
@ VORBIS_seek_failed
Definition: stb_vorbis.c:405
@ VORBIS_invalid_first_page
Definition: stb_vorbis.c:402
@ VORBIS_unexpected_eof
Definition: stb_vorbis.c:387
@ VORBIS_incorrect_stream_serial_number
Definition: stb_vorbis.c:401
@ VORBIS_missing_capture_pattern
Definition: stb_vorbis.c:398
@ VORBIS_continued_packet_flag_invalid
Definition: stb_vorbis.c:400
@ VORBIS_seek_invalid
Definition: stb_vorbis.c:388
@ VORBIS_cant_find_last_page
Definition: stb_vorbis.c:404
@ VORBIS_too_many_channels
Definition: stb_vorbis.c:383
@ VORBIS_feature_not_supported
Definition: stb_vorbis.c:382
@ VORBIS_invalid_setup
Definition: stb_vorbis.c:394
@ VORBIS_invalid_api_mixing
Definition: stb_vorbis.c:380
@ VORBIS__no_error
Definition: stb_vorbis.c:376
@ VORBIS_outofmem
Definition: stb_vorbis.c:381
@ VORBIS_invalid_stream
Definition: stb_vorbis.c:395
@ VORBIS_file_open_failure
Definition: stb_vorbis.c:384
@ VORBIS_ogg_skeleton_not_supported
Definition: stb_vorbis.c:406
@ VORBIS_invalid_stream_structure_version
Definition: stb_vorbis.c:399
int stb_vorbis_get_frame_short(stb_vorbis *f, int num_c, short **buffer, int num_samples)
Definition: stb_vorbis.c:5260
#define FAST_HUFFMAN_TABLE_SIZE
Definition: stb_vorbis.c:677
int stb_vorbis_seek(stb_vorbis *f, unsigned int sample_number)
Definition: stb_vorbis.c:4919
#define IS_PUSH_MODE(f)
Definition: stb_vorbis.c:908
#define temp_free(f, p)
Definition: stb_vorbis.c:931
stb_vorbis_comment stb_vorbis_get_comment(stb_vorbis *f)
Definition: stb_vorbis.c:4317
void stb_vorbis_flush_pushdata(stb_vorbis *f)
Definition: stb_vorbis.c:4341
#define temp_alloc_restore(f, p)
Definition: stb_vorbis.c:933
#define FAST_HUFFMAN_TABLE_MASK
Definition: stb_vorbis.c:678
int stb_vorbis_get_samples_float(stb_vorbis *f, int channels, float **buffer, int num_samples)
Definition: stb_vorbis.c:5453
#define CRC32_POLY
Definition: stb_vorbis.c:989
stb_vorbis_info stb_vorbis_get_info(stb_vorbis *f)
Definition: stb_vorbis.c:4305
int stb_vorbis_get_frame_float(stb_vorbis *f, int *channels, float ***output)
Definition: stb_vorbis.c:5028
#define PAGEFLAG_last_page
Definition: stb_vorbis.c:1442
#define STB_VORBIS_FAST_HUFFMAN_LENGTH
Definition: stb_vorbis.c:486
signed int int32
Definition: stb_vorbis.c:649
#define INVALID_BITS
Definition: stb_vorbis.c:1561
int stb_vorbis_seek_frame(stb_vorbis *f, unsigned int sample_number)
Definition: stb_vorbis.c:4880
#define NO_CODE
Definition: stb_vorbis.c:1050
int stb_vorbis_seek_start(stb_vorbis *f)
Definition: stb_vorbis.c:4936
int stb_vorbis_get_samples_float_interleaved(stb_vorbis *f, int channels, float *buffer, int num_floats)
Definition: stb_vorbis.c:5426
stb_vorbis * stb_vorbis_open_file_section(FILE *f, int close_handle_on_close, int *error, const stb_vorbis_alloc *alloc_buffer, unsigned int len)
Definition: stb_vorbis.c:5052
int stb_vorbis_get_frame_short_interleaved(stb_vorbis *f, int num_c, short *buffer, int num_shorts)
Definition: stb_vorbis.c:5296
char stb_vorbis_float_size_test[sizeof(float)==4 &&sizeof(int)==4]
Definition: stb_vorbis.c:5152
#define R
Definition: stb_vorbis.c:5133
#define PLAYBACK_RIGHT
Definition: stb_vorbis.c:5129
#define PLAYBACK_MONO
Definition: stb_vorbis.c:5127
int stb_vorbis_decode_filename(const char *filename, int *channels, int *sample_rate, short **output)
Definition: stb_vorbis.c:5346
#define PAGEFLAG_continued_packet
Definition: stb_vorbis.c:1440
#define EOP
Definition: stb_vorbis.c:1560
int stb_vorbis_decode_frame_pushdata(stb_vorbis *f, const unsigned char *datablock, int datablock_length_in_bytes, int *channels, float ***output, int *samples)
Definition: stb_vorbis.c:4444
#define PAGEFLAG_first_page
Definition: stb_vorbis.c:1441
stb_vorbis * stb_vorbis_open_pushdata(const unsigned char *datablock, int datablock_length_in_bytes, int *datablock_memory_consumed_in_bytes, int *error, const stb_vorbis_alloc *alloc_buffer)
Definition: stb_vorbis.c:4514
int stb_vorbis_get_samples_short(stb_vorbis *f, int channels, short **buffer, int num_samples)
Definition: stb_vorbis.c:5328
#define STB_VORBIS_PUSHDATA_CRC_COUNT
Definition: stb_vorbis.c:477
#define temp_block_array(f, count, size)
Definition: stb_vorbis.c:935
unsigned int stb_vorbis_get_file_offset(stb_vorbis *f)
Definition: stb_vorbis.c:4545
stb_vorbis * stb_vorbis_open_file(FILE *f, int close_handle_on_close, int *error, const stb_vorbis_alloc *alloc_buffer)
Definition: stb_vorbis.c:5073
#define check_endianness()
Definition: stb_vorbis.c:5158
int stb_vorbis_get_sample_offset(stb_vorbis *f)
Definition: stb_vorbis.c:4297
#define CODEBOOK_ELEMENT_BASE(c)
Definition: stb_vorbis.c:1773
#define CODEBOOK_ELEMENT_FAST(c, off)
Definition: stb_vorbis.c:1772
stb_vorbis * stb_vorbis_open_memory(const unsigned char *data, int len, int *error, const stb_vorbis_alloc *alloc_buffer)
Definition: stb_vorbis.c:5099
#define CHECK(f)
Definition: stb_vorbis.c:637
#define L
Definition: stb_vorbis.c:5131
#define TRUE
Definition: stb_vorbis.c:652
#define FALSE
Definition: stb_vorbis.c:653
#define STB_VORBIS_FAST_HUFFMAN_SHORT
Definition: stb_vorbis.c:500
#define STBV_NOTUSED(v)
Definition: stb_vorbis.c:661
int stb_vorbis_get_error(stb_vorbis *f)
Definition: stb_vorbis.c:4326
int stb_vorbis_decode_memory(const unsigned char *mem, int len, int *channels, int *sample_rate, short **output)
Definition: stb_vorbis.c:5386
#define USE_MEMORY(z)
Definition: stb_vorbis.c:1334
int16 YTYPE
Definition: stb_vorbis.c:3068
#define C
Definition: stb_vorbis.c:5132
void stb_vorbis_close(stb_vorbis *f)
Definition: stb_vorbis.c:4271
#define FAST_SCALED_FLOAT_TO_INT(temp, x, s)
Definition: stb_vorbis.c:5157
#define STB_VORBIS_MAX_CHANNELS
Definition: stb_vorbis.c:461
#define DECODE(var, f, c)
Definition: stb_vorbis.c:1754
unsigned int stb_vorbis_stream_length_in_samples(stb_vorbis *f)
Definition: stb_vorbis.c:4946
@ VORBIS_packet_comment
Definition: stb_vorbis.c:1652
@ VORBIS_packet_setup
Definition: stb_vorbis.c:1653
@ VORBIS_packet_id
Definition: stb_vorbis.c:1651
unsigned char uint8
Definition: stb_vorbis.c:644
int stb_vorbis_get_samples_short_interleaved(stb_vorbis *f, int channels, short *buffer, int num_shorts)
Definition: stb_vorbis.c:5309
stb_vorbis * stb_vorbis_open_filename(const char *filename, int *error, const stb_vorbis_alloc *alloc_buffer)
Definition: stb_vorbis.c:5083
#define M_PI
Definition: stb_vorbis.c:1046
#define DECODE_VQ(var, f, c)
Definition: stb_vorbis.c:1759
#define STB_BUFFER_SIZE
#define STBV_CDECL
Definition: stb_vorbis.c:1159
#define __forceinline
Definition: stb_vorbis.c:620
uint32 crc_so_far
Definition: stb_vorbis.c:774
uint32 sample_loc
Definition: stb_vorbis.c:776
uint32 goal_crc
Definition: stb_vorbis.c:772
int bytes_done
Definition: stb_vorbis.c:775
int bytes_left
Definition: stb_vorbis.c:773
float minimum_value
Definition: stb_vorbis.c:684
int sorted_entries
Definition: stb_vorbis.c:700
uint8 value_bits
Definition: stb_vorbis.c:686
int entries
Definition: stb_vorbis.c:682
uint8 sequence_p
Definition: stb_vorbis.c:688
uint32 * codewords
Definition: stb_vorbis.c:692
uint32 * sorted_codewords
Definition: stb_vorbis.c:698
int16 fast_huffman[FAST_HUFFMAN_TABLE_SIZE]
Definition: stb_vorbis.c:694
float delta_value
Definition: stb_vorbis.c:685
uint8 * codeword_lengths
Definition: stb_vorbis.c:683
codetype * multiplicands
Definition: stb_vorbis.c:691
uint8 sparse
Definition: stb_vorbis.c:689
uint32 lookup_values
Definition: stb_vorbis.c:690
uint8 lookup_type
Definition: stb_vorbis.c:687
int dimensions
Definition: stb_vorbis.c:682
int * sorted_values
Definition: stb_vorbis.c:699
uint8 amplitude_offset
Definition: stb_vorbis.c:709
uint8 amplitude_bits
Definition: stb_vorbis.c:708
uint8 order
Definition: stb_vorbis.c:705
uint16 rate
Definition: stb_vorbis.c:706
uint8 book_list[16]
Definition: stb_vorbis.c:711
uint8 number_of_books
Definition: stb_vorbis.c:710
uint16 bark_map_size
Definition: stb_vorbis.c:707
uint16 Xlist[31 *8+2]
Definition: stb_vorbis.c:722
uint8 floor1_multiplier
Definition: stb_vorbis.c:725
uint8 neighbors[31 *8+2][2]
Definition: stb_vorbis.c:724
uint8 partitions
Definition: stb_vorbis.c:716
uint8 sorted_order[31 *8+2]
Definition: stb_vorbis.c:723
int values
Definition: stb_vorbis.c:727
uint8 rangebits
Definition: stb_vorbis.c:726
uint8 class_dimensions[16]
Definition: stb_vorbis.c:718
uint8 class_masterbooks[16]
Definition: stb_vorbis.c:720
uint8 class_subclasses[16]
Definition: stb_vorbis.c:719
int16 subclass_books[16][8]
Definition: stb_vorbis.c:721
uint8 partition_class_list[32]
Definition: stb_vorbis.c:717
uint8 submap_residue[15]
Definition: stb_vorbis.c:759
uint16 coupling_steps
Definition: stb_vorbis.c:755
MappingChannel * chan
Definition: stb_vorbis.c:756
uint8 submaps
Definition: stb_vorbis.c:757
uint8 submap_floor[15]
Definition: stb_vorbis.c:758
uint16 windowtype
Definition: stb_vorbis.c:766
uint16 transformtype
Definition: stb_vorbis.c:767
uint8 mapping
Definition: stb_vorbis.c:765
uint8 blockflag
Definition: stb_vorbis.c:764
uint32 page_end
Definition: stb_vorbis.c:781
uint32 page_start
Definition: stb_vorbis.c:781
uint32 last_decoded_sample
Definition: stb_vorbis.c:782
uint8 ** classdata
Definition: stb_vorbis.c:742
uint8 classbook
Definition: stb_vorbis.c:741
uint8 classifications
Definition: stb_vorbis.c:740
uint32 end
Definition: stb_vorbis.c:738
uint32 part_size
Definition: stb_vorbis.c:739
uint32 begin
Definition: stb_vorbis.c:738
int16(* residue_books)[8]
Definition: stb_vorbis.c:743
int alloc_buffer_length_in_bytes
Definition: stb_vorbis.c:121
char * alloc_buffer
Definition: stb_vorbis.c:120
char ** comment_list
Definition: stb_vorbis.c:146
unsigned int temp_memory_required
Definition: stb_vorbis.c:136
unsigned int setup_memory_required
Definition: stb_vorbis.c:134
unsigned int sample_rate
Definition: stb_vorbis.c:131
unsigned int setup_temp_memory_required
Definition: stb_vorbis.c:135
uint32 serial
Definition: stb_vorbis.c:874
float * previous_window[STB_VORBIS_MAX_CHANNELS]
Definition: stb_vorbis.c:854
uint32 current_loc
Definition: stb_vorbis.c:863
int codebook_count
Definition: stb_vorbis.c:835
stb_vorbis_alloc alloc
Definition: stb_vorbis.c:822
Floor * floor_config
Definition: stb_vorbis.c:839
int last_page
Definition: stb_vorbis.c:875
float * A[2]
Definition: stb_vorbis.c:869
int current_loc_valid
Definition: stb_vorbis.c:864
float * C[2]
Definition: stb_vorbis.c:869
int last_seg
Definition: stb_vorbis.c:882
int packet_bytes
Definition: stb_vorbis.c:886
char * vendor
Definition: stb_vorbis.c:795
uint8 page_flag
Definition: stb_vorbis.c:878
uint8 first_decode
Definition: stb_vorbis.c:880
int comment_list_length
Definition: stb_vorbis.c:796
float * window[2]
Definition: stb_vorbis.c:870
int segment_count
Definition: stb_vorbis.c:876
int valid_bits
Definition: stb_vorbis.c:885
int page_crc_tests
Definition: stb_vorbis.c:893
Codebook * codebooks
Definition: stb_vorbis.c:836
unsigned int setup_temp_memory_required
Definition: stb_vorbis.c:793
uint32 acc
Definition: stb_vorbis.c:884
Residue * residue_config
Definition: stb_vorbis.c:842
float * channel_buffers[STB_VORBIS_MAX_CHANNELS]
Definition: stb_vorbis.c:851
uint8 * stream_start
Definition: stb_vorbis.c:807
uint8 * stream
Definition: stb_vorbis.c:806
uint8 bytes_in_seg
Definition: stb_vorbis.c:879
uint32 stream_len
Definition: stb_vorbis.c:810
int previous_length
Definition: stb_vorbis.c:855
int blocksize_1
Definition: stb_vorbis.c:834
uint16 floor_types[64]
Definition: stb_vorbis.c:838
int setup_offset
Definition: stb_vorbis.c:823
uint32 samples_output
Definition: stb_vorbis.c:890
int16 * finalY[STB_VORBIS_MAX_CHANNELS]
Definition: stb_vorbis.c:858
uint16 * bit_reverse[2]
Definition: stb_vorbis.c:871
uint32 first_audio_page_offset
Definition: stb_vorbis.c:815
ProbedPage p_last
Definition: stb_vorbis.c:819
unsigned int temp_memory_required
Definition: stb_vorbis.c:792
int blocksize[2]
Definition: stb_vorbis.c:833
int floor_count
Definition: stb_vorbis.c:837
uint32 f_start
Definition: stb_vorbis.c:802
int channel_buffer_end
Definition: stb_vorbis.c:900
FILE * f
Definition: stb_vorbis.c:801
uint32 known_loc_for_packet
Definition: stb_vorbis.c:888
int blocksize_0
Definition: stb_vorbis.c:834
uint8 * stream_end
Definition: stb_vorbis.c:808
int end_seg_with_known_loc
Definition: stb_vorbis.c:887
int residue_count
Definition: stb_vorbis.c:840
CRCscan scan[STB_VORBIS_PUSHDATA_CRC_COUNT]
Definition: stb_vorbis.c:895
uint32 total_samples
Definition: stb_vorbis.c:848
uint16 residue_types[64]
Definition: stb_vorbis.c:841
float * outputs[STB_VORBIS_MAX_CHANNELS]
Definition: stb_vorbis.c:852
Mapping * mapping
Definition: stb_vorbis.c:844
float * B[2]
Definition: stb_vorbis.c:869
int channels
Definition: stb_vorbis.c:789
int discard_samples_deferred
Definition: stb_vorbis.c:889
int next_seg
Definition: stb_vorbis.c:881
Mode mode_config[64]
Definition: stb_vorbis.c:846
unsigned int sample_rate
Definition: stb_vorbis.c:788
int mapping_count
Definition: stb_vorbis.c:843
int channel_buffer_start
Definition: stb_vorbis.c:899
int temp_offset
Definition: stb_vorbis.c:824
int close_on_free
Definition: stb_vorbis.c:803
unsigned int setup_memory_required
Definition: stb_vorbis.c:791
enum STBVorbisError error
Definition: stb_vorbis.c:828
uint8 segments[255]
Definition: stb_vorbis.c:877
int mode_count
Definition: stb_vorbis.c:845
uint8 push_mode
Definition: stb_vorbis.c:812
ProbedPage p_first
Definition: stb_vorbis.c:819
char ** comment_list
Definition: stb_vorbis.c:797
int last_seg_which
Definition: stb_vorbis.c:883
Floor0 floor0
Definition: stb_vorbis.c:732
Floor1 floor1
Definition: stb_vorbis.c:733