summaryrefslogtreecommitdiff
path: root/lib/dvb/decoder.cpp
diff options
context:
space:
mode:
authorghost <andreas.monzner@multimedia-labs.de>2008-11-11 19:20:20 (GMT)
committerghost <andreas.monzner@multimedia-labs.de>2008-11-11 19:20:20 (GMT)
commit9b2e15bfcd146def03ba08f538e0877bd20be749 (patch)
treeaa1a01c4bcd20ebc48187eab75631ab89fa9c2b6 /lib/dvb/decoder.cpp
parent17e9e23c08a998eaa4ba6940cd09a9455f2ccf59 (diff)
decoder.cpp: stop all pids first, and the restart pids... this hopefully fixes problems on pmt change on DM800/DM8000
Diffstat (limited to 'lib/dvb/decoder.cpp')
-rw-r--r--lib/dvb/decoder.cpp49
1 files changed, 30 insertions, 19 deletions
diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp
index 5fa59ed..6ad3922 100644
--- a/lib/dvb/decoder.cpp
+++ b/lib/dvb/decoder.cpp
@@ -836,37 +836,40 @@ int eTSMPEGDecoder::setState()
if (m_pcr)
m_pcr->stop();
m_pcr = 0;
- if ((m_pcrpid >= 0) && (m_pcrpid < 0x1FFF))
- {
- m_pcr = new eDVBPCR(m_demux);
- if (m_pcr->startPid(m_pcrpid))
- res = -1;
- }
- m_changed &= ~changePCR;
}
if (m_changed & changeVideo)
{
- eDebug("VIDEO CHANGED (to %04x)", m_vpid);
if (m_video)
{
m_video->stop();
m_video = 0;
m_video_event_conn = 0;
}
- if ((m_vpid >= 0) && (m_vpid < 0x1FFF))
- {
- m_video = new eDVBVideo(m_demux, m_decoder);
- m_video->connectEvent(slot(*this, &eTSMPEGDecoder::video_event), m_video_event_conn);
- if (m_video->startPid(m_vpid, m_vtype))
- res = -1;
- }
- m_changed &= ~changeVideo;
}
if (m_changed & changeAudio)
{
if (m_audio)
m_audio->stop();
m_audio = 0;
+ }
+ if (m_changed & changeText)
+ {
+ if (m_text)
+ m_text->stop();
+ m_text = 0;
+ }
+ if (m_changed & changePCR)
+ {
+ if ((m_pcrpid >= 0) && (m_pcrpid < 0x1FFF))
+ {
+ m_pcr = new eDVBPCR(m_demux);
+ if (m_pcr->startPid(m_pcrpid))
+ res = -1;
+ }
+ m_changed &= ~changePCR;
+ }
+ if (m_changed & changeAudio)
+ {
if ((m_apid >= 0) && (m_apid < 0x1FFF) && !noaudio)
{
m_audio = new eDVBAudio(m_demux, m_decoder);
@@ -875,11 +878,19 @@ int eTSMPEGDecoder::setState()
}
m_changed &= ~changeAudio;
}
+ if (m_changed & changeVideo)
+ {
+ if ((m_vpid >= 0) && (m_vpid < 0x1FFF))
+ {
+ m_video = new eDVBVideo(m_demux, m_decoder);
+ m_video->connectEvent(slot(*this, &eTSMPEGDecoder::video_event), m_video_event_conn);
+ if (m_video->startPid(m_vpid, m_vtype))
+ res = -1;
+ }
+ m_changed &= ~changeVideo;
+ }
if (m_changed & changeText)
{
- if (m_text)
- m_text->stop();
- m_text = 0;
if ((m_textpid >= 0) && (m_textpid < 0x1FFF) && !nott)
{
m_text = new eDVBTText(m_demux);