summaryrefslogtreecommitdiffstats
path: root/src/multimedia/audio/qaudiooutput_symbian_p.cpp
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2010-09-17 14:13:12 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2010-09-17 14:13:12 (GMT)
commit502f0e852b7e4ef00162246568d7cb7e2dfcae58 (patch)
treeed7768629a44a498b24ea15a3f9dc137349649e5 /src/multimedia/audio/qaudiooutput_symbian_p.cpp
parentcb3b83e64154e9725c0c050ea32a4a632ad9f041 (diff)
parent737b75e19b7206cb9888e87930cb37b1906a6345 (diff)
downloadQt-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.cpp47
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;