fix bug in stb_vorbis_get_samples_float

pull/14/head
Sean Barrett 2014-06-19 19:44:34 -07:00
parent b7be9848ae
commit e8b2939df9
1 changed files with 13 additions and 7 deletions

View File

@ -1,4 +1,4 @@
// Ogg Vorbis audio decoder - v1.0 - public domain // Ogg Vorbis audio decoder - v1.01 - public domain
// http://nothings.org/stb_vorbis/ // http://nothings.org/stb_vorbis/
// //
// Written by Sean Barrett in 2007, last updated in 2014 // Written by Sean Barrett in 2007, last updated in 2014
@ -20,7 +20,7 @@
// files to around 6 hours (Ogg supports 64-bit) // files to around 6 hours (Ogg supports 64-bit)
// //
// Bugfix/warning contributors: // Bugfix/warning contributors:
// Terje Mathisen Niklas Frykholm // Terje Mathisen Niklas Frykholm Andy Hill
// Casey Muratori John Bolton // Casey Muratori John Bolton
// Laurent Gomila Marc LeBlanc // Laurent Gomila Marc LeBlanc
// Bernhard Wodo Evan Balster // Bernhard Wodo Evan Balster
@ -30,6 +30,7 @@
// list them all because I was lax about updating for a long time, sorry.) // list them all because I was lax about updating for a long time, sorry.)
// //
// Partial history: // Partial history:
// 1.01 - 2014/06/18 - fix stb_vorbis_get_samples_float (interleaved was correct)
// 1.0 - 2014/05/26 - fix memory leaks; fix warnings; fix bugs in >2-channel; // 1.0 - 2014/05/26 - fix memory leaks; fix warnings; fix bugs in >2-channel;
// (API change) report sample rate for decode-full-file funcs // (API change) report sample rate for decode-full-file funcs
// 0.99996 - - bracket #include <malloc.h> for macintosh compilation // 0.99996 - - bracket #include <malloc.h> for macintosh compilation
@ -5368,8 +5369,10 @@ int stb_vorbis_get_samples_float_interleaved(stb_vorbis *f, int channels, float
} }
n += k; n += k;
f->channel_buffer_start += k; f->channel_buffer_start += k;
if (n == len) break; if (n == len)
if (!stb_vorbis_get_frame_float(f, NULL, &outputs)) break; break;
if (!stb_vorbis_get_frame_float(f, NULL, &outputs))
break;
} }
return n; return n;
} }
@ -5386,20 +5389,23 @@ int stb_vorbis_get_samples_float(stb_vorbis *f, int channels, float **buffer, in
if (n+k >= num_samples) k = num_samples - n; if (n+k >= num_samples) k = num_samples - n;
if (k) { if (k) {
for (i=0; i < z; ++i) for (i=0; i < z; ++i)
memcpy(buffer[i]+n, f->channel_buffers+f->channel_buffer_start, sizeof(float)*k); memcpy(buffer[i]+n, f->channel_buffers[i]+f->channel_buffer_start, sizeof(float)*k);
for ( ; i < channels; ++i) for ( ; i < channels; ++i)
memset(buffer[i]+n, 0, sizeof(float) * k); memset(buffer[i]+n, 0, sizeof(float) * k);
} }
n += k; n += k;
f->channel_buffer_start += k; f->channel_buffer_start += k;
if (n == num_samples) break; if (n == num_samples)
if (!stb_vorbis_get_frame_float(f, NULL, &outputs)) break; break;
if (!stb_vorbis_get_frame_float(f, NULL, &outputs))
break;
} }
return n; return n;
} }
#endif // STB_VORBIS_NO_PULLDATA_API #endif // STB_VORBIS_NO_PULLDATA_API
/* Version history /* Version history
1.01 - 2014/06/18 - fix stb_vorbis_get_samples_float
1.0 - 2014/05/26 - fix memory leaks; fix warnings; fix bugs in multichannel 1.0 - 2014/05/26 - fix memory leaks; fix warnings; fix bugs in multichannel
(API change) report sample rate for decode-full-file funcs (API change) report sample rate for decode-full-file funcs
0.99996 - bracket #include <malloc.h> for macintosh compilation by Laurent Gomila 0.99996 - bracket #include <malloc.h> for macintosh compilation by Laurent Gomila