fix bug in stb_vorbis_get_samples_float
This commit is contained in:
parent
b7be9848ae
commit
e8b2939df9
20
stb_vorbis.c
20
stb_vorbis.c
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user