aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2005-07-29 15:33:27 +0000
committerFelix Domke <tmbinc@elitedvb.net>2005-07-29 15:33:27 +0000
commit244459c4b2588ac9ca4b3fcbac05a2f8a7ee1641 (patch)
treea3f9a884c61a8d8e9579613cd0d2837eb34a243a /lib/dvb
parentd5e22a275d2ecdf3205bfefa927be6e125ac27b8 (diff)
downloadenigma2-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.am2
-rw-r--r--lib/dvb/metaparser.cpp44
-rw-r--r--lib/dvb/metaparser.h16
-rw-r--r--lib/dvb/pmt.cpp8
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);