/*************************************************************************** * Copyright (c) 2003 by Marcel Wiesweg * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * $Id: descriptor.h 3.2 2014/02/08 12:44:17 kls Exp $ * * ***************************************************************************/ #ifndef LIBSI_DESCRIPTOR_H #define LIBSI_DESCRIPTOR_H #include "si.h" #include "headers.h" namespace SI { class ShortEventDescriptor : public Descriptor { public: char languageCode[4]; String name; //name of the event String text; //short description protected: virtual void Parse(); }; class ExtendedEventDescriptor : public GroupDescriptor { public: class Item : public LoopElement { public: virtual int getLength() { return sizeof(item_extended_event)+sizeof(item_extended_event_mid)+item.getLength()+itemDescription.getLength(); } String item; String itemDescription; protected: virtual void Parse(); }; char languageCode[4]; int getDescriptorNumber(); int getLastDescriptorNumber(); StructureLoop itemLoop; String text; protected: virtual void Parse(); private: const descr_extended_event *s; }; class ExtendedEventDescriptors : public DescriptorGroup { public: int getMaximumTextLength(const char *separation1="\t", const char *separation2="\n"); //Returns a concatenated version of first the non-itemized and then the itemized text //same semantics as with SI::String char *getText(const char *separation1="\t", const char *separation2="\n"); //buffer must at least be getTextLength(), getMaximumTextLength() is a good choice char *getText(char *buffer, int size, const char *separation1="\t", const char *separation2="\n"); //these only return the non-itemized text fields in concatenated form int getMaximumTextPlainLength(); char *getTextPlain(); char *getTextPlain(char *buffer, int size); //these only return the itemized text fields in concatenated form. //Between the description and the text the separation1 character is used, //separation2 used between two pairs. Example: //Director\tSteven Spielberg\nActor\tMichael Mendl\n int getMaximumTextItemizedLength(const char *separation1="\t", const char *separation2="\n"); char *getTextItemized(const char *separation1="\t", const char *separation2="\n"); char *getTextItemized(char *buffer, int size, const char *separation1="\t", const char *separation2="\n"); //returns the itemized text pair by pair. Maximum length for buffers is 256. //Return value is false if and only if the end of the list is reached. //The argument valid indicates whether the buffers contain valid content. bool getTextItemized(Loop::Iterator &it, bool &valid, char *itemDescription, char *itemText, int sizeItemDescription, int sizeItemText); }; class TimeShiftedEventDescriptor : public Descriptor { public: int getReferenceServiceId() const; int getReferenceEventId() const; protected: virtual void Parse(); private: const descr_time_shifted_event *s; }; class ContentDescriptor : public Descriptor { public: class Nibble : public LoopElement { public: virtual int getLength() { return sizeof(nibble_content); } int getContentNibbleLevel1() const; int getContentNibbleLevel2() const; int getUserNibble1() const; int getUserNibble2() const; protected: virtual void Parse(); private: const nibble_content *s; }; StructureLoop nibbleLoop; protected: virtual void Parse(); }; class ParentalRatingDescriptor : public Descriptor { public: class Rating : public LoopElement { public: char languageCode[4]; int getRating() const; virtual int getLength() { return sizeof(parental_rating); } protected: virtual void Parse(); private: const parental_rating *s; }; StructureLoop ratingLoop; protected: virtual void Parse(); }; class TeletextDescriptor : public Descriptor { public: class Teletext : public LoopElement { public: char languageCode[4]; int getTeletextType() const; int getTeletextMagazineNumber() const; int getTeletextPageNumber() const; virtual int getLength() { return sizeof(item_teletext); } protected: virtual void Parse(); private: const item_teletext *s; }; StructureLoop teletextLoop; protected: virtual void Parse(); }; class CaDescriptor : public Descriptor { public: int getCaType() const; int getCaPid() const; CharArray privateData; protected: virtual void Parse(); private: const descr_ca *s; }; class StreamIdentifierDescriptor : public Descriptor { public: int getComponentTag() const; protected: virtual void Parse(); private: const descr_stream_identifier *s; }; class NetworkNameDescriptor : public Descriptor { public: String name; protected: virtual void Parse(); }; class CaIdentifierDescriptor : public Descriptor { public: TypeLoop identifiers; protected: virtual void Parse(); }; class CarouselIdentifierDescriptor : public Descriptor { public: int getCarouselId() const; int getFormatId() const; protected: virtual void Parse(); private: const descr_carousel_identifier *s; }; class BouquetNameDescriptor : public NetworkNameDescriptor { }; class ServiceListDescriptor : public Descriptor { public: class Service : public LoopElement { public: int getServiceId() const; int getServiceType() const; virtual int getLength() { return sizeof(descr_service_list_loop); } protected: virtual void Parse(); private: const descr_service_list_loop *s; }; StructureLoop serviceLoop; protected: virtual void Parse(); }; class SatelliteDeliverySystemDescriptor : public Descriptor { public: int getFrequency() const; int getOrbitalPosition() const; int getWestEastFlag() const; int getPolarization() const; int getModulationSystem() const; int getModulationType() const; int getRollOff() const; int getSymbolRate() const; int getFecInner() const; protected: virtual void Parse(); private: const descr_satellite_delivery_system *s; }; class CableDeliverySystemDescriptor : public Descriptor { public: int getFrequency() const; int getFecOuter() const; int getModulation() const; int getSymbolRate() const; int getFecInner() const; protected: virtual void Parse(); private: const descr_cable_delivery_system *s; }; class TerrestrialDeliverySystemDescriptor : public Descriptor { public: int getFrequency() const; int getBandwidth() const; int getPriority() const; int getTimeSlicingIndicator() const; int getMpeFecIndicator() const; int getConstellation() const; int getHierarchy() const; int getCodeRateHP() const; int getCodeRateLP() const; int getGuardInterval() const; int getTransmissionMode() const; bool getOtherFrequency() const; protected: virtual void Parse(); private: const descr_terrestrial_delivery *s; }; class ServiceDescriptor : public Descriptor { public: int getServiceType() const; String serviceName; String providerName; protected: virtual void Parse(); private: const descr_service *s; }; class NVODReferenceDescriptor : public Descriptor { public: class Service : public LoopElement { public: int getTransportStream() const; int getOriginalNetworkId() const; int getServiceId() const; virtual int getLength() { return sizeof(item_nvod_reference); } protected: virtual void Parse(); private: const item_nvod_reference *s; }; StructureLoop serviceLoop; protected: virtual void Parse(); }; class TimeShiftedServiceDescriptor : public Descriptor { public: int getReferenceServiceId() const; protected: virtual void Parse(); private: const descr_time_shifted_service *s; }; class ComponentDescriptor : public Descriptor { public: int getStreamContent() const; int getComponentType() const; int getComponentTag() const; char languageCode[4]; String description; protected: virtual void Parse(); private: const descr_component *s; }; class PrivateDataSpecifierDescriptor : public Descriptor { public: int getPrivateDataSpecifier() const; protected: virtual void Parse(); private: const descr_private_data_specifier *s; }; class SubtitlingDescriptor : public Descriptor { public: class Subtitling : public LoopElement { public: char languageCode[4]; int getSubtitlingType() const; int getCompositionPageId() const; int getAncillaryPageId() const; virtual int getLength() { return sizeof(item_subtitling); } protected: virtual void Parse(); private: const item_subtitling *s; }; StructureLoop subtitlingLoop; protected: virtual void Parse(); }; class ServiceMoveDescriptor : public Descriptor { public: int getNewOriginalNetworkId() const; int getNewTransportStreamId() const; int getNewServiceId() const; protected: virtual void Parse(); private: const descr_service_move *s; }; class FrequencyListDescriptor : public Descriptor { public: int getCodingType() const; TypeLoop frequencies; protected: virtual void Parse(); private: const descr_frequency_list *s; }; class ServiceIdentifierDescriptor : public Descriptor { public: String textualServiceIdentifier; protected: virtual void Parse(); }; class ContentIdentifierDescriptor : public Descriptor { public: class Identifier : public LoopElement { public: String identifier; int getCridType() const; int getCridLocation() const; virtual int getLength() { return sizeof(content_identifier_entry)+identifier.getLength(); } protected: virtual void Parse(); private: const content_identifier_entry *s; }; StructureLoop identifierLoop; protected: virtual void Parse(); }; class DefaultAuthorityDescriptor : public Descriptor { public: String DefaultAuthority; //ID protected: virtual void Parse(); }; //abstract base class class MultilingualNameDescriptor : public Descriptor { public: class Name : public LoopElement { public: char languageCode[4]; String name; virtual int getLength() { return sizeof(entry_multilingual_name)+name.getLength(); } protected: virtual void Parse(); }; StructureLoop nameLoop; protected: virtual void Parse(); }; class MultilingualNetworkNameDescriptor : public MultilingualNameDescriptor { //inherits nameLoop from MultilingualNameDescriptor }; class MultilingualBouquetNameDescriptor : public MultilingualNameDescriptor { //inherits nameLoop from MultilingualNameDescriptor }; class MultilingualComponentDescriptor : public MultilingualNameDescriptor { public: int getComponentTag() const; //inherits nameLoop from MultilingualNameDescriptor protected: virtual void Parse(); private: const descr_multilingual_component *s; }; class MultilingualServiceNameDescriptor : public Descriptor { public: class Name : public MultilingualNameDescriptor::Name { public: virtual int getLength() { return sizeof(entry_multilingual_name)+providerName.getLength()+sizeof(entry_multilingual_service_name_mid)+name.getLength(); } String providerName; //inherits name, meaning: service name; protected: virtual void Parse(); }; StructureLoop nameLoop; protected: virtual void Parse(); }; class LocalTimeOffsetDescriptor : public Descriptor { public: class LocalTimeOffset : public LoopElement { public: char countryCode[4]; virtual int getLength() { return sizeof(local_time_offset_entry); } int getCountryId() const; int getLocalTimeOffsetPolarity() const; int getLocalTimeOffset() const; time_t getTimeOfChange() const; int getNextTimeOffset() const; protected: virtual void Parse(); private: const local_time_offset_entry *s; }; StructureLoop localTimeOffsetLoop; protected: virtual void Parse(); }; class LinkageDescriptor : public Descriptor { public: int getTransportStreamId() const; int getOriginalNetworkId() const; int getServiceId() const; LinkageType getLinkageType() const; int getHandOverType() const; int getOriginType() const; int getId() const; CharArray privateData; protected: virtual void Parse(); private: const descr_linkage *s; const descr_linkage_8 *s1; }; class ISO639LanguageDescriptor : public Descriptor { public: char languageCode[4]; //for backwards compatibility class Language : public LoopElement { public: virtual int getLength() { return sizeof(descr_iso_639_language_loop); } char languageCode[4]; AudioType getAudioType(); protected: virtual void Parse(); private: const descr_iso_639_language_loop *s; }; StructureLoop languageLoop; protected: virtual void Parse(); }; class PDCDescriptor : public Descriptor { public: int getDay() const; int getMonth() const; int getHour() const; int getMinute() const; protected: virtual void Parse(); private: const descr_pdc *s; }; class AncillaryDataDescriptor : public Descriptor { public: int getAncillaryDataIdentifier() const; protected: virtual void Parse(); private: const descr_ancillary_data *s; }; class S2SatelliteDeliverySystemDescriptor : public Descriptor { public: int getScramblingSequenceSelector() const; int getMultipleInputStreamFlag() const; int getBackwardsCompatibilityIndicator() const; int getScramblingSequenceIndex() const; int getInputStreamIdentifier() const { return input_stream_identifier; } protected: virtual void Parse(); private: const descr_s2_satellite_delivery_system *s; const descr_scrambling_sequence_selector *sss; int input_stream_identifier; }; class ExtensionDescriptor : public Descriptor { public: int getExtensionDescriptorTag() const; protected: virtual void Parse(); private: const descr_extension *s; }; class T2DeliverySystemDescriptor : public Descriptor { public: int getExtendedDataFlag() const; int getExtensionDescriptorTag() const; int getPlpId() const; int getT2SystemId() const; int getSisoMiso() const; int getBandwidth() const; int getGuardInterval() const; int getTransmissionMode() const; int getOtherFrequencyFlag() const; int getTfsFlag() const; protected: virtual void Parse(); private: const descr_t2_delivery_system *s; int extended_data_flag; }; class LogicalChannelDescriptor : public Descriptor { public: class LogicalChannel : public LoopElement { public: int getServiceId() const; int getVisibleServiceFlag() const; int getLogicalChannelNumber() const; virtual int getLength() { return sizeof(item_logical_channel); } protected: virtual void Parse(); private: const item_logical_channel *s; }; StructureLoop logicalChannelLoop; protected: virtual void Parse(); }; class HdSimulcastLogicalChannelDescriptor : public Descriptor { public: class HdSimulcastLogicalChannel : public LoopElement { public: int getServiceId() const; int getVisibleServiceFlag() const; int getLogicalChannelNumber() const; virtual int getLength() { return sizeof(item_hd_simulcast_logical_channel); } protected: virtual void Parse(); private: const item_hd_simulcast_logical_channel *s; }; StructureLoop hdSimulcastLogicalChannelLoop; protected: virtual void Parse(); }; // Private DVB Descriptor Premiere.de // 0xF2 Content Transmission Descriptor // http://dvbsnoop.sourceforge.net/examples/example-private-section.html class PremiereContentTransmissionDescriptor : public Descriptor { public: class StartDayEntry : public LoopElement { public: class StartTimeEntry : public LoopElement { public: virtual int getLength() { return sizeof(item_premiere_content_transmission_time); } time_t getStartTime(int mjd) const; //UTC protected: virtual void Parse(); private: const item_premiere_content_transmission_time *s; }; StructureLoop startTimeLoop; virtual int getLength(); int getMJD() const; int getLoopLength() const; protected: virtual void Parse(); private: const item_premiere_content_transmission_day *s; }; StructureLoop startDayLoop; int getOriginalNetworkId() const; int getTransportStreamId() const; int getServiceId() const; protected: virtual void Parse(); private: const descr_premiere_content_transmission *s; }; //a descriptor currently unimplemented in this library class UnimplementedDescriptor : public Descriptor { protected: virtual void Parse() {} }; class ApplicationSignallingDescriptor : public Descriptor { public: class ApplicationEntryDescriptor : public LoopElement { public: virtual int getLength() { return sizeof(application_signalling_entry); } int getApplicationType() const; int getAITVersionNumber() const; protected: virtual void Parse(); private: const application_signalling_entry *s; }; StructureLoop entryLoop; protected: virtual void Parse(); }; class MHP_ApplicationDescriptor : public Descriptor { public: class Profile : public LoopElement { public: virtual int getLength() { return sizeof(application_profile_entry); } int getApplicationProfile() const; int getVersionMajor() const; int getVersionMinor() const; int getVersionMicro() const; private: const application_profile_entry *s; protected: virtual void Parse(); }; StructureLoop profileLoop; bool isServiceBound() const; int getVisibility() const; int getApplicationPriority() const; TypeLoop transportProtocolLabels; private: const descr_application_end *s; protected: virtual void Parse(); }; class MHP_ApplicationNameDescriptor : public Descriptor { public: class NameEntry : public LoopElement { public: virtual int getLength() { return sizeof(descr_application_name_entry)+name.getLength(); } char languageCode[4]; String name; protected: virtual void Parse(); }; StructureLoop nameLoop; protected: virtual void Parse(); }; class MHP_TransportProtocolDescriptor : public Descriptor { public: class UrlExtensionEntry : public LoopElement { public: virtual int getLength() { return sizeof(descr_url_extension_entry)+UrlExtension.getLength(); } String UrlExtension; protected: virtual void Parse(); }; enum Protocol { ObjectCarousel = 0x01, IPviaDVB = 0x02, HTTPoverInteractionChannel = 0x03 }; int getProtocolId() const; int getProtocolLabel() const; bool isRemote() const; int getComponentTag() const; char *getUrlBase(char *buffer, int size); StructureLoop UrlExtensionLoop; protected: virtual void Parse(); private: const descr_transport_protocol *s; bool remote; int componentTag; String UrlBase; }; class MHP_DVBJApplicationDescriptor : public Descriptor { public: class ApplicationEntry : public LoopElement { public: virtual int getLength() { return sizeof(descr_dvbj_application_entry)+parameter.getLength(); } String parameter; protected: virtual void Parse(); }; StructureLoop applicationLoop; protected: virtual void Parse(); }; class MHP_DVBJApplicationLocationDescriptor : public Descriptor { public: String baseDirectory; String classPath; String initialClass; protected: virtual void Parse(); }; class MHP_ApplicationIconsDescriptor : public Descriptor { public: String iconLocator; int getIconFlags() const; protected: virtual void Parse(); private: const descr_application_icons_descriptor_end *s; }; class MHP_SimpleApplicationLocationDescriptor : public Descriptor { public: char *getLocation(char *buffer, int size); protected: virtual void Parse(); private: String location; }; class RegistrationDescriptor : public Descriptor { public: int getFormatIdentifier() const; CharArray privateData; protected: virtual void Parse(); private: const descr_registration *s; }; class AVCDescriptor : public Descriptor { public: int getProfileIdc() const; int getConstraintSet0Flag() const; int getConstraintSet1Flag() const; int getConstraintSet2Flag() const; int getConstraintSet3Flag() const; int getConstraintSet4Flag() const; int getConstraintSet5Flag() const; int getAVCCompatibleFlags() const; int getLevelIdc() const; int getAVCStillPresent() const; int getAVC24HourPictureFlag() const; int getFramePackingSEINotPresentFlag() const; CharArray privateData; protected: virtual void Parse(); private: const descr_avc *s; }; } //end of namespace #endif //LIBSI_TABLE_H