/*** Autogenerated by WIDL 4.19 from direct-x/include/mediaobj.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __mediaobj_h__
#define __mediaobj_h__

/* Forward declarations */

#ifndef __IEnumDMO_FWD_DEFINED__
#define __IEnumDMO_FWD_DEFINED__
typedef interface IEnumDMO IEnumDMO;
#ifdef __cplusplus
interface IEnumDMO;
#endif /* __cplusplus */
#endif

#ifndef __IMediaBuffer_FWD_DEFINED__
#define __IMediaBuffer_FWD_DEFINED__
typedef interface IMediaBuffer IMediaBuffer;
#ifdef __cplusplus
interface IMediaBuffer;
#endif /* __cplusplus */
#endif

#ifndef __IMediaObject_FWD_DEFINED__
#define __IMediaObject_FWD_DEFINED__
typedef interface IMediaObject IMediaObject;
#ifdef __cplusplus
interface IMediaObject;
#endif /* __cplusplus */
#endif

#ifndef __IMediaObjectInPlace_FWD_DEFINED__
#define __IMediaObjectInPlace_FWD_DEFINED__
typedef interface IMediaObjectInPlace IMediaObjectInPlace;
#ifdef __cplusplus
interface IMediaObjectInPlace;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <unknwn.h>
#include <objidl.h>
#include <strmif.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef __IDMOQualityControl_FWD_DEFINED__
#define __IDMOQualityControl_FWD_DEFINED__
typedef interface IDMOQualityControl IDMOQualityControl;
#ifdef __cplusplus
interface IDMOQualityControl;
#endif /* __cplusplus */
#endif

#ifndef __IDMOVideoOutputOptimizations_FWD_DEFINED__
#define __IDMOVideoOutputOptimizations_FWD_DEFINED__
typedef interface IDMOVideoOutputOptimizations IDMOVideoOutputOptimizations;
#ifdef __cplusplus
interface IDMOVideoOutputOptimizations;
#endif /* __cplusplus */
#endif

typedef struct _DMOMediaType {
    GUID majortype;
    GUID subtype;
    WINBOOL bFixedSizeSamples;
    WINBOOL bTemporalCompression;
    ULONG lSampleSize;
    GUID formattype;
    IUnknown *pUnk;
    ULONG cbFormat;
    BYTE *pbFormat;
} DMO_MEDIA_TYPE;
/*****************************************************************************
 * IEnumDMO interface
 */
#ifndef __IEnumDMO_INTERFACE_DEFINED__
#define __IEnumDMO_INTERFACE_DEFINED__

DEFINE_GUID(IID_IEnumDMO, 0x2c3cd98a, 0x2bfa, 0x4a53, 0x9c,0x27, 0x52,0x49,0xba,0x64,0xba,0x0f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2c3cd98a-2bfa-4a53-9c27-5249ba64ba0f")
IEnumDMO : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Next(
        DWORD cItemsToFetch,
        CLSID *pCLSID,
        WCHAR **Names,
        DWORD *pcItemsFetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        DWORD cItemsToSkip) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IEnumDMO **ppEnum) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IEnumDMO, 0x2c3cd98a, 0x2bfa, 0x4a53, 0x9c,0x27, 0x52,0x49,0xba,0x64,0xba,0x0f)
#endif
#else
typedef struct IEnumDMOVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IEnumDMO *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IEnumDMO *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IEnumDMO *This);

    /*** IEnumDMO methods ***/
    HRESULT (STDMETHODCALLTYPE *Next)(
        IEnumDMO *This,
        DWORD cItemsToFetch,
        CLSID *pCLSID,
        WCHAR **Names,
        DWORD *pcItemsFetched);

    HRESULT (STDMETHODCALLTYPE *Skip)(
        IEnumDMO *This,
        DWORD cItemsToSkip);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        IEnumDMO *This);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IEnumDMO *This,
        IEnumDMO **ppEnum);

    END_INTERFACE
} IEnumDMOVtbl;

