diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2006-06-16 13:37:29 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2006-06-16 13:37:29 +0000 |
| commit | d9e5e113e9f444c484ee26fda18861c7c211afc7 (patch) | |
| tree | 2530728bfdd6e1fc79493de87b33fdd5b8bbd9f4 | |
| parent | 84fff4d373d10a3676e239c02e759cffff5b5cf2 (diff) | |
| download | enigma2-d9e5e113e9f444c484ee26fda18861c7c211afc7.tar.gz enigma2-d9e5e113e9f444c484ee26fda18861c7c211afc7.zip | |
no more segfault when opening audio track/channel selection on subservices
| -rw-r--r-- | lib/service/servicedvb.cpp | 19 | ||||
| -rw-r--r-- | lib/service/servicedvb.h | 3 |
2 files changed, 12 insertions, 10 deletions
diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 3b111510..84cceec7 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -630,7 +630,7 @@ RESULT eServiceFactoryDVB::lookupService(ePtr<eDVBService> &service, const eServ } eDVBServicePlay::eDVBServicePlay(const eServiceReference &ref, eDVBService *service): - m_reference(ref), m_dvb_service(service), m_is_paused(0) + m_reference(ref), m_dvb_service(service), m_is_paused(0), m_current_audio_channel(-1) { m_is_primary = 1; m_is_pvr = !m_reference.path.empty(); @@ -1279,17 +1279,18 @@ int eDVBServicePlay::selectAudioStream(int i) int eDVBServicePlay::getCurrentChannel() { - int curChannel = m_dvb_service->getCacheEntry(eDVBService::cACHANNEL); - return curChannel == -1 ? STEREO : curChannel; + return m_current_audio_channel == -1 ? STEREO : m_current_audio_channel; } RESULT eDVBServicePlay::selectChannel(int i) { if (i < iAudioChannelSelection::LEFT || i > iAudioChannelSelection::RIGHT) i = -1; // Stereo - if (m_dvb_service->getCacheEntry(eDVBService::cACHANNEL) != i) + if (m_current_audio_channel != i) { - m_dvb_service->setCacheEntry(eDVBService::cACHANNEL, i); + if (m_dvb_service) + m_dvb_service->setCacheEntry(eDVBService::cACHANNEL, i); + m_current_audio_channel=i; if (m_decoder) m_decoder->setAudioChannel(i); } @@ -1685,18 +1686,18 @@ void eDVBServicePlay::updateDecoder() m_decoder->setSyncPCR(pcrpid); else m_decoder->setSyncPCR(-1); -#ifndef INTERNAL_TELETEXT +//#ifndef INTERNAL_TELETEXT m_decoder->setTextPID(tpid); -#else +//#else if (m_teletext_parser) m_teletext_parser->start(tpid); -#endif - +//#endif if (!m_is_primary) m_decoder->setTrickmode(1); m_decoder->start(); + m_current_audio_channel=achannel; m_decoder->setAudioChannel(achannel); // how we can do this better? diff --git a/lib/service/servicedvb.h b/lib/service/servicedvb.h index 5b9cf75c..42457598 100644 --- a/lib/service/servicedvb.h +++ b/lib/service/servicedvb.h @@ -176,7 +176,8 @@ private: int m_timeshift_fd; ePtr<iDVBDemux> m_decode_demux; - + + int m_current_audio_channel; int m_current_audio_stream; int selectAudioStream(int n); |
