fix bug in stb_vorbis_get_samples_float

This commit is contained in:
Sean Barrett 2014-06-19 19:44:34 -07:00
parent b7be9848ae
commit e8b2939df9

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/
//
// Written by Sean Barrett in 2007, last updated in 2014
@ -20,7 +20,7 @@
// files to around 6 hours (Ogg supports 64-bit)
//
// Bugfix/warning contributors:
// Terje Mathisen Niklas Frykholm
// Terje Mathisen Niklas Frykholm Andy Hill
// Casey Muratori John Bolton
// Laurent Gomila Marc LeBlanc
// Bernhard Wodo Evan Balster
@ -30,6 +30,7 @@
// list them all because I was lax about updating for a long time, sorry.)
//
// 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;
// (API change) report sample rate for decode-full-file funcs
// 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;
f->channel_buffer_start += k;
if (n == len) break;
if (!stb_vorbis_get_frame_float(f, NULL, &outputs)) break;
if (n == len)
break;
if (!stb_vorbis_get_frame_float(f, NULL, &outputs))
break;
}
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 (k) {
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)
memset(buffer[i]+n, 0, sizeof(float) * k);
}
n += k;
f->channel_buffer_start += k;
if (n == num_samples) break;
if (!stb_vorbis_get_frame_float(f, NULL, &outputs)) break;
if (n == num_samples)
break;
if (!stb_vorbis_get_frame_float(f, NULL, &outputs))
break;
}
return n;
}
#endif // STB_VORBIS_NO_PULLDATA_API
/* 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
(API change) report sample rate for decode-full-file funcs
0.99996 - bracket #include <malloc.h> for macintosh compilation by Laurent Gomila