///////////////////////////////////////////////////////////////////////////// // // Copyright (c) Microsoft Corporation. All rights reserved. // // Module Name: // // Mpeg2Structs.idl // // Abstract: // // Definitions for the common structures used in Mpeg2Data // // Notes: // // This IDL file is not built independently, but is included and built // in the master IDL file Mpeg2Data.idl // ///////////////////////////////////////////////////////////////////////////// // Include Files #include "Mpeg2Bits.h" // // Basic Type Aliases // typedef WORD PID; typedef BYTE TID; typedef UINT ClientKey; // // MPEG-2 Current/Next bit field // typedef enum { MPEG_SECTION_IS_NEXT = 0, MPEG_SECTION_IS_CURRENT = 1 } MPEG_CURRENT_NEXT_BIT; // // MPEG-2 TID Extension structure // typedef struct { WORD wTidExt; WORD wCount; } TID_EXTENSION, *PTID_EXTENSION; // // MPEG-2 packet "small" header structure // typedef struct { TID TableId; union { MPEG_HEADER_BITS_MIDL S; WORD W; } Header; BYTE SectionData[1]; // Array size is Header.S.SectionLength } SECTION, *PSECTION; // // MPEG-2 packet "long" header structure // typedef struct { TID TableId; union { MPEG_HEADER_BITS_MIDL S; WORD W; } Header; WORD TableIdExtension; union { MPEG_HEADER_VERSION_BITS_MIDL S; BYTE B; } Version; BYTE SectionNumber; BYTE LastSectionNumber; BYTE RemainingData[1]; // Array size is Header.S.SectionLength - 5 } LONG_SECTION, *PLONG_SECTION; // // DSM-CC packet header structure // typedef struct { TID TableId; union { MPEG_HEADER_BITS_MIDL S; WORD W; } Header; WORD TableIdExtension; union { MPEG_HEADER_VERSION_BITS_MIDL S; BYTE B; } Version; BYTE SectionNumber; BYTE LastSectionNumber; BYTE ProtocolDiscriminator; BYTE DsmccType; WORD MessageId; DWORD TransactionId; BYTE Reserved; BYTE AdaptationLength; WORD MessageLength; BYTE RemainingData[1]; } DSMCC_SECTION, *PDSMCC_SECTION; // // MPEG-2 request/response packets structures // typedef struct { DWORD dwLength; PSECTION pSection; } MPEG_RQST_PACKET, *PMPEG_RQST_PACKET; typedef struct { WORD wPacketCount; PMPEG_RQST_PACKET PacketList[1]; // Array size is wPacketCount; } MPEG_PACKET_LIST, *PMPEG_PACKET_LIST; // // DSM-CC request filter options // typedef struct { BOOL fSpecifyProtocol; // If true, Protocol should be set to desired value BYTE Protocol; BOOL fSpecifyType; // If true, Type should be set to desired value BYTE Type; BOOL fSpecifyMessageId; // If true, MessageId should be set to desired value WORD MessageId; BOOL fSpecifyTransactionId; // If true, TransactionId (or DownloadId for DDB msgs) should be set to desired value BOOL fUseTrxIdMessageIdMask; // If false, TransactionId is filtered as is. // If true, TransactionId is masked to look // for any version of message with associated // message identifier. See DVB - Data // Broadcasting Guidlines 4.6.5. (Assignment // and use of transactionId values). DWORD TransactionId; BOOL fSpecifyModuleVersion; // If true, ModuleVersion should be set to the desired value BYTE ModuleVersion; BOOL fSpecifyBlockNumber; // If true, BlockNumber should be set to desired value WORD BlockNumber; BOOL fGetModuleCall; // If true, NumberOfBlocksInModule should be set WORD NumberOfBlocksInModule; } DSMCC_FILTER_OPTIONS; // 45 BYTES // // ATSC request filter options // typedef struct { BOOL fSpecifyEtmId; // If true, EtmId should be set to desired value DWORD EtmId; } ATSC_FILTER_OPTIONS; // 8 BYTES // // MPEG-2 request filter structure // typedef struct { BYTE bVersionNumber; // Must be set to 1 or more to match filter definition WORD wFilterSize; // Size of total filter structure. Version 1 filter is 73 bytes. BOOL fUseRawFilteringBits; // If true, Filter and Mask fields should be set to desired value, all other // fields with be ignored. BYTE Filter[16]; // Bits with values to compare against for a match. BYTE Mask[16]; // Bits set to 0 are bits that are compared to those in the filter, those // bits set to 1 are ignored. BOOL fSpecifyTableIdExtension; // If true, TableIdExtension should be set to desired value (false = don't care) WORD TableIdExtension; BOOL fSpecifyVersion; // If true, Version should be set to desired value (false = don't care) BYTE Version; BOOL fSpecifySectionNumber; // If true, SectionNumber should be set to desired value (false = don't care) BYTE SectionNumber; BOOL fSpecifyCurrentNext; // If true, fNext should be set to desired value (false = don't care) BOOL fNext; // If true, next table is queried. Else, current BOOL fSpecifyDsmccOptions; // If true, Dsmcc should be set with desired filter options DSMCC_FILTER_OPTIONS Dsmcc; BOOL fSpecifyAtscOptions; // If true, Atsc should be set with desired filter options ATSC_FILTER_OPTIONS Atsc; } MPEG2_FILTER, *PMPEG2_FILTER; // 124 BYTES cpp_quote("#define MPEG2_FILTER_VERSION_1_SIZE 124") // // Mpeg-2 Stream buffer structure // typedef struct { HRESULT hr; DWORD dwDataBufferSize; DWORD dwSizeOfDataRead; BYTE * pDataBuffer; } MPEG_STREAM_BUFFER, *PMPEG_STREAM_BUFFER; // // MPEG-2 Time and Date structures // typedef struct { BYTE Hours; // Legal Range: 0 to 23 BYTE Minutes; // Legal Range: 0 to 59 BYTE Seconds; // Legal Range: 0 to 59 } MPEG_TIME; typedef MPEG_TIME MPEG_DURATION; typedef struct { BYTE Date; // Legal Range: 1 to 31 BYTE Month; // Legal Range: 1 to 12 WORD Year; // Legal Range: 1900 to 2100 } MPEG_DATE; typedef struct { MPEG_DATE D; MPEG_TIME T; } MPEG_DATE_AND_TIME; // // MPEG-2 API Context structures // typedef enum { MPEG_CONTEXT_BCS_DEMUX, MPEG_CONTEXT_WINSOCK } MPEG_CONTEXT_TYPE; typedef struct { DWORD AVMGraphId; } MPEG_BCS_DEMUX; typedef struct { DWORD AVMGraphId; } MPEG_WINSOCK; typedef struct { MPEG_CONTEXT_TYPE Type; union { MPEG_BCS_DEMUX Demux; MPEG_WINSOCK Winsock; } U; } MPEG_CONTEXT, *PMPEG_CONTEXT; // // MPEG-2 Service Request and Responses // typedef enum { MPEG_RQST_UNKNOWN = 0, MPEG_RQST_GET_SECTION, MPEG_RQST_GET_SECTION_ASYNC, MPEG_RQST_GET_TABLE, MPEG_RQST_GET_TABLE_ASYNC, MPEG_RQST_GET_SECTIONS_STREAM, MPEG_RQST_GET_PES_STREAM, MPEG_RQST_GET_TS_STREAM, MPEG_RQST_START_MPE_STREAM, } MPEG_REQUEST_TYPE; typedef struct { MPEG_REQUEST_TYPE Type; MPEG_CONTEXT Context; PID Pid; TID TableId; MPEG2_FILTER Filter; DWORD Flags; } MPEG_SERVICE_REQUEST, *PMPEG_SERVICE_REQUEST; typedef struct { DWORD IPAddress; WORD Port; } MPEG_SERVICE_RESPONSE, *PMPEG_SERVICE_RESPONSE; // // DSM-CC & MPE Query Results // typedef struct _DSMCC_ELEMENT { PID pid; BYTE bComponentTag; DWORD dwCarouselId; DWORD dwTransactionId; struct _DSMCC_ELEMENT * pNext; } DSMCC_ELEMENT, *PDSMCC_ELEMENT; typedef struct _MPE_ELEMENT { PID pid; BYTE bComponentTag; struct _MPE_ELEMENT * pNext; } MPE_ELEMENT, *PMPE_ELEMENT; // // MPEG-2 Stream Filtering Structure // typedef struct _MPEG_STREAM_FILTER { WORD wPidValue; // PID value DWORD dwFilterSize; // size of filter in bits BOOL fCrcEnabled; // enable/disable CRC check BYTE rgchFilter[16]; // filter data BYTE rgchMask[16]; // filter mask } MPEG_STREAM_FILTER;