diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2005-07-29 15:33:27 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2005-07-29 15:33:27 +0000 |
| commit | 244459c4b2588ac9ca4b3fcbac05a2f8a7ee1641 (patch) | |
| tree | a3f9a884c61a8d8e9579613cd0d2837eb34a243a /lib/dvb | |
| parent | d5e22a275d2ecdf3205bfefa927be6e125ac27b8 (diff) | |
| download | enigma2-244459c4b2588ac9ca4b3fcbac05a2f8a7ee1641.tar.gz enigma2-244459c4b2588ac9ca4b3fcbac05a2f8a7ee1641.zip | |
- split out meta parser
- movie selection works now
- service information for pvr services work
Diffstat (limited to 'lib/dvb')
| -rw-r--r-- | lib/dvb/Makefile.am | 2 | ||||
| -rw-r--r-- | lib/dvb/metaparser.cpp | 44 | ||||
| -rw-r--r-- | lib/dvb/metaparser.h | 16 | ||||
| -rw-r--r-- | lib/dvb/pmt.cpp | 8 |
4 files changed, 69 insertions, 1 deletions
diff --git a/lib/dvb/Makefile.am b/lib/dvb/Makefile.am index 857f5001..ca200102 100644 --- a/lib/dvb/Makefile.am +++ b/lib/dvb/Makefile.am @@ -5,4 +5,4 @@ noinst_LIBRARIES = libenigma_dvb.a libenigma_dvb_a_SOURCES = dvb.cpp demux.cpp frontend.cpp esection.cpp db.cpp \ sec.cpp scan.cpp crc32.cpp pmt.cpp decoder.cpp eit.cpp rotor_calc.cpp \ - epgcache.cpp dvbtime.cpp + epgcache.cpp dvbtime.cpp metaparser.cpp diff --git a/lib/dvb/metaparser.cpp b/lib/dvb/metaparser.cpp new file mode 100644 index 00000000..8c1f0cfd --- /dev/null +++ b/lib/dvb/metaparser.cpp @@ -0,0 +1,44 @@ +#include <lib/dvb/metaparser.h> +#include <errno.h> + +int eDVBMetaParser::parseFile(const std::string &tsname) +{ + /* if it's a PVR channel, recover service id. */ + std::string filename = tsname + ".meta"; + + FILE *f = fopen(filename.c_str(), "r"); + if (!f) + return -ENOENT; + + int linecnt = 0; + + while (1) + { + char line[1024]; + if (!fgets(line, 1024, f)) + break; + if (*line && line[strlen(line)-1] == '\n') + line[strlen(line)-1] = 0; + + if (*line && line[strlen(line)-1] == '\r') + line[strlen(line)-1] = 0; + + switch (linecnt) + { + case 0: + m_ref = (eServiceReferenceDVB&)eServiceReference(line); + break; + case 1: + m_name = line; + break; + case 2: + m_description = line; + break; + default: + break; + } + ++linecnt; + } + fclose(f); + return 0; +} diff --git a/lib/dvb/metaparser.h b/lib/dvb/metaparser.h new file mode 100644 index 00000000..7e2b6779 --- /dev/null +++ b/lib/dvb/metaparser.h @@ -0,0 +1,16 @@ +#ifndef __lib_dvb_metaparser_h +#define __lib_dvb_metaparser_h + +#include <string> +#include <lib/dvb/idvb.h> + +class eDVBMetaParser +{ +public: + int parseFile(const std::string &filename); + + eServiceReferenceDVB m_ref; + std::string m_name, m_description; +}; + +#endif diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp index 7b24b434..d80897b9 100644 --- a/lib/dvb/pmt.cpp +++ b/lib/dvb/pmt.cpp @@ -2,6 +2,7 @@ #include <lib/dvb/pmt.h> #include <lib/dvb/specs.h> #include <lib/dvb/dvb.h> +#include <lib/dvb/metaparser.h> eDVBServicePMTHandler::eDVBServicePMTHandler() { @@ -143,6 +144,13 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref) res = m_resourceManager->allocateChannel(chid, m_channel); } else { + eDVBMetaParser parser; + + if (parser.parseFile(ref.path)) + eWarning("no .meta file found, trying original service ref."); + else + m_reference = parser.m_ref; + eDebug("alloc PVR"); /* allocate PVR */ res = m_resourceManager->allocatePVRChannel(m_pvr_channel); |
