fix pid change unfreeze
[enigma2.git] / lib / dvb / decoder.cpp
index ebe3ce24fe90d75f89c42eb60a5458b59e232a31..0280fe520df331eed30416b1340f818705e08b1d 100644 (file)
@@ -1000,7 +1000,7 @@ int eTSMPEGDecoder::setState()
        }
 #endif
 
-       if (m_changed & changeState)
+       if (m_changed & (changeState|changeVideo|changeAudio))
        {
                                        /* play, slowmotion, fast-forward */
                int state_table[6][4] = 
@@ -1013,7 +1013,7 @@ int eTSMPEGDecoder::setState()
                                /* [stateSlowMotion] =           */ {1, m_ff_sm_ratio, 0}
                        };
                int *s = state_table[m_state];
-               if (m_video)
+               if (m_changed & (changeState|changeVideo) && m_video)
                {
                        m_video->setSlowMotion(s[1]);
                        m_video->setFastForward(s[2]);
@@ -1022,7 +1022,7 @@ int eTSMPEGDecoder::setState()
                        else
                                m_video->freeze();
                }
-               if (m_audio)
+               if (m_changed & (changeState|changeAudio) && m_audio)
                {
                        if (s[0])
                                m_audio->unfreeze();
@@ -1170,9 +1170,15 @@ RESULT eTSMPEGDecoder::set()
 RESULT eTSMPEGDecoder::play()
 {
        if (m_state == statePlay)
-               return 0;
-       m_state = statePlay;
-       m_changed |= changeState;
+       {
+               if (!m_changed)
+                       return 0;
+       }
+       else
+       {
+               m_state = statePlay;
+               m_changed |= changeState;
+       }
        return setState();
 }