From e82f73bf9e104a89e16ebe8e841a942a13ef3f04 Mon Sep 17 00:00:00 2001 From: Mark Harmstone Date: Fri, 27 Feb 2015 00:18:35 +0000 Subject: [PATCH] include: Add IMediaObject interfaces. --- include/mediaobj.idl | 179 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 176 insertions(+), 3 deletions(-) diff --git a/include/mediaobj.idl b/include/mediaobj.idl index cf7bb7ac926..04c82e890a0 100644 --- a/include/mediaobj.idl +++ b/include/mediaobj.idl @@ -19,12 +19,10 @@ import "unknwn.idl"; import "objidl.idl"; +import "strmif.idl"; interface IDMOQualityControl; interface IDMOVideoOutputOptimizations; -interface IMediaBuffer; -interface IMediaObject; -interface IMediaObjectInPlace; typedef struct _DMOMediaType { @@ -67,3 +65,178 @@ interface IEnumDMO : IUnknown [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 + ); +}