diff options
author | Bartlomiej Moskal <bartlomiej.moskal@qt.io> | 2023-12-20 15:43:04 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2024-01-18 10:20:08 +0000 |
commit | 675efa36c87b5a88b27a7ba014bc5c4b7b6dac26 (patch) | |
tree | 60ccbd6b036bbe037f831eaf66b4f5ee75e25694 /src | |
parent | 53eafd93b0a028be45adb2c440a7b4da207ca7f2 (diff) |
Android: Fix thread race in audio sink for bufferAvailable
tst_qaudiosink was flaky on Android. There reason was possible thread
race when calling bufferAvailable method in QAndroidAudioSink
implementation.
While one call of bufferAvailable was invoke from QT source on
QAndroidAudioSink thread, other call could come from OpenSL ES engine on
different thread. That coused the thread race.
To fix the problem, bufferAvailable will be called always from
QAndroidAudioSink thread.
Additionally turned of testdata with Sample Rate 44,1 MHz for tst_QAudioSink for 23 API (because of crash on emulator x86 API 23)
Pick-to: 6.6 6.5
Fixes: QTBUG-118572
Change-Id: I8b23c871031d4b243e4c39771db83bd5a02260e3
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
(cherry picked from commit c60c9c9abfb42d99b257a73198f6bb66ace76a2a)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/multimedia/android/qandroidaudiosink.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/multimedia/android/qandroidaudiosink.cpp b/src/multimedia/android/qandroidaudiosink.cpp index c4b361b8d..4da4c5fdc 100644 --- a/src/multimedia/android/qandroidaudiosink.cpp +++ b/src/multimedia/android/qandroidaudiosink.cpp @@ -314,7 +314,7 @@ void QAndroidAudioSink::bufferQueueCallback(SLBufferQueueItf bufferQueue, void * { Q_UNUSED(bufferQueue); QAndroidAudioSink *audioOutput = reinterpret_cast<QAndroidAudioSink *>(ctx); - audioOutput->bufferAvailable(); + QMetaObject::invokeMethod(audioOutput, "bufferAvailable", Qt::QueuedConnection); } bool QAndroidAudioSink::preparePlayer() |