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 interface IDMOQualityControl
;
25 interface IDMOVideoOutputOptimizations
;
27 typedef struct _DMOMediaType
31 BOOL bFixedSizeSamples
;
32 BOOL bTemporalCompression
;
40 /*****************************************************************************
45 uuid(2C3CD98A
-2BFA
-4A53
-9C27
-5249BA64BA0F
),
46 pointer_default(unique)
48 interface IEnumDMO
: IUnknown
52 [in] DWORD cItemsToFetch
,
55 [out] DWORD
*pcItemsFetched
59 [in] DWORD cItemsToSkip
65 [out] IEnumDMO
**ppEnum
69 /*****************************************************************************
70 * IMediaBuffer interface
74 uuid(59eff8b9
-938c
-4a26
-82f2
-95cb84cdc837
),
77 interface IMediaBuffer
: IUnknown
84 [out] DWORD
*pcbMaxLength
87 HRESULT GetBufferAndLength
(
88 [out] BYTE **ppBuffer
,
89 [out] DWORD
*pcbLength
93 typedef struct _DMO_OUTPUT_DATA_BUFFER
{
94 IMediaBuffer
*pBuffer
;
96 REFERENCE_TIME rtTimestamp
;
97 REFERENCE_TIME rtTimelength
;
98 } DMO_OUTPUT_DATA_BUFFER
, *PDMO_OUTPUT_DATA_BUFFER
;
100 enum _DMO_INPLACE_PROCESS_FLAGS
{
101 DMO_INPLACE_NORMAL
= 0x00000000,
102 DMO_INPLACE_ZERO
= 0x00000001
105 enum _DMO_SET_TYPE_FLAGS
{
106 DMO_SET_TYPEF_TEST_ONLY
= 0x00000001,
107 DMO_SET_TYPEF_CLEAR
= 0x00000002,
110 enum _DMO_OUTPUT_DATA_BUFFERF_FLAGS
{
111 DMO_OUTPUT_DATA_BUFFERF_SYNCPOINT
= 0x00000001,
112 DMO_OUTPUT_DATA_BUFFERF_TIME
= 0x00000002,
113 DMO_OUTPUT_DATA_BUFFERF_TIMELENGTH
= 0x00000004,
114 DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE
= 0x01000000,
117 /*****************************************************************************
118 * IMediaObject interface
122 uuid(d8ad0f58
-5494-4102-97c5
-ec798e59bcf4
),
125 interface IMediaObject
: IUnknown
127 HRESULT GetStreamCount
(
128 [out] DWORD
*pcInputStreams
,
129 [out] DWORD
*pcOutputStreams
132 HRESULT GetInputStreamInfo
(
133 DWORD dwInputStreamIndex
,
134 [out] DWORD
*pdwFlags
137 HRESULT GetOutputStreamInfo
(
138 DWORD dwOutputStreamIndex
,
139 [out] DWORD
*pdwFlags
142 HRESULT GetInputType
(
143 DWORD dwInputStreamIndex
,
145 [out] DMO_MEDIA_TYPE
*pmt
148 HRESULT GetOutputType
(
149 DWORD dwOutputStreamIndex
,
151 [out] DMO_MEDIA_TYPE
*pmt
154 HRESULT SetInputType
(
155 DWORD dwInputStreamIndex
,
156 [in] const DMO_MEDIA_TYPE
*pmt
,
160 HRESULT SetOutputType
(
161 DWORD dwOutputStreamIndex
,
162 [in] const DMO_MEDIA_TYPE
*pmt
,
166 HRESULT GetInputCurrentType
(
167 DWORD dwInputStreamIndex
,
168 [out] DMO_MEDIA_TYPE
*pmt
171 HRESULT GetOutputCurrentType
(
172 DWORD dwOutputStreamIndex
,
173 [out] DMO_MEDIA_TYPE
*pmt
176 HRESULT GetInputSizeInfo
(
177 DWORD dwInputStreamIndex
,
178 [out] DWORD
*pcbSize
,
179 [out] DWORD
*pcbMaxLookahead
,
180 [out] DWORD
*pcbAlignment
183 HRESULT GetOutputSizeInfo
(
184 DWORD dwOutputStreamIndex
,
185 [out] DWORD
*pcbSize
,
186 [out] DWORD
*pcbAlignment
189 HRESULT GetInputMaxLatency
(
190 DWORD dwInputStreamIndex
,
191 [out] REFERENCE_TIME
*prtMaxLatency
194 HRESULT SetInputMaxLatency
(
195 DWORD dwInputStreamIndex
,
196 REFERENCE_TIME rtMaxLatency
201 HRESULT Discontinuity
(DWORD dwInputStreamIndex
);
203 HRESULT AllocateStreamingResources
();
205 HRESULT FreeStreamingResources
();
207 HRESULT GetInputStatus
(
208 DWORD dwInputStreamIndex
,
212 HRESULT ProcessInput
(
213 DWORD dwInputStreamIndex
,
214 IMediaBuffer
*pBuffer
,
216 REFERENCE_TIME rtTimestamp
,
217 REFERENCE_TIME rtTimelength
220 HRESULT ProcessOutput
(
222 DWORD cOutputBufferCount
,
223 [in,out] DMO_OUTPUT_DATA_BUFFER
*pOutputBuffers
,
224 [out] DWORD
*pdwStatus
227 HRESULT Lock
(LONG bLock
);
230 /*****************************************************************************
231 * IMediaObjectInPlace interface
236 uuid(651b9ad0
-0fc7
-4aa9
-9538-d89931010741
),
239 interface IMediaObjectInPlace
: IUnknown
{
242 [in,out] BYTE* pData
,
243 [in] REFERENCE_TIME refTimeStart
,
248 [out] IMediaObjectInPlace
**ppMediaObject
252 [out] REFERENCE_TIME
*pLatencyTime