aboutsummaryrefslogtreecommitdiff
path: root/lib/service
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2005-04-28 12:23:04 +0000
committerFelix Domke <tmbinc@elitedvb.net>2005-04-28 12:23:04 +0000
commit3cddda083f4ace59e279f9f4f6ae12bad079d33b (patch)
treedebf994903caaefaa329ee708501625b56fe34f9 /lib/service
parente933d514f93eb0690cf071c24f127017f9b80716 (diff)
downloadenigma2-3cddda083f4ace59e279f9f4f6ae12bad079d33b.tar.gz
enigma2-3cddda083f4ace59e279f9f4f6ae12bad079d33b.zip
- add dvb resource management
- scan hardcoded to dvb-s again - added untested recording support (data io thread still missing)
Diffstat (limited to 'lib/service')
-rw-r--r--lib/service/Makefile.am2
-rw-r--r--lib/service/servicedvb.cpp6
-rw-r--r--lib/service/servicedvbrecord.cpp84
-rw-r--r--lib/service/servicedvbrecord.h27
4 files changed, 116 insertions, 3 deletions
diff --git a/lib/service/Makefile.am b/lib/service/Makefile.am
index f8cf6d52..ed09d73d 100644
--- a/lib/service/Makefile.am
+++ b/lib/service/Makefile.am
@@ -5,5 +5,5 @@ noinst_LIBRARIES = libenigma_service.a
libenigma_service_a_SOURCES = \
listboxservice.cpp service.cpp servicemp3.cpp servicedvb.cpp servicefs.cpp \
- event.cpp
+ event.cpp servicedvbrecord.cpp
diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp
index 48d00d65..40e26365 100644
--- a/lib/service/servicedvb.cpp
+++ b/lib/service/servicedvb.cpp
@@ -9,6 +9,8 @@
#include <lib/dvb/dvb.h>
#include <lib/dvb/db.h>
+#include <lib/service/servicedvbrecord.h>
+
DEFINE_REF(eServiceFactoryDVB)
eServiceFactoryDVB::eServiceFactoryDVB()
@@ -83,9 +85,9 @@ RESULT eServiceFactoryDVB::play(const eServiceReference &ref, ePtr<iPlayableServ
return 0;
}
-RESULT eServiceFactoryDVB::record(const eServiceReference &, ePtr<iRecordableService> &ptr)
+RESULT eServiceFactoryDVB::record(const eServiceReference &ref, ePtr<iRecordableService> &ptr)
{
- ptr = 0;
+ ptr = new eDVBServiceRecord((eServiceReferenceDVB&)ref);
return -1;
}
diff --git a/lib/service/servicedvbrecord.cpp b/lib/service/servicedvbrecord.cpp
new file mode 100644
index 00000000..368adb70
--- /dev/null
+++ b/lib/service/servicedvbrecord.cpp
@@ -0,0 +1,84 @@
+#include <lib/service/servicedvbrecord.h>
+#include <lib/base/eerror.h>
+
+
+DEFINE_REF(eDVBServiceRecord);
+
+eDVBServiceRecord::eDVBServiceRecord(const eServiceReferenceDVB &ref): m_ref(ref)
+{
+ CONNECT(m_service_handler.serviceEvent, eDVBServiceRecord::serviceEvent);
+}
+
+void eDVBServiceRecord::serviceEvent(int event)
+{
+ eDebug("service event %d", event);
+ switch (event)
+ {
+ case eDVBServicePMTHandler::eventTuned:
+ {
+ eDebug("tuned..");
+ break;
+ }
+ case eDVBServicePMTHandler::eventNewProgramInfo:
+ {
+ int vpid = -1, apid = -1, pcrpid = -1;
+ eDVBServicePMTHandler::program program;
+ if (m_service_handler.getProgramInfo(program))
+ eDebug("getting program info failed.");
+ else
+ {
+ eDebugNoNewLine("RECORD: have %d video stream(s)", program.videoStreams.size());
+ if (!program.videoStreams.empty())
+ {
+ eDebugNoNewLine(" (");
+ for (std::vector<eDVBServicePMTHandler::videoStream>::const_iterator
+ i(program.videoStreams.begin());
+ i != program.videoStreams.end(); ++i)
+ {
+ if (vpid == -1)
+ vpid = i->pid;
+ if (i != program.videoStreams.begin())
+ eDebugNoNewLine(", ");
+ eDebugNoNewLine("%04x", i->pid);
+ }
+ eDebugNoNewLine(")");
+ }
+ eDebugNoNewLine(", and %d audio stream(s)", program.audioStreams.size());
+ if (!program.audioStreams.empty())
+ {
+ eDebugNoNewLine(" (");
+ for (std::vector<eDVBServicePMTHandler::audioStream>::const_iterator
+ i(program.audioStreams.begin());
+ i != program.audioStreams.end(); ++i)
+ {
+ if (apid == -1)
+ apid = i->pid;
+ if (i != program.audioStreams.begin())
+ eDebugNoNewLine(", ");
+ eDebugNoNewLine("%04x", i->pid);
+ }
+ eDebugNoNewLine(")");
+ }
+ eDebug(", and the pcr pid is %04x", program.pcrPid);
+ if (program.pcrPid != 0x1fff)
+ pcrpid = program.pcrPid;
+ }
+
+ // notify record thread...
+ break;
+ }
+ }
+}
+
+RESULT eDVBServiceRecord::start()
+{
+ eDebug("starting recording..");
+ return m_service_handler.tune(m_ref);
+}
+
+RESULT eDVBServiceRecord::stop()
+{
+ eDebug("stop recording!!");
+ return 0;
+}
+
diff --git a/lib/service/servicedvbrecord.h b/lib/service/servicedvbrecord.h
new file mode 100644
index 00000000..93118bed
--- /dev/null
+++ b/lib/service/servicedvbrecord.h
@@ -0,0 +1,27 @@
+#ifndef __servicedvbrecord_h
+#define __servicedvbrecord_h
+
+#include <lib/service/iservice.h>
+#include <lib/dvb/idvb.h>
+
+#include <lib/dvb/pmt.h>
+#include <lib/dvb/eit.h>
+
+#include <lib/service/servicedvb.h>
+
+class eDVBServiceRecord: public iRecordableService, public Object
+{
+DECLARE_REF(eDVBServiceRecord);
+public:
+ RESULT start();
+ RESULT stop();
+private:
+ friend class eServiceFactoryDVB;
+ eDVBServiceRecord(const eServiceReferenceDVB &ref);
+
+ eDVBServicePMTHandler m_service_handler;
+ eServiceReferenceDVB m_ref;
+ void serviceEvent(int event);
+};
+
+#endif