/*** Autogenerated by WIDL 3.12 from ../../wine-staging-nine/include/mfidl.idl - Do not edit ***/

#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif

#include <rpc.h>
#include <rpcndr.h>

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

#ifndef __mfidl_h__
#define __mfidl_h__

/* Forward declarations */

#ifndef __IMFClock_FWD_DEFINED__
#define __IMFClock_FWD_DEFINED__
typedef interface IMFClock IMFClock;
#ifdef __cplusplus
interface IMFClock;
#endif /* __cplusplus */
#endif

#ifndef __IMFTopologyNode_FWD_DEFINED__
#define __IMFTopologyNode_FWD_DEFINED__
typedef interface IMFTopologyNode IMFTopologyNode;
#ifdef __cplusplus
interface IMFTopologyNode;
#endif /* __cplusplus */
#endif

#ifndef __IMFTopology_FWD_DEFINED__
#define __IMFTopology_FWD_DEFINED__
typedef interface IMFTopology IMFTopology;
#ifdef __cplusplus
interface IMFTopology;
#endif /* __cplusplus */
#endif

#ifndef __IMFMediaSession_FWD_DEFINED__
#define __IMFMediaSession_FWD_DEFINED__
typedef interface IMFMediaSession IMFMediaSession;
#ifdef __cplusplus
interface IMFMediaSession;
#endif /* __cplusplus */
#endif

#ifndef __IMFSourceResolver_FWD_DEFINED__
#define __IMFSourceResolver_FWD_DEFINED__
typedef interface IMFSourceResolver IMFSourceResolver;
#ifdef __cplusplus
interface IMFSourceResolver;
#endif /* __cplusplus */
#endif

#ifndef __IMFMediaTypeHandler_FWD_DEFINED__
#define __IMFMediaTypeHandler_FWD_DEFINED__
typedef interface IMFMediaTypeHandler IMFMediaTypeHandler;
#ifdef __cplusplus
interface IMFMediaTypeHandler;
#endif /* __cplusplus */
#endif

#ifndef __IMFStreamDescriptor_FWD_DEFINED__
#define __IMFStreamDescriptor_FWD_DEFINED__
typedef interface IMFStreamDescriptor IMFStreamDescriptor;
#ifdef __cplusplus
interface IMFStreamDescriptor;
#endif /* __cplusplus */
#endif

#ifndef __IMFClockStateSink_FWD_DEFINED__
#define __IMFClockStateSink_FWD_DEFINED__
typedef interface IMFClockStateSink IMFClockStateSink;
#ifdef __cplusplus
interface IMFClockStateSink;
#endif /* __cplusplus */
#endif

#ifndef __IMFGetService_FWD_DEFINED__
#define __IMFGetService_FWD_DEFINED__
typedef interface IMFGetService IMFGetService;
#ifdef __cplusplus
interface IMFGetService;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <mfobjects.h>
#include <mftransform.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef UINT64 TOPOID;
typedef LONGLONG MFTIME;
typedef enum MF_TOPOLOGY_TYPE {
    MF_TOPOLOGY_OUTPUT_NODE = 0,
    MF_TOPOLOGY_SOURCESTREAM_NODE = 1,
    MF_TOPOLOGY_TRANSFORM_NODE = 2,
    MF_TOPOLOGY_TEE_NODE = 3,
    MF_TOPOLOGY_MAX = 0xffffffff
} MF_TOPOLOGY_TYPE;
typedef enum _MFCLOCK_STATE {
    MFCLOCK_STATE_INVALID = 0,
    MFCLOCK_STATE_RUNNING = 1,
    MFCLOCK_STATE_STOPPED = 2,
    MFCLOCK_STATE_PAUSED = 3
} MFCLOCK_STATE;
typedef enum MF_OBJECT_TYPE {
    MF_OBJECT_MEDIASOURCE = 0,
    MF_OBJECT_BYTESTREAM = 1,
    MF_OBJECT_INVALID = 2
} MF_OBJECT_TYPE;
typedef struct _MFCLOCK_PROPERTIES {
    UINT64 qwCorrelationRate;
    GUID guidClockId;
    DWORD dwClockFlags;
    UINT64 qwClockFrequency;
    DWORD dwClockTolerance;
    DWORD dwClockJitter;
} MFCLOCK_PROPERTIES;
/*****************************************************************************
 * IMFClock interface
 */
#ifndef __IMFClock_INTERFACE_DEFINED__
#define __IMFClock_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFClock, 0x2eb1e945, 0x18b8, 0x4139, 0x9b,0x1a, 0xd5,0xd5,0x84,0x81,0x85,0x30);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2eb1e945-18b8-4139-9b1a-d5d584818530")
IMFClock : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetClockCharacteristics(
        DWORD *characteristics) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCorrelatedTime(
        DWORD reserved,
        LONGLONG *clock_time,
        MFTIME *system_time) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetContinuityKey(
        DWORD *key) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetState(
        DWORD reserved,
        MFCLOCK_STATE *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetProperties(
        MFCLOCK_PROPERTIES *props) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFClock, 0x2eb1e945, 0x18b8, 0x4139, 0x9b,0x1a, 0xd5,0xd5,0x84,0x81,0x85,0x30)
#endif
#else
typedef struct IMFClockVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFClock methods ***/
    HRESULT (STDMETHODCALLTYPE *GetClockCharacteristics)(
        IMFClock *This,
        DWORD *characteristics);

    HRESULT (STDMETHODCALLTYPE *GetCorrelatedTime)(
        IMFClock *This,
        DWORD reserved,
        LONGLONG *clock_time,
        MFTIME *system_time);

    HRESULT (STDMETHODCALLTYPE *GetContinuityKey)(
        IMFClock *This,
        DWORD *key);

    HRESULT (STDMETHODCALLTYPE *GetState)(
        IMFClock *This,
        DWORD reserved,
        MFCLOCK_STATE *state);

    HRESULT (STDMETHODCALLTYPE *GetProperties)(
        IMFClock *This,
        MFCLOCK_PROPERTIES *props);

    END_INTERFACE
} IMFClockVtbl;

interface IMFClock {
    CONST_VTBL IMFClockVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFClock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFClock_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFClock_Release(This) (This)->lpVtbl->Release(This)
/*** IMFClock methods ***/
#define IMFClock_GetClockCharacteristics(This,characteristics) (This)->lpVtbl->GetClockCharacteristics(This,characteristics)
#define IMFClock_GetCorrelatedTime(This,reserved,clock_time,system_time) (This)->lpVtbl->GetCorrelatedTime(This,reserved,clock_time,system_time)
#define IMFClock_GetContinuityKey(This,key) (This)->lpVtbl->GetContinuityKey(This,key)
#define IMFClock_GetState(This,reserved,state) (This)->lpVtbl->GetState(This,reserved,state)
#define IMFClock_GetProperties(This,props) (This)->lpVtbl->GetProperties(This,props)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFClock_QueryInterface(IMFClock* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFClock_AddRef(IMFClock* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFClock_Release(IMFClock* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFClock methods ***/
static FORCEINLINE HRESULT IMFClock_GetClockCharacteristics(IMFClock* This,DWORD *characteristics) {
    return This->lpVtbl->GetClockCharacteristics(This,characteristics);
}
static FORCEINLINE HRESULT IMFClock_GetCorrelatedTime(IMFClock* This,DWORD reserved,LONGLONG *clock_time,MFTIME *system_time) {
    return This->lpVtbl->GetCorrelatedTime(This,reserved,clock_time,system_time);
}
static FORCEINLINE HRESULT IMFClock_GetContinuityKey(IMFClock* This,DWORD *key) {
    return This->lpVtbl->GetContinuityKey(This,key);
}
static FORCEINLINE HRESULT IMFClock_GetState(IMFClock* This,DWORD reserved,MFCLOCK_STATE *state) {
    return This->lpVtbl->GetState(This,reserved,state);
}
static FORCEINLINE HRESULT IMFClock_GetProperties(IMFClock* This,MFCLOCK_PROPERTIES *props) {
    return This->lpVtbl->GetProperties(This,props);
}
#endif
#endif

#endif


#endif  /* __IMFClock_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFTopologyNode interface
 */
#ifndef __IMFTopologyNode_INTERFACE_DEFINED__
#define __IMFTopologyNode_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFTopologyNode, 0x83cf873a, 0xf6da, 0x4bc8, 0x82,0x3f, 0xba,0xcf,0xd5,0x5d,0xc4,0x30);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("83cf873a-f6da-4bc8-823f-bacfd55dc430")
IMFTopologyNode : public IMFAttributes
{
    virtual HRESULT STDMETHODCALLTYPE SetObject(
        IUnknown *object) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetObject(
        IUnknown **object) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetNodeType(
        MF_TOPOLOGY_TYPE *type) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTopoNodeID(
        TOPOID *id) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetTopoNodeID(
        TOPOID id) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInputCount(
        DWORD *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputCount(
        DWORD *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConnectOutput(
        DWORD output_index,
        IMFTopologyNode *node,
        DWORD input_index) = 0;

    virtual HRESULT STDMETHODCALLTYPE DisconnectOutput(
        DWORD index) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInput(
        DWORD input_index,
        IMFTopologyNode **node,
        DWORD *output_index) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutput(
        DWORD output_index,
        IMFTopologyNode **node,
        DWORD *input_index) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOutputPrefType(
        DWORD index,
        IMFMediaType *type) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputPrefType(
        DWORD output_index,
        IMFMediaType **type) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetInputPrefType(
        DWORD index,
        IMFMediaType *type) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInputPrefType(
        DWORD index,
        IMFMediaType **type) = 0;

    virtual HRESULT STDMETHODCALLTYPE CloneFrom(
        IMFTopologyNode *node) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFTopologyNode, 0x83cf873a, 0xf6da, 0x4bc8, 0x82,0x3f, 0xba,0xcf,0xd5,0x5d,0xc4,0x30)
#endif
#else
typedef struct IMFTopologyNodeVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFAttributes methods ***/
    HRESULT (STDMETHODCALLTYPE *GetItem)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        PROPVARIANT *pValue);

    HRESULT (STDMETHODCALLTYPE *GetItemType)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        MF_ATTRIBUTE_TYPE *pType);

