mirror of https://github.com/snes9xgit/snes9x.git
common/audio/sdl3: Use a mutex for buffer accesses.
This commit is contained in:
parent
56e58cdf99
commit
fa94c74b84
|
@ -11,6 +11,8 @@
|
||||||
bool S9xSDL3SoundDriver::write_samples(int16_t *data, int samples)
|
bool S9xSDL3SoundDriver::write_samples(int16_t *data, int samples)
|
||||||
{
|
{
|
||||||
bool retval = true;
|
bool retval = true;
|
||||||
|
|
||||||
|
mutex.lock();
|
||||||
auto empty = buffer.space_empty();
|
auto empty = buffer.space_empty();
|
||||||
if (samples > empty)
|
if (samples > empty)
|
||||||
{
|
{
|
||||||
|
@ -18,6 +20,7 @@ bool S9xSDL3SoundDriver::write_samples(int16_t *data, int samples)
|
||||||
buffer.dump(buffer.buffer_size / 2 - empty);
|
buffer.dump(buffer.buffer_size / 2 - empty);
|
||||||
}
|
}
|
||||||
buffer.push(data, samples);
|
buffer.push(data, samples);
|
||||||
|
mutex.unlock();
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
@ -27,18 +30,22 @@ void S9xSDL3SoundDriver::mix(int req, int total)
|
||||||
if (tmp.size() < req / 2)
|
if (tmp.size() < req / 2)
|
||||||
tmp.resize(req / 2);
|
tmp.resize(req / 2);
|
||||||
|
|
||||||
|
mutex.lock();
|
||||||
if (buffer.avail() >= req / 2)
|
if (buffer.avail() >= req / 2)
|
||||||
{
|
{
|
||||||
|
|
||||||
buffer.read((int16_t *)(tmp.data()), req / 2);
|
buffer.read((int16_t *)(tmp.data()), req / 2);
|
||||||
|
mutex.unlock();
|
||||||
SDL_PutAudioStreamData(stream, tmp.data(), req);
|
SDL_PutAudioStreamData(stream, tmp.data(), req);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
auto avail = buffer.avail();
|
auto avail = buffer.avail();
|
||||||
buffer.read((int16_t *)(tmp.data()), avail);
|
buffer.read((int16_t *)(tmp.data()), avail);
|
||||||
SDL_PutAudioStreamData(stream, tmp.data(), avail * 2);
|
|
||||||
buffer.add_silence(buffer.buffer_size / 2);
|
buffer.add_silence(buffer.buffer_size / 2);
|
||||||
|
mutex.unlock();
|
||||||
|
SDL_PutAudioStreamData(stream, tmp.data(), avail * 2);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue