case 1: bandwidth = eDVBFrontendParametersTerrestrial::Bandwidth_7MHz; break;
case 2: bandwidth = eDVBFrontendParametersTerrestrial::Bandwidth_6MHz; break;
case 3: bandwidth = eDVBFrontendParametersTerrestrial::Bandwidth_5MHz; break;
- case 4: bandwidth = eDVBFrontendParametersTerrestrial::Bandwidth_10MHz; break;
- case 5: bandwidth = eDVBFrontendParametersTerrestrial::Bandwidth_1_712MHz; break;
default: bandwidth = eDVBFrontendParametersTerrestrial::Bandwidth_Auto; break;
}
switch (descriptor.getCodeRateHpStream())
case 0: transmission_mode = eDVBFrontendParametersTerrestrial::TransmissionMode_2k; break;
case 1: transmission_mode = eDVBFrontendParametersTerrestrial::TransmissionMode_8k; break;
case 2: transmission_mode = eDVBFrontendParametersTerrestrial::TransmissionMode_4k; break;
- case 3: transmission_mode = eDVBFrontendParametersTerrestrial::TransmissionMode_1k; break;
- case 4: transmission_mode = eDVBFrontendParametersTerrestrial::TransmissionMode_16k; break;
- case 5: transmission_mode = eDVBFrontendParametersTerrestrial::TransmissionMode_32k; break;
default: transmission_mode = eDVBFrontendParametersTerrestrial::TransmissionMode_Auto; break;
}
switch (descriptor.getGuardInterval())
case 1: guard_interval = eDVBFrontendParametersTerrestrial::GuardInterval_1_16; break;
case 2: guard_interval = eDVBFrontendParametersTerrestrial::GuardInterval_1_8; break;
case 3: guard_interval = eDVBFrontendParametersTerrestrial::GuardInterval_1_4; break;
- case 4: guard_interval = eDVBFrontendParametersTerrestrial::GuardInterval_1_128; break;
- case 5: guard_interval = eDVBFrontendParametersTerrestrial::GuardInterval_19_128; break;
- case 6: guard_interval = eDVBFrontendParametersTerrestrial::GuardInterval_19_256; break;
default: guard_interval = eDVBFrontendParametersTerrestrial::GuardInterval_Auto; break;
}
// hierarchy = descriptor.getHierarchyInformation();
guard_interval, hierarchy, modulation);
}
+void eDVBFrontendParametersTerrestrial::set(const T2DeliverySystemDescriptor &descriptor)
+{
+ switch (descriptor.getBandwidth())
+ {
+ case 0: bandwidth = eDVBFrontendParametersTerrestrial::Bandwidth_8MHz; break;
+ case 1: bandwidth = eDVBFrontendParametersTerrestrial::Bandwidth_7MHz; break;
+ case 2: bandwidth = eDVBFrontendParametersTerrestrial::Bandwidth_6MHz; break;
+ case 3: bandwidth = eDVBFrontendParametersTerrestrial::Bandwidth_5MHz; break;
+ case 4: bandwidth = eDVBFrontendParametersTerrestrial::Bandwidth_10MHz; break;
+ case 5: bandwidth = eDVBFrontendParametersTerrestrial::Bandwidth_1_712MHz; break;
+ default: bandwidth = eDVBFrontendParametersTerrestrial::Bandwidth_Auto; break;
+ }
+ switch (descriptor.getTransmissionMode())
+ {
+ case 0: transmission_mode = eDVBFrontendParametersTerrestrial::TransmissionMode_2k; break;
+ case 1: transmission_mode = eDVBFrontendParametersTerrestrial::TransmissionMode_8k; break;
+ case 2: transmission_mode = eDVBFrontendParametersTerrestrial::TransmissionMode_4k; break;
+ case 3: transmission_mode = eDVBFrontendParametersTerrestrial::TransmissionMode_1k; break;
+ case 4: transmission_mode = eDVBFrontendParametersTerrestrial::TransmissionMode_16k; break;
+ case 5: transmission_mode = eDVBFrontendParametersTerrestrial::TransmissionMode_32k; break;
+ default: transmission_mode = eDVBFrontendParametersTerrestrial::TransmissionMode_Auto; break;
+ }
+ switch (descriptor.getGuardInterval())
+ {
+ case 0: guard_interval = eDVBFrontendParametersTerrestrial::GuardInterval_1_32; break;
+ case 1: guard_interval = eDVBFrontendParametersTerrestrial::GuardInterval_1_16; break;
+ case 2: guard_interval = eDVBFrontendParametersTerrestrial::GuardInterval_1_8; break;
+ case 3: guard_interval = eDVBFrontendParametersTerrestrial::GuardInterval_1_4; break;
+ case 4: guard_interval = eDVBFrontendParametersTerrestrial::GuardInterval_1_128; break;
+ case 5: guard_interval = eDVBFrontendParametersTerrestrial::GuardInterval_19_128; break;
+ case 6: guard_interval = eDVBFrontendParametersTerrestrial::GuardInterval_19_256; break;
+ default: guard_interval = eDVBFrontendParametersTerrestrial::GuardInterval_Auto; break;
+ }
+ plpid = descriptor.getPlpId();
+ code_rate_HP = eDVBFrontendParametersTerrestrial::FEC_Auto;
+ code_rate_LP = eDVBFrontendParametersTerrestrial::FEC_Auto;
+ hierarchy = eDVBFrontendParametersTerrestrial::Hierarchy_Auto;
+ modulation = eDVBFrontendParametersTerrestrial::Modulation_Auto;
+ inversion = eDVBFrontendParametersTerrestrial::Inversion_Unknown;
+ system = eDVBFrontendParametersTerrestrial::System_DVB_T2;
+ eDebug("T2 bw %d, tm_mode %d, guard %d, plpid %d",
+ bandwidth, transmission_mode, guard_interval, plpid);
+}
+
eDVBFrontendParameters::eDVBFrontendParameters()
:m_type(-1), m_flags(0)
{
#include <dvbsi++/satellite_delivery_system_descriptor.h>
#include <dvbsi++/cable_delivery_system_descriptor.h>
#include <dvbsi++/terrestrial_delivery_system_descriptor.h>
+#include <dvbsi++/t2_delivery_system_descriptor.h>
struct eDVBFrontendParametersSatellite
{
{
#ifndef SWIG
void set(const TerrestrialDeliverySystemDescriptor &);
+ void set(const T2DeliverySystemDescriptor &);
#endif
enum {
#include <dvbsi++/service_descriptor.h>
#include <dvbsi++/satellite_delivery_system_descriptor.h>
#include <dvbsi++/terrestrial_delivery_system_descriptor.h>
+#include <dvbsi++/t2_delivery_system_descriptor.h>
#include <dvbsi++/cable_delivery_system_descriptor.h>
#include <dvbsi++/ca_identifier_descriptor.h>
#include <dvbsi++/registration_descriptor.h>
+#include <dvbsi++/extension_descriptor.h>
+#include <dvbsi++/frequency_list_descriptor.h>
#include <lib/dvb/specs.h>
#include <lib/dvb/esection.h>
#include <lib/dvb/scan.h>
m_new_channels.insert(std::pair<eDVBChannelID,ePtr<iDVBFrontendParameters> >(chid, feparm));
}
-void eDVBScan::addChannelToScan(const eDVBChannelID &chid, iDVBFrontendParameters *feparm)
+void eDVBScan::addChannelToScan(iDVBFrontendParameters *feparm)
{
/* check if we don't already have that channel ... */
{
SCAN_eDebug("TSID: %04x ONID: %04x", (*tsinfo)->getTransportStreamId(),
(*tsinfo)->getOriginalNetworkId());
-
- eOriginalNetworkID onid = (*tsinfo)->getOriginalNetworkId();
- eTransportStreamID tsid = (*tsinfo)->getTransportStreamId();
+
+ bool T2 = false;
+ eDVBFrontendParametersTerrestrial t2transponder;
for (DescriptorConstIterator desc = (*tsinfo)->getDescriptors()->begin();
desc != (*tsinfo)->getDescriptors()->end(); ++desc)
cable.set(d);
feparm->setDVBC(cable);
- unsigned long hash=0;
- feparm->getHash(hash);
- eDVBNamespace ns = buildNamespace(onid, tsid, hash);
-
- addChannelToScan(
- eDVBChannelID(ns, tsid, onid),
- feparm);
+ addChannelToScan(feparm);
break;
}
case TERRESTRIAL_DELIVERY_SYSTEM_DESCRIPTOR:
terr.set(d);
feparm->setDVBT(terr);
- unsigned long hash=0;
- feparm->getHash(hash);
- eDVBNamespace ns = buildNamespace(onid, tsid, hash);
-
- addChannelToScan(
- eDVBChannelID(ns, tsid, onid),
- feparm);
+ addChannelToScan(feparm);
break;
}
case SATELLITE_DELIVERY_SYSTEM_DESCRIPTOR:
SCAN_eDebug("dropping this transponder, it's on another satellite.");
else
{
- unsigned long hash=0;
- feparm->getHash(hash);
- addChannelToScan(
- eDVBChannelID(buildNamespace(onid, tsid, hash), tsid, onid),
- feparm);
+ addChannelToScan(feparm);
+ }
+ break;
+ }
+ case EXTENSION_DESCRIPTOR:
+ {
+ if (system != iDVBFrontend::feTerrestrial)
+ break; // when current locked transponder is no terrestrial transponder ignore this descriptor
+
+ ExtensionDescriptor &d = (ExtensionDescriptor&)**desc;
+ switch (d.getExtensionTag())
+ {
+ case T2_DELIVERY_SYSTEM_DESCRIPTOR:
+ T2 = true;
+ T2DeliverySystemDescriptor &d = (T2DeliverySystemDescriptor&)**desc;
+ t2transponder.set(d);
+
+ for (T2CellConstIterator cell = d.getCells()->begin();
+ cell != d.getCells()->end(); ++cell)
+ {
+ for (T2FrequencyConstIterator freq = (*cell)->getCentreFrequencies()->begin();
+ freq != (*cell)->getCentreFrequencies()->end(); ++freq)
+ {
+ t2transponder.frequency = (*freq) * 10;
+ ePtr<eDVBFrontendParameters> feparm = new eDVBFrontendParameters;
+ feparm->setDVBT(t2transponder);
+ addChannelToScan(feparm);
+ }
+ }
+ }
+ break;
+ }
+ case FREQUENCY_LIST_DESCRIPTOR:
+ {
+ if (system != iDVBFrontend::feTerrestrial)
+ break; // when current locked transponder is no terrestrial transponder ignore this descriptor
+ if (!T2)
+ break;
+
+ FrequencyListDescriptor &d = (FrequencyListDescriptor&)**desc;
+ if (d.getCodingType() != 0x03)
+ break;
+
+ for (CentreFrequencyConstIterator it = d.getCentreFrequencies()->begin();
+ it != d.getCentreFrequencies()->end(); ++it)
+ {
+ t2transponder.frequency = (*it) * 10;
+ ePtr<eDVBFrontendParameters> feparm = new eDVBFrontendParameters;
+ feparm->setDVBT(t2transponder);
+ addChannelToScan(feparm);
}
break;
}
void PMTready(int err);
void addKnownGoodChannel(const eDVBChannelID &chid, iDVBFrontendParameters *feparm);
- void addChannelToScan(const eDVBChannelID &chid, iDVBFrontendParameters *feparm);
+ void addChannelToScan(iDVBFrontendParameters *feparm);
int sameChannel(iDVBFrontendParameters *ch1, iDVBFrontendParameters *ch2, bool exact=false) const;