    HRESULT (STDMETHODCALLTYPE *CompareItem)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        REFPROPVARIANT Value,
        BOOL *pbResult);

    HRESULT (STDMETHODCALLTYPE *Compare)(
        IMFTopologyNode *This,
        IMFAttributes *pTheirs,
        MF_ATTRIBUTES_MATCH_TYPE MatchType,
        BOOL *pbResult);

    HRESULT (STDMETHODCALLTYPE *GetUINT32)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        UINT32 *punValue);

    HRESULT (STDMETHODCALLTYPE *GetUINT64)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        UINT64 *punValue);

    HRESULT (STDMETHODCALLTYPE *GetDouble)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        double *pfValue);

    HRESULT (STDMETHODCALLTYPE *GetGUID)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        GUID *pguidValue);

    HRESULT (STDMETHODCALLTYPE *GetStringLength)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetString)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        LPWSTR pwszValue,
        UINT32 cchBufSize,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetAllocatedString)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        LPWSTR *ppwszValue,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetBlobSize)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        UINT32 *pcbBlobSize);

    HRESULT (STDMETHODCALLTYPE *GetBlob)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        UINT8 *pBuf,
        UINT32 cbBufSize,
        UINT32 *pcbBlobSize);

    HRESULT (STDMETHODCALLTYPE *GetAllocatedBlob)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        UINT8 **ppBuf,
        UINT32 *pcbSize);

    HRESULT (STDMETHODCALLTYPE *GetUnknown)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        REFIID riid,
        LPVOID *ppv);

    HRESULT (STDMETHODCALLTYPE *SetItem)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        REFPROPVARIANT Value);

    HRESULT (STDMETHODCALLTYPE *DeleteItem)(
        IMFTopologyNode *This,
        REFGUID guidKey);

    HRESULT (STDMETHODCALLTYPE *DeleteAllItems)(
        IMFTopologyNode *This);

    HRESULT (STDMETHODCALLTYPE *SetUINT32)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        UINT32 unValue);

    HRESULT (STDMETHODCALLTYPE *SetUINT64)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        UINT64 unValue);

    HRESULT (STDMETHODCALLTYPE *SetDouble)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        double fValue);

    HRESULT (STDMETHODCALLTYPE *SetGUID)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        REFGUID guidValue);

    HRESULT (STDMETHODCALLTYPE *SetString)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        LPCWSTR wszValue);

    HRESULT (STDMETHODCALLTYPE *SetBlob)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        const UINT8 *pBuf,
        UINT32 cbBufSize);

    HRESULT (STDMETHODCALLTYPE *SetUnknown)(
        IMFTopologyNode *This,
        REFGUID guidKey,
        IUnknown *pUnknown);

    HRESULT (STDMETHODCALLTYPE *LockStore)(
        IMFTopologyNode *This);

    HRESULT (STDMETHODCALLTYPE *UnlockStore)(
        IMFTopologyNode *This);

    HRESULT (STDMETHODCALLTYPE *GetCount)(
        IMFTopologyNode *This,
        UINT32 *pcItems);

    HRESULT (STDMETHODCALLTYPE *GetItemByIndex)(
        IMFTopologyNode *This,
        UINT32 unIndex,
        GUID *pguidKey,
        PROPVARIANT *pValue);

    HRESULT (STDMETHODCALLTYPE *CopyAllItems)(
        IMFTopologyNode *This,
        IMFAttributes *pDest);

    /*** IMFTopologyNode methods ***/
    HRESULT (STDMETHODCALLTYPE *SetObject)(
        IMFTopologyNode *This,
        IUnknown *object);

    HRESULT (STDMETHODCALLTYPE *GetObject)(
        IMFTopologyNode *This,
        IUnknown **object);

    HRESULT (STDMETHODCALLTYPE *GetNodeType)(
        IMFTopologyNode *This,
        MF_TOPOLOGY_TYPE *type);

    HRESULT (STDMETHODCALLTYPE *GetTopoNodeID)(
        IMFTopologyNode *This,
        TOPOID *id);

    HRESULT (STDMETHODCALLTYPE *SetTopoNodeID)(
        IMFTopologyNode *This,
        TOPOID id);

    HRESULT (STDMETHODCALLTYPE *GetInputCount)(
        IMFTopologyNode *This,
        DWORD *count);

    HRESULT (STDMETHODCALLTYPE *GetOutputCount)(
        IMFTopologyNode *This,
        DWORD *count);

    HRESULT (STDMETHODCALLTYPE *ConnectOutput)(
        IMFTopologyNode *This,
        DWORD output_index,
        IMFTopologyNode *node,
        DWORD input_index);

    HRESULT (STDMETHODCALLTYPE *DisconnectOutput)(
        IMFTopologyNode *This,
        DWORD index);

    HRESULT (STDMETHODCALLTYPE *GetInput)(
        IMFTopologyNode *This,
        DWORD input_index,
        IMFTopologyNode **node,
        DWORD *output_index);

    HRESULT (STDMETHODCALLTYPE *GetOutput)(
        IMFTopologyNode *This,
        DWORD output_index,
        IMFTopologyNode **node,
        DWORD *input_index);

    HRESULT (STDMETHODCALLTYPE *SetOutputPrefType)(
        IMFTopologyNode *This,
        DWORD index,
        IMFMediaType *type);

    HRESULT (STDMETHODCALLTYPE *GetOutputPrefType)(
        IMFTopologyNode *This,
        DWORD output_index,
        IMFMediaType **type);

    HRESULT (STDMETHODCALLTYPE *SetInputPrefType)(
        IMFTopologyNode *This,
        DWORD index,
        IMFMediaType *type);

    HRESULT (STDMETHODCALLTYPE *GetInputPrefType)(
        IMFTopologyNode *This,
        DWORD index,
        IMFMediaType **type);

    HRESULT (STDMETHODCALLTYPE *CloneFrom)(
        IMFTopologyNode *This,
        IMFTopologyNode *node);

    END_INTERFACE
} IMFTopologyNodeVtbl;

