diff options
| author | ghost <andreas.monzner@multimedia-labs.de> | 2010-01-02 12:11:57 +0100 |
|---|---|---|
| committer | ghost <andreas.monzner@multimedia-labs.de> | 2010-01-02 12:11:57 +0100 |
| commit | 734c3316b09f9dab14338d66ea2400dd734a0080 (patch) | |
| tree | 3c1a1eacfbce55d10f330d42fb0367c4bf840240 | |
| parent | a8d991ca3b2f7cd9b85bd54ea4eaa661c06a3d71 (diff) | |
| download | enigma2-734c3316b09f9dab14338d66ea2400dd734a0080.tar.gz enigma2-734c3316b09f9dab14338d66ea2400dd734a0080.zip | |
fixed evSeekableStateChanged handling
| -rw-r--r-- | lib/service/servicedvb.cpp | 18 | ||||
| -rw-r--r-- | lib/service/servicedvb.h | 2 |
2 files changed, 11 insertions, 9 deletions
diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 69329ce0..64545227 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -1391,7 +1391,7 @@ RESULT eDVBServicePlay::isCurrentlySeekable() if (m_decoder) { ret = (m_is_pvr || m_timeshift_active) ? 3 : 0; // fast forward/backward possible and seeking possible - if (m_decoder->getVideoWidth() == -1) + if (m_decoder->getVideoProgressive() == -1) ret &= ~2; } return ret; @@ -2267,9 +2267,7 @@ void eDVBServicePlay::switchToLive() m_timeshift_active = 0; m_timeshift_changed = 1; - m_event((iPlayableService*)this, evSeekableStatusChanged); - - updateDecoder(); + updateDecoder(true); } void eDVBServicePlay::switchToTimeshift() @@ -2299,12 +2297,10 @@ void eDVBServicePlay::switchToTimeshift() eDebug("eDVBServicePlay::switchToTimeshift, in pause mode now."); pause(); - updateDecoder(); /* mainly to switch off PCR, and to set pause */ - - m_event((iPlayableService*)this, evSeekableStatusChanged); + updateDecoder(true); /* mainly to switch off PCR, and to set pause */ } -void eDVBServicePlay::updateDecoder() +void eDVBServicePlay::updateDecoder(bool sendSeekableStateChanged) { int vpid = -1, vpidtype = -1, pcrpid = -1, tpid = -1, achannel = -1, ac3_delay=-1, pcm_delay=-1; @@ -2398,6 +2394,7 @@ void eDVBServicePlay::updateDecoder() if (m_decoder) { + bool wasSeekable = m_decoder->getVideoProgressive() != -1; if (m_dvb_service) { achannel = m_dvb_service->getCacheEntry(eDVBService::cACHANNEL); @@ -2468,8 +2465,13 @@ void eDVBServicePlay::updateDecoder() m_dvb_service->setCacheEntry(eDVBService::cPCRPID, pcrpid); m_dvb_service->setCacheEntry(eDVBService::cTPID, tpid); } + if (!sendSeekableStateChanged && (m_decoder->getVideoProgressive() != -1) != wasSeekable) + sendSeekableStateChanged = true; } m_have_video_pid = (vpid > 0 && vpid < 0x2000); + + if (sendSeekableStateChanged) + m_event((iPlayableService*)this, evSeekableStatusChanged); } void eDVBServicePlay::loadCuesheet() diff --git a/lib/service/servicedvb.h b/lib/service/servicedvb.h index e3c7fd58..42647b92 100644 --- a/lib/service/servicedvb.h +++ b/lib/service/servicedvb.h @@ -230,7 +230,7 @@ private: void switchToLive(); void switchToTimeshift(); - void updateDecoder(); + void updateDecoder(bool sendSeekableStateChanged=false); int m_skipmode; int m_fastforward; |
