re3/dxsdk/Include/DShowIDL/Mpeg2Structs.idl

369 lines
8.4 KiB
Plaintext

/////////////////////////////////////////////////////////////////////////////
//
// 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;