From 09fd651afb1107d45f5d400fad6bb4bb9b825439 Mon Sep 17 00:00:00 2001 From: ghost Date: Sun, 2 Nov 2008 10:42:12 +0100 Subject: check sid and tsid before start automatic service update (STD update) --- lib/dvb/pmt.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'lib/dvb/pmt.cpp') diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp index 6082bf4a..13734e0d 100644 --- a/lib/dvb/pmt.cpp +++ b/lib/dvb/pmt.cpp @@ -135,7 +135,19 @@ void eDVBServicePMTHandler::PATready(int) if (pmtpid == -1) serviceEvent(eventNoPATEntry); else + { // here we know a pat entry for this service id exist m_PMT.begin(eApp, eDVBPMTSpec(pmtpid, m_reference.getServiceID().get()), m_demux); + if (m_reference.path.empty()) + { // also check the tsid now before start sdt update + eDVBChannelID chid; + m_reference.getChannelID(chid); + if (eTransportStreamID((*i)->getTableIdExtension()) == chid.transport_stream_id) + { + m_dvb_scan = new eDVBScan(m_channel, true, false); + m_dvb_scan->connectEvent(slot(*this, &eDVBServicePMTHandler::SDTScanEvent), m_scan_event_connection); + } + } + } } else serviceEvent(eventNoPAT); } @@ -604,10 +616,7 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux, m_channelEvent_connection); if (ref.path.empty()) - { - m_dvb_scan = new eDVBScan(m_channel, true, false); - m_dvb_scan->connectEvent(slot(*this, &eDVBServicePMTHandler::SDTScanEvent), m_scan_event_connection); - } + m_dvb_scan = 0; } else { if (res == eDVBResourceManager::errAllSourcesBusy) -- cgit v1.2.3 From 1a1aa77247ad62a590f7c91d4e5b9c7b45c9dd25 Mon Sep 17 00:00:00 2001 From: ghost Date: Sun, 2 Nov 2008 12:52:14 +0100 Subject: Revert "check sid and tsid before start automatic service update (STD update)" This reverts commit 21812866841eec7ab7a79ee61067581f8202df55. --- lib/dvb/pmt.cpp | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) (limited to 'lib/dvb/pmt.cpp') diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp index 13734e0d..6082bf4a 100644 --- a/lib/dvb/pmt.cpp +++ b/lib/dvb/pmt.cpp @@ -135,19 +135,7 @@ void eDVBServicePMTHandler::PATready(int) if (pmtpid == -1) serviceEvent(eventNoPATEntry); else - { // here we know a pat entry for this service id exist m_PMT.begin(eApp, eDVBPMTSpec(pmtpid, m_reference.getServiceID().get()), m_demux); - if (m_reference.path.empty()) - { // also check the tsid now before start sdt update - eDVBChannelID chid; - m_reference.getChannelID(chid); - if (eTransportStreamID((*i)->getTableIdExtension()) == chid.transport_stream_id) - { - m_dvb_scan = new eDVBScan(m_channel, true, false); - m_dvb_scan->connectEvent(slot(*this, &eDVBServicePMTHandler::SDTScanEvent), m_scan_event_connection); - } - } - } } else serviceEvent(eventNoPAT); } @@ -616,7 +604,10 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux, m_channelEvent_connection); if (ref.path.empty()) - m_dvb_scan = 0; + { + m_dvb_scan = new eDVBScan(m_channel, true, false); + m_dvb_scan->connectEvent(slot(*this, &eDVBServicePMTHandler::SDTScanEvent), m_scan_event_connection); + } } else { if (res == eDVBResourceManager::errAllSourcesBusy) -- cgit v1.2.3 From f3078c3363b29cdb8ccf05cbb251392966137977 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 3 Nov 2008 21:05:52 +0100 Subject: dont do SDT update when tuned to wrong transponder --- lib/dvb/pmt.cpp | 12 ++++++++++-- lib/dvb/scan.h | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) (limited to 'lib/dvb/pmt.cpp') diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp index 6082bf4a..692428d7 100644 --- a/lib/dvb/pmt.cpp +++ b/lib/dvb/pmt.cpp @@ -524,8 +524,15 @@ void eDVBServicePMTHandler::SDTScanEvent(int event) eDebug("no channel list"); else { - m_dvb_scan->insertInto(db, true); - eDebug("sdt update done!"); + eDVBChannelID chid; + m_reference.getChannelID(chid); + if (chid == m_dvb_scan->getCurrentChannelID()) + { + m_dvb_scan->insertInto(db, true); + eDebug("sdt update done!"); + } + else + eDebug("ignore sdt update data.... incorrect transponder tuned!!!"); } break; } @@ -605,6 +612,7 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux, if (ref.path.empty()) { + m_dvb_scan = 0; m_dvb_scan = new eDVBScan(m_channel, true, false); m_dvb_scan->connectEvent(slot(*this, &eDVBServicePMTHandler::SDTScanEvent), m_scan_event_connection); } diff --git a/lib/dvb/scan.h b/lib/dvb/scan.h index 95e3fb39..38ac784f 100644 --- a/lib/dvb/scan.h +++ b/lib/dvb/scan.h @@ -110,6 +110,7 @@ public: void getLastServiceName(std::string &name); RESULT getFrontend(ePtr &); RESULT getCurrentTransponder(ePtr &); + eDVBChannelID getCurrentChannelID() { return m_chid_current; } }; #endif -- cgit v1.2.3 From 5698c2b573e69c2e62ee8212893f620f0588c208 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 13 Feb 2009 14:40:56 +0100 Subject: better fix for timeshift --- lib/dvb/pmt.cpp | 5 ++++- lib/service/servicedvb.cpp | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) (limited to 'lib/dvb/pmt.cpp') diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp index 279ec74f..0198c8f7 100644 --- a/lib/dvb/pmt.cpp +++ b/lib/dvb/pmt.cpp @@ -605,12 +605,15 @@ void eDVBServicePMTHandler::SDTScanEvent(int event) } } -int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux, eCueSheet *cue, bool simulate) +int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux, eCueSheet *cue, bool simulate, eDVBService *service) { RESULT res=0; m_reference = ref; m_use_decode_demux = use_decode_demux; + + /* use given service as backup. This is used for timeshift where we want to clone the live stream using the cache, but in fact have a PVR channel */ + m_service = service; /* is this a normal (non PVR) channel? */ if (ref.path.empty()) diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 4773d097..8a609095 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -2189,7 +2189,7 @@ void eDVBServicePlay::switchToTimeshift() r.path = m_timeshift_file; m_cue = new eCueSheet(); - m_service_handler_timeshift.tune(r, 1, m_cue); /* use the decoder demux for everything */ + m_service_handler_timeshift.tune(r, 1, m_cue, 0, m_dvb_service); /* use the decoder demux for everything */ eDebug("eDVBServicePlay::switchToTimeshift, in pause mode now."); pause(); @@ -2205,7 +2205,7 @@ void eDVBServicePlay::updateDecoder() eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler; eDVBServicePMTHandler::program program; - if (h.getProgramInfo(program) && m_service_handler.getProgramInfo(program)) + if (h.getProgramInfo(program)) eDebug("getting program info failed."); else { -- cgit v1.2.3