OpenSL ES: Fix EOS handling
This fixes the remaining auto tests that were failing. Change-Id: I3b31263e7912422407cb98b4bf2db7080bcfc1a8 Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
This commit is contained in:
committed by
Christian Stromme
parent
aa16b81872
commit
6d95682d7f
@@ -139,6 +139,9 @@ void QOpenSLESAudioOutput::start(QIODevice *device)
|
|||||||
m_processedBytes += readSize;
|
m_processedBytes += readSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_processedBytes < 1)
|
||||||
|
onEOSEvent();
|
||||||
|
|
||||||
// Change the state to playing.
|
// Change the state to playing.
|
||||||
// We need to do this after filling the buffers or processedBytes might get corrupted.
|
// We need to do this after filling the buffers or processedBytes might get corrupted.
|
||||||
startPlayer();
|
startPlayer();
|
||||||
@@ -380,7 +383,10 @@ void QOpenSLESAudioOutput::bufferAvailable(quint32 count, quint32 playIndex)
|
|||||||
|
|
||||||
if (!m_pullMode) { // We're in push mode.
|
if (!m_pullMode) { // We're in push mode.
|
||||||
// Signal that there is a new open slot in the buffer and return
|
// Signal that there is a new open slot in the buffer and return
|
||||||
m_availableBuffers.fetchAndAddRelease(1);
|
const int val = m_availableBuffers.fetchAndAddRelease(1) + 1;
|
||||||
|
if (val == BUFFER_COUNT)
|
||||||
|
QMetaObject::invokeMethod(this, "onEOSEvent", Qt::QueuedConnection);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -388,8 +394,11 @@ void QOpenSLESAudioOutput::bufferAvailable(quint32 count, quint32 playIndex)
|
|||||||
const int index = m_nextBuffer * m_bufferSize;
|
const int index = m_nextBuffer * m_bufferSize;
|
||||||
const qint64 readSize = m_audioSource->read(m_buffers + index, m_bufferSize);
|
const qint64 readSize = m_audioSource->read(m_buffers + index, m_bufferSize);
|
||||||
|
|
||||||
if (1 > readSize)
|
if (readSize < 1) {
|
||||||
|
QMetaObject::invokeMethod(this, "onEOSEvent", Qt::QueuedConnection);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (SL_RESULT_SUCCESS != (*m_bufferQueueItf)->Enqueue(m_bufferQueueItf,
|
if (SL_RESULT_SUCCESS != (*m_bufferQueueItf)->Enqueue(m_bufferQueueItf,
|
||||||
m_buffers + index,
|
m_buffers + index,
|
||||||
|
|||||||
Reference in New Issue
Block a user