X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;f=lib%2Fdvb%2Fdb.cpp;h=fb0b66cbc3967c0345610593bd9d92459f27a6bd;hb=43ee1a487f6052811ba3076c3d7d44bf865b8a4d;hp=0547407132b3b9e765e83d4314b63cb89095398b;hpb=bebd975124d229da970d05a3ca20acda3060fb1d;p=vuplus_dvbapp diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp old mode 100644 new mode 100755 index 0547407..fb0b66c --- a/lib/dvb/db.cpp +++ b/lib/dvb/db.cpp @@ -398,8 +398,9 @@ void eDVBDB::loadServicelist(const char *file) } else if (line[1]=='t') { eDVBFrontendParametersTerrestrial ter; - int frequency, bandwidth, code_rate_HP, code_rate_LP, modulation, transmission_mode, guard_interval, hierarchy, inversion, flags=0; - sscanf(line+3, "%d:%d:%d:%d:%d:%d:%d:%d:%d:%d", &frequency, &bandwidth, &code_rate_HP, &code_rate_LP, &modulation, &transmission_mode, &guard_interval, &hierarchy, &inversion, &flags); + int frequency, bandwidth, code_rate_HP, code_rate_LP, modulation, transmission_mode, guard_interval, hierarchy, inversion, flags = 0, plpid = 0; + int system=eDVBFrontendParametersTerrestrial::System_DVB_T; + sscanf(line+3, "%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d", &frequency, &bandwidth, &code_rate_HP, &code_rate_LP, &modulation, &transmission_mode, &guard_interval, &hierarchy, &inversion, &flags, &system, &plpid); ter.frequency = frequency; ter.bandwidth = bandwidth; ter.code_rate_HP = code_rate_HP; @@ -409,6 +410,8 @@ void eDVBDB::loadServicelist(const char *file) ter.guard_interval = guard_interval; ter.hierarchy = hierarchy; ter.inversion = inversion; + ter.system = system; + ter.plpid = plpid; feparm->setDVBT(ter); feparm->setFlags(flags); } else if (line[1]=='c') @@ -532,10 +535,10 @@ void eDVBDB::saveServicelist(const char *file) } else if (!ch.m_frontendParameters->getDVBT(ter)) { - fprintf(f, "\tt %d:%d:%d:%d:%d:%d:%d:%d:%d:%d\n", + fprintf(f, "\tt %d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d\n", ter.frequency, ter.bandwidth, ter.code_rate_HP, ter.code_rate_LP, ter.modulation, ter.transmission_mode, - ter.guard_interval, ter.hierarchy, ter.inversion, flags); + ter.guard_interval, ter.hierarchy, ter.inversion, flags, ter.system, ter.plpid); } else if (!ch.m_frontendParameters->getDVBC(cab)) { @@ -633,29 +636,24 @@ void eDVBDB::loadBouquet(const char *path) return; } int entries=0; - char line[256]; + size_t linesize = 256; + char *line = (char*)malloc(linesize); bool read_descr=false; eServiceReference *e = NULL; while (1) { - if (!fgets(line, 256, fp)) - break; - line[strlen(line)-1]=0; - if (strlen(line) && line[strlen(line)-1]=='\r') - line[strlen(line)-1]=0; - if (!line[0]) - break; + int len; + if ((len = getline(&line, &linesize, fp)) < 2) break; + /* strip newline */ + line[--len] = 0; + /* strip carriage return (when found) */ + if (line[len - 1] == '\r') line[--len] = 0; if (line[0]=='#') { if (!strncmp(line, "#SERVICE", 8)) { int offs = line[8] == ':' ? 10 : 9; eServiceReference tmp(line+offs); - if (tmp.type != eServiceReference::idDVB) - { - eDebug("only DVB Bouquets supported"); - continue; - } if ( tmp.flags&eServiceReference::canDescent ) { size_t pos = tmp.path.rfind('/'); @@ -705,6 +703,7 @@ void eDVBDB::loadBouquet(const char *path) continue; } } + free(line); fclose(fp); eDebug("%d entries in Bouquet %s", entries, bouquet_name.c_str()); } @@ -1062,7 +1061,8 @@ PyObject *eDVBDB::readTerrestrials(ePyObject ter_list, ePyObject tp_dict) const Attribute *at; std::string name; int tmp, *dest, - freq, bw, constellation, crh = 5, crl = 5, guard = 4, transm, hierarchy, inv = 2; +// freq, bw, constellation, crh = 5, crl = 5, guard = 4, transm, hierarchy, inv = 2; + freq, bw, constellation, crh, crl, guard, transm, hierarchy, inv, system, plpid; char *end_ptr; const ElementList &root_elements = root->getElementList(); for (ElementConstIterator it(root_elements.begin()); it != root_elements.end(); ++it) @@ -1112,6 +1112,8 @@ PyObject *eDVBDB::readTerrestrials(ePyObject ter_list, ePyObject tp_dict) transm = eDVBFrontendParametersTerrestrial::TransmissionMode_Auto; hierarchy = eDVBFrontendParametersTerrestrial::Hierarchy_Auto; inv = eDVBFrontendParametersTerrestrial::Inversion_Unknown; + system = eDVBFrontendParametersTerrestrial::System_DVB_T; + plpid = 0; for (AttributeConstIterator it(tp_attributes.begin()); it != end; ++it) { // eDebug("\t\tattr: %s", at->name().c_str()); @@ -1127,6 +1129,8 @@ PyObject *eDVBDB::readTerrestrials(ePyObject ter_list, ePyObject tp_dict) else if (name == "transmission_mode") dest = &transm; else if (name == "hierarchy_information") dest = &hierarchy; else if (name == "inversion") dest = &inv; + else if (name == "system") dest = &system; + else if (name == "plp_id") dest = &plpid; else continue; if (dest) { @@ -1137,11 +1141,11 @@ PyObject *eDVBDB::readTerrestrials(ePyObject ter_list, ePyObject tp_dict) } if (freq) { - if (crh > 5) // our terrestrial.xml is buggy... 6 for AUTO - crh = 5; - if (crl > 5) // our terrestrial.xml is buggy... 6 for AUTO - crl = 5; - tuple = PyTuple_New(10); + if (crh > eDVBFrontendParametersTerrestrial::FEC_8_9) + crh = eDVBFrontendParametersTerrestrial::FEC_Auto; + if (crl > eDVBFrontendParametersTerrestrial::FEC_8_9) + crl = eDVBFrontendParametersTerrestrial::FEC_Auto; + tuple = PyTuple_New(12); PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong(2)); PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong(freq)); PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong(bw)); @@ -1152,6 +1156,8 @@ PyObject *eDVBDB::readTerrestrials(ePyObject ter_list, ePyObject tp_dict) PyTuple_SET_ITEM(tuple, 7, PyInt_FromLong(transm)); PyTuple_SET_ITEM(tuple, 8, PyInt_FromLong(hierarchy)); PyTuple_SET_ITEM(tuple, 9, PyInt_FromLong(inv)); + PyTuple_SET_ITEM(tuple, 10, PyInt_FromLong(system)); + PyTuple_SET_ITEM(tuple, 11, PyInt_FromLong(plpid)); PyList_Append(tplist, tuple); Py_DECREF(tuple); }