no more segfault when opening audio track/channel selection on subservices
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Fri, 16 Jun 2006 13:37:29 +0000 (13:37 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Fri, 16 Jun 2006 13:37:29 +0000 (13:37 +0000)
lib/service/servicedvb.cpp
lib/service/servicedvb.h

index 3b111510102b7fa6e217f80c14bcd0ea4e5c9295..84cceec7abe4a726f9124a514fa184f18a5cc30e 100644 (file)
@@ -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?
index 5b9cf75cd95faf1acddf7989e16c5e5161534eb7..42457598d401cee9bbc7ce5adfb1245ececb31fd 100644 (file)
@@ -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);