interface IEnumDMO {
    CONST_VTBL IEnumDMOVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IEnumDMO_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IEnumDMO_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IEnumDMO_Release(This) (This)->lpVtbl->Release(This)
/*** IEnumDMO methods ***/
#define IEnumDMO_Next(This,cItemsToFetch,pCLSID,Names,pcItemsFetched) (This)->lpVtbl->Next(This,cItemsToFetch,pCLSID,Names,pcItemsFetched)
#define IEnumDMO_Skip(This,cItemsToSkip) (This)->lpVtbl->Skip(This,cItemsToSkip)
#define IEnumDMO_Reset(This) (This)->lpVtbl->Reset(This)
#define IEnumDMO_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IEnumDMO_QueryInterface(IEnumDMO* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IEnumDMO_AddRef(IEnumDMO* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IEnumDMO_Release(IEnumDMO* This) {
    return This->lpVtbl->Release(This);
}
/*** IEnumDMO methods ***/
static FORCEINLINE HRESULT IEnumDMO_Next(IEnumDMO* This,DWORD cItemsToFetch,CLSID *pCLSID,WCHAR **Names,DWORD *pcItemsFetched) {
    return This->lpVtbl->Next(This,cItemsToFetch,pCLSID,Names,pcItemsFetched);
}
static FORCEINLINE HRESULT IEnumDMO_Skip(IEnumDMO* This,DWORD cItemsToSkip) {
    return This->lpVtbl->Skip(This,cItemsToSkip);
}
static FORCEINLINE HRESULT IEnumDMO_Reset(IEnumDMO* This) {
    return This->lpVtbl->Reset(This);
}
static FORCEINLINE HRESULT IEnumDMO_Clone(IEnumDMO* This,IEnumDMO **ppEnum) {
    return This->lpVtbl->Clone(This,ppEnum);
}
#endif
#endif

#endif


#endif  /* __IEnumDMO_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMediaBuffer interface
 */
#ifndef __IMediaBuffer_INTERFACE_DEFINED__
#define __IMediaBuffer_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMediaBuffer, 0x59eff8b9, 0x938c, 0x4a26, 0x82,0xf2, 0x95,0xcb,0x84,0xcd,0xc8,0x37);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("59eff8b9-938c-4a26-82f2-95cb84cdc837")
IMediaBuffer : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetLength(
        DWORD cbLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMaxLength(
        DWORD *pcbMaxLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBufferAndLength(
        BYTE **ppBuffer,
        DWORD *pcbLength) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMediaBuffer, 0x59eff8b9, 0x938c, 0x4a26, 0x82,0xf2, 0x95,0xcb,0x84,0xcd,0xc8,0x37)
#endif
#else
typedef struct IMediaBufferVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMediaBuffer *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMediaBuffer *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMediaBuffer *This);

    /*** IMediaBuffer methods ***/
    HRESULT (STDMETHODCALLTYPE *SetLength)(
        IMediaBuffer *This,
        DWORD cbLength);

    HRESULT (STDMETHODCALLTYPE *GetMaxLength)(
        IMediaBuffer *This,
        DWORD *pcbMaxLength);

    HRESULT (STDMETHODCALLTYPE *GetBufferAndLength)(
        IMediaBuffer *This,
        BYTE **ppBuffer,
        DWORD *pcbLength);

    END_INTERFACE
} IMediaBufferVtbl;

