mirror of
https://github.com/GTAmodding/re3.git
synced 2024-11-27 14:23:44 +00:00
369 lines
8.4 KiB
Text
369 lines
8.4 KiB
Text
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// 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;
|