src/3rdparty/phonon/mmf/abstractplayer.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
child 7 f7bc934e204c
--- a/src/3rdparty/phonon/mmf/abstractplayer.cpp	Tue Jan 26 12:42:25 2010 +0200
+++ b/src/3rdparty/phonon/mmf/abstractplayer.cpp	Tue Feb 02 00:43:10 2010 +0200
@@ -92,11 +92,6 @@
     m_transitionTime = time;
 }
 
-
-//-----------------------------------------------------------------------------
-// VolumeObserver
-//-----------------------------------------------------------------------------
-
 void MMF::AbstractPlayer::volumeChanged(qreal volume)
 {
     m_volume = volume;
@@ -118,12 +113,14 @@
     // Default behaviour is empty - overridden by VideoPlayer
 }
 
-void MMF::AbstractPlayer::setError(Phonon::ErrorType error)
+void MMF::AbstractPlayer::setError(Phonon::ErrorType error,
+                                   const QString &errorMessage)
 {
     TRACE_CONTEXT(AbstractPlayer::setError, EAudioInternal);
     TRACE_ENTRY("state %d error %d", m_state, error);
 
     m_error = error;
+    m_errorString = errorMessage;
     changeState(ErrorState);
 
     TRACE_EXIT_0();
@@ -132,15 +129,13 @@
 Phonon::ErrorType MMF::AbstractPlayer::errorType() const
 {
     const Phonon::ErrorType result = (ErrorState == m_state)
-                                     ? errorType() : NoError;
+                                     ? m_error : NoError;
     return result;
 }
 
 QString MMF::AbstractPlayer::errorString() const
 {
-    // TODO: put in proper error strings
-    QString result;
-    return result;
+    return m_errorString;
 }
 
 Phonon::State MMF::AbstractPlayer::phononState() const
@@ -173,5 +168,29 @@
     m_state = newState;
 }
 
+void MMF::AbstractPlayer::changeState(PrivateState newState)
+{
+    TRACE_CONTEXT(AbstractPlayer::changeState, EAudioInternal);
+    TRACE_ENTRY("state %d newState %d", privateState(), newState);
+
+    // TODO: add some invariants to check that the transition is valid
+
+    const Phonon::State oldPhononState = phononState(privateState());
+
+    // We need to change the state before we emit stateChanged(), because
+    // some user code, for instance the mediaplayer, switch on MediaObject's
+    // state.
+    setState(newState);
+
+    const Phonon::State newPhononState = phononState(newState);
+
+    if (oldPhononState != newPhononState) {
+        TRACE("emit stateChanged(%d, %d)", newPhononState, oldPhononState);
+        emit stateChanged(newPhononState, oldPhononState);
+    }
+
+    TRACE_EXIT_0();
+}
+
 QT_END_NAMESPACE