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