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);
|
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.left, GBA_ARM7TDMI_FREQUENCY, format.sampleRate() * fauxClock);
|
||||||
blip_set_rates(m_context->gba->audio.right, 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
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,6 +54,7 @@ qint64 AudioDevice::readData(char* data, qint64 maxSize) {
|
||||||
#if RESAMPLE_LIBRARY == RESAMPLE_NN
|
#if RESAMPLE_LIBRARY == RESAMPLE_NN
|
||||||
return GBAAudioResampleNN(&m_context->gba->audio, m_ratio, &m_drift, reinterpret_cast<GBAStereoSample*>(data), maxSize / sizeof(GBAStereoSample)) * sizeof(GBAStereoSample);
|
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
|
#elif RESAMPLE_LIBRARY == RESAMPLE_BLIP_BUF
|
||||||
|
GBASyncLockAudio(&m_context->sync);
|
||||||
int available = blip_samples_avail(m_context->gba->audio.left);
|
int available = blip_samples_avail(m_context->gba->audio.left);
|
||||||
if (available > maxSize / sizeof(GBAStereoSample)) {
|
if (available > maxSize / sizeof(GBAStereoSample)) {
|
||||||
available = maxSize / sizeof(GBAStereoSample);
|
available = maxSize / sizeof(GBAStereoSample);
|
||||||
|
|
|
@ -461,7 +461,7 @@ void GameController::clearAVStream() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameController::reloadAudioDriver() {
|
void GameController::reloadAudioDriver() {
|
||||||
m_audioProcessor->pause();
|
QMetaObject::invokeMethod(m_audioProcessor, "pause", Qt::BlockingQueuedConnection);
|
||||||
delete m_audioProcessor;
|
delete m_audioProcessor;
|
||||||
m_audioProcessor = AudioProcessor::create();
|
m_audioProcessor = AudioProcessor::create();
|
||||||
m_audioProcessor->moveToThread(m_audioThread);
|
m_audioProcessor->moveToThread(m_audioThread);
|
||||||
|
|
Loading…
Reference in New Issue