aboutsummaryrefslogtreecommitdiff
path: root/lib/service/servicedvb.cpp
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-02-25 01:35:04 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-02-25 01:35:04 +0000
commit673d85e4aace04805fe958bbe8cb741b21ccbc1b (patch)
tree52a6cd09cc10134852c8019135a800c39191bf2a /lib/service/servicedvb.cpp
parent4ead4a1affceff4eb642ef333a71235ce6f173e6 (diff)
downloadenigma2-673d85e4aace04805fe958bbe8cb741b21ccbc1b.tar.gz
enigma2-673d85e4aace04805fe958bbe8cb741b21ccbc1b.zip
store a .eit file for each recoring this holds raw eit event informations
including audio track informations, event description, event title...... for information about the file format look in EN300468 (www.etsi.org) make info button useable when playbacking a movie
Diffstat (limited to 'lib/service/servicedvb.cpp')
-rw-r--r--lib/service/servicedvb.cpp30
1 files changed, 29 insertions, 1 deletions
diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp
index 3d551016..f9bb877f 100644
--- a/lib/service/servicedvb.cpp
+++ b/lib/service/servicedvb.cpp
@@ -11,6 +11,7 @@
#include <lib/dvb/decoder.h>
#include <lib/service/servicedvbrecord.h>
+#include <lib/service/event.h>
#include <lib/dvb/metaparser.h>
#include <lib/dvb/tstools.h>
#include <lib/python/python.h>
@@ -20,6 +21,8 @@
#include <byteswap.h>
#include <netinet/in.h>
+#include <dvbsi++/event_information_section.h>
+
#ifndef BYTE_ORDER
#error no byte order defined!
#endif
@@ -248,6 +251,7 @@ RESULT eDVBPVRServiceOfflineOperations::getListOfFilenames(std::list<std::string
res.push_back(m_ref.path + ".meta");
res.push_back(m_ref.path + ".ap");
res.push_back(m_ref.path + ".cuts");
+ res.push_back(m_ref.path + ".eit");
return 0;
}
@@ -645,7 +649,31 @@ RESULT eDVBServicePlay::start()
to start recording from the data demux. */
m_cue = new eCueSheet();
m_first_program_info = 1;
- r = m_service_handler.tune((eServiceReferenceDVB&)m_reference, m_is_pvr, m_cue);
+ eServiceReferenceDVB &service = (eServiceReferenceDVB&)m_reference;
+ r = m_service_handler.tune(service, m_is_pvr, m_cue);
+ if (m_is_pvr)
+ {
+ std::string filename = service.path;
+ filename.erase(filename.length()-2, 2);
+ filename+="eit";
+ int fd = ::open( filename.c_str(), O_RDONLY );
+ if ( fd > -1 )
+ {
+ __u8 buf[4096];
+ int rd = ::read(fd, buf, 4096);
+ ::close(fd);
+ if ( rd > 12 /*EIT_LOOP_SIZE*/ )
+ {
+ Event ev(buf);
+ ePtr<eServiceEvent> event = new eServiceEvent;
+ ePtr<eServiceEvent> empty;
+ event->parseFrom(&ev, (service.getTransportStreamID().get()<<16)|service.getOriginalNetworkID().get());
+ m_event_handler.inject(event, 0);
+ m_event_handler.inject(empty, 1);
+ eDebug("injected");
+ }
+ }
+ }
m_event(this, evStart);
m_event((iPlayableService*)this, evSeekableStatusChanged);
return 0;