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