diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2005-11-28 17:10:42 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2005-11-28 17:10:42 +0000 |
| commit | 669088fb85f6d0e6c0f7c424df2d1c5dc1141d84 (patch) | |
| tree | 5860ed6be90da39a733d8b45873e0f0e591d1a62 /lib | |
| parent | 4c34a479cc6765bd59c6c589a75c0a161f795f48 (diff) | |
| download | enigma2-669088fb85f6d0e6c0f7c424df2d1c5dc1141d84.tar.gz enigma2-669088fb85f6d0e6c0f7c424df2d1c5dc1141d84.zip | |
work on (premiere) subservice selection
sorry this needs another one libdvbsi++ update
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/service/event.cpp | 29 | ||||
| -rw-r--r-- | lib/service/event.h | 9 |
2 files changed, 38 insertions, 0 deletions
diff --git a/lib/service/event.cpp b/lib/service/event.cpp index cfd2ac5f..e76ea315 100644 --- a/lib/service/event.cpp +++ b/lib/service/event.cpp @@ -5,6 +5,7 @@ #include <dvbsi++/event_information_section.h> #include <dvbsi++/short_event_descriptor.h> #include <dvbsi++/extended_event_descriptor.h> +#include <dvbsi++/linkage_descriptor.h> #include <dvbsi++/descriptor_tag.h> DEFINE_REF(eServiceEvent); @@ -60,6 +61,9 @@ bool eServiceEvent::loadLanguage(Event *evt, std::string lang, int tsidonid) { switch ((*desc)->getTag()) { + case LINKAGE_DESCRIPTOR: + m_linkage_services.clear(); + break; case SHORT_EVENT_DESCRIPTOR: { const ShortEventDescriptor *sed = (ShortEventDescriptor*)*desc; @@ -99,6 +103,31 @@ bool eServiceEvent::loadLanguage(Event *evt, std::string lang, int tsidonid) break; } } + if ( retval == 1 ) + { + for (DescriptorConstIterator desc = evt->getDescriptors()->begin(); desc != evt->getDescriptors()->end(); ++desc) + { + switch ((*desc)->getTag()) + { + case LINKAGE_DESCRIPTOR: + { + const LinkageDescriptor *ld = (LinkageDescriptor*)*desc; + if ( ld->getLinkageType() == 0xB0 ) + { + linkage_service s; + s.onid = ld->getOriginalNetworkId(); + s.tsid = ld->getTransportStreamId(); + s.sid = ld->getServiceId(); + const PrivateDataByteVector *privateData = + ld->getPrivateDataBytes(); + s.description.assign((const char*)&((*privateData)[0]), privateData->size()); + m_linkage_services.push_back(s); + } + break; + } + } + } + } if ( m_extended_description.find(m_short_description) == 0 ) m_short_description=""; return retval; diff --git a/lib/service/event.h b/lib/service/event.h index 07106e40..3bbb322e 100644 --- a/lib/service/event.h +++ b/lib/service/event.h @@ -4,6 +4,7 @@ #ifndef SWIG #include <time.h> #include <lib/base/object.h> +#include <list> #include <string> class Event; #endif @@ -16,6 +17,14 @@ DECLARE_REF(eServiceEvent); #endif public: #ifndef SWIG + struct linkage_service + { + uint16_t sid; + uint16_t onid; + uint16_t tsid; + std::string description; + }; + std::list<linkage_service> m_linkage_services; time_t m_begin; int m_duration; std::string m_event_name, m_short_description, m_extended_description; |