interface IMediaBuffer {
    CONST_VTBL IMediaBufferVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMediaBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMediaBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMediaBuffer_Release(This) (This)->lpVtbl->Release(This)
/*** IMediaBuffer methods ***/
#define IMediaBuffer_SetLength(This,cbLength) (This)->lpVtbl->SetLength(This,cbLength)
#define IMediaBuffer_GetMaxLength(This,pcbMaxLength) (This)->lpVtbl->GetMaxLength(This,pcbMaxLength)
#define IMediaBuffer_GetBufferAndLength(This,ppBuffer,pcbLength) (This)->lpVtbl->GetBufferAndLength(This,ppBuffer,pcbLength)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMediaBuffer_QueryInterface(IMediaBuffer* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMediaBuffer_AddRef(IMediaBuffer* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMediaBuffer_Release(IMediaBuffer* This) {
    return This->lpVtbl->Release(This);
}
/*** IMediaBuffer methods ***/
static FORCEINLINE HRESULT IMediaBuffer_SetLength(IMediaBuffer* This,DWORD cbLength) {
    return This->lpVtbl->SetLength(This,cbLength);
}
static FORCEINLINE HRESULT IMediaBuffer_GetMaxLength(IMediaBuffer* This,DWORD *pcbMaxLength) {
    return This->lpVtbl->GetMaxLength(This,pcbMaxLength);
}
static FORCEINLINE HRESULT IMediaBuffer_GetBufferAndLength(IMediaBuffer* This,BYTE **ppBuffer,DWORD *pcbLength) {
    return This->lpVtbl->GetBufferAndLength(This,ppBuffer,pcbLength);
}
#endif
#endif

#endif


#endif  /* __IMediaBuffer_INTERFACE_DEFINED__ */

typedef struct _DMO_OUTPUT_DATA_BUFFER {
    IMediaBuffer *pBuffer;
    DWORD dwStatus;
    REFERENCE_TIME rtTimestamp;
    REFERENCE_TIME rtTimelength;
} DMO_OUTPUT_DATA_BUFFER;
typedef struct _DMO_OUTPUT_DATA_BUFFER *PDMO_OUTPUT_DATA_BUFFER;
enum _DMO_INPLACE_PROCESS_FLAGS {
    DMO_INPLACE_NORMAL = 0x0,
    DMO_INPLACE_ZERO = 0x1
};
enum _DMO_SET_TYPE_FLAGS {
    DMO_SET_TYPEF_TEST_ONLY = 0x1,
    DMO_SET_TYPEF_CLEAR = 0x2
};
enum _DMO_OUTPUT_DATA_BUFFERF_FLAGS {
    DMO_OUTPUT_DATA_BUFFERF_SYNCPOINT = 0x1,
    DMO_OUTPUT_DATA_BUFFERF_TIME = 0x2,
    DMO_OUTPUT_DATA_BUFFERF_TIMELENGTH = 0x4,
    DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE = 0x1000000
};
/*****************************************************************************
 * IMediaObject interface
 */
