blob: 643c2ffaa22bfec4cb31a2e5b181f46210e337d9 [file] [log] [blame]
/*
* Copyright (C) 2025 Biswapriyo Nath
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
import "wtypes.idl";
#include "mpeg2bits.h"
typedef WORD PID;
typedef BYTE TID;
typedef WORD TEID;
typedef UINT ClientKey;
typedef enum
{
MPEG_SECTION_IS_NEXT = 0,
MPEG_SECTION_IS_CURRENT = 1,
} MPEG_CURRENT_NEXT_BIT;
typedef struct
{
WORD wTidExt;
WORD wCount;
} TID_EXTENSION, *PTID_EXTENSION;
typedef struct
{
TID TableId;
union
{
MPEG_HEADER_BITS_MIDL S;
WORD W;
} Header;
BYTE SectionData[1];
} SECTION, *PSECTION;
typedef struct
{
TID TableId;
union
{
MPEG_HEADER_BITS_MIDL S;
WORD W;
} Header;
TEID TableIdExtension;
union
{
MPEG_HEADER_VERSION_BITS_MIDL S;
BYTE B;
} Version;
BYTE SectionNumber;
BYTE LastSectionNumber;
BYTE RemainingData[1];
} LONG_SECTION, *PLONG_SECTION;
typedef struct
{
TID TableId;
union
{
MPEG_HEADER_BITS_MIDL S;
WORD W;
} Header;
TEID 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;
typedef struct
{
DWORD dwLength;
PSECTION pSection;
} MPEG_RQST_PACKET, *PMPEG_RQST_PACKET;
typedef struct
{
WORD wPacketCount;
[size_is(wPacketCount)] PMPEG_RQST_PACKET PacketList[];
} MPEG_PACKET_LIST, *PMPEG_PACKET_LIST;
typedef struct
{
BOOL fSpecifyProtocol;
BYTE Protocol;
BOOL fSpecifyType;
BYTE Type;
BOOL fSpecifyMessageId;
WORD MessageId;
BOOL fSpecifyTransactionId;
BOOL fUseTrxIdMessageIdMask;
DWORD TransactionId;
BOOL fSpecifyModuleVersion;
BYTE ModuleVersion;
BOOL fSpecifyBlockNumber;
WORD BlockNumber;
BOOL fGetModuleCall;
WORD NumberOfBlocksInModule;
} DSMCC_FILTER_OPTIONS;
typedef struct
{
BOOL fSpecifyEtmId;
DWORD EtmId;
} ATSC_FILTER_OPTIONS;
typedef struct
{
BOOL fSpecifySegment;
BYTE bSegment;
} DVB_EIT_FILTER_OPTIONS;
typedef struct
{
BYTE bVersionNumber;
WORD wFilterSize;
BOOL fUseRawFilteringBits;
BYTE Filter[16];
BYTE Mask[16];
BOOL fSpecifyTableIdExtension;
WORD TableIdExtension;
BOOL fSpecifyVersion;
BYTE Version;
BOOL fSpecifySectionNumber;
BYTE SectionNumber;
BOOL fSpecifyCurrentNext;
BOOL fNext;
BOOL fSpecifyDsmccOptions;
DSMCC_FILTER_OPTIONS Dsmcc;
BOOL fSpecifyAtscOptions;
ATSC_FILTER_OPTIONS Atsc;
} MPEG2_FILTER, *PMPEG2_FILTER;
typedef struct
{
union
{
struct
{
BYTE bVersionNumber;
WORD wFilterSize;
BOOL fUseRawFilteringBits;
BYTE Filter[16];
BYTE Mask[16];
BOOL fSpecifyTableIdExtension;
WORD TableIdExtension;
BOOL fSpecifyVersion;
BYTE Version;
BOOL fSpecifySectionNumber;
BYTE SectionNumber;
BOOL fSpecifyCurrentNext;
BOOL fNext;
BOOL fSpecifyDsmccOptions;
DSMCC_FILTER_OPTIONS Dsmcc;
BOOL fSpecifyAtscOptions;
ATSC_FILTER_OPTIONS Atsc;
};
BYTE bVersion1Bytes[124];
};
BOOL fSpecifyDvbEitOptions;
DVB_EIT_FILTER_OPTIONS DvbEit;
} MPEG2_FILTER2, *PMPEG2_FILTER2;
cpp_quote("#define MPEG2_FILTER_VERSION_1_SIZE 124")
cpp_quote("#define MPEG2_FILTER_VERSION_2_SIZE 133")
typedef struct
{
HRESULT hr;
DWORD dwDataBufferSize;
DWORD dwSizeOfDataRead;
[size_is(dwDataBufferSize)] BYTE *pDataBuffer;
} MPEG_STREAM_BUFFER, *PMPEG_STREAM_BUFFER;
typedef struct
{
BYTE Hours;
BYTE Minutes;
BYTE Seconds;
} MPEG_TIME;
typedef MPEG_TIME MPEG_DURATION;
typedef struct
{
BYTE Date;
BYTE Month;
WORD Year;
} MPEG_DATE;
typedef struct
{
MPEG_DATE D;
MPEG_TIME T;
} MPEG_DATE_AND_TIME;
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;
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;
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;
typedef struct _MPEG_STREAM_FILTER
{
WORD wPidValue;
DWORD dwFilterSize;
BOOL fCrcEnabled;
BYTE rgchFilter[16];
BYTE rgchMask[16];
} MPEG_STREAM_FILTER;