include: Add IMediaObject interfaces.

This commit is contained in:
Mark Harmstone 2015-02-27 00:18:35 +00:00 committed by Alexandre Julliard
parent e9cab9b381
commit e82f73bf9e
1 changed files with 176 additions and 3 deletions

View File

@ -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
);
}