From 19a5884e8d6bfa9d3bdfce359ce39deef4c48110 Mon Sep 17 00:00:00 2001 From: Mika Salmela Date: Thu, 8 Jun 2017 16:33:29 +0300 Subject: 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 --- src/plugins/opensles/qopenslesaudioinput.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src') 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 -- cgit v1.2.3