diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2006-02-25 01:35:04 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2006-02-25 01:35:04 +0000 |
| commit | 673d85e4aace04805fe958bbe8cb741b21ccbc1b (patch) | |
| tree | 52a6cd09cc10134852c8019135a800c39191bf2a /lib/service/servicedvb.cpp | |
| parent | 4ead4a1affceff4eb642ef333a71235ce6f173e6 (diff) | |
| download | enigma2-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.cpp | 30 |
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; |
