1/* 2 * Copyright (C) 2002 Alexandre Julliard 3 * Copyright (C) 2004 Vincent Béron 4 * 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. 9 * 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. 14 * 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 18 */ 19 20import "unknwn.idl"; 21import "objidl.idl"; 22import "strmif.idl"; 23 24interface IDMOQualityControl; 25interface IDMOVideoOutputOptimizations; 26 27typedef struct _DMOMediaType 28{ 29 GUID majortype; 30 GUID subtype; 31 BOOL bFixedSizeSamples; 32 BOOL bTemporalCompression; 33 ULONG lSampleSize; 34 GUID formattype; 35 IUnknown *pUnk; 36 ULONG cbFormat; 37 BYTE *pbFormat; 38} DMO_MEDIA_TYPE; 39 40/***************************************************************************** 41 * IEnumDMO interface 42 */ 43[ 44 object, 45 uuid(2C3CD98A-2BFA-4A53-9C27-5249BA64BA0F), 46 pointer_default(unique) 47] 48interface IEnumDMO : IUnknown 49{ 50 [local] 51 HRESULT Next( 52 [in] DWORD cItemsToFetch, 53 [out] CLSID *pCLSID, 54 [out] WCHAR **Names, 55 [out] DWORD *pcItemsFetched 56 ); 57 58 HRESULT Skip( 59 [in] DWORD cItemsToSkip 60 ); 61 62 HRESULT Reset(); 63 64 HRESULT Clone( 65 [out] IEnumDMO **ppEnum 66 ); 67} 68 69/***************************************************************************** 70 * IMediaBuffer interface 71 */ 72[ 73 object, 74 uuid(59eff8b9-938c-4a26-82f2-95cb84cdc837), 75 local 76] 77interface IMediaBuffer : IUnknown 78{ 79 HRESULT SetLength( 80 DWORD cbLength 81 ); 82 83 HRESULT GetMaxLength( 84 [out] DWORD *pcbMaxLength 85 ); 86 87 HRESULT GetBufferAndLength( 88 [out] BYTE **ppBuffer, 89 [out] DWORD *pcbLength 90 ); 91} 92 93typedef struct _DMO_OUTPUT_DATA_BUFFER { 94 IMediaBuffer *pBuffer; 95 DWORD dwStatus; 96 REFERENCE_TIME rtTimestamp; 97 REFERENCE_TIME rtTimelength; 98} DMO_OUTPUT_DATA_BUFFER, *PDMO_OUTPUT_DATA_BUFFER; 99 100enum _DMO_INPLACE_PROCESS_FLAGS { 101 DMO_INPLACE_NORMAL = 0x00000000, 102 DMO_INPLACE_ZERO = 0x00000001 103}; 104 105/***************************************************************************** 106 * IMediaObject interface 107 */ 108[ 109 object, 110 uuid(d8ad0f58-5494-4102-97c5-ec798e59bcf4), 111 local 112] 113interface IMediaObject : IUnknown 114{ 115 HRESULT GetStreamCount( 116 [out] DWORD *pcInputStreams, 117 [out] DWORD *pcOutputStreams 118 ); 119 120 HRESULT GetInputStreamInfo( 121 DWORD dwInputStreamIndex, 122 [out] DWORD *pdwFlags 123 ); 124 125 HRESULT GetOutputStreamInfo( 126 DWORD dwOutputStreamIndex, 127 [out] DWORD *pdwFlags 128 ); 129 130 HRESULT GetInputType( 131 DWORD dwInputStreamIndex, 132 DWORD dwTypeIndex, 133 [out] DMO_MEDIA_TYPE *pmt 134 ); 135 136 HRESULT GetOutputType( 137 DWORD dwOutputStreamIndex, 138 DWORD dwTypeIndex, 139 [out] DMO_MEDIA_TYPE *pmt 140 ); 141 142 HRESULT SetInputType( 143 DWORD dwInputStreamIndex, 144 [in] const DMO_MEDIA_TYPE *pmt, 145 DWORD dwFlags 146 ); 147 148 HRESULT SetOutputType( 149 DWORD dwOutputStreamIndex, 150 [in] const DMO_MEDIA_TYPE *pmt, 151 DWORD dwFlags 152 ); 153 154 HRESULT GetInputCurrentType( 155 DWORD dwInputStreamIndex, 156 [out] DMO_MEDIA_TYPE *pmt 157 ); 158 159 HRESULT GetOutputCurrentType( 160 DWORD dwOutputStreamIndex, 161 [out] DMO_MEDIA_TYPE *pmt 162 ); 163 164 HRESULT GetInputSizeInfo( 165 DWORD dwInputStreamIndex, 166 [out] DWORD *pcbSize, 167 [out] DWORD *pcbMaxLookahead, 168 [out] DWORD *pcbAlignment 169 ); 170 171 HRESULT GetOutputSizeInfo( 172 DWORD dwOutputStreamIndex, 173 [out] DWORD *pcbSize, 174 [out] DWORD *pcbAlignment 175 ); 176 177 HRESULT GetInputMaxLatency( 178 DWORD dwInputStreamIndex, 179 [out] REFERENCE_TIME *prtMaxLatency 180 ); 181 182 HRESULT SetInputMaxLatency( 183 DWORD dwInputStreamIndex, 184 REFERENCE_TIME rtMaxLatency 185 ); 186 187 HRESULT Flush(); 188 189 HRESULT Discontinuity(DWORD dwInputStreamIndex); 190 191 HRESULT AllocateStreamingResources(); 192 193 HRESULT FreeStreamingResources(); 194 195 HRESULT GetInputStatus( 196 DWORD dwInputStreamIndex, 197 [out] DWORD *dwFlags 198 ); 199 200 HRESULT ProcessInput( 201 DWORD dwInputStreamIndex, 202 IMediaBuffer *pBuffer, 203 DWORD dwFlags, 204 REFERENCE_TIME rtTimestamp, 205 REFERENCE_TIME rtTimelength 206 ); 207 208 HRESULT ProcessOutput( 209 DWORD dwFlags, 210 DWORD cOutputBufferCount, 211 [in,out] DMO_OUTPUT_DATA_BUFFER *pOutputBuffers, 212 [out] DWORD *pdwStatus 213 ); 214 215 HRESULT Lock(LONG bLock); 216}; 217 218/***************************************************************************** 219 * IMediaObjectInPlace interface 220 */ 221 222[ 223 object, 224 uuid(651b9ad0-0fc7-4aa9-9538-d89931010741), 225 local 226] 227interface IMediaObjectInPlace : IUnknown { 228 HRESULT Process( 229 [in] ULONG ulSize, 230 [in,out] BYTE* pData, 231 [in] REFERENCE_TIME refTimeStart, 232 [in] DWORD dwFlags 233 ); 234 235 HRESULT Clone( 236 [out] IMediaObjectInPlace **ppMediaObject 237 ); 238 239 HRESULT GetLatency( 240 [out] REFERENCE_TIME *pLatencyTime 241 ); 242} 243