diff options
author | Mika Salmela <mika.salmela@qt.io> | 2017-06-08 16:33:29 +0300 |
---|---|---|
committer | Mika Salmela <mika.salmela@qt.io> | 2017-06-12 18:31:11 +0000 |
commit | 19a5884e8d6bfa9d3bdfce359ce39deef4c48110 (patch) | |
tree | f3078301f0fc7d1970f692914c49db0fad12e7d8 | |
parent | a6cc1af0546ab10701c10475315139ebb50ad1e5 (diff) |
OpenSL ES: Fix crash caused by overcommitting device with data
Sometimes m_format.bytesForDuration(delta) is larger than the QByteArray
containing the data. Therefore select the minimum of these.
Task-number: QTBUG-61085
Change-Id: I20a8ffb77095aecd2711f53d4c9fc7da7f9ae8e2
Reviewed-by: Christian Stromme <christian.stromme@qt.io>
-rw-r--r-- | src/plugins/opensles/qopenslesaudioinput.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/plugins/opensles/qopenslesaudioinput.cpp b/src/plugins/opensles/qopenslesaudioinput.cpp index c3f5ed422..ad87cb057 100644 --- a/src/plugins/opensles/qopenslesaudioinput.cpp +++ b/src/plugins/opensles/qopenslesaudioinput.cpp @@ -475,8 +475,11 @@ void QOpenSLESAudioInput::flushBuffers() qint64 delta = recorderPos * 1000 - devicePos; - if (delta > 0) - writeDataToDevice(m_buffers[m_currentBuffer].constData(), m_format.bytesForDuration(delta)); + if (delta > 0) { + const int writeSize = std::min(m_buffers[m_currentBuffer].size(), + m_format.bytesForDuration(delta)); + writeDataToDevice(m_buffers[m_currentBuffer].constData(), writeSize); + } } int QOpenSLESAudioInput::bytesReady() const |