mirror of https://github.com/mgba-emu/mgba.git
Qt: Fix thread sync issues with QtMultimedia audio driver
This commit is contained in:
parent
56475e578b
commit
37fd51df39
|
@ -34,6 +34,7 @@ void AudioDevice::setFormat(const QAudioFormat& format) {
|
|||
GBASyncLockAudio(&m_context->sync);
|
||||
blip_set_rates(m_context->gba->audio.left, GBA_ARM7TDMI_FREQUENCY, format.sampleRate() * fauxClock);
|
||||
blip_set_rates(m_context->gba->audio.right, GBA_ARM7TDMI_FREQUENCY, format.sampleRate() * fauxClock);
|
||||
GBASyncUnlockAudio(&m_context->sync);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -53,6 +54,7 @@ qint64 AudioDevice::readData(char* data, qint64 maxSize) {
|
|||
#if RESAMPLE_LIBRARY == RESAMPLE_NN
|
||||
return GBAAudioResampleNN(&m_context->gba->audio, m_ratio, &m_drift, reinterpret_cast<GBAStereoSample*>(data), maxSize / sizeof(GBAStereoSample)) * sizeof(GBAStereoSample);
|
||||
#elif RESAMPLE_LIBRARY == RESAMPLE_BLIP_BUF
|
||||
GBASyncLockAudio(&m_context->sync);
|
||||
int available = blip_samples_avail(m_context->gba->audio.left);
|
||||
if (available > maxSize / sizeof(GBAStereoSample)) {
|
||||
available = maxSize / sizeof(GBAStereoSample);
|
||||
|
|
|
@ -461,7 +461,7 @@ void GameController::clearAVStream() {
|
|||
}
|
||||
|
||||
void GameController::reloadAudioDriver() {
|
||||
m_audioProcessor->pause();
|
||||
QMetaObject::invokeMethod(m_audioProcessor, "pause", Qt::BlockingQueuedConnection);
|
||||
delete m_audioProcessor;
|
||||
m_audioProcessor = AudioProcessor::create();
|
||||
m_audioProcessor->moveToThread(m_audioThread);
|
||||
|
|
Loading…
Reference in New Issue