Qt: Fix thread sync issues with QtMultimedia audio driver

This commit is contained in:
Jeffrey Pfau 2015-02-21 02:44:59 -08:00
parent 56475e578b
commit 37fd51df39
2 changed files with 3 additions and 1 deletions

View File

@ -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);

View File

@ -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);