aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-06-16 13:37:29 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-06-16 13:37:29 +0000
commitd9e5e113e9f444c484ee26fda18861c7c211afc7 (patch)
tree2530728bfdd6e1fc79493de87b33fdd5b8bbd9f4
parent84fff4d373d10a3676e239c02e759cffff5b5cf2 (diff)
downloadenigma2-d9e5e113e9f444c484ee26fda18861c7c211afc7.tar.gz
enigma2-d9e5e113e9f444c484ee26fda18861c7c211afc7.zip
no more segfault when opening audio track/channel selection on subservices
-rw-r--r--lib/service/servicedvb.cpp19
-rw-r--r--lib/service/servicedvb.h3
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);