From b7d638fdf094551e7ffbb88f4d8c262518e16b20 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 7 Nov 2008 17:32:47 +0100 Subject: When a new audio pid is started, it starts in freezed mode, to allow for a preroll. We need to unfreeze them so the internal state is right. closes #17 --- lib/dvb/decoder.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'lib/dvb/decoder.cpp') diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp index 0ce59d01..fb79f4aa 100644 --- a/lib/dvb/decoder.cpp +++ b/lib/dvb/decoder.cpp @@ -1069,6 +1069,7 @@ RESULT eTSMPEGDecoder::setFastForward(int frames_to_skip) m_is_ff = frames_to_skip != 0; setState(); + unfreeze(); // audio might be restarted and still in preroll (freezed) state. if (m_video) return m_video->setFastForward(frames_to_skip); -- cgit v1.2.3 From bf172c73819b5c577d64afcf86c1eb8852a086a3 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 7 Nov 2008 17:45:26 +0100 Subject: same fix for slowMotion --- lib/dvb/decoder.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'lib/dvb/decoder.cpp') diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp index fb79f4aa..5fa59ed4 100644 --- a/lib/dvb/decoder.cpp +++ b/lib/dvb/decoder.cpp @@ -1082,6 +1082,7 @@ RESULT eTSMPEGDecoder::setSlowMotion(int repeat) m_is_sm = repeat != 0; setState(); + unfreeze(); // audio might be restarted and still in preroll (freezed) state. if (m_video) return m_video->setSlowMotion(repeat); -- cgit v1.2.3 From 9b2e15bfcd146def03ba08f538e0877bd20be749 Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 11 Nov 2008 20:20:20 +0100 Subject: decoder.cpp: stop all pids first, and the restart pids... this hopefully fixes problems on pmt change on DM800/DM8000 --- lib/dvb/decoder.cpp | 49 ++++++++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 19 deletions(-) (limited to 'lib/dvb/decoder.cpp') diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp index 5fa59ed4..6ad39225 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); -- cgit v1.2.3