diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2003-12-22 13:29:24 +0100 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2003-12-22 13:29:24 +0100 |
commit | 7ff59171e3f907a5584b72f0f8588ed65f22c0bd (patch) | |
tree | 801b1b65840c50a4f1d8abea806fa5c180051df1 /libdtv/libsi/include | |
parent | 84b99ea81095f421ec049dd6b5bd5f0f2fe679c1 (diff) | |
download | vdr-7ff59171e3f907a5584b72f0f8588ed65f22c0bd.tar.gz vdr-7ff59171e3f907a5584b72f0f8588ed65f22c0bd.tar.bz2 |
Changed section handling; replaced 'libdtv' with 'libsi'
Diffstat (limited to 'libdtv/libsi/include')
-rw-r--r-- | libdtv/libsi/include/libsi.h | 1248 | ||||
-rw-r--r-- | libdtv/libsi/include/si_tables.h | 1403 |
2 files changed, 0 insertions, 2651 deletions
diff --git a/libdtv/libsi/include/libsi.h b/libdtv/libsi/include/libsi.h deleted file mode 100644 index b4dad887..00000000 --- a/libdtv/libsi/include/libsi.h +++ /dev/null @@ -1,1248 +0,0 @@ -////////////////////////////////////////////////////////////// -/// /// -/// libsi.h: definitions for data structures of libsi /// -/// /// -////////////////////////////////////////////////////////////// - -// $Revision: 1.7 $ -// $Date: 2003/04/12 11:27:31 $ -// $Author: hakenes $ -// -// (C) 2001-03 Rolf Hakenes <hakenes@hippomi.de>, under the -// GNU GPL with contribution of Oleg Assovski, -// www.satmania.com -// -// libsi 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, or (at your option) -// any later version. -// -// libsi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You may have received a copy of the GNU General Public License -// along with libsi; see the file COPYING. If not, write to the -// Free Software Foundation, Inc., 59 Temple Place - Suite 330, -// Boston, MA 02111-1307, USA. - -#ifndef LIBSI_H -#define LIBSI_H - -#include <time.h> -#include <sys/types.h> -#include <asm/types.h> - -#define dvb_pid_t int - - - /* Program Identifier */ - -#define PID_PAT 0x00 /* Program Association Table */ -#define PID_CAT 0x01 /* Conditional Access Table */ -#define PID_NIT 0x10 /* Network Information Table */ -#define PID_BAT 0x11 /* Bouquet Association Table */ -#define PID_SDT 0x11 /* Service Description Table */ -#define PID_EIT 0x12 /* Event Information Table */ -#define PID_RST 0x13 /* Running Status Table */ -#define PID_TDT 0x14 /* Time Date Table */ -#define PID_TOT 0x14 /* Time Offset Table */ -#define PID_ST 0x14 /* Stuffing Table */ - /* 0x15 - 0x1F */ /* Reserved for future use */ - - /* Table Identifier */ - -#define TID_PAT 0x00 /* Program Association Section */ -#define TID_CAT 0x01 /* Conditional Access Section */ -#define TID_PMT 0x02 /* Conditional Access Section */ - /* 0x03 - 0x3F */ /* Reserved for future use */ -#define TID_NIT_ACT 0x40 /* Network Information Section - - actual */ -#define TID_NIT_OTH 0x41 /* Network Information Section - - other */ -#define TID_SDT_ACT 0x42 /* Service Description Section - - actual */ -#define TID_SDT_OTH 0x46 /* Service Description Section - - other */ -#define TID_EIT_ACT 0x4E /* Event Information Section - - actual */ -#define TID_EIT_OTH 0x4F /* Event Information Section - - other */ -#define TID_EIT_ACT_SCH 0x50 /* Event Information Section - - actual, schedule */ -#define TID_EIT_OTH_SCH 0x60 /* Event Information Section - - other, schedule */ -#define TID_TDT 0x70 /* Time Date Section */ -#define TID_TOT 0x73 /* Time Offset Section */ -#define TID_CA_ECM_0 0x80 -#define TID_CA_ECM_1 0x81 -#define TID_CA_EMM 0x82 - -#define TID_BAT 0x4A /* Bouquet Association Section */ - -#define TID_EIT 0x12 /* Event Information Section */ -#define TID_RST 0x71 /* Running Status Section */ -#define TID_ST 0x72 /* Stuffing Section */ - /* 0xFF */ /* Reserved for future use */ - - /* Descriptor Identifier */ - - /* defined by ISO/IEC 13818-1 */ - -#define DESCR_VIDEO_STREAM 0x02 -#define DESCR_AUDIO_STREAM 0x03 -#define DESCR_HIERARCHY 0x04 -#define DESCR_REGISTRATION 0x05 -#define DESCR_DATA_STREAM_ALIGN 0x06 -#define DESCR_TARGET_BACKGRID 0x07 -#define DESCR_VIDEO_WINDOW 0x08 -#define DESCR_CA 0x09 -#define DESCR_ISO_639_LANGUAGE 0x0A -#define DESCR_SYSTEM_CLOCK 0x0B -#define DESCR_MULTIPLEX_BUFFER_UTIL 0x0C -#define DESCR_COPYRIGHT 0x0D -#define DESCR_MAXIMUM_BITRATE 0x0E -#define DESCR_PRIVATE_DATA_IND 0x0F -#define DESCR_SMOOTHING_BUFFER 0x10 -#define DESCR_STD 0x11 -#define DESCR_IBP 0x12 - /* 0x13 - 0x3F */ /* Reserved */ - - /* defined by ETSI */ - -#define DESCR_NW_NAME 0x40 -#define DESCR_SERVICE_LIST 0x41 -#define DESCR_STUFFING 0x42 -#define DESCR_SAT_DEL_SYS 0x43 -#define DESCR_CABLE_DEL_SYS 0x44 -#define DESCR_VBI_DATA 0x45 -#define DESCR_VBI_TELETEXT 0x46 -#define DESCR_BOUQUET_NAME 0x47 -#define DESCR_SERVICE 0x48 -#define DESCR_COUNTRY_AVAIL 0x49 -#define DESCR_LINKAGE 0x4A -#define DESCR_NVOD_REF 0x4B -#define DESCR_TIME_SHIFTED_SERVICE 0x4C -#define DESCR_SHORT_EVENT 0x4D -#define DESCR_EXTENDED_EVENT 0x4E -#define DESCR_TIME_SHIFTED_EVENT 0x4F -#define DESCR_COMPONENT 0x50 -#define DESCR_MOSAIC 0x51 -#define DESCR_STREAM_ID 0x52 -#define DESCR_CA_IDENT 0x53 -#define DESCR_CONTENT 0x54 -#define DESCR_PARENTAL_RATING 0x55 -#define DESCR_TELETEXT 0x56 -#define DESCR_TELEPHONE 0x57 -#define DESCR_LOCAL_TIME_OFF 0x58 -#define DESCR_SUBTITLING 0x59 -#define DESCR_TERR_DEL_SYS 0x5A -#define DESCR_ML_NW_NAME 0x5B -#define DESCR_ML_BQ_NAME 0x5C -#define DESCR_ML_SERVICE_NAME 0x5D -#define DESCR_ML_COMPONENT 0x5E -#define DESCR_PRIV_DATA_SPEC 0x5F -#define DESCR_SERVICE_MOVE 0x60 -#define DESCR_SHORT_SMOOTH_BUF 0x61 -#define DESCR_FREQUENCY_LIST 0x62 -#define DESCR_PARTIAL_TP_STREAM 0x63 -#define DESCR_DATA_BROADCAST 0x64 -#define DESCR_CA_SYSTEM 0x65 -#define DESCR_DATA_BROADCAST_ID 0x66 -#define DESCR_TRANSPORT_STREAM 0x67 -#define DESCR_DSNG 0x68 -#define DESCR_PDC 0x69 -#define DESCR_AC3 0x6A -#define DESCR_ANCILLARY_DATA 0x6B -#define DESCR_CELL_LIST 0x6C -#define DESCR_CELL_FREQ_LINK 0x6D -#define DESCR_ANNOUNCEMENT_SUPPORT 0x6E - - -#define MAX_SECTION_BUFFER 4096 - - -/* NetworkInfo structure (used to store NIT/BAT information) */ - -struct NetworkInfo { - struct NODE Node; - unsigned short ID; // NetworkID / BouquetID - struct LIST *Descriptors; - struct LIST *TransportStreams; -}; - -#define CreateNetworkInfo(ni, id) \ - do { \ - xCreateNode (ni, NULL); \ - (ni)->ID = id; \ - (ni)->Descriptors = xNewList(NULL); \ - (ni)->TransportStreams = NULL; \ - } while(0) - -/* TransportStream structure (NIT/BAT TS loop member) */ - -struct TransportStream { - struct NODE Node; - int TransportStreamID; - unsigned short OriginalNetworkID; - struct LIST *Descriptors; -}; - -#define CreateTransportStream(ts, tsid, onid) \ - do { \ - xCreateNode (ts, NULL); \ - (ts)->TransportStreamID = tsid; \ - (ts)->OriginalNetworkID = onid; \ - (ts)->Descriptors = xNewList(NULL); \ - } while(0) - -/* Strukturen zur Aufnahme der SDT und EIT Informationen */ - -struct Service { - struct NODE Node; - int ServiceID; - int TransportStreamID; - int OriginalNetworkID; - int SdtVersion; - unsigned short Status; - struct LIST *Descriptors; - struct LIST *Events; -}; - -#define EIT_SCHEDULE_FLAG 0x0001 -#define GetScheduleFlag(x) ((x)&EIT_SCHEDULE_FLAG) -#define SetScheduleFlag(x) ((x)|=EIT_SCHEDULE_FLAG) -#define EIT_PRESENT_FOLLOWING_FLAG 0x0002 -#define GetPresentFollowing(x) ((x)&EIT_PRESENT_FOLLOWING_FLAG) -#define SetPresentFollowing(x) ((x)|=EIT_PRESENT_FOLLOWING_FLAG) -#define RUNNING_STATUS_NOT_RUNNING 0x0000 -#define RUNNING_STATUS_AWAITING 0x0004 -#define RUNNING_STATUS_PAUSING 0x0008 -#define RUNNING_STATUS_RUNNING 0x000C -#define GetRunningStatus(x) ((x)&RUNNING_STATUS_RUNNING) -#define SetRunningStatus(x,s) ((x)|=((s)&RUNNING_STATUS_RUNNING)) -#define FREE_TO_AIR 0x0000 -#define CONDITIONAL_ACCESS 0x0010 -#define GetConditionalAccess(x) ((x)&CONDITIONAL_ACCESS) -#define SetConditionalAccess(x) ((x)|=CONDITIONAL_ACCESS) - -#define CreateService(service, svid, tsid, onid, vers, sta) \ - do \ - { \ - xCreateNode (service, NULL); \ - service->ServiceID = svid; \ - service->TransportStreamID = tsid; \ - service->OriginalNetworkID = onid; \ - service->SdtVersion = vers; \ - service->Status = sta; \ - service->Descriptors = xNewList (NULL); \ - service->Events = xNewList (NULL); \ - } while (0) - - -struct Event { - struct NODE Node; - int EventID; - int ServiceID; - int EitVersion; - int TransportStreamID; - int OriginalNetworkID; - time_t StartTime; - time_t Duration; - unsigned short Status; - struct LIST *Descriptors; -}; - -#define CreateEvent(event, evid, svid, tsid, onid, vers, sta) \ - do \ - { \ - xCreateNode (event, NULL); \ - event->EventID = evid; \ - event->ServiceID = svid; \ - event->TransportStreamID = tsid; \ - event->OriginalNetworkID = onid; \ - event->EitVersion = vers; \ - event->Status = sta; \ - event->Descriptors = xNewList (NULL); \ - } while (0) - - -/* Strukturen zur Aufnahme der PAT und PMT Informationen */ - -struct Program { - struct NODE Node; - int ProgramID; - int TransportStreamID; - int NetworkPID; - int PatVersion; - struct LIST *Pids; -}; - -#define CreateProgram(program, pgid, tsid, npid, vers) \ - do \ - { \ - xCreateNode (program, NULL); \ - program->ProgramID = pgid; \ - program->TransportStreamID = tsid; \ - program->NetworkPID = npid; \ - program->PatVersion = vers; \ - program->Pids = xNewList (NULL); \ - } while (0) - -struct Pid { - struct NODE Node; - int ProgramID; - int PcrPID; - int PmtVersion; - struct LIST *Descriptors; - struct LIST *InfoList; -}; - -#define CreatePid(pid, pgid, pcid, vers) \ - do \ - { \ - xCreateNode (pid, NULL); \ - pid->ProgramID = pgid; \ - pid->PcrPID = pcid; \ - pid->PmtVersion = vers; \ - pid->Descriptors = xNewList (NULL); \ - pid->InfoList = xNewList (NULL); \ - } while (0) - -struct PidInfo { - struct NODE Node; - int StreamType; - dvb_pid_t ElementaryPid; - struct LIST *Descriptors; -}; - -#define CreatePidInfo(pidinfo, styp, epid) \ - do \ - { \ - xCreateNode (pidinfo, NULL); \ - pidinfo->StreamType = styp; \ - pidinfo->ElementaryPid = (dvb_pid_t) epid; \ - pidinfo->Descriptors = xNewList (NULL); \ - } while (0) - - -#define STREAMTYPE_11172_VIDEO 1 -#define STREAMTYPE_13818_VIDEO 2 -#define STREAMTYPE_11172_AUDIO 3 -#define STREAMTYPE_13818_AUDIO 4 -#define STREAMTYPE_13818_PRIVATE 5 -#define STREAMTYPE_13818_PES_PRIVATE 6 -#define STREAMTYPE_13522_MHPEG 7 -#define STREAMTYPE_13818_DSMCC 8 -#define STREAMTYPE_ITU_222_1 9 -#define STREAMTYPE_13818_A 10 -#define STREAMTYPE_13818_B 11 -#define STREAMTYPE_13818_C 12 -#define STREAMTYPE_13818_D 13 -#define STREAMTYPE_13818_AUX 14 - - -struct Tot { - time_t UTC; - time_t Bias; - struct LIST *Descriptors; -}; - -#define CreateTot(tot, utc) \ - do \ - { \ - xMemAlloc(sizeof(struct Tot), &tot); \ - tot->UTC = utc; \ - tot->Bias = ((utc - time(NULL) + 1800)/3600)*3600; \ - tot->Descriptors = xNewList(NULL); \ - } while (0) - - -/* Descriptors */ - -#define DescriptorTag(x) ((struct Descriptor *)(x))->Tag - -struct Descriptor { - struct NODE Node; - unsigned short Tag; -}; - - -/* Iso639LanguageDescriptor */ - -struct Iso639LanguageDescriptor { - struct NODE Node; - unsigned short Tag; - char LanguageCode[4]; -}; - -#define CreateIso639LanguageDescriptor(descr, lc1, lc2, lc3) \ - do \ - { \ - xCreateNode (((struct Iso639LanguageDescriptor *)descr), NULL); \ - ((struct Iso639LanguageDescriptor *)descr)->Tag = DESCR_ISO_639_LANGUAGE; \ - ((struct Iso639LanguageDescriptor *)descr)->LanguageCode[0] = lc1; \ - ((struct Iso639LanguageDescriptor *)descr)->LanguageCode[1] = lc2; \ - ((struct Iso639LanguageDescriptor *)descr)->LanguageCode[2] = lc3; \ - ((struct Iso639LanguageDescriptor *)descr)->LanguageCode[3] = '\0'; \ - } while (0) - - -/* Ac3Descriptor */ - -#define AC3_TYPE_FLAG 0x0001 -#define BS_ID_FLAG 0x0002 -#define MAIN_ID_FLAG 0x0004 -#define ASVC_FLAG 0x0008 - -struct Ac3Descriptor { - struct NODE Node; - unsigned short Tag; - unsigned short PresentFlags; - unsigned short Ac3Type; - unsigned short BsId; - unsigned short MainId; - unsigned short Asvc; - unsigned short Amount; /* AdditionalData */ - unsigned char *AdditionalData; -}; - -#define CreateAc3Descriptor(descr) \ - do \ - { \ - xCreateNode (((struct Ac3Descriptor *)descr), NULL); \ - ((struct Ac3Descriptor *)descr)->Tag = DESCR_AC3; \ - } while (0) - -#define AddAc3FlagAndValue(descr, flg, val) \ - do \ - { \ - if ((flg) & AC3_TYPE_FLAG) { \ - ((struct Ac3Descriptor *)descr)->PresentFlags |= AC3_TYPE_FLAG; \ - ((struct Ac3Descriptor *)descr)->Ac3Type = (val); } \ - else if ((flg) & BS_ID_FLAG) { \ - ((struct Ac3Descriptor *)descr)->PresentFlags |= BS_ID_FLAG; \ - ((struct Ac3Descriptor *)descr)->BsId = (val); } \ - else if ((flg) & MAIN_ID_FLAG) { \ - ((struct Ac3Descriptor *)descr)->PresentFlags |= MAIN_ID_FLAG; \ - ((struct Ac3Descriptor *)descr)->MainId = (val); } \ - else if ((flg) & ASVC_FLAG) { \ - ((struct Ac3Descriptor *)descr)->PresentFlags |= ASVC_FLAG; \ - ((struct Ac3Descriptor *)descr)->Asvc = (val); } \ - } while (0) - -#define AddAc3AdditionalData(descr, ptr, len) \ - do \ - { \ - xMemAlloc ((len)+1, &(((struct Ac3Descriptor *) \ - descr)->AdditionalData)); \ - memcpy ((((struct Ac3Descriptor *)descr)->AdditionalData),(ptr),(len)); \ - } while (0) - - -/* AncillaryDataDescriptor */ - -struct AncillaryDataDescriptor { - struct NODE Node; - unsigned short Tag; - unsigned short Identifier; -}; - -#define ANCILLARY_DATA_DVD_VIDEO 0x0001 -#define ANCILLARY_DATA_EXTENDED 0x0002 -#define ANCILLARY_DATA_SWITCHING 0x0004 -#define ANCILLARY_DATA_DAB 0x0008 -#define ANCILLARY_DATA_SCALE_FACTOR 0x0010 - -#define CreateAncillaryDataDescriptor(descr, id) \ - do \ - { \ - xCreateNode (((struct AncillaryDataDescriptor *)descr), NULL); \ - ((struct AncillaryDataDescriptor *)descr)->Tag = DESCR_ANCILLARY_DATA; \ - ((struct AncillaryDataDescriptor *)descr)->Identifier = id; \ - } while (0) - - -/* BouquetNameDescriptor */ -/* - the same used instead of NetworkNameDescriptor because their structures - are identical. We pass 'tag' parameter to distinguish between them later -*/ - -struct BouquetNameDescriptor { - struct NODE Node; /* Node enthält Namen */ - unsigned short Tag; -}; - -#define CreateBouquetNameDescriptor(descr, text, tag) \ - do \ - { \ - xCreateNode (((struct BouquetNameDescriptor *)descr), NULL); \ - ((struct NODE *)descr)->Name = text; \ - ((struct NODE *)descr)->HashKey = xHashKey (text); \ - ((struct BouquetNameDescriptor *)descr)->Tag = tag; \ - } while (0) - - -/* CountryAvailabilityDescriptor */ - -struct CountryAvailabilityDescriptor { - struct NODE Node; - unsigned short Tag; - unsigned short AvailibilityFlag; - unsigned short Amount; /* CountryCodes */ - char *CountryCodes; -}; - -#define COUNTRIES_ARE_AVAILABLE 0x0001 -#define COUNTRIES_ARE_UNAVAILABLE 0x0000 - -#define CreateCountryAvailabilityDescriptor(descr, ava) \ - do \ - { \ - xCreateNode (((struct CountryAvailabilityDescriptor *)descr), NULL); \ - ((struct CountryAvailabilityDescriptor *)descr)->Tag = DESCR_COUNTRY_AVAIL; \ - ((struct CountryAvailabilityDescriptor *)descr)->AvailibilityFlag = ava; \ - ((struct CountryAvailabilityDescriptor *)descr)->Amount = 0; \ - ((struct CountryAvailabilityDescriptor *)descr)->CountryCodes = NULL; \ - } while (0) - -#define AddCountryAvailabilityCode(descr, lc1, lc2, lc3) \ - do \ - { \ - char tmpbuf[4], *tmpptr, *ttptr; \ - \ - tmpbuf[0] = lc1; tmpbuf[1] = lc2; \ - tmpbuf[2] = lc3; tmpbuf[3] = '\0'; \ - xMemAlloc (((struct CountryAvailabilityDescriptor *)descr)->Amount*4 + 8, &tmpptr); \ - ttptr = tmpptr; \ - if (((struct CountryAvailabilityDescriptor *)descr)->CountryCodes) { \ - memcpy (ttptr, ((struct CountryAvailabilityDescriptor *)descr)->CountryCodes, \ - ((struct CountryAvailabilityDescriptor *)descr)->Amount*4); \ - ttptr += ((struct CountryAvailabilityDescriptor *)descr)->Amount*4; \ - } \ - memcpy (ttptr, tmpbuf, 4); \ - ((struct CountryAvailabilityDescriptor *)descr)->CountryCodes = tmpptr; \ - } while (0) - - -/* CaIdentifierDescriptor */ - -struct CaIdentifierDescriptor { - struct NODE Node; - unsigned short Tag; - unsigned short Amount; /* SystemIDs */ - unsigned short *SystemID; -}; - -#define CreateCaIdentifierDescriptor(descr, amo) \ - do \ - { \ - xCreateNode (((struct CaIdentifierDescriptor *)descr), NULL); \ - ((struct CaIdentifierDescriptor *)descr)->Tag = DESCR_CA_IDENT; \ - ((struct CaIdentifierDescriptor *)descr)->Amount = amo; \ - xMemAlloc (amo*2+2, &((struct CaIdentifierDescriptor *)descr)->SystemID); \ - } while (0) - -#define SetCaIdentifierID(descr, num, id) \ - ((struct CaIdentifierDescriptor *)descr)->SystemID[num] = id -#define GetCaIdentifierID(descr, num) (((struct CaIdentifierDescriptor *)descr)->SystemID[num]) - -/* CaDescriptor */ - -struct CaDescriptor { - struct NODE Node; - unsigned short Tag; - unsigned short CA_type; - unsigned short CA_PID; - unsigned int ProviderID; - unsigned short DataLength; - unsigned char *Data; -}; - -#define CreateCaDescriptor(descr, typ, capid, len) \ - do \ - { \ - xCreateNode (((struct CaDescriptor *)descr), NULL); \ - ((struct CaDescriptor *)descr)->Tag = DESCR_CA; \ - ((struct CaDescriptor *)descr)->CA_type = typ; \ - ((struct CaDescriptor *)descr)->CA_PID = capid; \ - ((struct CaDescriptor *)descr)->ProviderID = 0; \ - ((struct CaDescriptor *)descr)->DataLength = len; \ - xMemAlloc (len+1, &((struct CaDescriptor *)descr)->Data); \ - } while (0) - -#define SetCaData(descr, num, id) \ - ((struct CaDescriptor *)descr)->Data[num] = id -#define GetCaData(descr, num) (((struct CaDescriptor *)descr)->Data[num]) - -/* StreamIdentifierDescriptor */ - -struct StreamIdentifierDescriptor { - struct NODE Node; - unsigned short Tag; - unsigned short ComponentTag; -}; - -#define CreateStreamIdentifierDescriptor(descr, ctag) \ - do \ - { \ - xCreateNode (((struct StreamIdentifierDescriptor *)descr), NULL); \ - ((struct StreamIdentifierDescriptor *)descr)->Tag = DESCR_STREAM_ID; \ - ((struct StreamIdentifierDescriptor *)descr)->ComponentTag = (ctag); \ - } while (0) - - -/* DataBroadcastDescriptor */ - -struct DataBroadcastDescriptor { - struct NODE Node; /* Node enthält DescriptorText */ - unsigned short Tag; - unsigned short DataBroadcastID; - unsigned short ComponentTag; - unsigned short SelectorLength; - unsigned char *SelectorBytes; - char LanguageCode[4]; -}; - -struct MosaicDescriptor { - struct NODE Node; - unsigned short Tag; - /* to be defined */ -}; - -struct MultiLingualServiceDescriptor { - struct NODE Node; - unsigned short Tag; - /* to be defined */ -}; - - -/* NvodReferenceDescriptor */ - -struct NvodReferenceDescriptor { - struct NODE Node; - unsigned short Tag; - struct LIST *Items; -}; - -#define CreateNvodReferenceDescriptor(descr) \ - do \ - { \ - xCreateNode (((struct NvodReferenceDescriptor *)descr), NULL); \ - ((struct NvodReferenceDescriptor *)descr)->Tag = DESCR_NVOD_REF; \ - ((struct NvodReferenceDescriptor *)descr)->Items = xNewList (NULL); \ - } while (0) - -struct NvodReferenceItem { - struct NODE Node; - int TransportStreamID; - int OriginalNetworkID; - int ServiceID; -}; - -#define CreateNvodReferenceItem(itm, tpid, onid, svid) \ - do \ - { \ - xCreateNode (itm, NULL); \ - itm->TransportStreamID = tpid; \ - itm->OriginalNetworkID = onid; \ - itm->ServiceID = svid; \ - } while (0) - -#define AddNvodReferenceItem(desc, tpid, onid, svid) \ - do \ - { \ - struct NvodReferenceItem *item; \ - \ - CreateNvodReferenceItem(item, tpid, onid, svid); \ - xAddTail (((struct NvodReferenceDescriptor *)desc)->Items, item); \ - } while (0) - - -/* LinkageDescriptor */ - -struct LinkageDescriptor { - struct NODE Node; - unsigned short Tag; - int TransportStreamID; - int OriginalNetworkID; - int ServiceID; - int LinkageType; - int PrivateDataLength; - unsigned char *PrivateData; -}; - -#define CreateLinkageDescriptor(descr, tpid, onid, svid, ltyp, pdl, pdp) \ - do \ - { \ - xCreateNode (((struct LinkageDescriptor *)descr), NULL); \ - ((struct LinkageDescriptor *)descr)->Tag = DESCR_LINKAGE; \ - ((struct LinkageDescriptor *)descr)->TransportStreamID = tpid; \ - ((struct LinkageDescriptor *)descr)->OriginalNetworkID = onid; \ - ((struct LinkageDescriptor *)descr)->ServiceID = svid; \ - ((struct LinkageDescriptor *)descr)->LinkageType = ltyp; \ - ((struct LinkageDescriptor *)descr)->PrivateDataLength = pdl; \ - xMemAlloc ((pdl)+1, &(((struct LinkageDescriptor *) \ - descr)->PrivateData)); \ - memcpy ((((struct LinkageDescriptor *)descr)->PrivateData),(pdp),(pdl));\ - } while (0) - - -/* ServiceDescriptor */ - -struct ServiceDescriptor { - struct NODE Node; /* Node enthält ServiceName */ - unsigned short Tag; - unsigned short ServiceType; - char *ServiceProvider; -}; - -#define CreateServiceDescriptor(descr, styp, prov, name) \ - do \ - { \ - xCreateNode (((struct ServiceDescriptor *)descr), NULL); \ - ((struct NODE *)descr)->Name = name; \ - ((struct NODE *)descr)->HashKey = xHashKey (name); \ - ((struct ServiceDescriptor *)descr)->Tag = DESCR_SERVICE; \ - ((struct ServiceDescriptor *)descr)->ServiceType = styp; \ - ((struct ServiceDescriptor *)descr)->ServiceProvider = prov; \ - } while (0) - - - -struct TelephoneDescriptor { - struct NODE Node; - unsigned short Tag; - /* to be defined */ -}; - - -/* TimeShiftedServiceDescriptor */ - -struct TimeShiftedServiceDescriptor { - struct NODE Node; - unsigned short Tag; - int ReferenceServiceID; -}; - -#define CreateTimeShiftedServiceDescriptor(descr, svid) \ - do \ - { \ - xCreateNode (((struct TimeShiftedServiceDescriptor *)descr), NULL); \ - ((struct TimeShiftedServiceDescriptor *)descr)->Tag = DESCR_TIME_SHIFTED_SERVICE; \ - ((struct TimeShiftedServiceDescriptor *)descr)->ReferenceServiceID = svid; \ - } while (0) - - -/* TimeShiftedEventDescriptor */ - -struct TimeShiftedEventDescriptor { - struct NODE Node; - unsigned short Tag; - int ReferenceServiceID; - int ReferenceEventID; -}; - -#define CreateTimeShiftedEventDescriptor(descr, svid, evid) \ - do \ - { \ - xCreateNode (((struct TimeShiftedEventDescriptor *)descr), NULL); \ - ((struct TimeShiftedEventDescriptor *)descr)->Tag = DESCR_TIME_SHIFTED_EVENT; \ - ((struct TimeShiftedEventDescriptor *)descr)->ReferenceServiceID = svid; \ - ((struct TimeShiftedEventDescriptor *)descr)->ReferenceEventID = evid; \ - } while (0) - - -/* ComponentDescriptor */ - -struct ComponentDescriptor { - struct NODE Node; /* Node enthält ComponentText */ - unsigned short Tag; - unsigned short StreamContent; - unsigned short ComponentType; - unsigned short ComponentTag; - char LanguageCode[4]; -}; - -#define CreateComponentDescriptor(descr, scnt, ctyp, tag, lc1, lc2, lc3, txt) \ - do \ - { \ - xCreateNode (((struct ComponentDescriptor *)descr), NULL); \ - ((struct NODE *)descr)->Name = txt; \ - ((struct NODE *)descr)->HashKey = xHashKey (txt); \ - ((struct ComponentDescriptor *)descr)->Tag = DESCR_COMPONENT; \ - ((struct ComponentDescriptor *)descr)->StreamContent = scnt; \ - ((struct ComponentDescriptor *)descr)->ComponentType = ctyp; \ - ((struct ComponentDescriptor *)descr)->ComponentTag = tag; \ - ((struct ComponentDescriptor *)descr)->LanguageCode[0] = lc1; \ - ((struct ComponentDescriptor *)descr)->LanguageCode[1] = lc2; \ - ((struct ComponentDescriptor *)descr)->LanguageCode[2] = lc3; \ - ((struct ComponentDescriptor *)descr)->LanguageCode[3] = '\0'; \ - } while (0) - - -/* ContentDescriptor */ - -struct ContentDescriptor { - struct NODE Node; - unsigned short Tag; - unsigned short Amount; /* ContentIDs */ - unsigned short *ContentID; -}; - -#define CreateContentDescriptor(descr, amo) \ - do \ - { \ - xCreateNode (((struct ContentDescriptor *)descr), NULL); \ - ((struct ContentDescriptor *)descr)->Tag = DESCR_CONTENT; \ - ((struct ContentDescriptor *)descr)->Amount = amo; \ - xMemAlloc (amo*2+2, &((struct ContentDescriptor *)descr)->ContentID); \ - } while (0) - -#define SetContentID(descr, num, cnib1, cnib2, unib1, unib2) \ - do \ - { \ - ((struct ContentDescriptor *)descr)->ContentID[num] = \ - ((cnib1&0xF) << 12) | ((cnib2&0xF) << 8) | \ - ((unib1&0xF) << 4) | (unib2&0xF); \ - } while (0) -#define GetContentContentNibble1(descr, num) ((((struct ContentDescriptor *)descr)->ContentID[num]&0xF000) >> 12) -#define GetContentContentNibble2(descr, num) ((((struct ContentDescriptor *)descr)->ContentID[num]&0x0F00) >> 8) -#define GetContentUserNibble1(descr, num) ((((struct ContentDescriptor *)descr)->ContentID[num]&0x00F0) >> 4) -#define GetContentUserNibble2(descr, num) (((struct ContentDescriptor *)descr)->ContentID[num]&0x000F) - - -/* ExtendedEventDescriptor */ - -struct ExtendedEventDescriptor { - struct NODE Node; /* Node enthält EventText */ - unsigned short Tag; - unsigned short DescriptorNumber; - unsigned short LastDescriptorNumber; - char LanguageCode[4]; - struct LIST *Items; -}; - -#define CreateExtendedEventDescriptor(descr, dnum, ldnb, lc1, lc2, lc3, text) \ - do \ - { \ - xCreateNode (((struct ExtendedEventDescriptor *)descr), NULL); \ - ((struct NODE *)descr)->Name = text; \ - ((struct NODE *)descr)->HashKey = xHashKey (text); \ - ((struct ExtendedEventDescriptor *)descr)->Tag = DESCR_EXTENDED_EVENT; \ - ((struct ExtendedEventDescriptor *)descr)->DescriptorNumber = dnum; \ - ((struct ExtendedEventDescriptor *)descr)->LastDescriptorNumber = ldnb; \ - ((struct ExtendedEventDescriptor *)descr)->LanguageCode[0] = lc1; \ - ((struct ExtendedEventDescriptor *)descr)->LanguageCode[1] = lc2; \ - ((struct ExtendedEventDescriptor *)descr)->LanguageCode[2] = lc3; \ - ((struct ExtendedEventDescriptor *)descr)->LanguageCode[3] = '\0'; \ - ((struct ExtendedEventDescriptor *)descr)->Items = xNewList (NULL); \ - } while (0) - -struct ExtendedEventItem { - struct NODE Node; /* Node enthält ItemDescription Text */ - char *Text; -}; - -#define CreateExtendedEventItem(itm, dtxt, text) \ - do \ - { \ - xCreateNode (itm, NULL); \ - ((struct NODE *)itm)->Name = dtxt; \ - ((struct NODE *)itm)->HashKey = xHashKey (dtxt); \ - itm->Text = text; \ - } while (0) - -#define AddExtendedEventItem(desc, dtxt, text) \ - do \ - { \ - struct ExtendedEventItem *item; \ - \ - CreateExtendedEventItem(item, dtxt, text); \ - xAddTail (((struct ExtendedEventDescriptor *)desc)->Items, item); \ - } while (0) - - -/* ParentalRatingDescriptor */ - -struct ParentalRatingDescriptor { - struct NODE Node; - unsigned short Tag; - struct LIST *Ratings; -}; - -#define CreateParentalRatingDescriptor(descr) \ - do \ - { \ - xCreateNode (((struct ParentalRatingDescriptor *)descr), NULL); \ - ((struct ParentalRatingDescriptor *)descr)->Tag = DESCR_PARENTAL_RATING; \ - ((struct ParentalRatingDescriptor *)descr)->Ratings = xNewList (NULL); \ - } while (0) - -struct ParentalRating { - struct NODE Node; /* Node enthält ItemDescription Text */ - char LanguageCode[4]; - char Rating; -}; - -#define CreateParentalRating(rat, lc1, lc2, lc3, val) \ - do \ - { \ - xCreateNode (rat, NULL); \ - rat->LanguageCode[0] = lc1; \ - rat->LanguageCode[1] = lc2; \ - rat->LanguageCode[2] = lc3; \ - rat->LanguageCode[3] = '\0'; \ - rat->Rating = val; \ - } while (0) - -#define AddParentalRating(desc, lc1, lc2, lc3, val) \ - do \ - { \ - struct ParentalRating *item; \ - \ - CreateParentalRating(item, lc1, lc2, lc3, val); \ - xAddTail (((struct ParentalRatingDescriptor *)desc)->Ratings, item); \ - } while (0) - -/* ShortEventDescriptor */ - -struct ShortEventDescriptor { - struct NODE Node; /* Node enthält EventName */ - unsigned short Tag; - char LanguageCode[4]; - char *Text; -}; - -#define CreateShortEventDescriptor(descr, name, lc1, lc2, lc3, text) \ - do \ - { \ - xCreateNode (((struct ShortEventDescriptor *)descr), NULL); \ - ((struct NODE *)descr)->Name = name; \ - ((struct NODE *)descr)->HashKey = xHashKey (name); \ - ((struct ShortEventDescriptor *)descr)->Tag = DESCR_SHORT_EVENT; \ - ((struct ShortEventDescriptor *)descr)->LanguageCode[0] = lc1; \ - ((struct ShortEventDescriptor *)descr)->LanguageCode[1] = lc2; \ - ((struct ShortEventDescriptor *)descr)->LanguageCode[2] = lc3; \ - ((struct ShortEventDescriptor *)descr)->LanguageCode[3] = '\0'; \ - ((struct ShortEventDescriptor *)descr)->Text = text; \ - } while (0) - - -/* TeletextDescriptor */ - -struct TeletextDescriptor { - struct NODE Node; - unsigned short Tag; - struct LIST *Items; -}; - -#define CreateTeletextDescriptor(descr) \ - do \ - { \ - xCreateNode (((struct TeletextDescriptor *)descr), NULL); \ - ((struct TeletextDescriptor *)descr)->Tag = DESCR_TELETEXT; \ - ((struct TeletextDescriptor *)descr)->Items = xNewList (NULL); \ - } while (0) - -#define TELETEXT_TYPE_INITIAL_PAGE 0x0001 -#define TELETEXT_TYPE_SUBTITLE_PAGE 0x0002 -#define TELETEXT_TYPE_ADDITIONAL_INFO 0x0003 -#define TELETEXT_TYPE_PROGRAM_SCHEDULE 0x0004 -#define TELETEXT_TYPE_HEARING_IMPAIRED 0x0005 - -struct TeletextItem { - struct NODE Node; - char LanguageCode[4]; - unsigned short Type; - unsigned short MagazineNumber; - unsigned short PageNumber; -}; - -#define CreateTeletextItem(itm, tp, mg, pg, lc1, lc2, lc3) \ - do \ - { \ - xCreateNode (itm, NULL); \ - ((struct TeletextItem *)itm)->Type = (tp); \ - ((struct TeletextItem *)itm)->MagazineNumber = (mg); \ - ((struct TeletextItem *)itm)->PageNumber = (mg); \ - ((struct TeletextItem *)itm)->LanguageCode[0] = (lc1); \ - ((struct TeletextItem *)itm)->LanguageCode[1] = (lc2); \ - ((struct TeletextItem *)itm)->LanguageCode[2] = (lc3); \ - ((struct TeletextItem *)itm)->LanguageCode[3] = '\0'; \ - } while (0) - -#define AddTeletextItem(desc, tp, mg, pg, lc1, lc2, lc3) \ - do \ - { \ - struct TeletextItem *item; \ - \ - CreateTeletextItem(item, tp, mg, pg, lc1, lc2, lc3); \ - xAddTail (((struct TeletextDescriptor *)desc)->Items, item); \ - } while (0) - - -/* SubtitlingDescriptor */ - -struct SubtitlingDescriptor { - struct NODE Node; - unsigned short Tag; - struct LIST *Items; -}; - -#define CreateSubtitlingDescriptor(descr) \ - do \ - { \ - xCreateNode (((struct SubtitlingDescriptor *)descr), NULL); \ - ((struct SubtitlingDescriptor *)descr)->Tag = DESCR_SUBTITLING; \ - ((struct SubtitlingDescriptor *)descr)->Items = xNewList (NULL); \ - } while (0) - -struct SubtitlingItem { - struct NODE Node; - char LanguageCode[4]; - unsigned char Type; - unsigned short CompositionPageId; - unsigned short AncillaryPageId; -}; - -#define CreateSubtitlingItem(itm, tp, cp, ap, lc1, lc2, lc3) \ - do \ - { \ - xCreateNode (itm, NULL); \ - ((struct SubtitlingItem *)itm)->Type = (tp); \ - ((struct SubtitlingItem *)itm)->CompositionPageId = (cp); \ - ((struct SubtitlingItem *)itm)->AncillaryPageId = (ap); \ - ((struct SubtitlingItem *)itm)->LanguageCode[0] = (lc1); \ - ((struct SubtitlingItem *)itm)->LanguageCode[1] = (lc2); \ - ((struct SubtitlingItem *)itm)->LanguageCode[2] = (lc3); \ - ((struct SubtitlingItem *)itm)->LanguageCode[3] = '\0'; \ - } while (0) - -#define AddSubtitlingItem(desc, tp, cp, ap, lc1, lc2, lc3) \ - do \ - { \ - struct SubtitlingItem *item; \ - \ - CreateSubtitlingItem(item, tp, cp, ap, lc1, lc2, lc3); \ - xAddTail (((struct SubtitlingDescriptor *)desc)->Items, item); \ - } while (0) - -/* SatelliteDeliverySystemDescriptor */ - -struct SatelliteDeliverySystemDescriptor { - struct NODE Node; - unsigned short Tag; - long Frequency; - short OrbitalPosition; - short Modulation; - char Polarization; - long SymbolRate; - char FEC; -}; - -#define CreateSatelliteDeliverySystemDescriptor(descr, freq, orb, mod, polar, sr, fec) \ - do \ - { \ - xCreateNode (((struct SatelliteDeliverySystemDescriptor *)descr), NULL); \ - ((struct SatelliteDeliverySystemDescriptor *)descr)->Tag = DESCR_SAT_DEL_SYS; \ - ((struct SatelliteDeliverySystemDescriptor *)descr)->Frequency = freq; \ - ((struct SatelliteDeliverySystemDescriptor *)descr)->OrbitalPosition = orb; \ - ((struct SatelliteDeliverySystemDescriptor *)descr)->Modulation = mod; \ - ((struct SatelliteDeliverySystemDescriptor *)descr)->Polarization = polar; \ - ((struct SatelliteDeliverySystemDescriptor *)descr)->SymbolRate = sr; \ - ((struct SatelliteDeliverySystemDescriptor *)descr)->FEC = fec; \ - } while (0) - -/* CableDeliverySystemDescriptor */ - -struct CableDeliverySystemDescriptor { - struct NODE Node; - unsigned short Tag; - long Frequency; - long SymbolRate; - char FECouter; - char FECinner; - char Modulation; -}; - -#define CreateCableDeliverySystemDescriptor(descr, freq, sr, fec_o, fec_i, mod) \ - do \ - { \ - xCreateNode (((struct CableDeliverySystemDescriptor *)descr), NULL); \ - ((struct CableDeliverySystemDescriptor *)descr)->Tag = DESCR_CABLE_DEL_SYS; \ - ((struct CableDeliverySystemDescriptor *)descr)->Frequency = freq; \ - ((struct CableDeliverySystemDescriptor *)descr)->SymbolRate = sr; \ - ((struct CableDeliverySystemDescriptor *)descr)->FECouter = fec_o; \ - ((struct CableDeliverySystemDescriptor *)descr)->FECinner = fec_i; \ - ((struct CableDeliverySystemDescriptor *)descr)->Modulation = mod; \ - } while (0) - -/* TerrestrialDeliverySystemDescriptor */ - -struct TerrestrialDeliverySystemDescriptor { - struct NODE Node; - unsigned short Tag; - long Frequency; - char Bandwidth; - char Constellation; - char Hierarchy; - char CodeRateHP; - char CodeRateLP; - char GuardInterval; - char TransmissionMode; - char OtherFrequencyFlag; -}; - -#define CreateTerrestrialDeliverySystemDescriptor(descr, freq, bw, cst, hr, crh, crl, gi, tm, ofm) \ - do \ - { \ - xCreateNode (((struct CableDeliverySystemDescriptor *)descr), NULL); \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->Tag = DESCR_TERR_DEL_SYS; \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->Frequency = freq; \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->Bandwidth = bw; \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->Constellation = cst; \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->Hierarchy = hr; \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->CodeRateHP = crh; \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->CodeRateLP = crl; \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->GuardInterval = gi; \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->TransmissionMode = tm; \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->OtherFrequencyFlag = ofm; \ - } while (0) - -/* ServiceListDescriptor */ - -struct ServiceListDescriptor { - struct NODE Node; - unsigned short Tag; - struct LIST *ServiceList; -}; - -#define CreateServiceListDescriptor(descr) \ - do \ - { \ - xCreateNode (((struct ServiceListDescriptor *)descr), NULL); \ - ((struct ServiceListDescriptor *)descr)->Tag = DESCR_SERVICE_LIST; \ - ((struct ServiceListDescriptor *)descr)->ServiceList = xNewList(NULL); \ - } while (0) - -struct ServiceListEntry { - struct NODE Node; - int ServiceID; - unsigned short ServiceType; -}; - -#define AddServiceListEntry(descr, id, typ) \ - do \ - { \ - struct ServiceListEntry *newent; \ - \ - xCreateNode (newent, NULL); \ - newent->ServiceID = id; \ - newent->ServiceType = typ; \ - xAddTail (((struct ServiceListDescriptor *)descr)->ServiceList, newent); \ - } while (0) - -/* LocalTimeOffsetDescriptor */ - -struct LocalTimeOffsetDescriptor { - struct NODE Node; - unsigned short Tag; - struct LIST *LocalTimeOffsets; -}; - -#define CreateLocalTimeOffsetDescriptor(descr) \ - do \ - { \ - xCreateNode (((struct LocalTimeOffsetDescriptor *)descr), NULL); \ - ((struct LocalTimeOffsetDescriptor *)descr)->Tag = DESCR_LOCAL_TIME_OFF; \ - ((struct LocalTimeOffsetDescriptor *)descr)->LocalTimeOffsets = xNewList(NULL); \ - } while (0) - -struct LocalTimeOffsetEntry { - struct NODE Node; - char CountryCode[4]; - char RegionID; - time_t CurrentOffset; - time_t ChangeTime; - time_t NextOffset; -}; - -#define CreateLocalTimeOffsetEntry(newent, code1, code2, code3, reg, co, ct, no) \ - do \ - { \ - xCreateNode (newent, NULL); \ - newent->CountryCode[0] = code1; \ - newent->CountryCode[1] = code2; \ - newent->CountryCode[2] = code3; \ - newent->CountryCode[3] = '\0'; \ - newent->RegionID = reg; \ - newent->CurrentOffset = co; \ - newent->ChangeTime = ct; \ - newent->NextOffset = no; \ - } while (0) - -#define AddLocalTimeOffsetEntry(descr, code1, code2, code3, reg, co, ct, no) \ - do \ - { \ - struct LocalTimeOffsetEntry *newent; \ - \ - xCreateNode (newent, NULL); \ - newent->CountryCode[0] = code1; \ - newent->CountryCode[1] = code2; \ - newent->CountryCode[2] = code3; \ - newent->CountryCode[3] = '\0'; \ - newent->RegionID = reg; \ - newent->CurrentOffset = co; \ - newent->ChangeTime = ct; \ - newent->NextOffset = no; \ - xAddTail (((struct LocalTimeOffsetDescriptor *)descr)->LocalTimeOffsets, newent); \ - } while (0) - -#define timezonecmp(ptoe,cod,reg) \ - (strncmp(ptoe->CountryCode, cod, 3) || (ptoe->RegionID != reg)) - - - -/* Prototypes */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* si_parser.c */ - -struct LIST *siParsePAT (u_char *); -struct LIST *siParseCAT (u_char *); -struct Pid *siParsePMT (u_char *); -struct LIST *siParseSDT (u_char *); -struct LIST *siParseNIT (u_char *); -struct LIST *siParseEIT (u_char *); -time_t siParseTDT (u_char *); -struct Tot *siParseTOT (u_char *); -void siParseDescriptors (struct LIST *, u_char *, int, u_char); -void siParseDescriptor (struct LIST *, u_char *); -char *siGetDescriptorText (u_char *, int); -char *siGetDescriptorName (u_char *, int); - -/* si_debug_services.c */ - -void siDebugServices (struct LIST *); -void siDebugService (struct Service *); -void siDebugEvents (char *, struct LIST *); -void siDebugPrograms (char *, struct LIST *); -void siDebugProgram (struct Program *); -void siDebugPids (char *, struct LIST *); -void siDebugDescriptors (char *, struct LIST *); -void siDebugEitServices (struct LIST *); -void siDebugEitEvents (char *, struct LIST *); -void siDumpDescriptor (void *); -void siDumpSection (void *); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libdtv/libsi/include/si_tables.h b/libdtv/libsi/include/si_tables.h deleted file mode 100644 index f5e659ca..00000000 --- a/libdtv/libsi/include/si_tables.h +++ /dev/null @@ -1,1403 +0,0 @@ -////////////////////////////////////////////////////////////// -/// /// -/// si_tables.h: definitions for data structures of the /// -/// incoming SI data stream /// -/// /// -////////////////////////////////////////////////////////////// - -// $Revision: 1.4 $ -// $Date: 2003/04/12 11:27:31 $ -// $Author: hakenes $ -// -// (C) 2001-03 Rolf Hakenes <hakenes@hippomi.de>, under the -// GNU GPL with contribution of Oleg Assovski, -// www.satmania.com -// -// libsi 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, or (at your option) -// any later version. -// -// libsi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You may have received a copy of the GNU General Public License -// along with libsi; see the file COPYING. If not, write to the -// Free Software Foundation, Inc., 59 Temple Place - Suite 330, -// Boston, MA 02111-1307, USA. - -#define HILO(x) (x##_hi << 8 | x##_lo) - -#define MjdToEpochTime(x) (((x##_hi << 8 | x##_lo)-40587)*86400) -#define BcdTimeToSeconds(x) ((3600 * ((10*((x##_h & 0xF0)>>4)) + (x##_h & 0xF))) + \ - (60 * ((10*((x##_m & 0xF0)>>4)) + (x##_m & 0xF))) + \ - ((10*((x##_s & 0xF0)>>4)) + (x##_s & 0xF))) -#define BcdTimeToMinutes(x) ((60 * ((10*((x##_h & 0xF0)>>4)) + (x##_h & 0xF))) + \ - (((10*((x##_m & 0xF0)>>4)) + (x##_m & 0xF)))) -#define BcdCharToInt(x) (10*((x & 0xF0)>>4) + (x & 0xF)) -#define CheckBcdChar(x) ((((x & 0xF0)>>4) <= 9) && \ - ((x & 0x0F) <= 9)) -#define CheckBcdSignedChar(x) ((((x & 0xF0)>>4) >= 0) && (((x & 0xF0)>>4) <= 9) && \ - ((x & 0x0F) >= 0) && ((x & 0x0F) <= 9)) - -#define TableHasMoreSections(x) (((pat_t *)(x))->last_section_number > ((pat_t *)(x))->section_number) -#define GetTableId(x) ((pat_t *)(x))->table_id -#define GetSectionNumber(x) ((pat_t *)(x))->section_number -#define GetLastSectionNumber(x) ((pat_t *)(x))->last_section_number -#define GetServiceId(x) (((eit_t *)(x))->service_id_hi << 8) | ((eit_t *)(x))->service_id_lo -#define GetSegmentLastSectionNumber(x) ((eit_t *)(x))->segment_last_section_number -#define GetLastTableId(x) ((eit_t *)(x))->segment_last_table_id -#define GetSectionLength(x) HILO(((pat_t *)(x))->section_length) - -/* - * - * ETSI ISO/IEC 13818-1 specifies SI which is referred to as PSI. The PSI - * data provides information to enable automatic configuration of the - * receiver to demultiplex and decode the various streams of programs - * within the multiplex. The PSI data is structured as four types of table. - * The tables are transmitted in sections. - * - * 1) Program Association Table (PAT): - * - * - for each service in the multiplex, the PAT indicates the location - * (the Packet Identifier (PID) values of the Transport Stream (TS) - * packets) of the corresponding Program Map Table (PMT). - * It also gives the location of the Network Information Table (NIT). - * - */ - -#define PAT_LEN 8 - -typedef struct { - u_char table_id :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char section_syntax_indicator :1; - u_char dummy :1; // has to be 0 - u_char :2; - u_char section_length_hi :4; -#else - u_char section_length_hi :4; - u_char :2; - u_char dummy :1; // has to be 0 - u_char section_syntax_indicator :1; -#endif - u_char section_length_lo :8; - u_char transport_stream_id_hi :8; - u_char transport_stream_id_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :2; - u_char version_number :5; - u_char current_next_indicator :1; -#else - u_char current_next_indicator :1; - u_char version_number :5; - u_char :2; -#endif - u_char section_number :8; - u_char last_section_number :8; -} pat_t; - -#define PAT_PROG_LEN 4 - -typedef struct { - u_char program_number_hi :8; - u_char program_number_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :3; - u_char network_pid_hi :5; -#else - u_char network_pid_hi :5; - u_char :3; -#endif - u_char network_pid_lo :8; - /* or program_map_pid (if prog_num=0)*/ -} pat_prog_t; - -/* - * - * 2) Conditional Access Table (CAT): - * - * - the CAT provides information on the CA systems used in the - * multiplex; the information is private and dependent on the CA - * system, but includes the location of the EMM stream, when - * applicable. - * - */ -#define CAT_LEN 8 - -typedef struct { - u_char table_id :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char section_syntax_indicator :1; - u_char dummy :1; // has to be 0 - u_char :2; - u_char section_length_hi :4; -#else - u_char section_length_hi :4; - u_char :2; - u_char dummy :1; // has to be 0 - u_char section_syntax_indicator :1; -#endif - u_char section_length_lo :8; - u_char reserved_1 :8; - u_char reserved_2 :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :2; - u_char version_number :5; - u_char current_next_indicator :1; -#else - u_char current_next_indicator :1; - u_char version_number :5; - u_char :2; -#endif - u_char section_number :8; - u_char last_section_number :8; -} cat_t; - -/* - * - * 3) Program Map Table (PMT): - * - * - the PMT identifies and indicates the locations of the streams that - * make up each service, and the location of the Program Clock - * Reference fields for a service. - * - */ - -#define PMT_LEN 12 - -typedef struct { - u_char table_id :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char section_syntax_indicator :1; - u_char dummy :1; // has to be 0 - u_char :2; - u_char section_length_hi :4; -#else - u_char section_length_hi :4; - u_char :2; - u_char dummy :1; // has to be 0 - u_char section_syntax_indicator :1; -#endif - u_char section_length_lo :8; - u_char program_number_hi :8; - u_char program_number_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :2; - u_char version_number :5; - u_char current_next_indicator :1; -#else - u_char current_next_indicator :1; - u_char version_number :5; - u_char :2; -#endif - u_char section_number :8; - u_char last_section_number :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :3; - u_char PCR_PID_hi :5; -#else - u_char PCR_PID_hi :5; - u_char :3; -#endif - u_char PCR_PID_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :4; - u_char program_info_length_hi :4; -#else - u_char program_info_length_hi :4; - u_char :4; -#endif - u_char program_info_length_lo :8; - //descriptors -} pmt_t; - -#define PMT_INFO_LEN 5 - -typedef struct { - u_char stream_type :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :3; - u_char elementary_PID_hi :5; -#else - u_char elementary_PID_hi :5; - u_char :3; -#endif - u_char elementary_PID_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :4; - u_char ES_info_length_hi :4; -#else - u_char ES_info_length_hi :4; - u_char :4; -#endif - u_char ES_info_length_lo :8; - // descriptors -} pmt_info_t; - -/* - * - * 4) Network Information Table (NIT): - * - * - the NIT is intended to provide information about the physical - * network. The syntax and semantics of the NIT are defined in - * ETSI EN 300 468. - * - */ - -#define NIT_LEN 10 - -typedef struct { - u_char table_id :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char section_syntax_indicator :1; - u_char :3; - u_char section_length_hi :4; -#else - u_char section_length_hi :4; - u_char :3; - u_char section_syntax_indicator :1; -#endif - u_char section_length_lo :8; - u_char network_id_hi :8; - u_char network_id_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :2; - u_char version_number :5; - u_char current_next_indicator :1; -#else - u_char current_next_indicator :1; - u_char version_number :5; - u_char :2; -#endif - u_char section_number :8; - u_char last_section_number :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :4; - u_char network_descriptor_length_hi :4; -#else - u_char network_descriptor_length_hi :4; - u_char :4; -#endif - u_char network_descriptor_length_lo :8; - /* descriptors */ -} nit_t; - -#define SIZE_NIT_MID 2 - -typedef struct { // after descriptors -#if BYTE_ORDER == BIG_ENDIAN - u_char :4; - u_char transport_stream_loop_length_hi :4; -#else - u_char transport_stream_loop_length_hi :4; - u_char :4; -#endif - u_char transport_stream_loop_length_lo :8; -} nit_mid_t; - -#define SIZE_NIT_END 4 - -struct nit_end_struct { - long CRC; -}; - -#define NIT_TS_LEN 6 - -typedef struct { - u_char transport_stream_id_hi :8; - u_char transport_stream_id_lo :8; - u_char original_network_id_hi :8; - u_char original_network_id_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :4; - u_char transport_descriptors_length_hi :4; -#else - u_char transport_descriptors_length_hi :4; - u_char :4; -#endif - u_char transport_descriptors_length_lo :8; - /* descriptors */ -} nit_ts_t; - -/* - * - * In addition to the PSI, data is needed to provide identification of - * services and events for the user. In contrast with the PAT, CAT, and - * PMT of the PSI, which give information only for the multiplex in which - * they are contained (the actual multiplex), the additional information - * defined within the present document can also provide information on - * services and events carried by different multiplexes, and even on other - * networks. This data is structured as nine tables: - * - * 1) Bouquet Association Table (BAT): - * - * - the BAT provides information regarding bouquets. As well as giving - * the name of the bouquet, it provides a list of services for each - * bouquet. - * - */ -/* SEE NIT (It has the same structure but has different allowed descriptors) */ -/* - * - * 2) Service Description Table (SDT): - * - * - the SDT contains data describing the services in the system e.g. - * names of services, the service provider, etc. - * - */ - -#define SDT_LEN 11 - -typedef struct { - u_char table_id :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char section_syntax_indicator :1; - u_char :3; - u_char section_length_hi :4; -#else - u_char section_length_hi :4; - u_char :3; - u_char section_syntax_indicator :1; -#endif - u_char section_length_lo :8; - u_char transport_stream_id_hi :8; - u_char transport_stream_id_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :2; - u_char version_number :5; - u_char current_next_indicator :1; -#else - u_char current_next_indicator :1; - u_char version_number :5; - u_char :2; -#endif - u_char section_number :8; - u_char last_section_number :8; - u_char original_network_id_hi :8; - u_char original_network_id_lo :8; - u_char :8; -} sdt_t; - -#define GetSDTTransportStreamId(x) (HILO(((sdt_t *) x)->transport_stream_id)) -#define GetSDTOriginalNetworkId(x) (HILO(((sdt_t *) x)->original_network_id)) - -#define SDT_DESCR_LEN 5 - -typedef struct { - u_char service_id_hi :8; - u_char service_id_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :6; - u_char eit_schedule_flag :1; - u_char eit_present_following_flag :1; - u_char running_status :3; - u_char free_ca_mode :1; - u_char descriptors_loop_length_hi :4; -#else - u_char eit_present_following_flag :1; - u_char eit_schedule_flag :1; - u_char :6; - u_char descriptors_loop_length_hi :4; - u_char free_ca_mode :1; - u_char running_status :3; -#endif - u_char descriptors_loop_length_lo :8; -} sdt_descr_t; - -/* - * - * 3) Event Information Table (EIT): - * - * - the EIT contains data concerning events or programmes such as event - * name, start time, duration, etc.; - the use of different descriptors - * allows the transmission of different kinds of event information e.g. - * for different service types. - * - */ - -#define EIT_LEN 14 - -typedef struct { - u_char table_id :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char section_syntax_indicator :1; - u_char :3; - u_char section_length_hi :4; -#else - u_char section_length_hi :4; - u_char :3; - u_char section_syntax_indicator :1; -#endif - u_char section_length_lo :8; - u_char service_id_hi :8; - u_char service_id_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :2; - u_char version_number :5; - u_char current_next_indicator :1; -#else - u_char current_next_indicator :1; - u_char version_number :5; - u_char :2; -#endif - u_char section_number :8; - u_char last_section_number :8; - u_char transport_stream_id_hi :8; - u_char transport_stream_id_lo :8; - u_char original_network_id_hi :8; - u_char original_network_id_lo :8; - u_char segment_last_section_number :8; - u_char segment_last_table_id :8; -} eit_t; - -#define EIT_EVENT_LEN 12 - -typedef struct { - u_char event_id_hi :8; - u_char event_id_lo :8; - u_char mjd_hi :8; - u_char mjd_lo :8; - u_char start_time_h :8; - u_char start_time_m :8; - u_char start_time_s :8; - u_char duration_h :8; - u_char duration_m :8; - u_char duration_s :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char running_status :3; - u_char free_ca_mode :1; - u_char descriptors_loop_length_hi :4; -#else - u_char descriptors_loop_length_hi :4; - u_char free_ca_mode :1; - u_char running_status :3; -#endif - u_char descriptors_loop_length_lo :8; -} eit_event_t; - -/* - * - * 4) Running Status Table (RST): - * - * - the RST gives the status of an event (running/not running). The RST - * updates this information and allows timely automatic switching to - * events. - * - */ - /* TO BE DONE */ -/* - * - * 5) Time and Date Table (TDT): - * - * - the TDT gives information relating to the present time and date. - * This information is given in a separate table due to the frequent - * updating of this information. - * - */ - -#define TDT_LEN 8 - -typedef struct { - u_char table_id :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char section_syntax_indicator :1; - u_char :3; - u_char section_length_hi :4; -#else - u_char section_length_hi :4; - u_char :3; - u_char section_syntax_indicator :1; -#endif - u_char section_length_lo :8; - u_char utc_mjd_hi :8; - u_char utc_mjd_lo :8; - u_char utc_time_h :8; - u_char utc_time_m :8; - u_char utc_time_s :8; -} tdt_t; - -/* - * - * 6) Time Offset Table (TOT): - * - * - the TOT gives information relating to the present time and date and - * local time offset. This information is given in a separate table due - * to the frequent updating of the time information. - * - */ -#define TOT_LEN 10 - -typedef struct { - u_char table_id :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char section_syntax_indicator :1; - u_char :3; - u_char section_length_hi :4; -#else - u_char section_length_hi :4; - u_char :3; - u_char section_syntax_indicator :1; -#endif - u_char section_length_lo :8; - u_char utc_mjd_hi :8; - u_char utc_mjd_lo :8; - u_char utc_time_h :8; - u_char utc_time_m :8; - u_char utc_time_s :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :4; - u_char descriptors_loop_length_hi :4; -#else - u_char descriptors_loop_length_hi :4; - u_char :4; -#endif - u_char descriptors_loop_length_lo :8; -} tot_t; - - -/* - * - * 7) Stuffing Table (ST): - * - * - the ST is used to invalidate existing sections, for example at - * delivery system boundaries. - * - */ - /* TO BE DONE */ -/* - * - * 8) Selection Information Table (SIT): - * - * - the SIT is used only in "partial" (i.e. recorded) bitstreams. It - * carries a summary of the SI information required to describe the - * streams in the partial bitstream. - * - */ - /* TO BE DONE */ -/* - * - * 9) Discontinuity Information Table (DIT): - * - * - the DIT is used only in "partial" (i.e. recorded) bitstreams. - * It is inserted where the SI information in the partial bitstream may - * be discontinuous. Where applicable the use of descriptors allows a - * flexible approach to the organization of the tables and allows for - * future compatible extensions. - * - */ - /* TO BE DONE */ -/* - * - * The following describes the different descriptors that can be used within - * the SI. - * - * The following semantics apply to all the descriptors defined in this - * subclause: - * - * descriptor_tag: The descriptor tag is an 8-bit field which identifies - * each descriptor. Those values with MPEG-2 normative - * meaning are described in ISO/IEC 13818-1. The values of - * descriptor_tag are defined in 'libsi.h' - * descriptor_length: The descriptor length is an 8-bit field specifying the - * total number of bytes of the data portion of the - * descriptor following the byte defining the value of - * this field. - * - */ - -#define DESCR_GEN_LEN 2 -typedef struct descr_gen_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_gen_t; -#define CastGenericDescriptor(x) ((descr_gen_t *)(x)) - -#define GetDescriptorTag(x) (((descr_gen_t *) x)->descriptor_tag) -#define GetDescriptorLength(x) (((descr_gen_t *) x)->descriptor_length+DESCR_GEN_LEN) - - -/* 0x09 ca_descriptor */ - -#define DESCR_CA_LEN 6 -typedef struct descr_ca_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char CA_type_hi :8; - u_char CA_type_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char reserved :3; - u_char CA_PID_hi :5; -#else - u_char CA_PID_hi :5; - u_char reserved :3; -#endif - u_char CA_PID_lo :8; -} descr_ca_t; -#define CastCaDescriptor(x) ((descr_ca_t *)(x)) - -/* 0x0A iso_639_language_descriptor */ - -#define DESCR_ISO_639_LANGUAGE_LEN 5 -typedef struct descr_iso_639_language_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char lang_code1 :8; - u_char lang_code2 :8; - u_char lang_code3 :8; -} descr_iso_639_language_t; -#define CastIso639LanguageDescriptor(x) ((descr_iso_639_language_t *)(x)) - - -/* 0x40 network_name_descriptor */ - -#define DESCR_NETWORK_NAME_LEN 2 -typedef struct descr_network_name_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_network_name_t; -#define CastNetworkNameDescriptor(x) ((descr_network_name_t *)(x)) - - -/* 0x41 service_list_descriptor */ - -#define DESCR_SERVICE_LIST_LEN 2 -typedef struct descr_service_list_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_service_list_t; -#define CastServiceListDescriptor(x) ((descr_service_list_t *)(x)) - -#define DESCR_SERVICE_LIST_LOOP_LEN 3 -typedef struct descr_service_list_loop_struct { - u_char service_id_hi :8; - u_char service_id_lo :8; - u_char service_type :8; -} descr_service_list_loop_t; -#define CastServiceListDescriptorLoop(x) ((descr_service_list_loop_t *)(x)) - - -/* 0x42 stuffing_descriptor */ - -#define DESCR_STUFFING_LEN XX -typedef struct descr_stuffing_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_stuffing_t; -#define CastStuffingDescriptor(x) ((descr_stuffing_t *)(x)) - - -/* 0x43 satellite_delivery_system_descriptor */ - -#define DESCR_SATELLITE_DELIVERY_SYSTEM_LEN 13 -typedef struct descr_satellite_delivery_system_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char frequency1 :8; - u_char frequency2 :8; - u_char frequency3 :8; - u_char frequency4 :8; - u_char orbital_position1 :8; - u_char orbital_position2 :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char west_east_flag :1; - u_char polarization :2; - u_char modulation :5; -#else - u_char modulation :5; - u_char polarization :2; - u_char west_east_flag :1; -#endif - u_char symbol_rate1 :8; - u_char symbol_rate2 :8; - u_char symbol_rate3 :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char symbol_rate4 :4; - u_char fec_inner :4; -#else - u_char fec_inner :4; - u_char symbol_rate4 :4; -#endif -} descr_satellite_delivery_system_t; -#define CastSatelliteDeliverySystemDescriptor(x) ((descr_satellite_delivery_system_t *)(x)) - - -/* 0x44 cable_delivery_system_descriptor */ - -#define DESCR_CABLE_DELIVERY_SYSTEM_LEN 13 -typedef struct descr_cable_delivery_system_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char frequency1 :8; - u_char frequency2 :8; - u_char frequency3 :8; - u_char frequency4 :8; - u_char reserved1 :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char reserved2 :4; - u_char fec_outer :4; -#else - u_char fec_outer :4; - u_char reserved2 :4; -#endif - u_char modulation :8; - u_char symbol_rate1 :8; - u_char symbol_rate2 :8; - u_char symbol_rate3 :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char symbol_rate4 :4; - u_char fec_inner :4; -#else - u_char fec_inner :4; - u_char symbol_rate4 :4; -#endif -} descr_cable_delivery_system_t; -#define CastCableDeliverySystemDescriptor(x) ((descr_cable_delivery_system_t *)(x)) - - -/* 0x45 vbi_data_descriptor */ - -#define DESCR_VBI_DATA_LEN XX -typedef struct descr_vbi_data_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_vbi_data_t; -#define CastVbiDataDescriptor(x) ((descr_vbi_data_t *)(x)) - - -/* 0x46 vbi_teletext_descriptor */ - -#define DESCR_VBI_TELETEXT_LEN XX -typedef struct descr_vbi_teletext_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_vbi_teletext_t; -#define CastVbiDescriptor(x) ((descr_vbi_teletext_t *)(x)) - - -/* 0x47 bouquet_name_descriptor */ - -#define DESCR_BOUQUET_NAME_LEN 2 -typedef struct descr_bouquet_name_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_bouquet_name_t; -#define CastBouquetNameDescriptor(x) ((descr_bouquet_name_t *)(x)) - - -/* 0x48 service_descriptor */ - -#define DESCR_SERVICE_LEN 4 -typedef struct descr_service_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char service_type :8; - u_char provider_name_length :8; -} descr_service_t; -#define CastServiceDescriptor(x) ((descr_service_t *)(x)) - - -/* 0x49 country_availability_descriptor */ - -#define DESCR_COUNTRY_AVAILABILITY_LEN 3 -typedef struct descr_country_availability_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char country_availability_flag :1; - u_char reserved :7; -#else - u_char reserved :7; - u_char country_availability_flag :1; -#endif -} descr_country_availability_t; -#define CastCountryAvailabilityDescriptor(x) ((descr_country_availability_t *)(x)) - - -/* 0x4A linkage_descriptor */ - -#define DESCR_LINKAGE_LEN 9 -typedef struct descr_linkage_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char transport_stream_id_hi :8; - u_char transport_stream_id_lo :8; - u_char original_network_id_hi :8; - u_char original_network_id_lo :8; - u_char service_id_hi :8; - u_char service_id_lo :8; - u_char linkage_type :8; -} descr_linkage_t; -#define CastLinkageDescriptor(x) ((descr_linkage_t *)(x)) - - -/* 0x4B nvod_reference_descriptor */ - -#define DESCR_NVOD_REFERENCE_LEN 2 -typedef struct descr_nvod_reference_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_nvod_reference_t; -#define CastNvodReferenceDescriptor(x) ((descr_nvod_reference_t *)(x)) - -#define ITEM_NVOD_REFERENCE_LEN 6 -typedef struct item_nvod_reference_struct { - u_char transport_stream_id_hi :8; - u_char transport_stream_id_lo :8; - u_char original_network_id_hi :8; - u_char original_network_id_lo :8; - u_char service_id_hi :8; - u_char service_id_lo :8; -} item_nvod_reference_t; -#define CastNvodReferenceItem(x) ((item_nvod_reference_t *)(x)) - - - -/* 0x4C time_shifted_service_descriptor */ - -#define DESCR_TIME_SHIFTED_SERVICE_LEN 4 -typedef struct descr_time_shifted_service_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char reference_service_id_hi :8; - u_char reference_service_id_lo :8; -} descr_time_shifted_service_t; -#define CastTimeShiftedServiceDescriptor(x) ((descr_time_shifted_service_t *)(x)) - - -/* 0x4D short_event_descriptor */ - -#define DESCR_SHORT_EVENT_LEN 6 -typedef struct descr_short_event_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char lang_code1 :8; - u_char lang_code2 :8; - u_char lang_code3 :8; - u_char event_name_length :8; -} descr_short_event_t; -#define CastShortEventDescriptor(x) ((descr_short_event_t *)(x)) - - -/* 0x4E extended_event_descriptor */ - -#define DESCR_EXTENDED_EVENT_LEN 7 -typedef struct descr_extended_event_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -#if BYTE_ORDER == BIG_ENDIAN - u_char descriptor_number :4; - u_char last_descriptor_number :4; -#else - u_char last_descriptor_number :4; - u_char descriptor_number :4; -#endif - u_char lang_code1 :8; - u_char lang_code2 :8; - u_char lang_code3 :8; - u_char length_of_items :8; -} descr_extended_event_t; -#define CastExtendedEventDescriptor(x) ((descr_extended_event_t *)(x)) - -#define ITEM_EXTENDED_EVENT_LEN 1 -typedef struct item_extended_event_struct { - u_char item_description_length :8; -} item_extended_event_t; -#define CastExtendedEventItem(x) ((item_extended_event_t *)(x)) - - -/* 0x4F time_shifted_event_descriptor */ - -#define DESCR_TIME_SHIFTED_EVENT_LEN 6 -typedef struct descr_time_shifted_event_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char reference_service_id_hi :8; - u_char reference_service_id_lo :8; - u_char reference_event_id_hi :8; - u_char reference_event_id_lo :8; -} descr_time_shifted_event_t; -#define CastTimeShiftedEventDescriptor(x) ((descr_time_shifted_event_t *)(x)) - - -/* 0x50 component_descriptor */ - -#define DESCR_COMPONENT_LEN 8 -typedef struct descr_component_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char reserved :4; - u_char stream_content :4; -#else - u_char stream_content :4; - u_char reserved :4; -#endif - u_char component_type :8; - u_char component_tag :8; - u_char lang_code1 :8; - u_char lang_code2 :8; - u_char lang_code3 :8; -} descr_component_t; -#define CastComponentDescriptor(x) ((descr_component_t *)(x)) - - -/* 0x51 mosaic_descriptor */ - -#define DESCR_MOSAIC_LEN XX -typedef struct descr_mosaic_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_mosaic_t; -#define CastMosaicDescriptor(x) ((descr_mosaic_t *)(x)) - - -/* 0x52 stream_identifier_descriptor */ - -#define DESCR_STREAM_IDENTIFIER_LEN 3 -typedef struct descr_stream_identifier_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char component_tag :8; -} descr_stream_identifier_t; -#define CastStreamIdentifierDescriptor(x) ((descr_stream_identifier_t *)(x)) - - -/* 0x53 ca_identifier_descriptor */ - -#define DESCR_CA_IDENTIFIER_LEN 2 -typedef struct descr_ca_identifier_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_ca_identifier_t; -#define CastCaIdentifierDescriptor(x) ((descr_ca_identifier_t *)(x)) - - -/* 0x54 content_descriptor */ - -#define DESCR_CONTENT_LEN 2 -typedef struct descr_content_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_content_t; -#define CastContentDescriptor(x) ((descr_content_t *)(x)) - -typedef struct nibble_content_struct { -#if BYTE_ORDER == BIG_ENDIAN - u_char content_nibble_level_1 :4; - u_char content_nibble_level_2 :4; - u_char user_nibble_1 :4; - u_char user_nibble_2 :4; -#else - u_char user_nibble_2 :4; - u_char user_nibble_1 :4; - u_char content_nibble_level_2 :4; - u_char content_nibble_level_1 :4; -#endif -} nibble_content_t; -#define CastContentNibble(x) ((nibble_content_t *)(x)) - - -/* 0x55 parental_rating_descriptor */ - -#define DESCR_PARENTAL_RATING_LEN 2 -typedef struct descr_parental_rating_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_parental_rating_t; -#define CastParentalRatingDescriptor(x) ((descr_parental_rating_t *)(x)) - -#define PARENTAL_RATING_LEN 4 -typedef struct parental_rating_struct { - u_char lang_code1 :8; - u_char lang_code2 :8; - u_char lang_code3 :8; - u_char rating :8; -} parental_rating_t; -#define CastParentalRating(x) ((parental_rating_t *)(x)) - - -/* 0x56 teletext_descriptor */ - -#define DESCR_TELETEXT_LEN 2 -typedef struct descr_teletext_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_teletext_t; -#define CastTeletextDescriptor(x) ((descr_teletext_t *)(x)) - -#define ITEM_TELETEXT_LEN 5 -typedef struct item_teletext_struct { - u_char lang_code1 :8; - u_char lang_code2 :8; - u_char lang_code3 :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char type :5; - u_char magazine_number :3; -#else - u_char magazine_number :3; - u_char type :5; -#endif - u_char page_number :8; -} item_teletext_t; -#define CastTeletextItem(x) ((item_teletext_t *)(x)) - - -/* 0x57 telephone_descriptor */ - -#define DESCR_TELEPHONE_LEN XX -typedef struct descr_telephone_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_telephone_t; -#define CastTelephoneDescriptor(x) ((descr_telephone_t *)(x)) - - -/* 0x58 local_time_offset_descriptor */ - -#define DESCR_LOCAL_TIME_OFFSET_LEN 2 -typedef struct descr_local_time_offset_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_local_time_offset_t; -#define CastLocalTimeOffsetDescriptor(x) ((descr_local_time_offset_t *)(x)) - -#define LOCAL_TIME_OFFSET_ENTRY_LEN 15 -typedef struct local_time_offset_entry_struct { - u_char country_code1 :8; - u_char country_code2 :8; - u_char country_code3 :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char country_region_id :6; - u_char :1; - u_char local_time_offset_polarity :1; -#else - u_char local_time_offset_polarity :1; - u_char :1; - u_char country_region_id :6; -#endif - u_char local_time_offset_h :8; - u_char local_time_offset_m :8; - u_char time_of_change_mjd_hi :8; - u_char time_of_change_mjd_lo :8; - u_char time_of_change_time_h :8; - u_char time_of_change_time_m :8; - u_char time_of_change_time_s :8; - u_char next_time_offset_h :8; - u_char next_time_offset_m :8; -} local_time_offset_entry_t ; -#define CastLocalTimeOffsetEntry(x) ((local_time_offset_entry_t *)(x)) - - -/* 0x59 subtitling_descriptor */ - -#define DESCR_SUBTITLING_LEN 2 -typedef struct descr_subtitling_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_subtitling_t; -#define CastSubtitlingDescriptor(x) ((descr_subtitling_t *)(x)) - -#define ITEM_SUBTITLING_LEN 8 -typedef struct item_subtitling_struct { - u_char lang_code1 :8; - u_char lang_code2 :8; - u_char lang_code3 :8; - u_char subtitling_type :8; - u_char composition_page_id_hi :8; - u_char composition_page_id_lo :8; - u_char ancillary_page_id_hi :8; - u_char ancillary_page_id_lo :8; -} item_subtitling_t; -#define CastSubtitlingItem(x) ((item_subtitling_t *)(x)) - - -/* 0x5A terrestrial_delivery_system_descriptor */ - -#define DESCR_TERRESTRIAL_DELIVERY_SYSTEM_LEN XX -typedef struct descr_terrestrial_delivery_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char frequency1 :8; - u_char frequency2 :8; - u_char frequency3 :8; - u_char frequency4 :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char bandwidth :3; - u_char reserved1 :5; -#else - u_char reserved1 :5; - u_char bandwidth :3; -#endif -#if BYTE_ORDER == BIG_ENDIAN - u_char constellation :2; - u_char hierarchy :3; - u_char code_rate_HP :3; -#else - u_char code_rate_HP :3; - u_char hierarchy :3; - u_char constellation :2; -#endif -#if BYTE_ORDER == BIG_ENDIAN - u_char code_rate_LP :3; - u_char guard_interval :2; - u_char transmission_mode :2; - u_char other_frequency_flag :1; -#else - u_char other_frequency_flag :1; - u_char transmission_mode :2; - u_char guard_interval :2; - u_char code_rate_LP :3; -#endif - u_char reserver2 :8; - u_char reserver3 :8; - u_char reserver4 :8; - u_char reserver5 :8; -} descr_terrestrial_delivery_system_t; -#define CastTerrestrialDeliverySystemDescriptor(x) ((descr_terrestrial_delivery_system_t *)(x)) - - -/* 0x5B multilingual_network_name_descriptor */ - -#define DESCR_MULTILINGUAL_NETWORK_NAME_LEN XX -typedef struct descr_multilingual_network_name_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_multilingual_network_name_t; -#define CastMultilingualNetworkNameDescriptor(x) ((descr_multilingual_network_name_t *)(x)) - - -/* 0x5C multilingual_bouquet_name_descriptor */ - -#define DESCR_MULTILINGUAL_BOUQUET_NAME_LEN XX -typedef struct descr_multilingual_bouquet_name_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_multilingual_bouquet_name_t; -#define CastMultilingualBouquetNameDescriptor(x) ((descr_multilingual_bouquet_name_t *)(x)) - - -/* 0x5D multilingual_service_name_descriptor */ - -#define DESCR_MULTILINGUAL_SERVICE_NAME_LEN XX -typedef struct descr_multilingual_service_name_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_multilingual_service_name_t; -#define CastMultilingualServiceNameDescriptor(x) ((descr_multilingual_service_name_t *)(x)) - - -/* 0x5E multilingual_component_descriptor */ - -#define DESCR_MULTILINGUAL_COMPONENT_LEN XX -typedef struct descr_multilingual_component_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_multilingual_component_t; -#define CastMultilingualComponentDescriptor(x) ((descr_multilingual_component_t *)(x)) - - -/* 0x5F private_data_specifier_descriptor */ - -#define DESCR_PRIVATE_DATA_SPECIFIER_LEN XX -typedef struct descr_private_data_specifier_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_private_data_specifier_t; -#define CastPrivateDataSpecifierDescriptor(x) ((descr_private_data_specifier_t *)(x)) - - -/* 0x60 service_move_descriptor */ - -#define DESCR_SERVICE_MOVE_LEN XX -typedef struct descr_service_move_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_service_move_t; -#define CastServiceMoveDescriptor(x) ((descr_service_move_t *)(x)) - - -/* 0x61 short_smoothing_buffer_descriptor */ - -#define DESCR_SHORT_SMOOTHING_BUFFER_LEN XX -typedef struct descr_short_smoothing_buffer_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_short_smoothing_buffer_t; -#define CastShortSmoothingBufferDescriptor(x) ((descr_short_smoothing_buffer_t *)(x)) - - -/* 0x62 frequency_list_descriptor */ - -#define DESCR_FREQUENCY_LIST_LEN XX -typedef struct descr_frequency_list_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_frequency_list_t; -#define CastFrequencyListDescriptor(x) ((descr_frequency_list_t *)(x)) - - -/* 0x63 partial_transport_stream_descriptor */ - -#define DESCR_PARTIAL_TRANSPORT_STREAM_LEN XX -typedef struct descr_partial_transport_stream_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_partial_transport_stream_t; -#define CastPartialDescriptor(x) ((descr_partial_transport_stream_t *)(x)) - - -/* 0x64 data_broadcast_descriptor */ - -#define DESCR_DATA_BROADCAST_LEN XX -typedef struct descr_data_broadcast_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_data_broadcast_t; -#define CastDataBroadcastDescriptor(x) ((descr_data_broadcast_t *)(x)) - - -/* 0x65 ca_system_descriptor */ - -#define DESCR_CA_SYSTEM_LEN XX -typedef struct descr_ca_system_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_ca_system_t; -#define CastCaSystemDescriptor(x) ((descr_ca_system_t *)(x)) - - -/* 0x66 data_broadcast_id_descriptor */ - -#define DESCR_DATA_BROADCAST_ID_LEN XX -typedef struct descr_data_broadcast_id_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_data_broadcast_id_t; -#define CastDataBroadcastIdDescriptor(x) ((descr_data_broadcast_id_t *)(x)) - - -/* 0x67 transport_stream_descriptor */ - -#define DESCR_TRANSPORT_STREAM_LEN XX -typedef struct descr_transport_stream_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_transport_stream_t; -#define CastTransportStreamDescriptor(x) ((descr_transport_stream_t *)(x)) - - -/* 0x68 dsng_descriptor */ - -#define DESCR_DSNG_LEN XX -typedef struct descr_dsng_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_dsng_t; -#define CastDsngDescriptor(x) ((descr_dsng_t *)(x)) - - -/* 0x69 pdc_descriptor */ - -#define DESCR_PDC_LEN XX -typedef struct descr_pdc_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_pdc_t; -#define CastPdcDescriptor(x) ((descr_pdc_t *)(x)) - - -/* 0x6A ac3_descriptor */ - -#define DESCR_AC3_LEN 3 -typedef struct descr_ac3_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char ac3_type_flag :1; - u_char bsid_flag :1; - u_char mainid_flag :1; - u_char asvc_flag :1; - u_char reserved :4; -#else - u_char reserved :4; - u_char asvc_flag :1; - u_char mainid_flag :1; - u_char bsid_flag :1; - u_char ac3_type_flag :1; -#endif - u_char ac3_type :8; - u_char bsid :8; - u_char mainid :8; - u_char asvc :8; -} descr_ac3_t; -#define CastAc3Descriptor(x) ((descr_ac3_t *)(x)) - - -/* 0x6B ancillary_data_descriptor */ - -#define DESCR_ANCILLARY_DATA_LEN 3 -typedef struct descr_ancillary_data_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char ancillary_data_identifier :8; -} descr_ancillary_data_t; -#define CastAncillaryDataDescriptor(x) ((descr_ancillary_data_t *)(x)) - - -/* 0x6C cell_list_descriptor */ - -#define DESCR_CELL_LIST_LEN XX -typedef struct descr_cell_list_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_cell_list_t; -#define CastCellListDescriptor(x) ((descr_cell_list_t *)(x)) - - -/* 0x6D cell_frequency_link_descriptor */ - -#define DESCR_CELL_FREQUENCY_LINK_LEN XX -typedef struct descr_cell_frequency_link_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_cell_frequency_link_t; -#define CastCellFrequencyLinkDescriptor(x) ((descr_cell_frequency_link_t *)(x)) - - -/* 0x6E announcement_support_descriptor */ - -#define DESCR_ANNOUNCEMENT_SUPPORT_LEN XX -typedef struct descr_announcement_support_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_announcement_support_t; -#define CastAnnouncementSupportDescriptor(x) ((descr_announcement_support_t *)(x)) - - |