/* * 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"; interface IDMOQualityControl; interface IDMOVideoOutputOptimizations; 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 ); } 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 }; /***************************************************************************** * 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 ); }