diff options
author | Qt Continuous Integration System <qt-info@nokia.com> | 2010-09-17 14:13:12 (GMT) |
---|---|---|
committer | Qt Continuous Integration System <qt-info@nokia.com> | 2010-09-17 14:13:12 (GMT) |
commit | 502f0e852b7e4ef00162246568d7cb7e2dfcae58 (patch) | |
tree | ed7768629a44a498b24ea15a3f9dc137349649e5 /src/multimedia/audio/qaudiooutput_symbian_p.cpp | |
parent | cb3b83e64154e9725c0c050ea32a4a632ad9f041 (diff) | |
parent | 737b75e19b7206cb9888e87930cb37b1906a6345 (diff) | |
download | Qt-502f0e852b7e4ef00162246568d7cb7e2dfcae58.zip Qt-502f0e852b7e4ef00162246568d7cb7e2dfcae58.tar.gz Qt-502f0e852b7e4ef00162246568d7cb7e2dfcae58.tar.bz2 |
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/qt-s60-public into 4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/qt-s60-public:
Implement QAudioInput::suspend() using CMMFDevSound::Stop()
Discard buffer pointer when DevSound is stopped
Suppress overflow errors raised by Symbian DevSound during playback
Discard empty buffer on call to QAudioOutput::resume()
Permit QAudioOutput::processedUSecs() to be called immediately after start()
Discard all DevSound buffers held when QAudioInput::suspend() called
Fixed buffer overrun in Symbian QAudioInput backend
QS60Style does not show checkbox for checkable item in QTreeView
Load environment.prf from Symbian SDK if it exists there
Remove pre-Symbian3 plugins from Symbian3 and later builds
Panic in qs60style.cpp while drawing a QTreeView
Diffstat (limited to 'src/multimedia/audio/qaudiooutput_symbian_p.cpp')
-rw-r--r-- | src/multimedia/audio/qaudiooutput_symbian_p.cpp | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/src/multimedia/audio/qaudiooutput_symbian_p.cpp b/src/multimedia/audio/qaudiooutput_symbian_p.cpp index 5098469..ea14e19 100644 --- a/src/multimedia/audio/qaudiooutput_symbian_p.cpp +++ b/src/multimedia/audio/qaudiooutput_symbian_p.cpp @@ -180,39 +180,33 @@ void QAudioOutputPrivate::suspend() || SymbianAudio::IdleState == m_internalState) { m_notifyTimer->stop(); m_underflowTimer->stop(); - const qint64 samplesWritten = SymbianAudio::Utils::bytesToSamples( m_format, m_bytesWritten); - const qint64 samplesPlayed = getSamplesPlayed(); - - m_bytesWritten = 0; - - // CMMFDevSound::Pause() is not guaranteed to work correctly in all - // implementations, for play-mode DevSound sessions. We therefore - // have to implement suspend() by calling CMMFDevSound::Stop(). - // Because this causes buffered data to be dropped, we replace the - // lost data with silence following a call to resume(), in order to - // ensure that processedUSecs() returns the correct value. - m_devSound->stop(); m_totalSamplesPlayed += samplesPlayed; - - // Calculate the amount of data dropped - const qint64 paddingSamples = samplesWritten - samplesPlayed; - Q_ASSERT(paddingSamples >= 0); - m_bytesPadding = SymbianAudio::Utils::samplesToBytes(m_format, - paddingSamples); - - setState(SymbianAudio::SuspendedState); + m_bytesWritten = 0; + const bool paused = m_devSound->pause(); + if (paused) { + setState(SymbianAudio::SuspendedPausedState); + } else { + m_devSoundBuffer = 0; + // Calculate the amount of data dropped + const qint64 paddingSamples = samplesWritten - samplesPlayed; + Q_ASSERT(paddingSamples >= 0); + m_bytesPadding = SymbianAudio::Utils::samplesToBytes(m_format, + paddingSamples); + setState(SymbianAudio::SuspendedStoppedState); + } } } void QAudioOutputPrivate::resume() { - if (SymbianAudio::SuspendedState == m_internalState) { - if (!m_pullMode && m_devSoundBuffer && m_devSoundBuffer->Data().Length()) - bufferFilled(); - startPlayback(); + if (QAudio::SuspendedState == m_externalState) { + if (SymbianAudio::SuspendedPausedState == m_internalState) + m_devSound->resume(); + else + startPlayback(); } } @@ -270,7 +264,7 @@ int QAudioOutputPrivate::notifyInterval() const qint64 QAudioOutputPrivate::processedUSecs() const { int samplesPlayed = 0; - if (m_devSound && SymbianAudio::SuspendedState != m_internalState) + if (m_devSound && QAudio::SuspendedState != m_externalState) samplesPlayed = getSamplesPlayed(); // Protect against division by zero @@ -371,6 +365,9 @@ void QAudioOutputPrivate::devsoundPlayError(int err) else setState(SymbianAudio::IdleState); break; + case KErrOverflow: + // Silently consume this error when in playback mode + break; default: setError(QAudio::IOError); break; |