From 5c352c07fe12b7fc866c04ff3a3c9553da4bd44c Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 26 Feb 2009 21:11:26 +0100 Subject: [PATCH] read back corrected frequency from frontend during scan (only DVB-T) --- lib/dvb/scan.cpp | 33 +++++++++++++++++++++++++++++++-- lib/dvb/scan.h | 4 +++- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/lib/dvb/scan.cpp b/lib/dvb/scan.cpp index 76c71011..379ab8e9 100644 --- a/lib/dvb/scan.cpp +++ b/lib/dvb/scan.cpp @@ -740,11 +740,20 @@ void eDVBScan::channelDone() } case iDVBFrontend::feTerrestrial: { + ePtr fe; eDVBFrontendParametersTerrestrial parm; m_ch_current->getDVBT(parm); snprintf(sname, 255, "%d SID 0x%02x", parm.frequency/1000, m_pmt_in_progress->first); + if (!m_channel->getFrontend(fe)) + { + ePyObject tp_dict = PyDict_New(); + fe->getTransponderData(tp_dict, false); + m_corrected_frequencys[m_chid_current] = + PyInt_AsLong(PyDict_GetItemString(tp_dict, "frequency")); + Py_DECREF(tp_dict); + } break; } case iDVBFrontend::feCable: @@ -765,7 +774,8 @@ void eDVBScan::channelDone() if (!(m_flags & scanOnlyFree) || !m_pmt_in_progress->second.scrambled) { SCAN_eDebug("add not scrambled!"); - std::pair >::iterator, bool> i = m_new_services.insert(std::pair >(ref, service)); + std::pair >::iterator, bool> i = + m_new_services.insert(std::pair >(ref, service)); if (i.second) { m_last_service = i.first; @@ -922,6 +932,24 @@ void eDVBScan::insertInto(iDVBChannelList *db, bool dontRemoveOldFlags) for (std::map >::const_iterator ch(m_new_channels.begin()); ch != m_new_channels.end(); ++ch) { + int system; + ch->second->getSystem(system); + if (system == iDVBFrontend::feTerrestrial) + { + std::map::iterator it = m_corrected_frequencys.find(ch->first); + if (it != m_corrected_frequencys.end()) + { + eDVBFrontendParameters *p = (eDVBFrontendParameters*)&(*ch->second); + eDVBFrontendParametersTerrestrial parm; + p->getDVBT(parm); + eDebug("corrected freq for tsid %04x, onid %04x, ns %08x is %d, old was %d", + ch->first.transport_stream_id.get(), ch->first.original_network_id.get(), + ch->first.dvbnamespace.get(), it->second, parm.frequency); + parm.frequency = it->second; + p->setDVBT(parm); + m_corrected_frequencys.erase(it); + } + } if (m_flags & scanOnlyFree) { eDVBFrontendParameters *ptr = (eDVBFrontendParameters*)&(*ch->second); @@ -1036,7 +1064,8 @@ RESULT eDVBScan::processSDT(eDVBNamespace dvbnamespace, const ServiceDescription } } - std::pair >::iterator, bool> i = m_new_services.insert(std::pair >(ref, service)); + std::pair >::iterator, bool> i = + m_new_services.insert(std::pair >(ref, service)); if (i.second) { diff --git a/lib/dvb/scan.h b/lib/dvb/scan.h index 38ac784f..9f0dd6ef 100644 --- a/lib/dvb/scan.h +++ b/lib/dvb/scan.h @@ -50,7 +50,9 @@ class eDVBScan: public Object, public iObject /* scan state variables */ int m_channel_state; int m_ready, m_ready_all; - + + std::map m_corrected_frequencys; // yet just used for DVB-T + std::map > m_new_channels; std::map > m_new_services; std::map >::iterator m_last_service; -- 2.30.2