mirror of
https://github.com/Ryujinx/libsoundio.git
synced 2024-12-22 18:25:35 +00:00
fix microphone example fill with zeros case
Usually when microphone example is run you never hit buffer underflow and "fill with zeros" branch is never executed. But when it's executed it fails with "invalid value" because of checks performed on frame_count. This platform-independent check8094dc5249/src/soundio.c (L447)
sometimes passed because unitialized local frame_count have arbitrary value, but this CoreAudio one8094dc5249/src/coreaudio.c (L1078)
is not passed, and "fill with zeros" scenario always fails on MacOS.
This commit is contained in:
parent
8094dc5249
commit
ae7fc0177b
|
@ -113,6 +113,7 @@ static void read_callback(struct SoundIoInStream *instream, int frame_count_min,
|
||||||
|
|
||||||
static void write_callback(struct SoundIoOutStream *outstream, int frame_count_min, int frame_count_max) {
|
static void write_callback(struct SoundIoOutStream *outstream, int frame_count_min, int frame_count_max) {
|
||||||
struct SoundIoChannelArea *areas;
|
struct SoundIoChannelArea *areas;
|
||||||
|
int frames_left;
|
||||||
int frame_count;
|
int frame_count;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -122,7 +123,11 @@ static void write_callback(struct SoundIoOutStream *outstream, int frame_count_m
|
||||||
|
|
||||||
if (frame_count_min > fill_count) {
|
if (frame_count_min > fill_count) {
|
||||||
// Ring buffer does not have enough data, fill with zeroes.
|
// Ring buffer does not have enough data, fill with zeroes.
|
||||||
|
frames_left = frame_count_min;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
frame_count = frames_left;
|
||||||
|
if (frame_count <= 0)
|
||||||
|
return;
|
||||||
if ((err = soundio_outstream_begin_write(outstream, &areas, &frame_count)))
|
if ((err = soundio_outstream_begin_write(outstream, &areas, &frame_count)))
|
||||||
panic("begin write error: %s", soundio_strerror(err));
|
panic("begin write error: %s", soundio_strerror(err));
|
||||||
if (frame_count <= 0)
|
if (frame_count <= 0)
|
||||||
|
@ -135,11 +140,12 @@ static void write_callback(struct SoundIoOutStream *outstream, int frame_count_m
|
||||||
}
|
}
|
||||||
if ((err = soundio_outstream_end_write(outstream)))
|
if ((err = soundio_outstream_end_write(outstream)))
|
||||||
panic("end write error: %s", soundio_strerror(err));
|
panic("end write error: %s", soundio_strerror(err));
|
||||||
|
frames_left -= frame_count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int read_count = min_int(frame_count_max, fill_count);
|
int read_count = min_int(frame_count_max, fill_count);
|
||||||
int frames_left = read_count;
|
frames_left = read_count;
|
||||||
|
|
||||||
while (frames_left > 0) {
|
while (frames_left > 0) {
|
||||||
int frame_count = frames_left;
|
int frame_count = frames_left;
|
||||||
|
|
Loading…
Reference in a new issue