/* * 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"; import "strmif.idl"; typedef struct _DMOMediaType { GUID majortype; GUID subtype; BOOL bFixedSizeSamples; BOOL bTemporalCompression; ULONG lSampleSize; GUID formattype; IUnknown *pUnk; ULONG cbFormat; BYTE *pbFormat; } DMO_MEDIA_TYPE; /***************************************************************************** * 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); }