1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 
7 #include <mpeg2data.h>
8 #include <mpeg2bits.h>
9 
10 #ifndef __INC_MPEG2STRUCTS__
11 #define __INC_MPEG2STRUCTS__
12 
13 typedef enum _MPEG_CONTEXT_TYPE {
14   MPEG_CONTEXT_BCS_DEMUX = 0,
15   MPEG_CONTEXT_WINSOCK
16 } MPEG_CONTEXT_TYPE;
17 
18 typedef enum _MPEG_CURRENT_NEXT_BIT {
19   MPEG_SECTION_IS_NEXT      = 0,
20   MPEG_SECTION_IS_CURRENT   = 1
21 } MPEG_CURRENT_NEXT_BIT;
22 
23 typedef enum _MPEG_REQUEST_TYPE {
24   MPEG_RQST_UNKNOWN               = 0,
25   MPEG_RQST_GET_SECTION,
26   MPEG_RQST_GET_SECTION_ASYNC,
27   MPEG_RQST_GET_TABLE,
28   MPEG_RQST_GET_TABLE_ASYNC,
29   MPEG_RQST_GET_SECTIONS_STREAM,
30   MPEG_RQST_GET_PES_STREAM,
31   MPEG_RQST_GET_TS_STREAM,
32   MPEG_RQST_START_MPE_STREAM
33 } MPEG_REQUEST_TYPE;
34 
35 typedef struct _DSMCC_ELEMENT {
36   PID                   pid;
37   BYTE                  bComponentTag;
38   DWORD                 dwCarouselId;
39   DWORD                 dwTransactionId;
40   struct _DSMCC_ELEMENT *pNext;
41 } DSMCC_ELEMENT, *PDSMCC_ELEMENT;
42 
43 typedef struct {
44   WINBOOL  fSpecifyProtocol;
45   BYTE  Protocol;
46   WINBOOL  fSpecifyType;
47   BYTE  Type;
48   WINBOOL  fSpecifyMessageId;
49   WORD  MessageId;
50   WINBOOL  fSpecifyTransactionId;
51   WINBOOL  fUseTrxIdMessageIdMask;
52   DWORD TransactionId;
53   WINBOOL  fSpecifyModuleVersion;
54   BYTE  ModuleVersion;
55   WINBOOL  fSpecifyBlockNumber;
56   WORD  BlockNumber;
57   WINBOOL  fGetModuleCall;
58   WORD  NumberOfBlocksInModule;
59 } DSMCC_FILTER_OPTIONS;
60 
61 typedef struct _MPEG_HEADER_BITS_MIDL {
62   WORD Bits;
63 } MPEG_HEADER_BITS_MIDL;
64 
65 typedef struct _MPEG_HEADER_VERSION_BITS_MIDL {
66     BYTE Bits;
67 } MPEG_HEADER_VERSION_BITS_MIDL;
68 
69 typedef struct _DSMCC_SECTION {
70   TID   TableId;
71   __C89_NAMELESS union {
72     MPEG_HEADER_BITS_MIDL S;
73     WORD                  W;
74   } Header;
75   WORD  TableIdExtension;
76   __C89_NAMELESS union {
77     MPEG_HEADER_VERSION_BITS_MIDL S;
78     BYTE                          B;
79   } Version;
80   BYTE  SectionNumber;
81   BYTE  LastSectionNumber;
82   BYTE  ProtocolDiscriminator;
83   BYTE  DsmccType;
84   WORD  MessageId;
85   DWORD TransactionId;
86   BYTE  Reserved;
87   BYTE  AdaptationLength;
88   WORD  MessageLength;
89   BYTE  RemainingData[1];
90 } DSMCC_SECTION, *PDSMCC_SECTION;
91 
92 typedef struct _DVB_EIT_FILTER_OPTIONS {
93   WINBOOL fSpecifySegment;
94   BYTE bSegment;
95 } DVB_EIT_FILTER_OPTIONS, *PDVB_EIT_FILTER_OPTIONS;
96 
97 typedef struct {
98   TID   TableId;
99   __C89_NAMELESS union {
100     MPEG_HEADER_BITS_MIDL S;
101     WORD                  W;
102   } Header;
103   WORD  TableIdExtension;
104   __C89_NAMELESS union {
105     MPEG_HEADER_VERSION_BITS_MIDL S;
106     BYTE                          B;
107   } Version;
108   BYTE  SectionNumber;
109   BYTE  LastSectionNumber;
110   BYTE  RemainingData[1];
111 } LONG_SECTION, *PLONG_SECTION;
112 
113 typedef struct _MPE_ELEMENT {
114   PID                 pid;
115   BYTE                bComponentTag;
116   struct _MPE_ELEMENT *pNext;
117 } MPE_ELEMENT, *PMPE_ELEMENT;
118 
119 typedef struct _MPEG2_FILTER {
120   BYTE                 bVersionNumber;
121   WORD                 wFilterSize;
122   WINBOOL              fUseRawFilteringBits;
123   BYTE                 Filter[16];
124   BYTE                 Mask[16];
125   WINBOOL              fSpecifyTableIdExtension;
126   WORD                 TableIdExtension;
127   WINBOOL              fSpecifyVersion;
128   BYTE                 Version;
129   WINBOOL              fSpecifySectionNumber;
130   BYTE                 SectionNumber;
131   WINBOOL              fSpecifyCurrentNext;
132   WINBOOL              fNext;
133   WINBOOL              fSpecifyDsmccOptions;
134   DSMCC_FILTER_OPTIONS Dsmcc;
135   WINBOOL              fSpecifyAtscOptions;
136   ATSC_FILTER_OPTIONS  Atsc;
137 } MPEG2_FILTER, *PMPEG2_FILTER;
138 
139 typedef struct {
140   BYTE                   bVersionNumber;
141   WORD                   wFilterSize;
142   WINBOOL                fUseRawFilteringBits;
143   BYTE                   Filter[16];
144   BYTE                   Mask[16];
145   WINBOOL                fSpecifyTableIdExtension;
146   WORD                   TableIdExtension;
147   WINBOOL                fSpecifyVersion;
148   BYTE                   Version;
149   WINBOOL                fSpecifySectionNumber;
150   BYTE                   SectionNumber;
151   WINBOOL                fSpecifyCurrentNext;
152   WINBOOL                fNext;
153   WINBOOL                fSpecifyDsmccOptions;
154   DSMCC_FILTER_OPTIONS   Dsmcc;
155   WINBOOL                fSpecifyAtscOptions;
156   ATSC_FILTER_OPTIONS    Atsc;
157   WINBOOL                 fSpecifyDvbEitOptions;
158   DVB_EIT_FILTER_OPTIONS Dvb_Eit;
159 } MPEG2_FILTER2, *PMPEG2_FILTER2;
160 
161 typedef struct _MPEG_BCS_DEMUX {
162   DWORD AVMGraphId;
163 } MPEG_BCS_DEMUX;
164 
165 typedef struct _MPEG_WINSOCK {
166   DWORD AVMGraphId;
167 } MPEG_WINSOCK;
168 
169 typedef struct _MPEG_CONTEXT {
170   MPEG_CONTEXT_TYPE Type;
171   __C89_NAMELESS union {
172     MPEG_BCS_DEMUX Demux;
173     MPEG_WINSOCK   Winsock;
174   } U;
175 } MPEG_CONTEXT, *PMPEG_CONTEXT;
176 
177 typedef struct _MPEG_DATE {
178   BYTE Date;
179   BYTE Month;
180   WORD Year;
181 } MPEG_DATE;
182 
183 typedef struct _MPEG_TIME {
184   BYTE Hours;
185   BYTE Minutes;
186   BYTE Seconds;
187 } MPEG_TIME;
188 
189 typedef struct _MPEG_DATE_AND_TIME {
190   MPEG_DATE D;
191   MPEG_TIME T;
192 } MPEG_DATE_AND_TIME;
193 
194 typedef MPEG_TIME MPEG_DURATION;
195 
196 typedef struct {
197   TID   TableId;
198   __C89_NAMELESS union {
199     MPEG_HEADER_BITS_MIDL S;
200     WORD                  W;
201   } Header;
202   BYTE  SectionData[1];
203 } SECTION, *PSECTION;
204 
205 typedef struct _MPEG_RQST_PACKET {
206   DWORD    dwLength;
207   PSECTION pSection;
208 } MPEG_RQST_PACKET, *PMPEG_RQST_PACKET;
209 
210 typedef struct _MPEG_PACKET_LIST {
211   WORD              wPacketCount;
212   PMPEG_RQST_PACKET PacketList[1];
213 } MPEG_PACKET_LIST, *PMPEG_PACKET_LIST;
214 
215 typedef struct _MPEG_STREAM_BUFFER {
216   HRESULT hr;
217   DWORD   dwDataBufferSize;
218   DWORD   dwSizeOfDataRead;
219   BYTE    *pDataBuffer;
220 } MPEG_STREAM_BUFFER, *PMPEG_STREAM_BUFFER;
221 
222 #endif /*__INC_MPEG2STRUCTS__*/
223