interface IMFTopologyNode {
    CONST_VTBL IMFTopologyNodeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFTopologyNode_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFTopologyNode_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFTopologyNode_Release(This) (This)->lpVtbl->Release(This)
/*** IMFAttributes methods ***/
#define IMFTopologyNode_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
#define IMFTopologyNode_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
#define IMFTopologyNode_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
#define IMFTopologyNode_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
#define IMFTopologyNode_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
#define IMFTopologyNode_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
#define IMFTopologyNode_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
#define IMFTopologyNode_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
#define IMFTopologyNode_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
#define IMFTopologyNode_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
#define IMFTopologyNode_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
#define IMFTopologyNode_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
#define IMFTopologyNode_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
#define IMFTopologyNode_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
#define IMFTopologyNode_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
#define IMFTopologyNode_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
#define IMFTopologyNode_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
#define IMFTopologyNode_DeleteAllItems(This) (This)->lpVtbl->DeleteAllItems(This)
#define IMFTopologyNode_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
#define IMFTopologyNode_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
#define IMFTopologyNode_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
#define IMFTopologyNode_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
#define IMFTopologyNode_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
#define IMFTopologyNode_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
#define IMFTopologyNode_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
#define IMFTopologyNode_LockStore(This) (This)->lpVtbl->LockStore(This)
#define IMFTopologyNode_UnlockStore(This) (This)->lpVtbl->UnlockStore(This)
#define IMFTopologyNode_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
#define IMFTopologyNode_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
#define IMFTopologyNode_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
/*** IMFTopologyNode methods ***/
#define IMFTopologyNode_SetObject(This,object) (This)->lpVtbl->SetObject(This,object)
#define IMFTopologyNode_GetObject(This,object) (This)->lpVtbl->GetObject(This,object)
#define IMFTopologyNode_GetNodeType(This,type) (This)->lpVtbl->GetNodeType(This,type)
#define IMFTopologyNode_GetTopoNodeID(This,id) (This)->lpVtbl->GetTopoNodeID(This,id)
#define IMFTopologyNode_SetTopoNodeID(This,id) (This)->lpVtbl->SetTopoNodeID(This,id)
#define IMFTopologyNode_GetInputCount(This,count) (This)->lpVtbl->GetInputCount(This,count)
#define IMFTopologyNode_GetOutputCount(This,count) (This)->lpVtbl->GetOutputCount(This,count)
#define IMFTopologyNode_ConnectOutput(This,output_index,node,input_index) (This)->lpVtbl->ConnectOutput(This,output_index,node,input_index)
#define IMFTopologyNode_DisconnectOutput(This,index) (This)->lpVtbl->DisconnectOutput(This,index)
#define IMFTopologyNode_GetInput(This,input_index,node,output_index) (This)->lpVtbl->GetInput(This,input_index,node,output_index)
#define IMFTopologyNode_GetOutput(This,output_index,node,input_index) (This)->lpVtbl->GetOutput(This,output_index,node,input_index)
#define IMFTopologyNode_SetOutputPrefType(This,index,type) (This)->lpVtbl->SetOutputPrefType(This,index,type)
#define IMFTopologyNode_GetOutputPrefType(This,output_index,type) (This)->lpVtbl->GetOutputPrefType(This,output_index,type)
#define IMFTopologyNode_SetInputPrefType(This,index,type) (This)->lpVtbl->SetInputPrefType(This,index,type)
#define IMFTopologyNode_GetInputPrefType(This,index,type) (This)->lpVtbl->GetInputPrefType(This,index,type)
#define IMFTopologyNode_CloneFrom(This,node) (This)->lpVtbl->CloneFrom(This,node)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFTopologyNode_QueryInterface(IMFTopologyNode* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFTopologyNode_AddRef(IMFTopologyNode* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFTopologyNode_Release(IMFTopologyNode* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFAttributes methods ***/
static FORCEINLINE HRESULT IMFTopologyNode_GetItem(IMFTopologyNode* This,REFGUID guidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItem(This,guidKey,pValue);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetItemType(IMFTopologyNode* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
    return This->lpVtbl->GetItemType(This,guidKey,pType);
}
static FORCEINLINE HRESULT IMFTopologyNode_CompareItem(IMFTopologyNode* This,REFGUID guidKey,REFPROPVARIANT Value,BOOL *pbResult) {
    return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
}
static FORCEINLINE HRESULT IMFTopologyNode_Compare(IMFTopologyNode* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,BOOL *pbResult) {
    return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetUINT32(IMFTopologyNode* This,REFGUID guidKey,UINT32 *punValue) {
    return This->lpVtbl->GetUINT32(This,guidKey,punValue);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetUINT64(IMFTopologyNode* This,REFGUID guidKey,UINT64 *punValue) {
    return This->lpVtbl->GetUINT64(This,guidKey,punValue);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetDouble(IMFTopologyNode* This,REFGUID guidKey,double *pfValue) {
    return This->lpVtbl->GetDouble(This,guidKey,pfValue);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetGUID(IMFTopologyNode* This,REFGUID guidKey,GUID *pguidValue) {
    return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetStringLength(IMFTopologyNode* This,REFGUID guidKey,UINT32 *pcchLength) {
    return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetString(IMFTopologyNode* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
    return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetAllocatedString(IMFTopologyNode* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
    return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetBlobSize(IMFTopologyNode* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetBlob(IMFTopologyNode* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetAllocatedBlob(IMFTopologyNode* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
    return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetUnknown(IMFTopologyNode* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
    return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
}
static FORCEINLINE HRESULT IMFTopologyNode_SetItem(IMFTopologyNode* This,REFGUID guidKey,REFPROPVARIANT Value) {
    return This->lpVtbl->SetItem(This,guidKey,Value);
}
static FORCEINLINE HRESULT IMFTopologyNode_DeleteItem(IMFTopologyNode* This,REFGUID guidKey) {
    return This->lpVtbl->DeleteItem(This,guidKey);
}
static FORCEINLINE HRESULT IMFTopologyNode_DeleteAllItems(IMFTopologyNode* This) {
    return This->lpVtbl->DeleteAllItems(This);
}
static FORCEINLINE HRESULT IMFTopologyNode_SetUINT32(IMFTopologyNode* This,REFGUID guidKey,UINT32 unValue) {
    return This->lpVtbl->SetUINT32(This,guidKey,unValue);
}
static FORCEINLINE HRESULT IMFTopologyNode_SetUINT64(IMFTopologyNode* This,REFGUID guidKey,UINT64 unValue) {
    return This->lpVtbl->SetUINT64(This,guidKey,unValue);
}
static FORCEINLINE HRESULT IMFTopologyNode_SetDouble(IMFTopologyNode* This,REFGUID guidKey,double fValue) {
    return This->lpVtbl->SetDouble(This,guidKey,fValue);
}
static FORCEINLINE HRESULT IMFTopologyNode_SetGUID(IMFTopologyNode* This,REFGUID guidKey,REFGUID guidValue) {
    return This->lpVtbl->SetGUID(This,guidKey,guidValue);
}
static FORCEINLINE HRESULT IMFTopologyNode_SetString(IMFTopologyNode* This,REFGUID guidKey,LPCWSTR wszValue) {
    return This->lpVtbl->SetString(This,guidKey,wszValue);
}
static FORCEINLINE HRESULT IMFTopologyNode_SetBlob(IMFTopologyNode* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
    return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
}
static FORCEINLINE HRESULT IMFTopologyNode_SetUnknown(IMFTopologyNode* This,REFGUID guidKey,IUnknown *pUnknown) {
    return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
}
static FORCEINLINE HRESULT IMFTopologyNode_LockStore(IMFTopologyNode* This) {
    return This->lpVtbl->LockStore(This);
}
static FORCEINLINE HRESULT IMFTopologyNode_UnlockStore(IMFTopologyNode* This) {
    return This->lpVtbl->UnlockStore(This);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetCount(IMFTopologyNode* This,UINT32 *pcItems) {
    return This->lpVtbl->GetCount(This,pcItems);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetItemByIndex(IMFTopologyNode* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
}
static FORCEINLINE HRESULT IMFTopologyNode_CopyAllItems(IMFTopologyNode* This,IMFAttributes *pDest) {
    return This->lpVtbl->CopyAllItems(This,pDest);
}
/*** IMFTopologyNode methods ***/
static FORCEINLINE HRESULT IMFTopologyNode_SetObject(IMFTopologyNode* This,IUnknown *object) {
    return This->lpVtbl->SetObject(This,object);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetObject(IMFTopologyNode* This,IUnknown **object) {
    return This->lpVtbl->GetObject(This,object);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetNodeType(IMFTopologyNode* This,MF_TOPOLOGY_TYPE *type) {
    return This->lpVtbl->GetNodeType(This,type);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetTopoNodeID(IMFTopologyNode* This,TOPOID *id) {
    return This->lpVtbl->GetTopoNodeID(This,id);
}
static FORCEINLINE HRESULT IMFTopologyNode_SetTopoNodeID(IMFTopologyNode* This,TOPOID id) {
    return This->lpVtbl->SetTopoNodeID(This,id);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetInputCount(IMFTopologyNode* This,DWORD *count) {
    return This->lpVtbl->GetInputCount(This,count);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetOutputCount(IMFTopologyNode* This,DWORD *count) {
    return This->lpVtbl->GetOutputCount(This,count);
}
static FORCEINLINE HRESULT IMFTopologyNode_ConnectOutput(IMFTopologyNode* This,DWORD output_index,IMFTopologyNode *node,DWORD input_index) {
    return This->lpVtbl->ConnectOutput(This,output_index,node,input_index);
}
static FORCEINLINE HRESULT IMFTopologyNode_DisconnectOutput(IMFTopologyNode* This,DWORD index) {
    return This->lpVtbl->DisconnectOutput(This,index);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetInput(IMFTopologyNode* This,DWORD input_index,IMFTopologyNode **node,DWORD *output_index) {
    return This->lpVtbl->GetInput(This,input_index,node,output_index);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetOutput(IMFTopologyNode* This,DWORD output_index,IMFTopologyNode **node,DWORD *input_index) {
    return This->lpVtbl->GetOutput(This,output_index,node,input_index);
}
static FORCEINLINE HRESULT IMFTopologyNode_SetOutputPrefType(IMFTopologyNode* This,DWORD index,IMFMediaType *type) {
    return This->lpVtbl->SetOutputPrefType(This,index,type);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetOutputPrefType(IMFTopologyNode* This,DWORD output_index,IMFMediaType **type) {
    return This->lpVtbl->GetOutputPrefType(This,output_index,type);
}
static FORCEINLINE HRESULT IMFTopologyNode_SetInputPrefType(IMFTopologyNode* This,DWORD index,IMFMediaType *type) {
    return This->lpVtbl->SetInputPrefType(This,index,type);
}
static FORCEINLINE HRESULT IMFTopologyNode_GetInputPrefType(IMFTopologyNode* This,DWORD index,IMFMediaType **type) {
    return This->lpVtbl->GetInputPrefType(This,index,type);
}
static FORCEINLINE HRESULT IMFTopologyNode_CloneFrom(IMFTopologyNode* This,IMFTopologyNode *node) {
    return This->lpVtbl->CloneFrom(This,node);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMFTopologyNode_RemoteGetOutputPrefType_Proxy(
    IMFTopologyNode* This,
    DWORD index,
    DWORD *length,
    BYTE **data);
void __RPC_STUB IMFTopologyNode_RemoteGetOutputPrefType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFTopologyNode_RemoteGetInputPrefType_Proxy(
    IMFTopologyNode* This,
    DWORD index,
    DWORD *length,
    BYTE **data);
void __RPC_STUB IMFTopologyNode_RemoteGetInputPrefType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMFTopologyNode_GetOutputPrefType_Proxy(
    IMFTopologyNode* This,
    DWORD output_index,
    IMFMediaType **type);
HRESULT __RPC_STUB IMFTopologyNode_GetOutputPrefType_Stub(
    IMFTopologyNode* This,
    DWORD index,
    DWORD *length,
    BYTE **data);
HRESULT CALLBACK IMFTopologyNode_GetInputPrefType_Proxy(
    IMFTopologyNode* This,
    DWORD index,
    IMFMediaType **type);
HRESULT __RPC_STUB IMFTopologyNode_GetInputPrefType_Stub(
    IMFTopologyNode* This,
    DWORD index,
    DWORD *length,
    BYTE **data);

#endif  /* __IMFTopologyNode_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFTopology interface
 */
#ifndef __IMFTopology_INTERFACE_DEFINED__
#define __IMFTopology_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFTopology, 0x83cf873a, 0xf6da, 0x4bc8, 0x82,0x3f, 0xba,0xcf,0xd5,0x5d,0xc4,0x33);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("83cf873a-f6da-4bc8-823f-bacfd55dc433")
IMFTopology : public IMFAttributes
{
    virtual HRESULT STDMETHODCALLTYPE GetTopologyID(
        TOPOID *id) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddNode(
        IMFTopologyNode *node) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveNode(
        IMFTopologyNode *node) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetNodeCount(
        WORD *nodes) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetNode(
        WORD index,
        IMFTopologyNode **node) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clear(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CloneFrom(
        IMFTopology *topology) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetNodeByID(
        TOPOID id,
        IMFTopologyNode **node) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSourceNodeCollection(
        IMFCollection **collection) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputNodeCollection(
        IMFCollection **collection) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFTopology, 0x83cf873a, 0xf6da, 0x4bc8, 0x82,0x3f, 0xba,0xcf,0xd5,0x5d,0xc4,0x33)
#endif
#else
typedef struct IMFTopologyVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFAttributes methods ***/
    HRESULT (STDMETHODCALLTYPE *GetItem)(
        IMFTopology *This,
        REFGUID guidKey,
        PROPVARIANT *pValue);

    HRESULT (STDMETHODCALLTYPE *GetItemType)(
        IMFTopology *This,
        REFGUID guidKey,
        MF_ATTRIBUTE_TYPE *pType);

    HRESULT (STDMETHODCALLTYPE *CompareItem)(
        IMFTopology *This,
        REFGUID guidKey,
        REFPROPVARIANT Value,
        BOOL *pbResult);

    HRESULT (STDMETHODCALLTYPE *Compare)(
        IMFTopology *This,
        IMFAttributes *pTheirs,
        MF_ATTRIBUTES_MATCH_TYPE MatchType,
        BOOL *pbResult);

    HRESULT (STDMETHODCALLTYPE *GetUINT32)(
        IMFTopology *This,
        REFGUID guidKey,
        UINT32 *punValue);

    HRESULT (STDMETHODCALLTYPE *GetUINT64)(
        IMFTopology *This,
        REFGUID guidKey,
        UINT64 *punValue);

    HRESULT (STDMETHODCALLTYPE *GetDouble)(
        IMFTopology *This,
        REFGUID guidKey,
        double *pfValue);

    HRESULT (STDMETHODCALLTYPE *GetGUID)(
        IMFTopology *This,
        REFGUID guidKey,
        GUID *pguidValue);

    HRESULT (STDMETHODCALLTYPE *GetStringLength)(
        IMFTopology *This,
        REFGUID guidKey,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetString)(
        IMFTopology *This,
        REFGUID guidKey,
        LPWSTR pwszValue,
        UINT32 cchBufSize,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetAllocatedString)(
        IMFTopology *This,
        REFGUID guidKey,
        LPWSTR *ppwszValue,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetBlobSize)(
        IMFTopology *This,
        REFGUID guidKey,
        UINT32 *pcbBlobSize);

    HRESULT (STDMETHODCALLTYPE *GetBlob)(
        IMFTopology *This,
        REFGUID guidKey,
        UINT8 *pBuf,
        UINT32 cbBufSize,
        UINT32 *pcbBlobSize);

    HRESULT (STDMETHODCALLTYPE *GetAllocatedBlob)(
        IMFTopology *This,
        REFGUID guidKey,
        UINT8 **ppBuf,
        UINT32 *pcbSize);

    HRESULT (STDMETHODCALLTYPE *GetUnknown)(
        IMFTopology *This,
        REFGUID guidKey,
        REFIID riid,
        LPVOID *ppv);

    HRESULT (STDMETHODCALLTYPE *SetItem)(
        IMFTopology *This,
        REFGUID guidKey,
        REFPROPVARIANT Value);

    HRESULT (STDMETHODCALLTYPE *DeleteItem)(
        IMFTopology *This,
        REFGUID guidKey);

    HRESULT (STDMETHODCALLTYPE *DeleteAllItems)(
        IMFTopology *This);

    HRESULT (STDMETHODCALLTYPE *SetUINT32)(
        IMFTopology *This,
        REFGUID guidKey,
        UINT32 unValue);

    HRESULT (STDMETHODCALLTYPE *SetUINT64)(
        IMFTopology *This,
        REFGUID guidKey,
        UINT64 unValue);

    HRESULT (STDMETHODCALLTYPE *SetDouble)(
        IMFTopology *This,
        REFGUID guidKey,
        double fValue);

    HRESULT (STDMETHODCALLTYPE *SetGUID)(
        IMFTopology *This,
        REFGUID guidKey,
        REFGUID guidValue);

    HRESULT (STDMETHODCALLTYPE *SetString)(
        IMFTopology *This,
        REFGUID guidKey,
        LPCWSTR wszValue);

    HRESULT (STDMETHODCALLTYPE *SetBlob)(
        IMFTopology *This,
        REFGUID guidKey,
        const UINT8 *pBuf,
        UINT32 cbBufSize);

    HRESULT (STDMETHODCALLTYPE *SetUnknown)(
        IMFTopology *This,
        REFGUID guidKey,
        IUnknown *pUnknown);

    HRESULT (STDMETHODCALLTYPE *LockStore)(
        IMFTopology *This);

    HRESULT (STDMETHODCALLTYPE *UnlockStore)(
        IMFTopology *This);

    HRESULT (STDMETHODCALLTYPE *GetCount)(
        IMFTopology *This,
        UINT32 *pcItems);

    HRESULT (STDMETHODCALLTYPE *GetItemByIndex)(
        IMFTopology *This,
        UINT32 unIndex,
        GUID *pguidKey,
        PROPVARIANT *pValue);

    HRESULT (STDMETHODCALLTYPE *CopyAllItems)(
        IMFTopology *This,
        IMFAttributes *pDest);

    /*** IMFTopology methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTopologyID)(
        IMFTopology *This,
        TOPOID *id);

    HRESULT (STDMETHODCALLTYPE *AddNode)(
        IMFTopology *This,
        IMFTopologyNode *node);

    HRESULT (STDMETHODCALLTYPE *RemoveNode)(
        IMFTopology *This,
        IMFTopologyNode *node);

    HRESULT (STDMETHODCALLTYPE *GetNodeCount)(
        IMFTopology *This,
        WORD *nodes);

    HRESULT (STDMETHODCALLTYPE *GetNode)(
        IMFTopology *This,
        WORD index,
        IMFTopologyNode **node);

    HRESULT (STDMETHODCALLTYPE *Clear)(
        IMFTopology *This);

    HRESULT (STDMETHODCALLTYPE *CloneFrom)(
        IMFTopology *This,
        IMFTopology *topology);

    HRESULT (STDMETHODCALLTYPE *GetNodeByID)(
        IMFTopology *This,
        TOPOID id,
        IMFTopologyNode **node);

    HRESULT (STDMETHODCALLTYPE *GetSourceNodeCollection)(
        IMFTopology *This,
        IMFCollection **collection);

    HRESULT (STDMETHODCALLTYPE *GetOutputNodeCollection)(
        IMFTopology *This,
        IMFCollection **collection);

    END_INTERFACE
} IMFTopologyVtbl;

interface IMFTopology {
    CONST_VTBL IMFTopologyVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFTopology_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFTopology_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFTopology_Release(This) (This)->lpVtbl->Release(This)
/*** IMFAttributes methods ***/
#define IMFTopology_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
#define IMFTopology_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
#define IMFTopology_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
#define IMFTopology_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
#define IMFTopology_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
#define IMFTopology_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
#define IMFTopology_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
#define IMFTopology_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
#define IMFTopology_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
#define IMFTopology_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
#define IMFTopology_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
#define IMFTopology_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
#define IMFTopology_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
#define IMFTopology_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
#define IMFTopology_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
#define IMFTopology_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
#define IMFTopology_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
#define IMFTopology_DeleteAllItems(This) (This)->lpVtbl->DeleteAllItems(This)
#define IMFTopology_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
#define IMFTopology_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
#define IMFTopology_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
#define IMFTopology_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
#define IMFTopology_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
#define IMFTopology_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
#define IMFTopology_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
#define IMFTopology_LockStore(This) (This)->lpVtbl->LockStore(This)
#define IMFTopology_UnlockStore(This) (This)->lpVtbl->UnlockStore(This)
#define IMFTopology_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
#define IMFTopology_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
#define IMFTopology_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
/*** IMFTopology methods ***/
#define IMFTopology_GetTopologyID(This,id) (This)->lpVtbl->GetTopologyID(This,id)
#define IMFTopology_AddNode(This,node) (This)->lpVtbl->AddNode(This,node)
#define IMFTopology_RemoveNode(This,node) (This)->lpVtbl->RemoveNode(This,node)
#define IMFTopology_GetNodeCount(This,nodes) (This)->lpVtbl->GetNodeCount(This,nodes)
#define IMFTopology_GetNode(This,index,node) (This)->lpVtbl->GetNode(This,index,node)
#define IMFTopology_Clear(This) (This)->lpVtbl->Clear(This)
#define IMFTopology_CloneFrom(This,topology) (This)->lpVtbl->CloneFrom(This,topology)
#define IMFTopology_GetNodeByID(This,id,node) (This)->lpVtbl->GetNodeByID(This,id,node)
#define IMFTopology_GetSourceNodeCollection(This,collection) (This)->lpVtbl->GetSourceNodeCollection(This,collection)
#define IMFTopology_GetOutputNodeCollection(This,collection) (This)->lpVtbl->GetOutputNodeCollection(This,collection)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFTopology_QueryInterface(IMFTopology* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFTopology_AddRef(IMFTopology* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFTopology_Release(IMFTopology* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFAttributes methods ***/
static FORCEINLINE HRESULT IMFTopology_GetItem(IMFTopology* This,REFGUID guidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItem(This,guidKey,pValue);
}
static FORCEINLINE HRESULT IMFTopology_GetItemType(IMFTopology* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
    return This->lpVtbl->GetItemType(This,guidKey,pType);
}
static FORCEINLINE HRESULT IMFTopology_CompareItem(IMFTopology* This,REFGUID guidKey,REFPROPVARIANT Value,BOOL *pbResult) {
    return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
}
static FORCEINLINE HRESULT IMFTopology_Compare(IMFTopology* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,BOOL *pbResult) {
    return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
}
static FORCEINLINE HRESULT IMFTopology_GetUINT32(IMFTopology* This,REFGUID guidKey,UINT32 *punValue) {
    return This->lpVtbl->GetUINT32(This,guidKey,punValue);
}
static FORCEINLINE HRESULT IMFTopology_GetUINT64(IMFTopology* This,REFGUID guidKey,UINT64 *punValue) {
    return This->lpVtbl->GetUINT64(This,guidKey,punValue);
}
static FORCEINLINE HRESULT IMFTopology_GetDouble(IMFTopology* This,REFGUID guidKey,double *pfValue) {
    return This->lpVtbl->GetDouble(This,guidKey,pfValue);
}
static FORCEINLINE HRESULT IMFTopology_GetGUID(IMFTopology* This,REFGUID guidKey,GUID *pguidValue) {
    return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
}
static FORCEINLINE HRESULT IMFTopology_GetStringLength(IMFTopology* This,REFGUID guidKey,UINT32 *pcchLength) {
    return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
}
static FORCEINLINE HRESULT IMFTopology_GetString(IMFTopology* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
    return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
}
static FORCEINLINE HRESULT IMFTopology_GetAllocatedString(IMFTopology* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
    return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
}
static FORCEINLINE HRESULT IMFTopology_GetBlobSize(IMFTopology* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
}
static FORCEINLINE HRESULT IMFTopology_GetBlob(IMFTopology* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
}
static FORCEINLINE HRESULT IMFTopology_GetAllocatedBlob(IMFTopology* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
    return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
}
static FORCEINLINE HRESULT IMFTopology_GetUnknown(IMFTopology* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
    return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
}
static FORCEINLINE HRESULT IMFTopology_SetItem(IMFTopology* This,REFGUID guidKey,REFPROPVARIANT Value) {
    return This->lpVtbl->SetItem(This,guidKey,Value);
}
static FORCEINLINE HRESULT IMFTopology_DeleteItem(IMFTopology* This,REFGUID guidKey) {
    return This->lpVtbl->DeleteItem(This,guidKey);
}
static FORCEINLINE HRESULT IMFTopology_DeleteAllItems(IMFTopology* This) {
    return This->lpVtbl->DeleteAllItems(This);
}
static FORCEINLINE HRESULT IMFTopology_SetUINT32(IMFTopology* This,REFGUID guidKey,UINT32 unValue) {
    return This->lpVtbl->SetUINT32(This,guidKey,unValue);
}
static FORCEINLINE HRESULT IMFTopology_SetUINT64(IMFTopology* This,REFGUID guidKey,UINT64 unValue) {
    return This->lpVtbl->SetUINT64(This,guidKey,unValue);
}
static FORCEINLINE HRESULT IMFTopology_SetDouble(IMFTopology* This,REFGUID guidKey,double fValue) {
    return This->lpVtbl->SetDouble(This,guidKey,fValue);
}
static FORCEINLINE HRESULT IMFTopology_SetGUID(IMFTopology* This,REFGUID guidKey,REFGUID guidValue) {
    return This->lpVtbl->SetGUID(This,guidKey,guidValue);
}
static FORCEINLINE HRESULT IMFTopology_SetString(IMFTopology* This,REFGUID guidKey,LPCWSTR wszValue) {
    return This->lpVtbl->SetString(This,guidKey,wszValue);
}
static FORCEINLINE HRESULT IMFTopology_SetBlob(IMFTopology* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
    return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
}
static FORCEINLINE HRESULT IMFTopology_SetUnknown(IMFTopology* This,REFGUID guidKey,IUnknown *pUnknown) {
    return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
}
static FORCEINLINE HRESULT IMFTopology_LockStore(IMFTopology* This) {
    return This->lpVtbl->LockStore(This);
}
static FORCEINLINE HRESULT IMFTopology_UnlockStore(IMFTopology* This) {
    return This->lpVtbl->UnlockStore(This);
}
static FORCEINLINE HRESULT IMFTopology_GetCount(IMFTopology* This,UINT32 *pcItems) {
    return This->lpVtbl->GetCount(This,pcItems);
}
static FORCEINLINE HRESULT IMFTopology_GetItemByIndex(IMFTopology* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
}
static FORCEINLINE HRESULT IMFTopology_CopyAllItems(IMFTopology* This,IMFAttributes *pDest) {
    return This->lpVtbl->CopyAllItems(This,pDest);
}
/*** IMFTopology methods ***/
static FORCEINLINE HRESULT IMFTopology_GetTopologyID(IMFTopology* This,TOPOID *id) {
    return This->lpVtbl->GetTopologyID(This,id);
}
static FORCEINLINE HRESULT IMFTopology_AddNode(IMFTopology* This,IMFTopologyNode *node) {
    return This->lpVtbl->AddNode(This,node);
}
static FORCEINLINE HRESULT IMFTopology_RemoveNode(IMFTopology* This,IMFTopologyNode *node) {
    return This->lpVtbl->RemoveNode(This,node);
}
static FORCEINLINE HRESULT IMFTopology_GetNodeCount(IMFTopology* This,WORD *nodes) {
    return This->lpVtbl->GetNodeCount(This,nodes);
}
static FORCEINLINE HRESULT IMFTopology_GetNode(IMFTopology* This,WORD index,IMFTopologyNode **node) {
    return This->lpVtbl->GetNode(This,index,node);
}
static FORCEINLINE HRESULT IMFTopology_Clear(IMFTopology* This) {
    return This->lpVtbl->Clear(This);
}
static FORCEINLINE HRESULT IMFTopology_CloneFrom(IMFTopology* This,IMFTopology *topology) {
    return This->lpVtbl->CloneFrom(This,topology);
}
static FORCEINLINE HRESULT IMFTopology_GetNodeByID(IMFTopology* This,TOPOID id,IMFTopologyNode **node) {
    return This->lpVtbl->GetNodeByID(This,id,node);
}
static FORCEINLINE HRESULT IMFTopology_GetSourceNodeCollection(IMFTopology* This,IMFCollection **collection) {
    return This->lpVtbl->GetSourceNodeCollection(This,collection);
}
static FORCEINLINE HRESULT IMFTopology_GetOutputNodeCollection(IMFTopology* This,IMFCollection **collection) {
    return This->lpVtbl->GetOutputNodeCollection(This,collection);
}
#endif
#endif

#endif


#endif  /* __IMFTopology_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFMediaSession interface
 */
#ifndef __IMFMediaSession_INTERFACE_DEFINED__
#define __IMFMediaSession_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFMediaSession, 0x90377834, 0x21d0, 0x4dee, 0x82,0x14, 0xba,0x2e,0x3e,0x6c,0x11,0x27);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("90377834-21d0-4dee-8214-ba2e3e6c1127")
IMFMediaSession : public IMFMediaEventGenerator
{
    virtual HRESULT STDMETHODCALLTYPE SetTopology(
        DWORD flags,
        IMFTopology *topology) = 0;

    virtual HRESULT STDMETHODCALLTYPE ClearTopologies(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Start(
        const GUID *format,
        const PROPVARIANT *start) = 0;

    virtual HRESULT STDMETHODCALLTYPE Pause(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Stop(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Close(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Shutdown(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetClock(
        IMFClock **clock) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSessionCapabilities(
        DWORD *caps) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFullTopology(
        DWORD flags,
        TOPOID id,
        IMFTopology **topology) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFMediaSession, 0x90377834, 0x21d0, 0x4dee, 0x82,0x14, 0xba,0x2e,0x3e,0x6c,0x11,0x27)
#endif
#else
typedef struct IMFMediaSessionVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFMediaEventGenerator methods ***/
    HRESULT (STDMETHODCALLTYPE *GetEvent)(
        IMFMediaSession *This,
        DWORD dwFlags,
        IMFMediaEvent **ppEvent);

    HRESULT (STDMETHODCALLTYPE *BeginGetEvent)(
        IMFMediaSession *This,
        IMFAsyncCallback *pCallback,
        IUnknown *punkState);

    HRESULT (STDMETHODCALLTYPE *EndGetEvent)(
        IMFMediaSession *This,
        IMFAsyncResult *pResult,
        IMFMediaEvent **ppEvent);

    HRESULT (STDMETHODCALLTYPE *QueueEvent)(
        IMFMediaSession *This,
        MediaEventType met,
        REFGUID guidExtendedType,
        HRESULT hrStatus,
        const PROPVARIANT *pvValue);

    /*** IMFMediaSession methods ***/
    HRESULT (STDMETHODCALLTYPE *SetTopology)(
        IMFMediaSession *This,
        DWORD flags,
        IMFTopology *topology);

    HRESULT (STDMETHODCALLTYPE *ClearTopologies)(
        IMFMediaSession *This);

    HRESULT (STDMETHODCALLTYPE *Start)(
        IMFMediaSession *This,
        const GUID *format,
        const PROPVARIANT *start);

    HRESULT (STDMETHODCALLTYPE *Pause)(
        IMFMediaSession *This);

    HRESULT (STDMETHODCALLTYPE *Stop)(
        IMFMediaSession *This);

    HRESULT (STDMETHODCALLTYPE *Close)(
        IMFMediaSession *This);

    HRESULT (STDMETHODCALLTYPE *Shutdown)(
        IMFMediaSession *This);

    HRESULT (STDMETHODCALLTYPE *GetClock)(
        IMFMediaSession *This,
        IMFClock **clock);

    HRESULT (STDMETHODCALLTYPE *GetSessionCapabilities)(
        IMFMediaSession *This,
        DWORD *caps);

    HRESULT (STDMETHODCALLTYPE *GetFullTopology)(
        IMFMediaSession *This,
        DWORD flags,
        TOPOID id,
        IMFTopology **topology);

    END_INTERFACE
} IMFMediaSessionVtbl;

interface IMFMediaSession {
    CONST_VTBL IMFMediaSessionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFMediaSession_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFMediaSession_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFMediaSession_Release(This) (This)->lpVtbl->Release(This)
/*** IMFMediaEventGenerator methods ***/
#define IMFMediaSession_GetEvent(This,dwFlags,ppEvent) (This)->lpVtbl->GetEvent(This,dwFlags,ppEvent)
#define IMFMediaSession_BeginGetEvent(This,pCallback,punkState) (This)->lpVtbl->BeginGetEvent(This,pCallback,punkState)
#define IMFMediaSession_EndGetEvent(This,pResult,ppEvent) (This)->lpVtbl->EndGetEvent(This,pResult,ppEvent)
#define IMFMediaSession_QueueEvent(This,met,guidExtendedType,hrStatus,pvValue) (This)->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue)
/*** IMFMediaSession methods ***/
#define IMFMediaSession_SetTopology(This,flags,topology) (This)->lpVtbl->SetTopology(This,flags,topology)
#define IMFMediaSession_ClearTopologies(This) (This)->lpVtbl->ClearTopologies(This)
#define IMFMediaSession_Start(This,format,start) (This)->lpVtbl->Start(This,format,start)
#define IMFMediaSession_Pause(This) (This)->lpVtbl->Pause(This)
#define IMFMediaSession_Stop(This) (This)->lpVtbl->Stop(This)
#define IMFMediaSession_Close(This) (This)->lpVtbl->Close(This)
#define IMFMediaSession_Shutdown(This) (This)->lpVtbl->Shutdown(This)
#define IMFMediaSession_GetClock(This,clock) (This)->lpVtbl->GetClock(This,clock)
#define IMFMediaSession_GetSessionCapabilities(This,caps) (This)->lpVtbl->GetSessionCapabilities(This,caps)
#define IMFMediaSession_GetFullTopology(This,flags,id,topology) (This)->lpVtbl->GetFullTopology(This,flags,id,topology)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFMediaSession_QueryInterface(IMFMediaSession* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFMediaSession_AddRef(IMFMediaSession* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFMediaSession_Release(IMFMediaSession* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFMediaEventGenerator methods ***/
static FORCEINLINE HRESULT IMFMediaSession_GetEvent(IMFMediaSession* This,DWORD dwFlags,IMFMediaEvent **ppEvent) {
    return This->lpVtbl->GetEvent(This,dwFlags,ppEvent);
}
static FORCEINLINE HRESULT IMFMediaSession_BeginGetEvent(IMFMediaSession* This,IMFAsyncCallback *pCallback,IUnknown *punkState) {
    return This->lpVtbl->BeginGetEvent(This,pCallback,punkState);
}
static FORCEINLINE HRESULT IMFMediaSession_EndGetEvent(IMFMediaSession* This,IMFAsyncResult *pResult,IMFMediaEvent **ppEvent) {
    return This->lpVtbl->EndGetEvent(This,pResult,ppEvent);
}
static FORCEINLINE HRESULT IMFMediaSession_QueueEvent(IMFMediaSession* This,MediaEventType met,REFGUID guidExtendedType,HRESULT hrStatus,const PROPVARIANT *pvValue) {
    return This->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue);
}
/*** IMFMediaSession methods ***/
static FORCEINLINE HRESULT IMFMediaSession_SetTopology(IMFMediaSession* This,DWORD flags,IMFTopology *topology) {
    return This->lpVtbl->SetTopology(This,flags,topology);
}
static FORCEINLINE HRESULT IMFMediaSession_ClearTopologies(IMFMediaSession* This) {
    return This->lpVtbl->ClearTopologies(This);
}
static FORCEINLINE HRESULT IMFMediaSession_Start(IMFMediaSession* This,const GUID *format,const PROPVARIANT *start) {
    return This->lpVtbl->Start(This,format,start);
}
static FORCEINLINE HRESULT IMFMediaSession_Pause(IMFMediaSession* This) {
    return This->lpVtbl->Pause(This);
}
static FORCEINLINE HRESULT IMFMediaSession_Stop(IMFMediaSession* This) {
    return This->lpVtbl->Stop(This);
}
static FORCEINLINE HRESULT IMFMediaSession_Close(IMFMediaSession* This) {
    return This->lpVtbl->Close(This);
}
static FORCEINLINE HRESULT IMFMediaSession_Shutdown(IMFMediaSession* This) {
    return This->lpVtbl->Shutdown(This);
}
static FORCEINLINE HRESULT IMFMediaSession_GetClock(IMFMediaSession* This,IMFClock **clock) {
    return This->lpVtbl->GetClock(This,clock);
}
static FORCEINLINE HRESULT IMFMediaSession_GetSessionCapabilities(IMFMediaSession* This,DWORD *caps) {
    return This->lpVtbl->GetSessionCapabilities(This,caps);
}
static FORCEINLINE HRESULT IMFMediaSession_GetFullTopology(IMFMediaSession* This,DWORD flags,TOPOID id,IMFTopology **topology) {
    return This->lpVtbl->GetFullTopology(This,flags,id,topology);
}
#endif
#endif

#endif


#endif  /* __IMFMediaSession_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFSourceResolver interface
 */
#ifndef __IMFSourceResolver_INTERFACE_DEFINED__
#define __IMFSourceResolver_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFSourceResolver, 0xfbe5a32d, 0xa497, 0x4b61, 0xbb,0x85, 0x97,0xb1,0xa8,0x48,0xa6,0xe3);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("fbe5a32d-a497-4b61-bb85-97b1a848a6e3")
IMFSourceResolver : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE CreateObjectFromURL(
        const WCHAR *url,
        DWORD flags,
        IPropertyStore *props,
        MF_OBJECT_TYPE *obj_type,
        IUnknown **object) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateObjectFromByteStream(
        IMFByteStream *stream,
        const WCHAR *url,
        DWORD flags,
        IPropertyStore *props,
        MF_OBJECT_TYPE *obj_type,
        IUnknown **object) = 0;

    virtual HRESULT STDMETHODCALLTYPE BeginCreateObjectFromURL(
        const WCHAR *url,
        DWORD flags,
        IPropertyStore *props,
        IUnknown **cancel_cookie,
        IMFAsyncCallback *callback,
        IUnknown *unk_state) = 0;

    virtual HRESULT STDMETHODCALLTYPE EndCreateObjectFromURL(
        IMFAsyncResult *result,
        MF_OBJECT_TYPE *obj_type,
        IUnknown **object) = 0;

    virtual HRESULT STDMETHODCALLTYPE BeginCreateObjectFromByteStream(
        IMFByteStream *stream,
        const WCHAR *url,
        DWORD flags,
        IPropertyStore *props,
        IUnknown **cancel_cookie,
        IMFAsyncCallback *callback,
        IUnknown *unk_state) = 0;

    virtual HRESULT STDMETHODCALLTYPE EndCreateObjectFromByteStream(
        IMFAsyncResult *result,
        MF_OBJECT_TYPE *obj_type,
        IUnknown **object) = 0;

    virtual HRESULT STDMETHODCALLTYPE CanceObjectCreation(
        IUnknown *cancel_cookie) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFSourceResolver, 0xfbe5a32d, 0xa497, 0x4b61, 0xbb,0x85, 0x97,0xb1,0xa8,0x48,0xa6,0xe3)
#endif
#else
typedef struct IMFSourceResolverVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFSourceResolver methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateObjectFromURL)(
        IMFSourceResolver *This,
        const WCHAR *url,
        DWORD flags,
        IPropertyStore *props,
        MF_OBJECT_TYPE *obj_type,
        IUnknown **object);

    HRESULT (STDMETHODCALLTYPE *CreateObjectFromByteStream)(
        IMFSourceResolver *This,
        IMFByteStream *stream,
        const WCHAR *url,
        DWORD flags,
        IPropertyStore *props,
        MF_OBJECT_TYPE *obj_type,
        IUnknown **object);

    HRESULT (STDMETHODCALLTYPE *BeginCreateObjectFromURL)(
        IMFSourceResolver *This,
        const WCHAR *url,
        DWORD flags,
        IPropertyStore *props,
        IUnknown **cancel_cookie,
        IMFAsyncCallback *callback,
        IUnknown *unk_state);

    HRESULT (STDMETHODCALLTYPE *EndCreateObjectFromURL)(
        IMFSourceResolver *This,
        IMFAsyncResult *result,
        MF_OBJECT_TYPE *obj_type,
        IUnknown **object);

    HRESULT (STDMETHODCALLTYPE *BeginCreateObjectFromByteStream)(
        IMFSourceResolver *This,
        IMFByteStream *stream,
        const WCHAR *url,
        DWORD flags,
        IPropertyStore *props,
        IUnknown **cancel_cookie,
        IMFAsyncCallback *callback,
        IUnknown *unk_state);

    HRESULT (STDMETHODCALLTYPE *EndCreateObjectFromByteStream)(
        IMFSourceResolver *This,
        IMFAsyncResult *result,
        MF_OBJECT_TYPE *obj_type,
        IUnknown **object);

    HRESULT (STDMETHODCALLTYPE *CanceObjectCreation)(
        IMFSourceResolver *This,
        IUnknown *cancel_cookie);

    END_INTERFACE
} IMFSourceResolverVtbl;

interface IMFSourceResolver {
    CONST_VTBL IMFSourceResolverVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFSourceResolver_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFSourceResolver_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFSourceResolver_Release(This) (This)->lpVtbl->Release(This)
/*** IMFSourceResolver methods ***/
#define IMFSourceResolver_CreateObjectFromURL(This,url,flags,props,obj_type,object) (This)->lpVtbl->CreateObjectFromURL(This,url,flags,props,obj_type,object)
#define IMFSourceResolver_CreateObjectFromByteStream(This,stream,url,flags,props,obj_type,object) (This)->lpVtbl->CreateObjectFromByteStream(This,stream,url,flags,props,obj_type,object)
#define IMFSourceResolver_BeginCreateObjectFromURL(This,url,flags,props,cancel_cookie,callback,unk_state) (This)->lpVtbl->BeginCreateObjectFromURL(This,url,flags,props,cancel_cookie,callback,unk_state)
#define IMFSourceResolver_EndCreateObjectFromURL(This,result,obj_type,object) (This)->lpVtbl->EndCreateObjectFromURL(This,result,obj_type,object)
#define IMFSourceResolver_BeginCreateObjectFromByteStream(This,stream,url,flags,props,cancel_cookie,callback,unk_state) (This)->lpVtbl->BeginCreateObjectFromByteStream(This,stream,url,flags,props,cancel_cookie,callback,unk_state)
#define IMFSourceResolver_EndCreateObjectFromByteStream(This,result,obj_type,object) (This)->lpVtbl->EndCreateObjectFromByteStream(This,result,obj_type,object)
#define IMFSourceResolver_CanceObjectCreation(This,cancel_cookie) (This)->lpVtbl->CanceObjectCreation(This,cancel_cookie)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFSourceResolver_QueryInterface(IMFSourceResolver* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFSourceResolver_AddRef(IMFSourceResolver* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFSourceResolver_Release(IMFSourceResolver* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFSourceResolver methods ***/
static FORCEINLINE HRESULT IMFSourceResolver_CreateObjectFromURL(IMFSourceResolver* This,const WCHAR *url,DWORD flags,IPropertyStore *props,MF_OBJECT_TYPE *obj_type,IUnknown **object) {
    return This->lpVtbl->CreateObjectFromURL(This,url,flags,props,obj_type,object);
}
static FORCEINLINE HRESULT IMFSourceResolver_CreateObjectFromByteStream(IMFSourceResolver* This,IMFByteStream *stream,const WCHAR *url,DWORD flags,IPropertyStore *props,MF_OBJECT_TYPE *obj_type,IUnknown **object) {
    return This->lpVtbl->CreateObjectFromByteStream(This,stream,url,flags,props,obj_type,object);
}
static FORCEINLINE HRESULT IMFSourceResolver_BeginCreateObjectFromURL(IMFSourceResolver* This,const WCHAR *url,DWORD flags,IPropertyStore *props,IUnknown **cancel_cookie,IMFAsyncCallback *callback,IUnknown *unk_state) {
    return This->lpVtbl->BeginCreateObjectFromURL(This,url,flags,props,cancel_cookie,callback,unk_state);
}
static FORCEINLINE HRESULT IMFSourceResolver_EndCreateObjectFromURL(IMFSourceResolver* This,IMFAsyncResult *result,MF_OBJECT_TYPE *obj_type,IUnknown **object) {
    return This->lpVtbl->EndCreateObjectFromURL(This,result,obj_type,object);
}
static FORCEINLINE HRESULT IMFSourceResolver_BeginCreateObjectFromByteStream(IMFSourceResolver* This,IMFByteStream *stream,const WCHAR *url,DWORD flags,IPropertyStore *props,IUnknown **cancel_cookie,IMFAsyncCallback *callback,IUnknown *unk_state) {
    return This->lpVtbl->BeginCreateObjectFromByteStream(This,stream,url,flags,props,cancel_cookie,callback,unk_state);
}
static FORCEINLINE HRESULT IMFSourceResolver_EndCreateObjectFromByteStream(IMFSourceResolver* This,IMFAsyncResult *result,MF_OBJECT_TYPE *obj_type,IUnknown **object) {
    return This->lpVtbl->EndCreateObjectFromByteStream(This,result,obj_type,object);
}
static FORCEINLINE HRESULT IMFSourceResolver_CanceObjectCreation(IMFSourceResolver* This,IUnknown *cancel_cookie) {
    return This->lpVtbl->CanceObjectCreation(This,cancel_cookie);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMFSourceResolver_RemoteBeginCreateObjectFromURL_Proxy(
    IMFSourceResolver* This,
    const WCHAR *url,
    DWORD flags,
    IPropertyStore *props,
    IMFRemoteAsyncCallback *callback);
void __RPC_STUB IMFSourceResolver_RemoteBeginCreateObjectFromURL_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFSourceResolver_RemoteEndCreateObjectFromURL_Proxy(
    IMFSourceResolver* This,
    IUnknown *result,
    MF_OBJECT_TYPE *obj_type,
    IUnknown **object);
void __RPC_STUB IMFSourceResolver_RemoteEndCreateObjectFromURL_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFSourceResolver_RemoteBeginCreateObjectFromByteStream_Proxy(
    IMFSourceResolver* This,
    IMFByteStream *stream,
    const WCHAR *url,
    DWORD flags,
    IPropertyStore *props,
    IMFRemoteAsyncCallback *callback);
void __RPC_STUB IMFSourceResolver_RemoteBeginCreateObjectFromByteStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFSourceResolver_RemoteEndCreateObjectFromByteStream_Proxy(
    IMFSourceResolver* This,
    IUnknown *result,
    MF_OBJECT_TYPE *obj_type,
    IUnknown **object);
void __RPC_STUB IMFSourceResolver_RemoteEndCreateObjectFromByteStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMFSourceResolver_BeginCreateObjectFromURL_Proxy(
    IMFSourceResolver* This,
    const WCHAR *url,
    DWORD flags,
    IPropertyStore *props,
    IUnknown **cancel_cookie,
    IMFAsyncCallback *callback,
    IUnknown *unk_state);
HRESULT __RPC_STUB IMFSourceResolver_BeginCreateObjectFromURL_Stub(
    IMFSourceResolver* This,
    const WCHAR *url,
    DWORD flags,
    IPropertyStore *props,
    IMFRemoteAsyncCallback *callback);
HRESULT CALLBACK IMFSourceResolver_EndCreateObjectFromURL_Proxy(
    IMFSourceResolver* This,
    IMFAsyncResult *result,
    MF_OBJECT_TYPE *obj_type,
    IUnknown **object);
HRESULT __RPC_STUB IMFSourceResolver_EndCreateObjectFromURL_Stub(
    IMFSourceResolver* This,
    IUnknown *result,
    MF_OBJECT_TYPE *obj_type,
    IUnknown **object);
HRESULT CALLBACK IMFSourceResolver_BeginCreateObjectFromByteStream_Proxy(
    IMFSourceResolver* This,
    IMFByteStream *stream,
    const WCHAR *url,
    DWORD flags,
    IPropertyStore *props,
    IUnknown **cancel_cookie,
    IMFAsyncCallback *callback,
    IUnknown *unk_state);
HRESULT __RPC_STUB IMFSourceResolver_BeginCreateObjectFromByteStream_Stub(
    IMFSourceResolver* This,
    IMFByteStream *stream,
    const WCHAR *url,
    DWORD flags,
    IPropertyStore *props,
    IMFRemoteAsyncCallback *callback);
HRESULT CALLBACK IMFSourceResolver_EndCreateObjectFromByteStream_Proxy(
    IMFSourceResolver* This,
    IMFAsyncResult *result,
    MF_OBJECT_TYPE *obj_type,
    IUnknown **object);
HRESULT __RPC_STUB IMFSourceResolver_EndCreateObjectFromByteStream_Stub(
    IMFSourceResolver* This,
    IUnknown *result,
    MF_OBJECT_TYPE *obj_type,
    IUnknown **object);

#endif  /* __IMFSourceResolver_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFMediaTypeHandler interface
 */
#ifndef __IMFMediaTypeHandler_INTERFACE_DEFINED__
#define __IMFMediaTypeHandler_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFMediaTypeHandler, 0xe93dcf6c, 0x4b07, 0x4e1e, 0x81,0x23, 0xaa,0x16,0xed,0x6e,0xad,0xf5);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("e93dcf6c-4b07-4e1e-8123-aa16ed6eadf5")
IMFMediaTypeHandler : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE IsMediaTypeSupported(
        IMFMediaType *in_type,
        IMFMediaType **out_type) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMediaTypeCount(
        DWORD *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMediaTypeByIndex(
        DWORD index,
        IMFMediaType **type) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetCurrentMediaType(
        IMFMediaType *type) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentMediaType(
        IMFMediaType **type) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMajorType(
        GUID *type) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFMediaTypeHandler, 0xe93dcf6c, 0x4b07, 0x4e1e, 0x81,0x23, 0xaa,0x16,0xed,0x6e,0xad,0xf5)
#endif
#else
typedef struct IMFMediaTypeHandlerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFMediaTypeHandler methods ***/
    HRESULT (STDMETHODCALLTYPE *IsMediaTypeSupported)(
        IMFMediaTypeHandler *This,
        IMFMediaType *in_type,
        IMFMediaType **out_type);

    HRESULT (STDMETHODCALLTYPE *GetMediaTypeCount)(
        IMFMediaTypeHandler *This,
        DWORD *count);

    HRESULT (STDMETHODCALLTYPE *GetMediaTypeByIndex)(
        IMFMediaTypeHandler *This,
        DWORD index,
        IMFMediaType **type);

    HRESULT (STDMETHODCALLTYPE *SetCurrentMediaType)(
        IMFMediaTypeHandler *This,
        IMFMediaType *type);

    HRESULT (STDMETHODCALLTYPE *GetCurrentMediaType)(
        IMFMediaTypeHandler *This,
        IMFMediaType **type);

    HRESULT (STDMETHODCALLTYPE *GetMajorType)(
        IMFMediaTypeHandler *This,
        GUID *type);

    END_INTERFACE
} IMFMediaTypeHandlerVtbl;

interface IMFMediaTypeHandler {
    CONST_VTBL IMFMediaTypeHandlerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFMediaTypeHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFMediaTypeHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFMediaTypeHandler_Release(This) (This)->lpVtbl->Release(This)
/*** IMFMediaTypeHandler methods ***/
#define IMFMediaTypeHandler_IsMediaTypeSupported(This,in_type,out_type) (This)->lpVtbl->IsMediaTypeSupported(This,in_type,out_type)
#define IMFMediaTypeHandler_GetMediaTypeCount(This,count) (This)->lpVtbl->GetMediaTypeCount(This,count)
#define IMFMediaTypeHandler_GetMediaTypeByIndex(This,index,type) (This)->lpVtbl->GetMediaTypeByIndex(This,index,type)
#define IMFMediaTypeHandler_SetCurrentMediaType(This,type) (This)->lpVtbl->SetCurrentMediaType(This,type)
#define IMFMediaTypeHandler_GetCurrentMediaType(This,type) (This)->lpVtbl->GetCurrentMediaType(This,type)
#define IMFMediaTypeHandler_GetMajorType(This,type) (This)->lpVtbl->GetMajorType(This,type)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFMediaTypeHandler_QueryInterface(IMFMediaTypeHandler* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFMediaTypeHandler_AddRef(IMFMediaTypeHandler* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFMediaTypeHandler_Release(IMFMediaTypeHandler* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFMediaTypeHandler methods ***/
static FORCEINLINE HRESULT IMFMediaTypeHandler_IsMediaTypeSupported(IMFMediaTypeHandler* This,IMFMediaType *in_type,IMFMediaType **out_type) {
    return This->lpVtbl->IsMediaTypeSupported(This,in_type,out_type);
}
static FORCEINLINE HRESULT IMFMediaTypeHandler_GetMediaTypeCount(IMFMediaTypeHandler* This,DWORD *count) {
    return This->lpVtbl->GetMediaTypeCount(This,count);
}
static FORCEINLINE HRESULT IMFMediaTypeHandler_GetMediaTypeByIndex(IMFMediaTypeHandler* This,DWORD index,IMFMediaType **type) {
    return This->lpVtbl->GetMediaTypeByIndex(This,index,type);
}
static FORCEINLINE HRESULT IMFMediaTypeHandler_SetCurrentMediaType(IMFMediaTypeHandler* This,IMFMediaType *type) {
    return This->lpVtbl->SetCurrentMediaType(This,type);
}
static FORCEINLINE HRESULT IMFMediaTypeHandler_GetCurrentMediaType(IMFMediaTypeHandler* This,IMFMediaType **type) {
    return This->lpVtbl->GetCurrentMediaType(This,type);
}
static FORCEINLINE HRESULT IMFMediaTypeHandler_GetMajorType(IMFMediaTypeHandler* This,GUID *type) {
    return This->lpVtbl->GetMajorType(This,type);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMFMediaTypeHandler_RemoteIsMediaTypeSupported_Proxy(
    IMFMediaTypeHandler* This,
    BYTE *data,
    DWORD size,
    BYTE **match,
    DWORD *match_count);
void __RPC_STUB IMFMediaTypeHandler_RemoteIsMediaTypeSupported_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFMediaTypeHandler_RemoteGetMediaTypeByIndex_Proxy(
    IMFMediaTypeHandler* This,
    DWORD index,
    BYTE **data,
    DWORD *count);
void __RPC_STUB IMFMediaTypeHandler_RemoteGetMediaTypeByIndex_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFMediaTypeHandler_RemoteSetCurrentMediaType_Proxy(
    IMFMediaTypeHandler* This,
    BYTE *data,
    DWORD count);
void __RPC_STUB IMFMediaTypeHandler_RemoteSetCurrentMediaType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFMediaTypeHandler_RemoteGetCurrentMediaType_Proxy(
    IMFMediaTypeHandler* This,
    BYTE **data,
    DWORD *count);
void __RPC_STUB IMFMediaTypeHandler_RemoteGetCurrentMediaType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMFMediaTypeHandler_IsMediaTypeSupported_Proxy(
    IMFMediaTypeHandler* This,
    IMFMediaType *in_type,
    IMFMediaType **out_type);
HRESULT __RPC_STUB IMFMediaTypeHandler_IsMediaTypeSupported_Stub(
    IMFMediaTypeHandler* This,
    BYTE *data,
    DWORD size,
    BYTE **match,
    DWORD *match_count);
HRESULT CALLBACK IMFMediaTypeHandler_GetMediaTypeByIndex_Proxy(
    IMFMediaTypeHandler* This,
    DWORD index,
    IMFMediaType **type);
HRESULT __RPC_STUB IMFMediaTypeHandler_GetMediaTypeByIndex_Stub(
    IMFMediaTypeHandler* This,
    DWORD index,
    BYTE **data,
    DWORD *count);
HRESULT CALLBACK IMFMediaTypeHandler_SetCurrentMediaType_Proxy(
    IMFMediaTypeHandler* This,
    IMFMediaType *type);
HRESULT __RPC_STUB IMFMediaTypeHandler_SetCurrentMediaType_Stub(
    IMFMediaTypeHandler* This,
    BYTE *data,
    DWORD count);
HRESULT CALLBACK IMFMediaTypeHandler_GetCurrentMediaType_Proxy(
    IMFMediaTypeHandler* This,
    IMFMediaType **type);
HRESULT __RPC_STUB IMFMediaTypeHandler_GetCurrentMediaType_Stub(
    IMFMediaTypeHandler* This,
    BYTE **data,
    DWORD *count);

#endif  /* __IMFMediaTypeHandler_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFStreamDescriptor interface
 */
#ifndef __IMFStreamDescriptor_INTERFACE_DEFINED__
#define __IMFStreamDescriptor_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFStreamDescriptor, 0x56c03d9c, 0x9dbb, 0x45f5, 0xab,0x4b, 0xd8,0x0f,0x47,0xc0,0x59,0x38);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("56c03d9c-9dbb-45f5-ab4b-d80f47c05938")
IMFStreamDescriptor : public IMFAttributes
{
    virtual HRESULT STDMETHODCALLTYPE GetStreamIdentifier(
        DWORD *identifier) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMediaTypeHandler(
        IMFMediaTypeHandler **handler) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFStreamDescriptor, 0x56c03d9c, 0x9dbb, 0x45f5, 0xab,0x4b, 0xd8,0x0f,0x47,0xc0,0x59,0x38)
#endif
#else
typedef struct IMFStreamDescriptorVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFAttributes methods ***/
    HRESULT (STDMETHODCALLTYPE *GetItem)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        PROPVARIANT *pValue);

    HRESULT (STDMETHODCALLTYPE *GetItemType)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        MF_ATTRIBUTE_TYPE *pType);

    HRESULT (STDMETHODCALLTYPE *CompareItem)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        REFPROPVARIANT Value,
        BOOL *pbResult);

    HRESULT (STDMETHODCALLTYPE *Compare)(
        IMFStreamDescriptor *This,
        IMFAttributes *pTheirs,
        MF_ATTRIBUTES_MATCH_TYPE MatchType,
        BOOL *pbResult);

    HRESULT (STDMETHODCALLTYPE *GetUINT32)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        UINT32 *punValue);

    HRESULT (STDMETHODCALLTYPE *GetUINT64)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        UINT64 *punValue);

    HRESULT (STDMETHODCALLTYPE *GetDouble)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        double *pfValue);

    HRESULT (STDMETHODCALLTYPE *GetGUID)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        GUID *pguidValue);

    HRESULT (STDMETHODCALLTYPE *GetStringLength)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetString)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        LPWSTR pwszValue,
        UINT32 cchBufSize,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetAllocatedString)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        LPWSTR *ppwszValue,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetBlobSize)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        UINT32 *pcbBlobSize);

    HRESULT (STDMETHODCALLTYPE *GetBlob)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        UINT8 *pBuf,
        UINT32 cbBufSize,
        UINT32 *pcbBlobSize);

    HRESULT (STDMETHODCALLTYPE *GetAllocatedBlob)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        UINT8 **ppBuf,
        UINT32 *pcbSize);

    HRESULT (STDMETHODCALLTYPE *GetUnknown)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        REFIID riid,
        LPVOID *ppv);

    HRESULT (STDMETHODCALLTYPE *SetItem)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        REFPROPVARIANT Value);

    HRESULT (STDMETHODCALLTYPE *DeleteItem)(
        IMFStreamDescriptor *This,
        REFGUID guidKey);

    HRESULT (STDMETHODCALLTYPE *DeleteAllItems)(
        IMFStreamDescriptor *This);

    HRESULT (STDMETHODCALLTYPE *SetUINT32)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        UINT32 unValue);

    HRESULT (STDMETHODCALLTYPE *SetUINT64)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        UINT64 unValue);

    HRESULT (STDMETHODCALLTYPE *SetDouble)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        double fValue);

    HRESULT (STDMETHODCALLTYPE *SetGUID)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        REFGUID guidValue);

    HRESULT (STDMETHODCALLTYPE *SetString)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        LPCWSTR wszValue);

    HRESULT (STDMETHODCALLTYPE *SetBlob)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        const UINT8 *pBuf,
        UINT32 cbBufSize);

    HRESULT (STDMETHODCALLTYPE *SetUnknown)(
        IMFStreamDescriptor *This,
        REFGUID guidKey,
        IUnknown *pUnknown);

    HRESULT (STDMETHODCALLTYPE *LockStore)(
        IMFStreamDescriptor *This);

    HRESULT (STDMETHODCALLTYPE *UnlockStore)(
        IMFStreamDescriptor *This);

    HRESULT (STDMETHODCALLTYPE *GetCount)(
        IMFStreamDescriptor *This,
        UINT32 *pcItems);

    HRESULT (STDMETHODCALLTYPE *GetItemByIndex)(
        IMFStreamDescriptor *This,
        UINT32 unIndex,
        GUID *pguidKey,
        PROPVARIANT *pValue);

    HRESULT (STDMETHODCALLTYPE *CopyAllItems)(
        IMFStreamDescriptor *This,
        IMFAttributes *pDest);

    /*** IMFStreamDescriptor methods ***/
    HRESULT (STDMETHODCALLTYPE *GetStreamIdentifier)(
        IMFStreamDescriptor *This,
        DWORD *identifier);

    HRESULT (STDMETHODCALLTYPE *GetMediaTypeHandler)(
        IMFStreamDescriptor *This,
        IMFMediaTypeHandler **handler);

    END_INTERFACE
} IMFStreamDescriptorVtbl;

interface IMFStreamDescriptor {
    CONST_VTBL IMFStreamDescriptorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFStreamDescriptor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFStreamDescriptor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFStreamDescriptor_Release(This) (This)->lpVtbl->Release(This)
/*** IMFAttributes methods ***/
#define IMFStreamDescriptor_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
#define IMFStreamDescriptor_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
#define IMFStreamDescriptor_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
#define IMFStreamDescriptor_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
#define IMFStreamDescriptor_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
#define IMFStreamDescriptor_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
#define IMFStreamDescriptor_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
#define IMFStreamDescriptor_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
#define IMFStreamDescriptor_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
#define IMFStreamDescriptor_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
#define IMFStreamDescriptor_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
#define IMFStreamDescriptor_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
#define IMFStreamDescriptor_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
#define IMFStreamDescriptor_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
#define IMFStreamDescriptor_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
#define IMFStreamDescriptor_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
#define IMFStreamDescriptor_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
#define IMFStreamDescriptor_DeleteAllItems(This) (This)->lpVtbl->DeleteAllItems(This)
#define IMFStreamDescriptor_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
#define IMFStreamDescriptor_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
#define IMFStreamDescriptor_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
#define IMFStreamDescriptor_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
#define IMFStreamDescriptor_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
#define IMFStreamDescriptor_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
#define IMFStreamDescriptor_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
#define IMFStreamDescriptor_LockStore(This) (This)->lpVtbl->LockStore(This)
#define IMFStreamDescriptor_UnlockStore(This) (This)->lpVtbl->UnlockStore(This)
#define IMFStreamDescriptor_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
#define IMFStreamDescriptor_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
#define IMFStreamDescriptor_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
/*** IMFStreamDescriptor methods ***/
#define IMFStreamDescriptor_GetStreamIdentifier(This,identifier) (This)->lpVtbl->GetStreamIdentifier(This,identifier)
#define IMFStreamDescriptor_GetMediaTypeHandler(This,handler) (This)->lpVtbl->GetMediaTypeHandler(This,handler)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFStreamDescriptor_QueryInterface(IMFStreamDescriptor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFStreamDescriptor_AddRef(IMFStreamDescriptor* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFStreamDescriptor_Release(IMFStreamDescriptor* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFAttributes methods ***/
static FORCEINLINE HRESULT IMFStreamDescriptor_GetItem(IMFStreamDescriptor* This,REFGUID guidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItem(This,guidKey,pValue);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_GetItemType(IMFStreamDescriptor* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
    return This->lpVtbl->GetItemType(This,guidKey,pType);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_CompareItem(IMFStreamDescriptor* This,REFGUID guidKey,REFPROPVARIANT Value,BOOL *pbResult) {
    return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_Compare(IMFStreamDescriptor* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,BOOL *pbResult) {
    return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_GetUINT32(IMFStreamDescriptor* This,REFGUID guidKey,UINT32 *punValue) {
    return This->lpVtbl->GetUINT32(This,guidKey,punValue);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_GetUINT64(IMFStreamDescriptor* This,REFGUID guidKey,UINT64 *punValue) {
    return This->lpVtbl->GetUINT64(This,guidKey,punValue);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_GetDouble(IMFStreamDescriptor* This,REFGUID guidKey,double *pfValue) {
    return This->lpVtbl->GetDouble(This,guidKey,pfValue);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_GetGUID(IMFStreamDescriptor* This,REFGUID guidKey,GUID *pguidValue) {
    return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_GetStringLength(IMFStreamDescriptor* This,REFGUID guidKey,UINT32 *pcchLength) {
    return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_GetString(IMFStreamDescriptor* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
    return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_GetAllocatedString(IMFStreamDescriptor* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
    return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_GetBlobSize(IMFStreamDescriptor* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_GetBlob(IMFStreamDescriptor* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_GetAllocatedBlob(IMFStreamDescriptor* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
    return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_GetUnknown(IMFStreamDescriptor* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
    return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_SetItem(IMFStreamDescriptor* This,REFGUID guidKey,REFPROPVARIANT Value) {
    return This->lpVtbl->SetItem(This,guidKey,Value);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_DeleteItem(IMFStreamDescriptor* This,REFGUID guidKey) {
    return This->lpVtbl->DeleteItem(This,guidKey);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_DeleteAllItems(IMFStreamDescriptor* This) {
    return This->lpVtbl->DeleteAllItems(This);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_SetUINT32(IMFStreamDescriptor* This,REFGUID guidKey,UINT32 unValue) {
    return This->lpVtbl->SetUINT32(This,guidKey,unValue);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_SetUINT64(IMFStreamDescriptor* This,REFGUID guidKey,UINT64 unValue) {
    return This->lpVtbl->SetUINT64(This,guidKey,unValue);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_SetDouble(IMFStreamDescriptor* This,REFGUID guidKey,double fValue) {
    return This->lpVtbl->SetDouble(This,guidKey,fValue);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_SetGUID(IMFStreamDescriptor* This,REFGUID guidKey,REFGUID guidValue) {
    return This->lpVtbl->SetGUID(This,guidKey,guidValue);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_SetString(IMFStreamDescriptor* This,REFGUID guidKey,LPCWSTR wszValue) {
    return This->lpVtbl->SetString(This,guidKey,wszValue);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_SetBlob(IMFStreamDescriptor* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
    return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_SetUnknown(IMFStreamDescriptor* This,REFGUID guidKey,IUnknown *pUnknown) {
    return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_LockStore(IMFStreamDescriptor* This) {
    return This->lpVtbl->LockStore(This);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_UnlockStore(IMFStreamDescriptor* This) {
    return This->lpVtbl->UnlockStore(This);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_GetCount(IMFStreamDescriptor* This,UINT32 *pcItems) {
    return This->lpVtbl->GetCount(This,pcItems);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_GetItemByIndex(IMFStreamDescriptor* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_CopyAllItems(IMFStreamDescriptor* This,IMFAttributes *pDest) {
    return This->lpVtbl->CopyAllItems(This,pDest);
}
/*** IMFStreamDescriptor methods ***/
static FORCEINLINE HRESULT IMFStreamDescriptor_GetStreamIdentifier(IMFStreamDescriptor* This,DWORD *identifier) {
    return This->lpVtbl->GetStreamIdentifier(This,identifier);
}
static FORCEINLINE HRESULT IMFStreamDescriptor_GetMediaTypeHandler(IMFStreamDescriptor* This,IMFMediaTypeHandler **handler) {
    return This->lpVtbl->GetMediaTypeHandler(This,handler);
}
#endif
#endif

#endif


#endif  /* __IMFStreamDescriptor_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFClockStateSink interface
 */
#ifndef __IMFClockStateSink_INTERFACE_DEFINED__
#define __IMFClockStateSink_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFClockStateSink, 0xf6696e82, 0x74f7, 0x4f3d, 0xa1,0x78, 0x8a,0x5e,0x09,0xc3,0x65,0x9f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("f6696e82-74f7-4f3d-a178-8a5e09c3659f")
IMFClockStateSink : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE OnClockStart(
        MFTIME hnsSystemTime,
        LONGLONG llClockStartOffset) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnClockStop(
        MFTIME hnssSystemTime) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnClockPause(
        MFTIME hnsSystemTime) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnClockRestart(
        MFTIME hnsSystemTime) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnClockSetRate(
        MFTIME hnsSystemTime,
        float flRate) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFClockStateSink, 0xf6696e82, 0x74f7, 0x4f3d, 0xa1,0x78, 0x8a,0x5e,0x09,0xc3,0x65,0x9f)
#endif
#else
typedef struct IMFClockStateSinkVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFClockStateSink methods ***/
    HRESULT (STDMETHODCALLTYPE *OnClockStart)(
        IMFClockStateSink *This,
        MFTIME hnsSystemTime,
        LONGLONG llClockStartOffset);

    HRESULT (STDMETHODCALLTYPE *OnClockStop)(
        IMFClockStateSink *This,
        MFTIME hnssSystemTime);

    HRESULT (STDMETHODCALLTYPE *OnClockPause)(
        IMFClockStateSink *This,
        MFTIME hnsSystemTime);

    HRESULT (STDMETHODCALLTYPE *OnClockRestart)(
        IMFClockStateSink *This,
        MFTIME hnsSystemTime);

    HRESULT (STDMETHODCALLTYPE *OnClockSetRate)(
        IMFClockStateSink *This,
        MFTIME hnsSystemTime,
        float flRate);

    END_INTERFACE
} IMFClockStateSinkVtbl;

interface IMFClockStateSink {
    CONST_VTBL IMFClockStateSinkVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFClockStateSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFClockStateSink_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFClockStateSink_Release(This) (This)->lpVtbl->Release(This)
/*** IMFClockStateSink methods ***/
#define IMFClockStateSink_OnClockStart(This,hnsSystemTime,llClockStartOffset) (This)->lpVtbl->OnClockStart(This,hnsSystemTime,llClockStartOffset)
#define IMFClockStateSink_OnClockStop(This,hnssSystemTime) (This)->lpVtbl->OnClockStop(This,hnssSystemTime)
#define IMFClockStateSink_OnClockPause(This,hnsSystemTime) (This)->lpVtbl->OnClockPause(This,hnsSystemTime)
#define IMFClockStateSink_OnClockRestart(This,hnsSystemTime) (This)->lpVtbl->OnClockRestart(This,hnsSystemTime)
#define IMFClockStateSink_OnClockSetRate(This,hnsSystemTime,flRate) (This)->lpVtbl->OnClockSetRate(This,hnsSystemTime,flRate)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFClockStateSink_QueryInterface(IMFClockStateSink* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFClockStateSink_AddRef(IMFClockStateSink* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFClockStateSink_Release(IMFClockStateSink* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFClockStateSink methods ***/
static FORCEINLINE HRESULT IMFClockStateSink_OnClockStart(IMFClockStateSink* This,MFTIME hnsSystemTime,LONGLONG llClockStartOffset) {
    return This->lpVtbl->OnClockStart(This,hnsSystemTime,llClockStartOffset);
}
static FORCEINLINE HRESULT IMFClockStateSink_OnClockStop(IMFClockStateSink* This,MFTIME hnssSystemTime) {
    return This->lpVtbl->OnClockStop(This,hnssSystemTime);
}
static FORCEINLINE HRESULT IMFClockStateSink_OnClockPause(IMFClockStateSink* This,MFTIME hnsSystemTime) {
    return This->lpVtbl->OnClockPause(This,hnsSystemTime);
}
static FORCEINLINE HRESULT IMFClockStateSink_OnClockRestart(IMFClockStateSink* This,MFTIME hnsSystemTime) {
    return This->lpVtbl->OnClockRestart(This,hnsSystemTime);
}
static FORCEINLINE HRESULT IMFClockStateSink_OnClockSetRate(IMFClockStateSink* This,MFTIME hnsSystemTime,float flRate) {
    return This->lpVtbl->OnClockSetRate(This,hnsSystemTime,flRate);
}
#endif
#endif

#endif


#endif  /* __IMFClockStateSink_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFGetService interface
 */
#ifndef __IMFGetService_INTERFACE_DEFINED__
#define __IMFGetService_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFGetService, 0xfa993888, 0x4383, 0x415a, 0xa9,0x30, 0xdd,0x47,0x2a,0x8c,0xf6,0xf7);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("fa993888-4383-415a-a930-dd472a8cf6f7")
IMFGetService : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetService(
        REFGUID guidService,
        REFIID riid,
        LPVOID *ppvObject) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFGetService, 0xfa993888, 0x4383, 0x415a, 0xa9,0x30, 0xdd,0x47,0x2a,0x8c,0xf6,0xf7)
#endif
#else
typedef struct IMFGetServiceVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFGetService methods ***/
    HRESULT (STDMETHODCALLTYPE *GetService)(
        IMFGetService *This,
        REFGUID guidService,
        REFIID riid,
        LPVOID *ppvObject);

    END_INTERFACE
} IMFGetServiceVtbl;

interface IMFGetService {
    CONST_VTBL IMFGetServiceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFGetService_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFGetService_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFGetService_Release(This) (This)->lpVtbl->Release(This)
/*** IMFGetService methods ***/
#define IMFGetService_GetService(This,guidService,riid,ppvObject) (This)->lpVtbl->GetService(This,guidService,riid,ppvObject)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFGetService_QueryInterface(IMFGetService* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFGetService_AddRef(IMFGetService* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFGetService_Release(IMFGetService* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFGetService methods ***/
static FORCEINLINE HRESULT IMFGetService_GetService(IMFGetService* This,REFGUID guidService,REFIID riid,LPVOID *ppvObject) {
    return This->lpVtbl->GetService(This,guidService,riid,ppvObject);
}
#endif
#endif

#endif


#endif  /* __IMFGetService_INTERFACE_DEFINED__ */

HRESULT WINAPI MFCreateMediaSession(IMFAttributes *config, IMFMediaSession **session);
HRESULT WINAPI MFCreateSourceResolver(IMFSourceResolver **resolver);
HRESULT WINAPI MFCreateStreamDescriptor(DWORD identifier, DWORD cMediaTypes,
     IMFMediaType **types, IMFStreamDescriptor **descriptor);
HRESULT WINAPI MFCreateTopology(IMFTopology **topology);
HRESULT WINAPI MFGetSupportedMimeTypes(PROPVARIANT *array);
HRESULT WINAPI MFGetService(IUnknown *object, REFGUID service, REFIID iid, void **obj);
/* Begin additional prototypes for all interfaces */

ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
ULONG           __RPC_USER LPSAFEARRAY_UserSize     (ULONG *, ULONG, LPSAFEARRAY *);
unsigned char * __RPC_USER LPSAFEARRAY_UserMarshal  (ULONG *, unsigned char *, LPSAFEARRAY *);
unsigned char * __RPC_USER LPSAFEARRAY_UserUnmarshal(ULONG *, unsigned char *, LPSAFEARRAY *);
void            __RPC_USER LPSAFEARRAY_UserFree     (ULONG *, LPSAFEARRAY *);

/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __mfidl_h__ */
