2 * Copyright (C) 2002 Alexandre Julliard
3 * Copyright (C) 2004 Vincent BĂ©ron
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
24 typedef struct _DMOMediaType
28 BOOL bFixedSizeSamples
;
29 BOOL bTemporalCompression
;
37 /*****************************************************************************
42 uuid(2C3CD98A
-2BFA
-4A53
-9C27
-5249BA64BA0F
),
43 pointer_default(unique)
45 interface IEnumDMO
: IUnknown
49 [in] DWORD cItemsToFetch
,
52 [out] DWORD
*pcItemsFetched
56 [in] DWORD cItemsToSkip
62 [out] IEnumDMO
**ppEnum
66 /*****************************************************************************
67 * IMediaBuffer interface
71 uuid(59eff8b9
-938c
-4a26
-82f2
-95cb84cdc837
),
74 interface IMediaBuffer
: IUnknown
81 [out] DWORD
*pcbMaxLength
84 HRESULT GetBufferAndLength
(
85 [out] BYTE **ppBuffer
,
86 [out] DWORD
*pcbLength
90 enum _DMO_INPUT_STATUS_FLAGS
92 DMO_INPUT_STATUSF_ACCEPT_DATA
= 0x00000001,
95 enum _DMO_INPUT_DATA_BUFFER_FLAGS
97 DMO_INPUT_DATA_BUFFERF_SYNCPOINT
= 0x00000001,
98 DMO_INPUT_DATA_BUFFERF_TIME
= 0x00000002,
99 DMO_INPUT_DATA_BUFFERF_TIMELENGTH
= 0x00000004,
102 enum _DMO_PROCESS_OUTPUT_FLAGS
104 DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER
= 0x00000001,
107 typedef struct _DMO_OUTPUT_DATA_BUFFER
{
108 IMediaBuffer
*pBuffer
;
110 REFERENCE_TIME rtTimestamp
;
111 REFERENCE_TIME rtTimelength
;
112 } DMO_OUTPUT_DATA_BUFFER
, *PDMO_OUTPUT_DATA_BUFFER
;
114 enum _DMO_INPLACE_PROCESS_FLAGS
{
115 DMO_INPLACE_NORMAL
= 0x00000000,
116 DMO_INPLACE_ZERO
= 0x00000001
119 enum _DMO_SET_TYPE_FLAGS
{
120 DMO_SET_TYPEF_TEST_ONLY
= 0x00000001,
121 DMO_SET_TYPEF_CLEAR
= 0x00000002,
124 enum _DMO_OUTPUT_DATA_BUFFERF_FLAGS
{
125 DMO_OUTPUT_DATA_BUFFERF_SYNCPOINT
= 0x00000001,
126 DMO_OUTPUT_DATA_BUFFERF_TIME
= 0x00000002,
127 DMO_OUTPUT_DATA_BUFFERF_TIMELENGTH
= 0x00000004,
128 DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE
= 0x01000000,
131 /*****************************************************************************
132 * IMediaObject interface
136 uuid(d8ad0f58
-5494-4102-97c5
-ec798e59bcf4
),
139 interface IMediaObject
: IUnknown
141 HRESULT GetStreamCount
(
142 [out] DWORD
*pcInputStreams
,
143 [out] DWORD
*pcOutputStreams
146 HRESULT GetInputStreamInfo
(
147 DWORD dwInputStreamIndex
,
148 [out] DWORD
*pdwFlags
151 HRESULT GetOutputStreamInfo
(
152 DWORD dwOutputStreamIndex
,
153 [out] DWORD
*pdwFlags
156 HRESULT GetInputType
(
157 DWORD dwInputStreamIndex
,
159 [out] DMO_MEDIA_TYPE
*pmt
162 HRESULT GetOutputType
(
163 DWORD dwOutputStreamIndex
,
165 [out] DMO_MEDIA_TYPE
*pmt
168 HRESULT SetInputType
(
169 DWORD dwInputStreamIndex
,
170 [in] const DMO_MEDIA_TYPE
*pmt
,
174 HRESULT SetOutputType
(
175 DWORD dwOutputStreamIndex
,
176 [in] const DMO_MEDIA_TYPE
*pmt
,
180 HRESULT GetInputCurrentType
(
181 DWORD dwInputStreamIndex
,
182 [out] DMO_MEDIA_TYPE
*pmt
185 HRESULT GetOutputCurrentType
(
186 DWORD dwOutputStreamIndex
,
187 [out] DMO_MEDIA_TYPE
*pmt
190 HRESULT GetInputSizeInfo
(
191 DWORD dwInputStreamIndex
,
192 [out] DWORD
*pcbSize
,
193 [out] DWORD
*pcbMaxLookahead
,
194 [out] DWORD
*pcbAlignment
197 HRESULT GetOutputSizeInfo
(
198 DWORD dwOutputStreamIndex
,
199 [out] DWORD
*pcbSize
,
200 [out] DWORD
*pcbAlignment
203 HRESULT GetInputMaxLatency
(
204 DWORD dwInputStreamIndex
,
205 [out] REFERENCE_TIME
*prtMaxLatency
208 HRESULT SetInputMaxLatency
(
209 DWORD dwInputStreamIndex
,
210 REFERENCE_TIME rtMaxLatency
215 HRESULT Discontinuity
(DWORD dwInputStreamIndex
);
217 HRESULT AllocateStreamingResources
();
219 HRESULT FreeStreamingResources
();
221 HRESULT GetInputStatus
(
222 DWORD dwInputStreamIndex
,
226 HRESULT ProcessInput
(
227 DWORD dwInputStreamIndex
,
228 IMediaBuffer
*pBuffer
,
230 REFERENCE_TIME rtTimestamp
,
231 REFERENCE_TIME rtTimelength
234 HRESULT ProcessOutput
(
236 DWORD cOutputBufferCount
,
237 [in,out] DMO_OUTPUT_DATA_BUFFER
*pOutputBuffers
,
238 [out] DWORD
*pdwStatus
241 HRESULT Lock
(LONG bLock
);
244 /*****************************************************************************
245 * IMediaObjectInPlace interface
250 uuid(651b9ad0
-0fc7
-4aa9
-9538-d89931010741
),
253 interface IMediaObjectInPlace
: IUnknown
{
256 [in,out] BYTE* pData
,
257 [in] REFERENCE_TIME refTimeStart
,
262 [out] IMediaObjectInPlace
**ppMediaObject
266 [out] REFERENCE_TIME
*pLatencyTime
270 enum _DMO_QUALITY_STATUS_FLAGS
272 DMO_QUALITY_STATUS_ENABLED
= 0x00000001,
277 uuid(65abea96
-cf36
-453f
-af8a
-705e98f16260
),
280 interface IDMOQualityControl
: IUnknown
282 HRESULT SetNow
([in] REFERENCE_TIME now
);
283 HRESULT SetStatus
([in] DWORD flags
);
284 HRESULT GetStatus
([out] DWORD
*flags
);
287 enum _DMO_VIDEO_OUTPUT_STREAM_FLAGS
289 DMO_VOSF_NEEDS_PREVIOUS_SAMPLE
= 0x00000001,
294 uuid(be8f4f4e
-5b16
-4d29
-b350
-7f6b5d9298ac
),
297 interface IDMOVideoOutputOptimizations
: IUnknown
299 HRESULT QueryOperationModePreferences
(ULONG index
, DWORD
*flags
);
300 HRESULT SetOperationMode
(ULONG index
, DWORD flags
);
301 HRESULT GetCurrentOperationMode
(ULONG index
, DWORD
*flags
);
302 HRESULT GetCurrentSampleRequirements
(ULONG index
, DWORD
*flags
);