#ifndef __IMediaObject_INTERFACE_DEFINED__
#define __IMediaObject_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMediaObject, 0xd8ad0f58, 0x5494, 0x4102, 0x97,0xc5, 0xec,0x79,0x8e,0x59,0xbc,0xf4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("d8ad0f58-5494-4102-97c5-ec798e59bcf4")
IMediaObject : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetStreamCount(
        DWORD *pcInputStreams,
        DWORD *pcOutputStreams) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInputStreamInfo(
        DWORD dwInputStreamIndex,
        DWORD *pdwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputStreamInfo(
        DWORD dwOutputStreamIndex,
        DWORD *pdwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInputType(
        DWORD dwInputStreamIndex,
        DWORD dwTypeIndex,
        DMO_MEDIA_TYPE *pmt) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputType(
        DWORD dwOutputStreamIndex,
        DWORD dwTypeIndex,
        DMO_MEDIA_TYPE *pmt) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetInputType(
        DWORD dwInputStreamIndex,
        const DMO_MEDIA_TYPE *pmt,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOutputType(
        DWORD dwOutputStreamIndex,
        const DMO_MEDIA_TYPE *pmt,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInputCurrentType(
        DWORD dwInputStreamIndex,
        DMO_MEDIA_TYPE *pmt) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputCurrentType(
        DWORD dwOutputStreamIndex,
        DMO_MEDIA_TYPE *pmt) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInputSizeInfo(
        DWORD dwInputStreamIndex,
        DWORD *pcbSize,
        DWORD *pcbMaxLookahead,
        DWORD *pcbAlignment) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputSizeInfo(
        DWORD dwOutputStreamIndex,
        DWORD *pcbSize,
        DWORD *pcbAlignment) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInputMaxLatency(
        DWORD dwInputStreamIndex,
        REFERENCE_TIME *prtMaxLatency) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetInputMaxLatency(
        DWORD dwInputStreamIndex,
        REFERENCE_TIME rtMaxLatency) = 0;

    virtual HRESULT STDMETHODCALLTYPE Flush(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Discontinuity(
        DWORD dwInputStreamIndex) = 0;

    virtual HRESULT STDMETHODCALLTYPE AllocateStreamingResources(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE FreeStreamingResources(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInputStatus(
        DWORD dwInputStreamIndex,
        DWORD *dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE ProcessInput(
        DWORD dwInputStreamIndex,
        IMediaBuffer *pBuffer,
        DWORD dwFlags,
        REFERENCE_TIME rtTimestamp,
        REFERENCE_TIME rtTimelength) = 0;

    virtual HRESULT STDMETHODCALLTYPE ProcessOutput(
        DWORD dwFlags,
        DWORD cOutputBufferCount,
        DMO_OUTPUT_DATA_BUFFER *pOutputBuffers,
        DWORD *pdwStatus) = 0;

    virtual HRESULT STDMETHODCALLTYPE Lock(
        LONG bLock) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMediaObject, 0xd8ad0f58, 0x5494, 0x4102, 0x97,0xc5, 0xec,0x79,0x8e,0x59,0xbc,0xf4)
#endif
#else
typedef struct IMediaObjectVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMediaObject *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMediaObject *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMediaObject *This);

    /*** IMediaObject methods ***/
    HRESULT (STDMETHODCALLTYPE *GetStreamCount)(
        IMediaObject *This,
        DWORD *pcInputStreams,
        DWORD *pcOutputStreams);

    HRESULT (STDMETHODCALLTYPE *GetInputStreamInfo)(
        IMediaObject *This,
        DWORD dwInputStreamIndex,
        DWORD *pdwFlags);

    HRESULT (STDMETHODCALLTYPE *GetOutputStreamInfo)(
        IMediaObject *This,
        DWORD dwOutputStreamIndex,
        DWORD *pdwFlags);

    HRESULT (STDMETHODCALLTYPE *GetInputType)(
        IMediaObject *This,
        DWORD dwInputStreamIndex,
        DWORD dwTypeIndex,
        DMO_MEDIA_TYPE *pmt);

    HRESULT (STDMETHODCALLTYPE *GetOutputType)(
        IMediaObject *This,
        DWORD dwOutputStreamIndex,
        DWORD dwTypeIndex,
        DMO_MEDIA_TYPE *pmt);

    HRESULT (STDMETHODCALLTYPE *SetInputType)(
        IMediaObject *This,
        DWORD dwInputStreamIndex,
        const DMO_MEDIA_TYPE *pmt,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *SetOutputType)(
        IMediaObject *This,
        DWORD dwOutputStreamIndex,
        const DMO_MEDIA_TYPE *pmt,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetInputCurrentType)(
        IMediaObject *This,
        DWORD dwInputStreamIndex,
        DMO_MEDIA_TYPE *pmt);

    HRESULT (STDMETHODCALLTYPE *GetOutputCurrentType)(
        IMediaObject *This,
        DWORD dwOutputStreamIndex,
        DMO_MEDIA_TYPE *pmt);

    HRESULT (STDMETHODCALLTYPE *GetInputSizeInfo)(
        IMediaObject *This,
        DWORD dwInputStreamIndex,
        DWORD *pcbSize,
        DWORD *pcbMaxLookahead,
        DWORD *pcbAlignment);

    HRESULT (STDMETHODCALLTYPE *GetOutputSizeInfo)(
        IMediaObject *This,
        DWORD dwOutputStreamIndex,
        DWORD *pcbSize,
        DWORD *pcbAlignment);

    HRESULT (STDMETHODCALLTYPE *GetInputMaxLatency)(
        IMediaObject *This,
        DWORD dwInputStreamIndex,
        REFERENCE_TIME *prtMaxLatency);

    HRESULT (STDMETHODCALLTYPE *SetInputMaxLatency)(
        IMediaObject *This,
        DWORD dwInputStreamIndex,
        REFERENCE_TIME rtMaxLatency);

    HRESULT (STDMETHODCALLTYPE *Flush)(
        IMediaObject *This);

    HRESULT (STDMETHODCALLTYPE *Discontinuity)(
        IMediaObject *This,
        DWORD dwInputStreamIndex);

    HRESULT (STDMETHODCALLTYPE *AllocateStreamingResources)(
        IMediaObject *This);

    HRESULT (STDMETHODCALLTYPE *FreeStreamingResources)(
        IMediaObject *This);

    HRESULT (STDMETHODCALLTYPE *GetInputStatus)(
        IMediaObject *This,
        DWORD dwInputStreamIndex,
        DWORD *dwFlags);

    HRESULT (STDMETHODCALLTYPE *ProcessInput)(
        IMediaObject *This,
        DWORD dwInputStreamIndex,
        IMediaBuffer *pBuffer,
        DWORD dwFlags,
        REFERENCE_TIME rtTimestamp,
        REFERENCE_TIME rtTimelength);

    HRESULT (STDMETHODCALLTYPE *ProcessOutput)(
        IMediaObject *This,
        DWORD dwFlags,
        DWORD cOutputBufferCount,
        DMO_OUTPUT_DATA_BUFFER *pOutputBuffers,
        DWORD *pdwStatus);

    HRESULT (STDMETHODCALLTYPE *Lock)(
        IMediaObject *This,
        LONG bLock);

    END_INTERFACE
} IMediaObjectVtbl;

interface IMediaObject {
    CONST_VTBL IMediaObjectVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMediaObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMediaObject_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMediaObject_Release(This) (This)->lpVtbl->Release(This)
/*** IMediaObject methods ***/
#define IMediaObject_GetStreamCount(This,pcInputStreams,pcOutputStreams) (This)->lpVtbl->GetStreamCount(This,pcInputStreams,pcOutputStreams)
#define IMediaObject_GetInputStreamInfo(This,dwInputStreamIndex,pdwFlags) (This)->lpVtbl->GetInputStreamInfo(This,dwInputStreamIndex,pdwFlags)
#define IMediaObject_GetOutputStreamInfo(This,dwOutputStreamIndex,pdwFlags) (This)->lpVtbl->GetOutputStreamInfo(This,dwOutputStreamIndex,pdwFlags)
#define IMediaObject_GetInputType(This,dwInputStreamIndex,dwTypeIndex,pmt) (This)->lpVtbl->GetInputType(This,dwInputStreamIndex,dwTypeIndex,pmt)
#define IMediaObject_GetOutputType(This,dwOutputStreamIndex,dwTypeIndex,pmt) (This)->lpVtbl->GetOutputType(This,dwOutputStreamIndex,dwTypeIndex,pmt)
#define IMediaObject_SetInputType(This,dwInputStreamIndex,pmt,dwFlags) (This)->lpVtbl->SetInputType(This,dwInputStreamIndex,pmt,dwFlags)
#define IMediaObject_SetOutputType(This,dwOutputStreamIndex,pmt,dwFlags) (This)->lpVtbl->SetOutputType(This,dwOutputStreamIndex,pmt,dwFlags)
#define IMediaObject_GetInputCurrentType(This,dwInputStreamIndex,pmt) (This)->lpVtbl->GetInputCurrentType(This,dwInputStreamIndex,pmt)
#define IMediaObject_GetOutputCurrentType(This,dwOutputStreamIndex,pmt) (This)->lpVtbl->GetOutputCurrentType(This,dwOutputStreamIndex,pmt)
#define IMediaObject_GetInputSizeInfo(This,dwInputStreamIndex,pcbSize,pcbMaxLookahead,pcbAlignment) (This)->lpVtbl->GetInputSizeInfo(This,dwInputStreamIndex,pcbSize,pcbMaxLookahead,pcbAlignment)
#define IMediaObject_GetOutputSizeInfo(This,dwOutputStreamIndex,pcbSize,pcbAlignment) (This)->lpVtbl->GetOutputSizeInfo(This,dwOutputStreamIndex,pcbSize,pcbAlignment)
#define IMediaObject_GetInputMaxLatency(This,dwInputStreamIndex,prtMaxLatency) (This)->lpVtbl->GetInputMaxLatency(This,dwInputStreamIndex,prtMaxLatency)
#define IMediaObject_SetInputMaxLatency(This,dwInputStreamIndex,rtMaxLatency) (This)->lpVtbl->SetInputMaxLatency(This,dwInputStreamIndex,rtMaxLatency)
#define IMediaObject_Flush(This) (This)->lpVtbl->Flush(This)
#define IMediaObject_Discontinuity(This,dwInputStreamIndex) (This)->lpVtbl->Discontinuity(This,dwInputStreamIndex)
#define IMediaObject_AllocateStreamingResources(This) (This)->lpVtbl->AllocateStreamingResources(This)
#define IMediaObject_FreeStreamingResources(This) (This)->lpVtbl->FreeStreamingResources(This)
#define IMediaObject_GetInputStatus(This,dwInputStreamIndex,dwFlags) (This)->lpVtbl->GetInputStatus(This,dwInputStreamIndex,dwFlags)
#define IMediaObject_ProcessInput(This,dwInputStreamIndex,pBuffer,dwFlags,rtTimestamp,rtTimelength) (This)->lpVtbl->ProcessInput(This,dwInputStreamIndex,pBuffer,dwFlags,rtTimestamp,rtTimelength)
#define IMediaObject_ProcessOutput(This,dwFlags,cOutputBufferCount,pOutputBuffers,pdwStatus) (This)->lpVtbl->ProcessOutput(This,dwFlags,cOutputBufferCount,pOutputBuffers,pdwStatus)
#define IMediaObject_Lock(This,bLock) (This)->lpVtbl->Lock(This,bLock)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMediaObject_QueryInterface(IMediaObject* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMediaObject_AddRef(IMediaObject* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMediaObject_Release(IMediaObject* This) {
    return This->lpVtbl->Release(This);
}
/*** IMediaObject methods ***/
static FORCEINLINE HRESULT IMediaObject_GetStreamCount(IMediaObject* This,DWORD *pcInputStreams,DWORD *pcOutputStreams) {
    return This->lpVtbl->GetStreamCount(This,pcInputStreams,pcOutputStreams);
}
static FORCEINLINE HRESULT IMediaObject_GetInputStreamInfo(IMediaObject* This,DWORD dwInputStreamIndex,DWORD *pdwFlags) {
    return This->lpVtbl->GetInputStreamInfo(This,dwInputStreamIndex,pdwFlags);
}
static FORCEINLINE HRESULT IMediaObject_GetOutputStreamInfo(IMediaObject* This,DWORD dwOutputStreamIndex,DWORD *pdwFlags) {
    return This->lpVtbl->GetOutputStreamInfo(This,dwOutputStreamIndex,pdwFlags);
}
static FORCEINLINE HRESULT IMediaObject_GetInputType(IMediaObject* This,DWORD dwInputStreamIndex,DWORD dwTypeIndex,DMO_MEDIA_TYPE *pmt) {
    return This->lpVtbl->GetInputType(This,dwInputStreamIndex,dwTypeIndex,pmt);
}
static FORCEINLINE HRESULT IMediaObject_GetOutputType(IMediaObject* This,DWORD dwOutputStreamIndex,DWORD dwTypeIndex,DMO_MEDIA_TYPE *pmt) {
    return This->lpVtbl->GetOutputType(This,dwOutputStreamIndex,dwTypeIndex,pmt);
}
static FORCEINLINE HRESULT IMediaObject_SetInputType(IMediaObject* This,DWORD dwInputStreamIndex,const DMO_MEDIA_TYPE *pmt,DWORD dwFlags) {
    return This->lpVtbl->SetInputType(This,dwInputStreamIndex,pmt,dwFlags);
}
static FORCEINLINE HRESULT IMediaObject_SetOutputType(IMediaObject* This,DWORD dwOutputStreamIndex,const DMO_MEDIA_TYPE *pmt,DWORD dwFlags) {
    return This->lpVtbl->SetOutputType(This,dwOutputStreamIndex,pmt,dwFlags);
}
static FORCEINLINE HRESULT IMediaObject_GetInputCurrentType(IMediaObject* This,DWORD dwInputStreamIndex,DMO_MEDIA_TYPE *pmt) {
    return This->lpVtbl->GetInputCurrentType(This,dwInputStreamIndex,pmt);
}
static FORCEINLINE HRESULT IMediaObject_GetOutputCurrentType(IMediaObject* This,DWORD dwOutputStreamIndex,DMO_MEDIA_TYPE *pmt) {
    return This->lpVtbl->GetOutputCurrentType(This,dwOutputStreamIndex,pmt);
}
static FORCEINLINE HRESULT IMediaObject_GetInputSizeInfo(IMediaObject* This,DWORD dwInputStreamIndex,DWORD *pcbSize,DWORD *pcbMaxLookahead,DWORD *pcbAlignment) {
    return This->lpVtbl->GetInputSizeInfo(This,dwInputStreamIndex,pcbSize,pcbMaxLookahead,pcbAlignment);
}
static FORCEINLINE HRESULT IMediaObject_GetOutputSizeInfo(IMediaObject* This,DWORD dwOutputStreamIndex,DWORD *pcbSize,DWORD *pcbAlignment) {
    return This->lpVtbl->GetOutputSizeInfo(This,dwOutputStreamIndex,pcbSize,pcbAlignment);
}
static FORCEINLINE HRESULT IMediaObject_GetInputMaxLatency(IMediaObject* This,DWORD dwInputStreamIndex,REFERENCE_TIME *prtMaxLatency) {
    return This->lpVtbl->GetInputMaxLatency(This,dwInputStreamIndex,prtMaxLatency);
}
static FORCEINLINE HRESULT IMediaObject_SetInputMaxLatency(IMediaObject* This,DWORD dwInputStreamIndex,REFERENCE_TIME rtMaxLatency) {
    return This->lpVtbl->SetInputMaxLatency(This,dwInputStreamIndex,rtMaxLatency);
}
static FORCEINLINE HRESULT IMediaObject_Flush(IMediaObject* This) {
    return This->lpVtbl->Flush(This);
}
static FORCEINLINE HRESULT IMediaObject_Discontinuity(IMediaObject* This,DWORD dwInputStreamIndex) {
    return This->lpVtbl->Discontinuity(This,dwInputStreamIndex);
}
static FORCEINLINE HRESULT IMediaObject_AllocateStreamingResources(IMediaObject* This) {
    return This->lpVtbl->AllocateStreamingResources(This);
}
static FORCEINLINE HRESULT IMediaObject_FreeStreamingResources(IMediaObject* This) {
    return This->lpVtbl->FreeStreamingResources(This);
}
static FORCEINLINE HRESULT IMediaObject_GetInputStatus(IMediaObject* This,DWORD dwInputStreamIndex,DWORD *dwFlags) {
    return This->lpVtbl->GetInputStatus(This,dwInputStreamIndex,dwFlags);
}
static FORCEINLINE HRESULT IMediaObject_ProcessInput(IMediaObject* This,DWORD dwInputStreamIndex,IMediaBuffer *pBuffer,DWORD dwFlags,REFERENCE_TIME rtTimestamp,REFERENCE_TIME rtTimelength) {
    return This->lpVtbl->ProcessInput(This,dwInputStreamIndex,pBuffer,dwFlags,rtTimestamp,rtTimelength);
}
static FORCEINLINE HRESULT IMediaObject_ProcessOutput(IMediaObject* This,DWORD dwFlags,DWORD cOutputBufferCount,DMO_OUTPUT_DATA_BUFFER *pOutputBuffers,DWORD *pdwStatus) {
    return This->lpVtbl->ProcessOutput(This,dwFlags,cOutputBufferCount,pOutputBuffers,pdwStatus);
}
static FORCEINLINE HRESULT IMediaObject_Lock(IMediaObject* This,LONG bLock) {
    return This->lpVtbl->Lock(This,bLock);
}
#endif
#endif

#endif


#endif  /* __IMediaObject_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMediaObjectInPlace interface
 */
#ifndef __IMediaObjectInPlace_INTERFACE_DEFINED__
#define __IMediaObjectInPlace_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMediaObjectInPlace, 0x651b9ad0, 0x0fc7, 0x4aa9, 0x95,0x38, 0xd8,0x99,0x31,0x01,0x07,0x41);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("651b9ad0-0fc7-4aa9-9538-d89931010741")
IMediaObjectInPlace : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Process(
        ULONG ulSize,
        BYTE *pData,
        REFERENCE_TIME refTimeStart,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IMediaObjectInPlace **ppMediaObject) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLatency(
        REFERENCE_TIME *pLatencyTime) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMediaObjectInPlace, 0x651b9ad0, 0x0fc7, 0x4aa9, 0x95,0x38, 0xd8,0x99,0x31,0x01,0x07,0x41)
#endif
#else
typedef struct IMediaObjectInPlaceVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMediaObjectInPlace *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMediaObjectInPlace *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMediaObjectInPlace *This);

    /*** IMediaObjectInPlace methods ***/
    HRESULT (STDMETHODCALLTYPE *Process)(
        IMediaObjectInPlace *This,
        ULONG ulSize,
        BYTE *pData,
        REFERENCE_TIME refTimeStart,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IMediaObjectInPlace *This,
        IMediaObjectInPlace **ppMediaObject);

    HRESULT (STDMETHODCALLTYPE *GetLatency)(
        IMediaObjectInPlace *This,
        REFERENCE_TIME *pLatencyTime);

    END_INTERFACE
} IMediaObjectInPlaceVtbl;

interface IMediaObjectInPlace {
    CONST_VTBL IMediaObjectInPlaceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMediaObjectInPlace_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMediaObjectInPlace_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMediaObjectInPlace_Release(This) (This)->lpVtbl->Release(This)
/*** IMediaObjectInPlace methods ***/
#define IMediaObjectInPlace_Process(This,ulSize,pData,refTimeStart,dwFlags) (This)->lpVtbl->Process(This,ulSize,pData,refTimeStart,dwFlags)
#define IMediaObjectInPlace_Clone(This,ppMediaObject) (This)->lpVtbl->Clone(This,ppMediaObject)
#define IMediaObjectInPlace_GetLatency(This,pLatencyTime) (This)->lpVtbl->GetLatency(This,pLatencyTime)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMediaObjectInPlace_QueryInterface(IMediaObjectInPlace* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMediaObjectInPlace_AddRef(IMediaObjectInPlace* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMediaObjectInPlace_Release(IMediaObjectInPlace* This) {
    return This->lpVtbl->Release(This);
}
/*** IMediaObjectInPlace methods ***/
static FORCEINLINE HRESULT IMediaObjectInPlace_Process(IMediaObjectInPlace* This,ULONG ulSize,BYTE *pData,REFERENCE_TIME refTimeStart,DWORD dwFlags) {
    return This->lpVtbl->Process(This,ulSize,pData,refTimeStart,dwFlags);
}
static FORCEINLINE HRESULT IMediaObjectInPlace_Clone(IMediaObjectInPlace* This,IMediaObjectInPlace **ppMediaObject) {
    return This->lpVtbl->Clone(This,ppMediaObject);
}
static FORCEINLINE HRESULT IMediaObjectInPlace_GetLatency(IMediaObjectInPlace* This,REFERENCE_TIME *pLatencyTime) {
    return This->lpVtbl->GetLatency(This,pLatencyTime);
}
#endif
#endif

#endif


#endif  /* __IMediaObjectInPlace_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __mediaobj_h__ */
