|  | /* | 
|  | * Copyright (C) 2002 Alexandre Julliard | 
|  | * Copyright (C) 2004 Vincent Béron | 
|  | * | 
|  | * 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 "unknwn.idl"; | 
|  | import "objidl.idl"; | 
|  |  | 
|  | cpp_quote("#ifdef __strmif_h__") | 
|  | cpp_quote("typedef AM_MEDIA_TYPE DMO_MEDIA_TYPE;") | 
|  | cpp_quote("#else") | 
|  | typedef struct _DMOMediaType | 
|  | { | 
|  | GUID majortype; | 
|  | GUID subtype; | 
|  | BOOL bFixedSizeSamples; | 
|  | BOOL bTemporalCompression; | 
|  | ULONG lSampleSize; | 
|  | GUID formattype; | 
|  | IUnknown *pUnk; | 
|  | ULONG cbFormat; | 
|  | BYTE *pbFormat; | 
|  | } DMO_MEDIA_TYPE; | 
|  |  | 
|  | typedef LONGLONG REFERENCE_TIME; | 
|  | cpp_quote("#endif") | 
|  |  | 
|  | /***************************************************************************** | 
|  | * IEnumDMO interface | 
|  | */ | 
|  | [ | 
|  | object, | 
|  | uuid(2C3CD98A-2BFA-4A53-9C27-5249BA64BA0F), | 
|  | pointer_default(unique) | 
|  | ] | 
|  | interface IEnumDMO : IUnknown | 
|  | { | 
|  | [local] | 
|  | HRESULT Next( | 
|  | [in] DWORD cItemsToFetch, | 
|  | [out] CLSID *pCLSID, | 
|  | [out] WCHAR **Names, | 
|  | [out] DWORD *pcItemsFetched | 
|  | ); | 
|  |  | 
|  | HRESULT Skip( | 
|  | [in] DWORD cItemsToSkip | 
|  | ); | 
|  |  | 
|  | HRESULT Reset(); | 
|  |  | 
|  | HRESULT Clone( | 
|  | [out] IEnumDMO **ppEnum | 
|  | ); | 
|  | } | 
|  |  | 
|  | /***************************************************************************** | 
|  | * IMediaBuffer interface | 
|  | */ | 
|  | [ | 
|  | object, | 
|  | uuid(59eff8b9-938c-4a26-82f2-95cb84cdc837), | 
|  | local | 
|  | ] | 
|  | interface IMediaBuffer : IUnknown | 
|  | { | 
|  | HRESULT SetLength( | 
|  | DWORD cbLength | 
|  | ); | 
|  |  | 
|  | HRESULT GetMaxLength( | 
|  | [out] DWORD *pcbMaxLength | 
|  | ); | 
|  |  | 
|  | HRESULT GetBufferAndLength( | 
|  | [out] BYTE **ppBuffer, | 
|  | [out] DWORD *pcbLength | 
|  | ); | 
|  | } | 
|  |  | 
|  | enum _DMO_INPUT_STATUS_FLAGS | 
|  | { | 
|  | DMO_INPUT_STATUSF_ACCEPT_DATA = 0x00000001, | 
|  | }; | 
|  |  | 
|  | enum _DMO_INPUT_DATA_BUFFER_FLAGS | 
|  | { | 
|  | DMO_INPUT_DATA_BUFFERF_SYNCPOINT    = 0x00000001, | 
|  | DMO_INPUT_DATA_BUFFERF_TIME         = 0x00000002, | 
|  | DMO_INPUT_DATA_BUFFERF_TIMELENGTH   = 0x00000004, | 
|  | }; | 
|  |  | 
|  | enum _DMO_PROCESS_OUTPUT_FLAGS | 
|  | { | 
|  | DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER = 0x00000001, | 
|  | }; | 
|  |  | 
|  | typedef struct _DMO_OUTPUT_DATA_BUFFER { | 
|  | IMediaBuffer *pBuffer; | 
|  | DWORD dwStatus; | 
|  | REFERENCE_TIME rtTimestamp; | 
|  | REFERENCE_TIME rtTimelength; | 
|  | } DMO_OUTPUT_DATA_BUFFER, *PDMO_OUTPUT_DATA_BUFFER; | 
|  |  | 
|  | enum _DMO_INPLACE_PROCESS_FLAGS { | 
|  | DMO_INPLACE_NORMAL = 0x00000000, | 
|  | DMO_INPLACE_ZERO   = 0x00000001 | 
|  | }; | 
|  |  | 
|  | enum _DMO_SET_TYPE_FLAGS { | 
|  | DMO_SET_TYPEF_TEST_ONLY = 0x00000001, | 
|  | DMO_SET_TYPEF_CLEAR     = 0x00000002, | 
|  | }; | 
|  |  | 
|  | enum _DMO_OUTPUT_DATA_BUFFERF_FLAGS { | 
|  | DMO_OUTPUT_DATA_BUFFERF_SYNCPOINT   = 0x00000001, | 
|  | DMO_OUTPUT_DATA_BUFFERF_TIME        = 0x00000002, | 
|  | DMO_OUTPUT_DATA_BUFFERF_TIMELENGTH  = 0x00000004, | 
|  | DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE  = 0x01000000, | 
|  | }; | 
|  |  | 
|  | /***************************************************************************** | 
|  | * IMediaObject interface | 
|  | */ | 
|  | [ | 
|  | object, | 
|  | uuid(d8ad0f58-5494-4102-97c5-ec798e59bcf4), | 
|  | local | 
|  | ] | 
|  | interface IMediaObject : IUnknown | 
|  | { | 
|  | HRESULT GetStreamCount( | 
|  | [out] DWORD *pcInputStreams, | 
|  | [out] DWORD *pcOutputStreams | 
|  | ); | 
|  |  | 
|  | HRESULT GetInputStreamInfo( | 
|  | DWORD dwInputStreamIndex, | 
|  | [out] DWORD *pdwFlags | 
|  | ); | 
|  |  | 
|  | HRESULT GetOutputStreamInfo( | 
|  | DWORD dwOutputStreamIndex, | 
|  | [out] DWORD *pdwFlags | 
|  | ); | 
|  |  | 
|  | HRESULT GetInputType( | 
|  | DWORD dwInputStreamIndex, | 
|  | DWORD dwTypeIndex, | 
|  | [out] DMO_MEDIA_TYPE *pmt | 
|  | ); | 
|  |  | 
|  | HRESULT GetOutputType( | 
|  | DWORD dwOutputStreamIndex, | 
|  | DWORD dwTypeIndex, | 
|  | [out] DMO_MEDIA_TYPE *pmt | 
|  | ); | 
|  |  | 
|  | HRESULT SetInputType( | 
|  | DWORD dwInputStreamIndex, | 
|  | [in] const DMO_MEDIA_TYPE *pmt, | 
|  | DWORD dwFlags | 
|  | ); | 
|  |  | 
|  | HRESULT SetOutputType( | 
|  | DWORD dwOutputStreamIndex, | 
|  | [in] const DMO_MEDIA_TYPE *pmt, | 
|  | DWORD dwFlags | 
|  | ); | 
|  |  | 
|  | HRESULT GetInputCurrentType( | 
|  | DWORD dwInputStreamIndex, | 
|  | [out] DMO_MEDIA_TYPE *pmt | 
|  | ); | 
|  |  | 
|  | HRESULT GetOutputCurrentType( | 
|  | DWORD dwOutputStreamIndex, | 
|  | [out] DMO_MEDIA_TYPE *pmt | 
|  | ); | 
|  |  | 
|  | HRESULT GetInputSizeInfo( | 
|  | DWORD dwInputStreamIndex, | 
|  | [out] DWORD *pcbSize, | 
|  | [out] DWORD *pcbMaxLookahead, | 
|  | [out] DWORD *pcbAlignment | 
|  | ); | 
|  |  | 
|  | HRESULT GetOutputSizeInfo( | 
|  | DWORD dwOutputStreamIndex, | 
|  | [out] DWORD *pcbSize, | 
|  | [out] DWORD *pcbAlignment | 
|  | ); | 
|  |  | 
|  | HRESULT GetInputMaxLatency( | 
|  | DWORD dwInputStreamIndex, | 
|  | [out] REFERENCE_TIME *prtMaxLatency | 
|  | ); | 
|  |  | 
|  | HRESULT SetInputMaxLatency( | 
|  | DWORD dwInputStreamIndex, | 
|  | REFERENCE_TIME rtMaxLatency | 
|  | ); | 
|  |  | 
|  | HRESULT Flush(); | 
|  |  | 
|  | HRESULT Discontinuity(DWORD dwInputStreamIndex); | 
|  |  | 
|  | HRESULT AllocateStreamingResources(); | 
|  |  | 
|  | HRESULT FreeStreamingResources(); | 
|  |  | 
|  | HRESULT GetInputStatus( | 
|  | DWORD dwInputStreamIndex, | 
|  | [out] DWORD *dwFlags | 
|  | ); | 
|  |  | 
|  | HRESULT ProcessInput( | 
|  | DWORD dwInputStreamIndex, | 
|  | IMediaBuffer *pBuffer, | 
|  | DWORD dwFlags, | 
|  | REFERENCE_TIME rtTimestamp, | 
|  | REFERENCE_TIME rtTimelength | 
|  | ); | 
|  |  | 
|  | HRESULT ProcessOutput( | 
|  | DWORD dwFlags, | 
|  | DWORD cOutputBufferCount, | 
|  | [in,out] DMO_OUTPUT_DATA_BUFFER *pOutputBuffers, | 
|  | [out] DWORD *pdwStatus | 
|  | ); | 
|  |  | 
|  | HRESULT Lock(LONG bLock); | 
|  | } | 
|  |  | 
|  | /***************************************************************************** | 
|  | * IMediaObjectInPlace interface | 
|  | */ | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(651b9ad0-0fc7-4aa9-9538-d89931010741), | 
|  | local | 
|  | ] | 
|  | interface IMediaObjectInPlace : IUnknown { | 
|  | HRESULT Process( | 
|  | [in] ULONG ulSize, | 
|  | [in,out] BYTE* pData, | 
|  | [in] REFERENCE_TIME refTimeStart, | 
|  | [in] DWORD dwFlags | 
|  | ); | 
|  |  | 
|  | HRESULT Clone( | 
|  | [out] IMediaObjectInPlace **ppMediaObject | 
|  | ); | 
|  |  | 
|  | HRESULT GetLatency( | 
|  | [out] REFERENCE_TIME *pLatencyTime | 
|  | ); | 
|  | } | 
|  |  | 
|  | enum _DMO_QUALITY_STATUS_FLAGS | 
|  | { | 
|  | DMO_QUALITY_STATUS_ENABLED = 0x00000001, | 
|  | }; | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(65abea96-cf36-453f-af8a-705e98f16260), | 
|  | local | 
|  | ] | 
|  | interface IDMOQualityControl : IUnknown | 
|  | { | 
|  | HRESULT SetNow([in] REFERENCE_TIME now); | 
|  | HRESULT SetStatus([in] DWORD flags); | 
|  | HRESULT GetStatus([out] DWORD *flags); | 
|  | } | 
|  |  | 
|  | enum _DMO_VIDEO_OUTPUT_STREAM_FLAGS | 
|  | { | 
|  | DMO_VOSF_NEEDS_PREVIOUS_SAMPLE = 0x00000001, | 
|  | }; | 
|  |  | 
|  | [ | 
|  | object, | 
|  | uuid(be8f4f4e-5b16-4d29-b350-7f6b5d9298ac), | 
|  | local | 
|  | ] | 
|  | interface IDMOVideoOutputOptimizations : IUnknown | 
|  | { | 
|  | HRESULT QueryOperationModePreferences(ULONG index, DWORD *flags); | 
|  | HRESULT SetOperationMode(ULONG index, DWORD flags); | 
|  | HRESULT GetCurrentOperationMode(ULONG index, DWORD *flags); | 
|  | HRESULT GetCurrentSampleRequirements(ULONG index, DWORD *flags); | 
|  | } |