/*** Autogenerated by WIDL 9.9 from /var/tmp/portage/app-emulation/wine-vanilla-9.9/work/wine-9.9/include/mfidl.idl - Do not edit ***/

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

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

#ifndef __mfidl_h__
#define __mfidl_h__

#ifndef __WIDL_INLINE
#if defined(__cplusplus) || defined(_MSC_VER)
#define __WIDL_INLINE inline
#elif defined(__GNUC__)
#define __WIDL_INLINE __inline__
#endif
#endif

/* Forward declarations */

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

#ifndef __IMFRateSupport_FWD_DEFINED__
#define __IMFRateSupport_FWD_DEFINED__
typedef interface IMFRateSupport IMFRateSupport;
#ifdef __cplusplus
interface IMFRateSupport;
#endif /* __cplusplus */
#endif

#ifndef __IMFRateControl_FWD_DEFINED__
#define __IMFRateControl_FWD_DEFINED__
typedef interface IMFRateControl IMFRateControl;
#ifdef __cplusplus
interface IMFRateControl;
#endif /* __cplusplus */
#endif

#ifndef __IMFTimer_FWD_DEFINED__
#define __IMFTimer_FWD_DEFINED__
typedef interface IMFTimer IMFTimer;
#ifdef __cplusplus
interface IMFTimer;
#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 __IMFTopologyNodeAttributeEditor_FWD_DEFINED__
#define __IMFTopologyNodeAttributeEditor_FWD_DEFINED__
typedef interface IMFTopologyNodeAttributeEditor IMFTopologyNodeAttributeEditor;
#ifdef __cplusplus
interface IMFTopologyNodeAttributeEditor;
#endif /* __cplusplus */
#endif

#ifndef __IMFTopoLoader_FWD_DEFINED__
#define __IMFTopoLoader_FWD_DEFINED__
typedef interface IMFTopoLoader IMFTopoLoader;
#ifdef __cplusplus
interface IMFTopoLoader;
#endif /* __cplusplus */
#endif

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

#ifndef __IMFByteStreamHandler_FWD_DEFINED__
#define __IMFByteStreamHandler_FWD_DEFINED__
typedef interface IMFByteStreamHandler IMFByteStreamHandler;
#ifdef __cplusplus
interface IMFByteStreamHandler;
#endif /* __cplusplus */
#endif

#ifndef __IMFByteStreamBuffering_FWD_DEFINED__
#define __IMFByteStreamBuffering_FWD_DEFINED__
typedef interface IMFByteStreamBuffering IMFByteStreamBuffering;
#ifdef __cplusplus
interface IMFByteStreamBuffering;
#endif /* __cplusplus */
#endif

#ifndef __IMFByteStreamCacheControl_FWD_DEFINED__
#define __IMFByteStreamCacheControl_FWD_DEFINED__
typedef interface IMFByteStreamCacheControl IMFByteStreamCacheControl;
#ifdef __cplusplus
interface IMFByteStreamCacheControl;
#endif /* __cplusplus */
#endif

#ifndef __IMFByteStreamTimeSeek_FWD_DEFINED__
#define __IMFByteStreamTimeSeek_FWD_DEFINED__
typedef interface IMFByteStreamTimeSeek IMFByteStreamTimeSeek;
#ifdef __cplusplus
interface IMFByteStreamTimeSeek;
#endif /* __cplusplus */
#endif

#ifndef __IMFSchemeHandler_FWD_DEFINED__
#define __IMFSchemeHandler_FWD_DEFINED__
typedef interface IMFSchemeHandler IMFSchemeHandler;
#ifdef __cplusplus
interface IMFSchemeHandler;
#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

#ifndef __IMFPresentationDescriptor_FWD_DEFINED__
#define __IMFPresentationDescriptor_FWD_DEFINED__
typedef interface IMFPresentationDescriptor IMFPresentationDescriptor;
#ifdef __cplusplus
interface IMFPresentationDescriptor;
#endif /* __cplusplus */
#endif

#ifndef __IMFMetadata_FWD_DEFINED__
#define __IMFMetadata_FWD_DEFINED__
typedef interface IMFMetadata IMFMetadata;
#ifdef __cplusplus
interface IMFMetadata;
#endif /* __cplusplus */
#endif

#ifndef __IMFMetadataProvider_FWD_DEFINED__
#define __IMFMetadataProvider_FWD_DEFINED__
typedef interface IMFMetadataProvider IMFMetadataProvider;
#ifdef __cplusplus
interface IMFMetadataProvider;
#endif /* __cplusplus */
#endif

#ifndef __IMFSequencerSource_FWD_DEFINED__
#define __IMFSequencerSource_FWD_DEFINED__
typedef interface IMFSequencerSource IMFSequencerSource;
#ifdef __cplusplus
interface IMFSequencerSource;
#endif /* __cplusplus */
#endif

#ifndef __IMFSampleGrabberSinkCallback_FWD_DEFINED__
#define __IMFSampleGrabberSinkCallback_FWD_DEFINED__
typedef interface IMFSampleGrabberSinkCallback IMFSampleGrabberSinkCallback;
#ifdef __cplusplus
interface IMFSampleGrabberSinkCallback;
#endif /* __cplusplus */
#endif

#ifndef __IMFSampleGrabberSinkCallback2_FWD_DEFINED__
#define __IMFSampleGrabberSinkCallback2_FWD_DEFINED__
typedef interface IMFSampleGrabberSinkCallback2 IMFSampleGrabberSinkCallback2;
#ifdef __cplusplus
interface IMFSampleGrabberSinkCallback2;
#endif /* __cplusplus */
#endif

#ifndef __IMFSeekInfo_FWD_DEFINED__
#define __IMFSeekInfo_FWD_DEFINED__
typedef interface IMFSeekInfo IMFSeekInfo;
#ifdef __cplusplus
interface IMFSeekInfo;
#endif /* __cplusplus */
#endif

#ifndef __IMFMediaSource_FWD_DEFINED__
#define __IMFMediaSource_FWD_DEFINED__
typedef interface IMFMediaSource IMFMediaSource;
#ifdef __cplusplus
interface IMFMediaSource;
#endif /* __cplusplus */
#endif

#ifndef __IMFMediaSourceEx_FWD_DEFINED__
#define __IMFMediaSourceEx_FWD_DEFINED__
typedef interface IMFMediaSourceEx IMFMediaSourceEx;
#ifdef __cplusplus
interface IMFMediaSourceEx;
#endif /* __cplusplus */
#endif

#ifndef __IMFMediaStream_FWD_DEFINED__
#define __IMFMediaStream_FWD_DEFINED__
typedef interface IMFMediaStream IMFMediaStream;
#ifdef __cplusplus
interface IMFMediaStream;
#endif /* __cplusplus */
#endif

#ifndef __IMFPresentationTimeSource_FWD_DEFINED__
#define __IMFPresentationTimeSource_FWD_DEFINED__
typedef interface IMFPresentationTimeSource IMFPresentationTimeSource;
#ifdef __cplusplus
interface IMFPresentationTimeSource;
#endif /* __cplusplus */
#endif

#ifndef __IMFPresentationClock_FWD_DEFINED__
#define __IMFPresentationClock_FWD_DEFINED__
typedef interface IMFPresentationClock IMFPresentationClock;
#ifdef __cplusplus
interface IMFPresentationClock;
#endif /* __cplusplus */
#endif

#ifndef __IMFClockConsumer_FWD_DEFINED__
#define __IMFClockConsumer_FWD_DEFINED__
typedef interface IMFClockConsumer IMFClockConsumer;
#ifdef __cplusplus
interface IMFClockConsumer;
#endif /* __cplusplus */
#endif

#ifndef __IMFMediaSink_FWD_DEFINED__
#define __IMFMediaSink_FWD_DEFINED__
typedef interface IMFMediaSink IMFMediaSink;
#ifdef __cplusplus
interface IMFMediaSink;
#endif /* __cplusplus */
#endif

#ifndef __IMFFinalizableMediaSink_FWD_DEFINED__
#define __IMFFinalizableMediaSink_FWD_DEFINED__
typedef interface IMFFinalizableMediaSink IMFFinalizableMediaSink;
#ifdef __cplusplus
interface IMFFinalizableMediaSink;
#endif /* __cplusplus */
#endif

#ifndef __IMFMediaSinkPreroll_FWD_DEFINED__
#define __IMFMediaSinkPreroll_FWD_DEFINED__
typedef interface IMFMediaSinkPreroll IMFMediaSinkPreroll;
#ifdef __cplusplus
interface IMFMediaSinkPreroll;
#endif /* __cplusplus */
#endif

#ifndef __IMFStreamingSinkConfig_FWD_DEFINED__
#define __IMFStreamingSinkConfig_FWD_DEFINED__
typedef interface IMFStreamingSinkConfig IMFStreamingSinkConfig;
#ifdef __cplusplus
interface IMFStreamingSinkConfig;
#endif /* __cplusplus */
#endif

#ifndef __IMFStreamSink_FWD_DEFINED__
#define __IMFStreamSink_FWD_DEFINED__
typedef interface IMFStreamSink IMFStreamSink;
#ifdef __cplusplus
interface IMFStreamSink;
#endif /* __cplusplus */
#endif

#ifndef __IMFShutdown_FWD_DEFINED__
#define __IMFShutdown_FWD_DEFINED__
typedef interface IMFShutdown IMFShutdown;
#ifdef __cplusplus
interface IMFShutdown;
#endif /* __cplusplus */
#endif

#ifndef __IMFQualityManager_FWD_DEFINED__
#define __IMFQualityManager_FWD_DEFINED__
typedef interface IMFQualityManager IMFQualityManager;
#ifdef __cplusplus
interface IMFQualityManager;
#endif /* __cplusplus */
#endif

#ifndef __IMFQualityAdvise_FWD_DEFINED__
#define __IMFQualityAdvise_FWD_DEFINED__
typedef interface IMFQualityAdvise IMFQualityAdvise;
#ifdef __cplusplus
interface IMFQualityAdvise;
#endif /* __cplusplus */
#endif

#ifndef __IMFQualityAdvise2_FWD_DEFINED__
#define __IMFQualityAdvise2_FWD_DEFINED__
typedef interface IMFQualityAdvise2 IMFQualityAdvise2;
#ifdef __cplusplus
interface IMFQualityAdvise2;
#endif /* __cplusplus */
#endif

#ifndef __IMFQualityAdviseLimits_FWD_DEFINED__
#define __IMFQualityAdviseLimits_FWD_DEFINED__
typedef interface IMFQualityAdviseLimits IMFQualityAdviseLimits;
#ifdef __cplusplus
interface IMFQualityAdviseLimits;
#endif /* __cplusplus */
#endif

#ifndef __IMFTrackedSample_FWD_DEFINED__
#define __IMFTrackedSample_FWD_DEFINED__
typedef interface IMFTrackedSample IMFTrackedSample;
#ifdef __cplusplus
interface IMFTrackedSample;
#endif /* __cplusplus */
#endif

#ifndef __IMFLocalMFTRegistration_FWD_DEFINED__
#define __IMFLocalMFTRegistration_FWD_DEFINED__
typedef interface IMFLocalMFTRegistration IMFLocalMFTRegistration;
#ifdef __cplusplus
interface IMFLocalMFTRegistration;
#endif /* __cplusplus */
#endif

#ifndef __IMFMediaSourceTopologyProvider_FWD_DEFINED__
#define __IMFMediaSourceTopologyProvider_FWD_DEFINED__
typedef interface IMFMediaSourceTopologyProvider IMFMediaSourceTopologyProvider;
#ifdef __cplusplus
interface IMFMediaSourceTopologyProvider;
#endif /* __cplusplus */
#endif

#ifndef __IMFSimpleAudioVolume_FWD_DEFINED__
#define __IMFSimpleAudioVolume_FWD_DEFINED__
typedef interface IMFSimpleAudioVolume IMFSimpleAudioVolume;
#ifdef __cplusplus
interface IMFSimpleAudioVolume;
#endif /* __cplusplus */
#endif

#ifndef __IMFAudioStreamVolume_FWD_DEFINED__
#define __IMFAudioStreamVolume_FWD_DEFINED__
typedef interface IMFAudioStreamVolume IMFAudioStreamVolume;
#ifdef __cplusplus
interface IMFAudioStreamVolume;
#endif /* __cplusplus */
#endif

#ifndef __IMFAudioPolicy_FWD_DEFINED__
#define __IMFAudioPolicy_FWD_DEFINED__
typedef interface IMFAudioPolicy IMFAudioPolicy;
#ifdef __cplusplus
interface IMFAudioPolicy;
#endif /* __cplusplus */
#endif

#ifndef __IMFVideoSampleAllocator_FWD_DEFINED__
#define __IMFVideoSampleAllocator_FWD_DEFINED__
typedef interface IMFVideoSampleAllocator IMFVideoSampleAllocator;
#ifdef __cplusplus
interface IMFVideoSampleAllocator;
#endif /* __cplusplus */
#endif

#ifndef __IMFVideoSampleAllocatorNotify_FWD_DEFINED__
#define __IMFVideoSampleAllocatorNotify_FWD_DEFINED__
typedef interface IMFVideoSampleAllocatorNotify IMFVideoSampleAllocatorNotify;
#ifdef __cplusplus
interface IMFVideoSampleAllocatorNotify;
#endif /* __cplusplus */
#endif

#ifndef __IMFVideoSampleAllocatorNotifyEx_FWD_DEFINED__
#define __IMFVideoSampleAllocatorNotifyEx_FWD_DEFINED__
typedef interface IMFVideoSampleAllocatorNotifyEx IMFVideoSampleAllocatorNotifyEx;
#ifdef __cplusplus
interface IMFVideoSampleAllocatorNotifyEx;
#endif /* __cplusplus */
#endif

#ifndef __IMFVideoSampleAllocatorCallback_FWD_DEFINED__
#define __IMFVideoSampleAllocatorCallback_FWD_DEFINED__
typedef interface IMFVideoSampleAllocatorCallback IMFVideoSampleAllocatorCallback;
#ifdef __cplusplus
interface IMFVideoSampleAllocatorCallback;
#endif /* __cplusplus */
#endif

#ifndef __IMFVideoSampleAllocatorEx_FWD_DEFINED__
#define __IMFVideoSampleAllocatorEx_FWD_DEFINED__
typedef interface IMFVideoSampleAllocatorEx IMFVideoSampleAllocatorEx;
#ifdef __cplusplus
interface IMFVideoSampleAllocatorEx;
#endif /* __cplusplus */
#endif

#ifndef __IMFVideoProcessorControl_FWD_DEFINED__
#define __IMFVideoProcessorControl_FWD_DEFINED__
typedef interface IMFVideoProcessorControl IMFVideoProcessorControl;
#ifdef __cplusplus
interface IMFVideoProcessorControl;
#endif /* __cplusplus */
#endif

#ifndef __IMFVideoProcessorControl2_FWD_DEFINED__
#define __IMFVideoProcessorControl2_FWD_DEFINED__
typedef interface IMFVideoProcessorControl2 IMFVideoProcessorControl2;
#ifdef __cplusplus
interface IMFVideoProcessorControl2;
#endif /* __cplusplus */
#endif

#ifndef __IMFVideoProcessorControl3_FWD_DEFINED__
#define __IMFVideoProcessorControl3_FWD_DEFINED__
typedef interface IMFVideoProcessorControl3 IMFVideoProcessorControl3;
#ifdef __cplusplus
interface IMFVideoProcessorControl3;
#endif /* __cplusplus */
#endif

#ifndef __IMFRealTimeClient_FWD_DEFINED__
#define __IMFRealTimeClient_FWD_DEFINED__
typedef interface IMFRealTimeClient IMFRealTimeClient;
#ifdef __cplusplus
interface IMFRealTimeClient;
#endif /* __cplusplus */
#endif

#ifndef __IMFRealTimeClientEx_FWD_DEFINED__
#define __IMFRealTimeClientEx_FWD_DEFINED__
typedef interface IMFRealTimeClientEx IMFRealTimeClientEx;
#ifdef __cplusplus
interface IMFRealTimeClientEx;
#endif /* __cplusplus */
#endif

#ifndef __IMFWorkQueueServices_FWD_DEFINED__
#define __IMFWorkQueueServices_FWD_DEFINED__
typedef interface IMFWorkQueueServices IMFWorkQueueServices;
#ifdef __cplusplus
interface IMFWorkQueueServices;
#endif /* __cplusplus */
#endif

#ifndef __IMFWorkQueueServicesEx_FWD_DEFINED__
#define __IMFWorkQueueServicesEx_FWD_DEFINED__
typedef interface IMFWorkQueueServicesEx IMFWorkQueueServicesEx;
#ifdef __cplusplus
interface IMFWorkQueueServicesEx;
#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 DWORD MFSequencerElementId;
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;
#define MFCLOCK_FREQUENCY_HNS       10000000
#define MFCLOCK_TOLERANCE_UNKNOWN      50000
#define MFCLOCK_JITTER_ISR              1000
#define MFCLOCK_JITTER_DPC              4000
#define MFCLOCK_JITTER_PASSIVE         10000
typedef struct _MFCLOCK_PROPERTIES {
    UINT64 qwCorrelationRate;
    GUID guidClockId;
    DWORD dwClockFlags;
    UINT64 qwClockFrequency;
    DWORD dwClockTolerance;
    DWORD dwClockJitter;
} MFCLOCK_PROPERTIES;
typedef enum _MFCLOCK_CHARACTERISTICS_FLAGS {
    MFCLOCK_CHARACTERISTICS_FLAG_FREQUENCY_10MHZ = 0x2,
    MFCLOCK_CHARACTERISTICS_FLAG_ALWAYS_RUNNING = 0x4,
    MFCLOCK_CHARACTERISTICS_FLAG_IS_SYSTEM_CLOCK = 0x8
} MFCLOCK_CHARACTERISTICS_FLAGS;
typedef enum MFSESSION_SETTOPOLOGY_FLAGS {
    MFSESSION_SETTOPOLOGY_IMMEDIATE = 0x1,
    MFSESSION_SETTOPOLOGY_NORESOLUTION = 0x2,
    MFSESSION_SETTOPOLOGY_CLEAR_CURRENT = 0x4
} MFSESSION_SETTOPOLOGY_FLAGS;
typedef enum MFSESSION_GETFULLTOPOLOGY_FLAGS {
    MFSESSION_GETFULLTOPOLOGY_CURRENT = 0x1
} MFSESSION_GETFULLTOPOLOGY_FLAGS;
typedef enum MFPMPSESSION_CREATION_FLAGS {
    MFPMPSESSION_UNPROTECTED_PROCESS = 0x1,
    MFPMPSESSION_IN_PROCESS = 0x2
} MFPMPSESSION_CREATION_FLAGS;
typedef enum _MF_CONNECT_METHOD {
    MF_CONNECT_DIRECT = 0x0,
    MF_CONNECT_ALLOW_CONVERTER = 0x1,
    MF_CONNECT_ALLOW_DECODER = 0x3,
    MF_CONNECT_RESOLVE_INDEPENDENT_OUTPUTTYPES = 0x4,
    MF_CONNECT_AS_OPTIONAL = 0x10000,
    MF_CONNECT_AS_OPTIONAL_BRANCH = 0x20000
} MF_CONNECT_METHOD;
typedef enum _MF_TOPOLOGY_RESOLUTION_STATUS_FLAGS {
    MF_TOPOLOGY_RESOLUTION_SUCCEEDED = 0x0,
    MF_OPTIONAL_NODE_REJECTED_MEDIA_TYPE = 0x1,
    MF_OPTIONAL_NODE_REJECTED_PROTECTED_PROCESS = 0x2
} MF_TOPOLOGY_RESOLUTION_STATUS_FLAGS;
typedef enum _MFSTREAMSINK_MARKER_TYPE {
    MFSTREAMSINK_MARKER_DEFAULT = 0,
    MFSTREAMSINK_MARKER_ENDOFSEGMENT = 1,
    MFSTREAMSINK_MARKER_TICK = 2,
    MFSTREAMSINK_MARKER_EVENT = 3
} MFSTREAMSINK_MARKER_TYPE;
typedef enum _MF_TRANSCODE_TOPOLOGYMODE_FLAGS {
    MF_TRANSCODE_TOPOLOGYMODE_SOFTWARE_ONLY = 0,
    MF_TRANSCODE_TOPOLOGYMODE_HARDWARE_ALLOWED = 1
} MF_TRANSCODE_TOPOLOGYMODE_FLAGS;
typedef enum _MF_TRANSCODE_ADJUST_PROFILE_FLAGS {
    MF_TRANSCODE_ADJUST_PROFILE_DEFAULT = 0,
    MF_TRANSCODE_ADJUST_PROFILE_USE_SOURCE_ATTRIBUTES = 1
} MF_TRANSCODE_ADJUST_PROFILE_FLAGS;
typedef enum _MF_VIDEO_PROCESSOR_ALGORITHM_TYPE {
    MF_VIDEO_PROCESSOR_ALGORITHM_DEFAULT = 0,
    MF_VIDEO_PROCESSOR_ALGORITHM_MRF_CRF_444 = 1
} MF_VIDEO_PROCESSOR_ALGORITHM_TYPE;
typedef enum MFTOPOLOGY_DXVA_MODE {
    MFTOPOLOGY_DXVA_DEFAULT = 0,
    MFTOPOLOGY_DXVA_NONE = 1,
    MFTOPOLOGY_DXVA_FULL = 2
} MFTOPOLOGY_DXVA_MODE;
/*****************************************************************************
 * 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 __WIDL_INLINE HRESULT IMFClock_QueryInterface(IMFClock* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFClock_AddRef(IMFClock* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFClock_Release(IMFClock* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFClock methods ***/
static __WIDL_INLINE HRESULT IMFClock_GetClockCharacteristics(IMFClock* This,DWORD *characteristics) {
    return This->lpVtbl->GetClockCharacteristics(This,characteristics);
}
static __WIDL_INLINE HRESULT IMFClock_GetCorrelatedTime(IMFClock* This,DWORD reserved,LONGLONG *clock_time,MFTIME *system_time) {
    return This->lpVtbl->GetCorrelatedTime(This,reserved,clock_time,system_time);
}
static __WIDL_INLINE HRESULT IMFClock_GetContinuityKey(IMFClock* This,DWORD *key) {
    return This->lpVtbl->GetContinuityKey(This,key);
}
static __WIDL_INLINE HRESULT IMFClock_GetState(IMFClock* This,DWORD reserved,MFCLOCK_STATE *state) {
    return This->lpVtbl->GetState(This,reserved,state);
}
static __WIDL_INLINE HRESULT IMFClock_GetProperties(IMFClock* This,MFCLOCK_PROPERTIES *props) {
    return This->lpVtbl->GetProperties(This,props);
}
#endif
#endif

#endif


#endif  /* __IMFClock_INTERFACE_DEFINED__ */

typedef enum _MFRATE_DIRECTION {
    MFRATE_FORWARD = 0,
    MFRATE_REVERSE = 1
} MFRATE_DIRECTION;
/*****************************************************************************
 * IMFRateSupport interface
 */
#ifndef __IMFRateSupport_INTERFACE_DEFINED__
#define __IMFRateSupport_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFRateSupport, 0x0a9ccdbc, 0xd797, 0x4563, 0x96,0x67, 0x94,0xec,0x5d,0x79,0x29,0x2d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0a9ccdbc-d797-4563-9667-94ec5d79292d")
IMFRateSupport : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetSlowestRate(
        MFRATE_DIRECTION direction,
        BOOL thin,
        float *rate) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFastestRate(
        MFRATE_DIRECTION direction,
        BOOL thin,
        float *rate) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsRateSupported(
        BOOL thin,
        float rate,
        float *nearest_supported_rate) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFRateSupport, 0x0a9ccdbc, 0xd797, 0x4563, 0x96,0x67, 0x94,0xec,0x5d,0x79,0x29,0x2d)
#endif
#else
typedef struct IMFRateSupportVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFRateSupport methods ***/
    HRESULT (STDMETHODCALLTYPE *GetSlowestRate)(
        IMFRateSupport *This,
        MFRATE_DIRECTION direction,
        BOOL thin,
        float *rate);

    HRESULT (STDMETHODCALLTYPE *GetFastestRate)(
        IMFRateSupport *This,
        MFRATE_DIRECTION direction,
        BOOL thin,
        float *rate);

    HRESULT (STDMETHODCALLTYPE *IsRateSupported)(
        IMFRateSupport *This,
        BOOL thin,
        float rate,
        float *nearest_supported_rate);

    END_INTERFACE
} IMFRateSupportVtbl;

interface IMFRateSupport {
    CONST_VTBL IMFRateSupportVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFRateSupport_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFRateSupport_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFRateSupport_Release(This) (This)->lpVtbl->Release(This)
/*** IMFRateSupport methods ***/
#define IMFRateSupport_GetSlowestRate(This,direction,thin,rate) (This)->lpVtbl->GetSlowestRate(This,direction,thin,rate)
#define IMFRateSupport_GetFastestRate(This,direction,thin,rate) (This)->lpVtbl->GetFastestRate(This,direction,thin,rate)
#define IMFRateSupport_IsRateSupported(This,thin,rate,nearest_supported_rate) (This)->lpVtbl->IsRateSupported(This,thin,rate,nearest_supported_rate)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFRateSupport_QueryInterface(IMFRateSupport* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFRateSupport_AddRef(IMFRateSupport* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFRateSupport_Release(IMFRateSupport* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFRateSupport methods ***/
static __WIDL_INLINE HRESULT IMFRateSupport_GetSlowestRate(IMFRateSupport* This,MFRATE_DIRECTION direction,BOOL thin,float *rate) {
    return This->lpVtbl->GetSlowestRate(This,direction,thin,rate);
}
static __WIDL_INLINE HRESULT IMFRateSupport_GetFastestRate(IMFRateSupport* This,MFRATE_DIRECTION direction,BOOL thin,float *rate) {
    return This->lpVtbl->GetFastestRate(This,direction,thin,rate);
}
static __WIDL_INLINE HRESULT IMFRateSupport_IsRateSupported(IMFRateSupport* This,BOOL thin,float rate,float *nearest_supported_rate) {
    return This->lpVtbl->IsRateSupported(This,thin,rate,nearest_supported_rate);
}
#endif
#endif

#endif


#endif  /* __IMFRateSupport_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFRateControl interface
 */
#ifndef __IMFRateControl_INTERFACE_DEFINED__
#define __IMFRateControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFRateControl, 0x88ddcd21, 0x03c3, 0x4275, 0x91,0xed, 0x55,0xee,0x39,0x29,0x32,0x8f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("88ddcd21-03c3-4275-91ed-55ee3929328f")
IMFRateControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetRate(
        BOOL thin,
        float rate) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRate(
        BOOL *thin,
        float *rate) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFRateControl, 0x88ddcd21, 0x03c3, 0x4275, 0x91,0xed, 0x55,0xee,0x39,0x29,0x32,0x8f)
#endif
#else
typedef struct IMFRateControlVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFRateControl methods ***/
    HRESULT (STDMETHODCALLTYPE *SetRate)(
        IMFRateControl *This,
        BOOL thin,
        float rate);

    HRESULT (STDMETHODCALLTYPE *GetRate)(
        IMFRateControl *This,
        BOOL *thin,
        float *rate);

    END_INTERFACE
} IMFRateControlVtbl;

interface IMFRateControl {
    CONST_VTBL IMFRateControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFRateControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFRateControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFRateControl_Release(This) (This)->lpVtbl->Release(This)
/*** IMFRateControl methods ***/
#define IMFRateControl_SetRate(This,thin,rate) (This)->lpVtbl->SetRate(This,thin,rate)
#define IMFRateControl_GetRate(This,thin,rate) (This)->lpVtbl->GetRate(This,thin,rate)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFRateControl_QueryInterface(IMFRateControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFRateControl_AddRef(IMFRateControl* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFRateControl_Release(IMFRateControl* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFRateControl methods ***/
static __WIDL_INLINE HRESULT IMFRateControl_SetRate(IMFRateControl* This,BOOL thin,float rate) {
    return This->lpVtbl->SetRate(This,thin,rate);
}
static __WIDL_INLINE HRESULT IMFRateControl_GetRate(IMFRateControl* This,BOOL *thin,float *rate) {
    return This->lpVtbl->GetRate(This,thin,rate);
}
#endif
#endif

#endif


#endif  /* __IMFRateControl_INTERFACE_DEFINED__ */

typedef enum MFTIMER_FLAGS {
    MFTIMER_RELATIVE = 0x1
} MFTIMER_FLAGS;
/*****************************************************************************
 * IMFTimer interface
 */
#ifndef __IMFTimer_INTERFACE_DEFINED__
#define __IMFTimer_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFTimer, 0xe56e4cbd, 0x8f70, 0x49d8, 0xa0,0xf8, 0xed,0xb3,0xd6,0xab,0x9b,0xf2);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("e56e4cbd-8f70-49d8-a0f8-edb3d6ab9bf2")
IMFTimer : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetTimer(
        DWORD flags,
        LONGLONG time,
        IMFAsyncCallback *callback,
        IUnknown *state,
        IUnknown **key) = 0;

    virtual HRESULT STDMETHODCALLTYPE CancelTimer(
        IUnknown *key) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFTimer, 0xe56e4cbd, 0x8f70, 0x49d8, 0xa0,0xf8, 0xed,0xb3,0xd6,0xab,0x9b,0xf2)
#endif
#else
typedef struct IMFTimerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFTimer methods ***/
    HRESULT (STDMETHODCALLTYPE *SetTimer)(
        IMFTimer *This,
        DWORD flags,
        LONGLONG time,
        IMFAsyncCallback *callback,
        IUnknown *state,
        IUnknown **key);

    HRESULT (STDMETHODCALLTYPE *CancelTimer)(
        IMFTimer *This,
        IUnknown *key);

    END_INTERFACE
} IMFTimerVtbl;

interface IMFTimer {
    CONST_VTBL IMFTimerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFTimer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFTimer_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFTimer_Release(This) (This)->lpVtbl->Release(This)
/*** IMFTimer methods ***/
#define IMFTimer_SetTimer(This,flags,time,callback,state,key) (This)->lpVtbl->SetTimer(This,flags,time,callback,state,key)
#define IMFTimer_CancelTimer(This,key) (This)->lpVtbl->CancelTimer(This,key)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFTimer_QueryInterface(IMFTimer* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFTimer_AddRef(IMFTimer* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFTimer_Release(IMFTimer* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFTimer methods ***/
static __WIDL_INLINE HRESULT IMFTimer_SetTimer(IMFTimer* This,DWORD flags,LONGLONG time,IMFAsyncCallback *callback,IUnknown *state,IUnknown **key) {
    return This->lpVtbl->SetTimer(This,flags,time,callback,state,key);
}
static __WIDL_INLINE HRESULT IMFTimer_CancelTimer(IMFTimer* This,IUnknown *key) {
    return This->lpVtbl->CancelTimer(This,key);
}
#endif
#endif

#endif


#endif  /* __IMFTimer_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 __WIDL_INLINE HRESULT IMFTopologyNode_QueryInterface(IMFTopologyNode* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFTopologyNode_AddRef(IMFTopologyNode* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFTopologyNode_Release(IMFTopologyNode* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFAttributes methods ***/
static __WIDL_INLINE HRESULT IMFTopologyNode_GetItem(IMFTopologyNode* This,REFGUID guidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItem(This,guidKey,pValue);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetItemType(IMFTopologyNode* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
    return This->lpVtbl->GetItemType(This,guidKey,pType);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_CompareItem(IMFTopologyNode* This,REFGUID guidKey,REFPROPVARIANT Value,BOOL *pbResult) {
    return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_Compare(IMFTopologyNode* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,BOOL *pbResult) {
    return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetUINT32(IMFTopologyNode* This,REFGUID guidKey,UINT32 *punValue) {
    return This->lpVtbl->GetUINT32(This,guidKey,punValue);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetUINT64(IMFTopologyNode* This,REFGUID guidKey,UINT64 *punValue) {
    return This->lpVtbl->GetUINT64(This,guidKey,punValue);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetDouble(IMFTopologyNode* This,REFGUID guidKey,double *pfValue) {
    return This->lpVtbl->GetDouble(This,guidKey,pfValue);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetGUID(IMFTopologyNode* This,REFGUID guidKey,GUID *pguidValue) {
    return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetStringLength(IMFTopologyNode* This,REFGUID guidKey,UINT32 *pcchLength) {
    return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetString(IMFTopologyNode* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
    return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetAllocatedString(IMFTopologyNode* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
    return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetBlobSize(IMFTopologyNode* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetBlob(IMFTopologyNode* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetAllocatedBlob(IMFTopologyNode* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
    return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetUnknown(IMFTopologyNode* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
    return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_SetItem(IMFTopologyNode* This,REFGUID guidKey,REFPROPVARIANT Value) {
    return This->lpVtbl->SetItem(This,guidKey,Value);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_DeleteItem(IMFTopologyNode* This,REFGUID guidKey) {
    return This->lpVtbl->DeleteItem(This,guidKey);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_DeleteAllItems(IMFTopologyNode* This) {
    return This->lpVtbl->DeleteAllItems(This);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_SetUINT32(IMFTopologyNode* This,REFGUID guidKey,UINT32 unValue) {
    return This->lpVtbl->SetUINT32(This,guidKey,unValue);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_SetUINT64(IMFTopologyNode* This,REFGUID guidKey,UINT64 unValue) {
    return This->lpVtbl->SetUINT64(This,guidKey,unValue);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_SetDouble(IMFTopologyNode* This,REFGUID guidKey,double fValue) {
    return This->lpVtbl->SetDouble(This,guidKey,fValue);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_SetGUID(IMFTopologyNode* This,REFGUID guidKey,REFGUID guidValue) {
    return This->lpVtbl->SetGUID(This,guidKey,guidValue);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_SetString(IMFTopologyNode* This,REFGUID guidKey,LPCWSTR wszValue) {
    return This->lpVtbl->SetString(This,guidKey,wszValue);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_SetBlob(IMFTopologyNode* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
    return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_SetUnknown(IMFTopologyNode* This,REFGUID guidKey,IUnknown *pUnknown) {
    return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_LockStore(IMFTopologyNode* This) {
    return This->lpVtbl->LockStore(This);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_UnlockStore(IMFTopologyNode* This) {
    return This->lpVtbl->UnlockStore(This);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetCount(IMFTopologyNode* This,UINT32 *pcItems) {
    return This->lpVtbl->GetCount(This,pcItems);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetItemByIndex(IMFTopologyNode* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_CopyAllItems(IMFTopologyNode* This,IMFAttributes *pDest) {
    return This->lpVtbl->CopyAllItems(This,pDest);
}
/*** IMFTopologyNode methods ***/
static __WIDL_INLINE HRESULT IMFTopologyNode_SetObject(IMFTopologyNode* This,IUnknown *object) {
    return This->lpVtbl->SetObject(This,object);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetObject(IMFTopologyNode* This,IUnknown **object) {
    return This->lpVtbl->GetObject(This,object);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetNodeType(IMFTopologyNode* This,MF_TOPOLOGY_TYPE *type) {
    return This->lpVtbl->GetNodeType(This,type);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetTopoNodeID(IMFTopologyNode* This,TOPOID *id) {
    return This->lpVtbl->GetTopoNodeID(This,id);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_SetTopoNodeID(IMFTopologyNode* This,TOPOID id) {
    return This->lpVtbl->SetTopoNodeID(This,id);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetInputCount(IMFTopologyNode* This,DWORD *count) {
    return This->lpVtbl->GetInputCount(This,count);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetOutputCount(IMFTopologyNode* This,DWORD *count) {
    return This->lpVtbl->GetOutputCount(This,count);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_ConnectOutput(IMFTopologyNode* This,DWORD output_index,IMFTopologyNode *node,DWORD input_index) {
    return This->lpVtbl->ConnectOutput(This,output_index,node,input_index);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_DisconnectOutput(IMFTopologyNode* This,DWORD index) {
    return This->lpVtbl->DisconnectOutput(This,index);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetInput(IMFTopologyNode* This,DWORD input_index,IMFTopologyNode **node,DWORD *output_index) {
    return This->lpVtbl->GetInput(This,input_index,node,output_index);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetOutput(IMFTopologyNode* This,DWORD output_index,IMFTopologyNode **node,DWORD *input_index) {
    return This->lpVtbl->GetOutput(This,output_index,node,input_index);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_SetOutputPrefType(IMFTopologyNode* This,DWORD index,IMFMediaType *type) {
    return This->lpVtbl->SetOutputPrefType(This,index,type);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetOutputPrefType(IMFTopologyNode* This,DWORD output_index,IMFMediaType **type) {
    return This->lpVtbl->GetOutputPrefType(This,output_index,type);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_SetInputPrefType(IMFTopologyNode* This,DWORD index,IMFMediaType *type) {
    return This->lpVtbl->SetInputPrefType(This,index,type);
}
static __WIDL_INLINE HRESULT IMFTopologyNode_GetInputPrefType(IMFTopologyNode* This,DWORD index,IMFMediaType **type) {
    return This->lpVtbl->GetInputPrefType(This,index,type);
}
static __WIDL_INLINE 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 __WIDL_INLINE HRESULT IMFTopology_QueryInterface(IMFTopology* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFTopology_AddRef(IMFTopology* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFTopology_Release(IMFTopology* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFAttributes methods ***/
static __WIDL_INLINE HRESULT IMFTopology_GetItem(IMFTopology* This,REFGUID guidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItem(This,guidKey,pValue);
}
static __WIDL_INLINE HRESULT IMFTopology_GetItemType(IMFTopology* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
    return This->lpVtbl->GetItemType(This,guidKey,pType);
}
static __WIDL_INLINE HRESULT IMFTopology_CompareItem(IMFTopology* This,REFGUID guidKey,REFPROPVARIANT Value,BOOL *pbResult) {
    return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
}
static __WIDL_INLINE HRESULT IMFTopology_Compare(IMFTopology* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,BOOL *pbResult) {
    return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
}
static __WIDL_INLINE HRESULT IMFTopology_GetUINT32(IMFTopology* This,REFGUID guidKey,UINT32 *punValue) {
    return This->lpVtbl->GetUINT32(This,guidKey,punValue);
}
static __WIDL_INLINE HRESULT IMFTopology_GetUINT64(IMFTopology* This,REFGUID guidKey,UINT64 *punValue) {
    return This->lpVtbl->GetUINT64(This,guidKey,punValue);
}
static __WIDL_INLINE HRESULT IMFTopology_GetDouble(IMFTopology* This,REFGUID guidKey,double *pfValue) {
    return This->lpVtbl->GetDouble(This,guidKey,pfValue);
}
static __WIDL_INLINE HRESULT IMFTopology_GetGUID(IMFTopology* This,REFGUID guidKey,GUID *pguidValue) {
    return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
}
static __WIDL_INLINE HRESULT IMFTopology_GetStringLength(IMFTopology* This,REFGUID guidKey,UINT32 *pcchLength) {
    return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
}
static __WIDL_INLINE HRESULT IMFTopology_GetString(IMFTopology* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
    return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
}
static __WIDL_INLINE HRESULT IMFTopology_GetAllocatedString(IMFTopology* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
    return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
}
static __WIDL_INLINE HRESULT IMFTopology_GetBlobSize(IMFTopology* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
}
static __WIDL_INLINE HRESULT IMFTopology_GetBlob(IMFTopology* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
}
static __WIDL_INLINE HRESULT IMFTopology_GetAllocatedBlob(IMFTopology* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
    return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
}
static __WIDL_INLINE HRESULT IMFTopology_GetUnknown(IMFTopology* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
    return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
}
static __WIDL_INLINE HRESULT IMFTopology_SetItem(IMFTopology* This,REFGUID guidKey,REFPROPVARIANT Value) {
    return This->lpVtbl->SetItem(This,guidKey,Value);
}
static __WIDL_INLINE HRESULT IMFTopology_DeleteItem(IMFTopology* This,REFGUID guidKey) {
    return This->lpVtbl->DeleteItem(This,guidKey);
}
static __WIDL_INLINE HRESULT IMFTopology_DeleteAllItems(IMFTopology* This) {
    return This->lpVtbl->DeleteAllItems(This);
}
static __WIDL_INLINE HRESULT IMFTopology_SetUINT32(IMFTopology* This,REFGUID guidKey,UINT32 unValue) {
    return This->lpVtbl->SetUINT32(This,guidKey,unValue);
}
static __WIDL_INLINE HRESULT IMFTopology_SetUINT64(IMFTopology* This,REFGUID guidKey,UINT64 unValue) {
    return This->lpVtbl->SetUINT64(This,guidKey,unValue);
}
static __WIDL_INLINE HRESULT IMFTopology_SetDouble(IMFTopology* This,REFGUID guidKey,double fValue) {
    return This->lpVtbl->SetDouble(This,guidKey,fValue);
}
static __WIDL_INLINE HRESULT IMFTopology_SetGUID(IMFTopology* This,REFGUID guidKey,REFGUID guidValue) {
    return This->lpVtbl->SetGUID(This,guidKey,guidValue);
}
static __WIDL_INLINE HRESULT IMFTopology_SetString(IMFTopology* This,REFGUID guidKey,LPCWSTR wszValue) {
    return This->lpVtbl->SetString(This,guidKey,wszValue);
}
static __WIDL_INLINE HRESULT IMFTopology_SetBlob(IMFTopology* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
    return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
}
static __WIDL_INLINE HRESULT IMFTopology_SetUnknown(IMFTopology* This,REFGUID guidKey,IUnknown *pUnknown) {
    return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
}
static __WIDL_INLINE HRESULT IMFTopology_LockStore(IMFTopology* This) {
    return This->lpVtbl->LockStore(This);
}
static __WIDL_INLINE HRESULT IMFTopology_UnlockStore(IMFTopology* This) {
    return This->lpVtbl->UnlockStore(This);
}
static __WIDL_INLINE HRESULT IMFTopology_GetCount(IMFTopology* This,UINT32 *pcItems) {
    return This->lpVtbl->GetCount(This,pcItems);
}
static __WIDL_INLINE HRESULT IMFTopology_GetItemByIndex(IMFTopology* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
}
static __WIDL_INLINE HRESULT IMFTopology_CopyAllItems(IMFTopology* This,IMFAttributes *pDest) {
    return This->lpVtbl->CopyAllItems(This,pDest);
}
/*** IMFTopology methods ***/
static __WIDL_INLINE HRESULT IMFTopology_GetTopologyID(IMFTopology* This,TOPOID *id) {
    return This->lpVtbl->GetTopologyID(This,id);
}
static __WIDL_INLINE HRESULT IMFTopology_AddNode(IMFTopology* This,IMFTopologyNode *node) {
    return This->lpVtbl->AddNode(This,node);
}
static __WIDL_INLINE HRESULT IMFTopology_RemoveNode(IMFTopology* This,IMFTopologyNode *node) {
    return This->lpVtbl->RemoveNode(This,node);
}
static __WIDL_INLINE HRESULT IMFTopology_GetNodeCount(IMFTopology* This,WORD *nodes) {
    return This->lpVtbl->GetNodeCount(This,nodes);
}
static __WIDL_INLINE HRESULT IMFTopology_GetNode(IMFTopology* This,WORD index,IMFTopologyNode **node) {
    return This->lpVtbl->GetNode(This,index,node);
}
static __WIDL_INLINE HRESULT IMFTopology_Clear(IMFTopology* This) {
    return This->lpVtbl->Clear(This);
}
static __WIDL_INLINE HRESULT IMFTopology_CloneFrom(IMFTopology* This,IMFTopology *topology) {
    return This->lpVtbl->CloneFrom(This,topology);
}
static __WIDL_INLINE HRESULT IMFTopology_GetNodeByID(IMFTopology* This,TOPOID id,IMFTopologyNode **node) {
    return This->lpVtbl->GetNodeByID(This,id,node);
}
static __WIDL_INLINE HRESULT IMFTopology_GetSourceNodeCollection(IMFTopology* This,IMFCollection **collection) {
    return This->lpVtbl->GetSourceNodeCollection(This,collection);
}
static __WIDL_INLINE HRESULT IMFTopology_GetOutputNodeCollection(IMFTopology* This,IMFCollection **collection) {
    return This->lpVtbl->GetOutputNodeCollection(This,collection);
}
#endif
#endif

#endif


#endif  /* __IMFTopology_INTERFACE_DEFINED__ */

typedef struct _MFTOPONODE_ATTRIBUTE_UPDATE {
    TOPOID NodeId;
    GUID guidAttributeKey;
    MF_ATTRIBUTE_TYPE attrType;
    __C89_NAMELESS union {
        UINT32 u32;
        UINT64 u64;
        double d;
    } __C89_NAMELESSUNIONNAME;
} MFTOPONODE_ATTRIBUTE_UPDATE;
/*****************************************************************************
 * IMFTopologyNodeAttributeEditor interface
 */
#ifndef __IMFTopologyNodeAttributeEditor_INTERFACE_DEFINED__
#define __IMFTopologyNodeAttributeEditor_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFTopologyNodeAttributeEditor, 0x676aa6dd, 0x238a, 0x410d, 0xbb,0x99, 0x65,0x66,0x8d,0x01,0x60,0x5a);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("676aa6dd-238a-410d-bb99-65668d01605a")
IMFTopologyNodeAttributeEditor : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE UpdateNodeAttributes(
        TOPOID id,
        DWORD count,
        MFTOPONODE_ATTRIBUTE_UPDATE *attr_updates) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFTopologyNodeAttributeEditor, 0x676aa6dd, 0x238a, 0x410d, 0xbb,0x99, 0x65,0x66,0x8d,0x01,0x60,0x5a)
#endif
#else
typedef struct IMFTopologyNodeAttributeEditorVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFTopologyNodeAttributeEditor methods ***/
    HRESULT (STDMETHODCALLTYPE *UpdateNodeAttributes)(
        IMFTopologyNodeAttributeEditor *This,
        TOPOID id,
        DWORD count,
        MFTOPONODE_ATTRIBUTE_UPDATE *attr_updates);

    END_INTERFACE
} IMFTopologyNodeAttributeEditorVtbl;

interface IMFTopologyNodeAttributeEditor {
    CONST_VTBL IMFTopologyNodeAttributeEditorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFTopologyNodeAttributeEditor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFTopologyNodeAttributeEditor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFTopologyNodeAttributeEditor_Release(This) (This)->lpVtbl->Release(This)
/*** IMFTopologyNodeAttributeEditor methods ***/
#define IMFTopologyNodeAttributeEditor_UpdateNodeAttributes(This,id,count,attr_updates) (This)->lpVtbl->UpdateNodeAttributes(This,id,count,attr_updates)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFTopologyNodeAttributeEditor_QueryInterface(IMFTopologyNodeAttributeEditor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFTopologyNodeAttributeEditor_AddRef(IMFTopologyNodeAttributeEditor* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFTopologyNodeAttributeEditor_Release(IMFTopologyNodeAttributeEditor* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFTopologyNodeAttributeEditor methods ***/
static __WIDL_INLINE HRESULT IMFTopologyNodeAttributeEditor_UpdateNodeAttributes(IMFTopologyNodeAttributeEditor* This,TOPOID id,DWORD count,MFTOPONODE_ATTRIBUTE_UPDATE *attr_updates) {
    return This->lpVtbl->UpdateNodeAttributes(This,id,count,attr_updates);
}
#endif
#endif

#endif


#endif  /* __IMFTopologyNodeAttributeEditor_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFTopoLoader interface
 */
#ifndef __IMFTopoLoader_INTERFACE_DEFINED__
#define __IMFTopoLoader_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFTopoLoader, 0xde9a6157, 0xf660, 0x4643, 0xb5,0x6a, 0xdf,0x9f,0x79,0x98,0xc7,0xcd);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("de9a6157-f660-4643-b56a-df9f7998c7cd")
IMFTopoLoader : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Load(
        IMFTopology *input_topology,
        IMFTopology **output_topology,
        IMFTopology *current_topology) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFTopoLoader, 0xde9a6157, 0xf660, 0x4643, 0xb5,0x6a, 0xdf,0x9f,0x79,0x98,0xc7,0xcd)
#endif
#else
typedef struct IMFTopoLoaderVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFTopoLoader methods ***/
    HRESULT (STDMETHODCALLTYPE *Load)(
        IMFTopoLoader *This,
        IMFTopology *input_topology,
        IMFTopology **output_topology,
        IMFTopology *current_topology);

    END_INTERFACE
} IMFTopoLoaderVtbl;

interface IMFTopoLoader {
    CONST_VTBL IMFTopoLoaderVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFTopoLoader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFTopoLoader_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFTopoLoader_Release(This) (This)->lpVtbl->Release(This)
/*** IMFTopoLoader methods ***/
#define IMFTopoLoader_Load(This,input_topology,output_topology,current_topology) (This)->lpVtbl->Load(This,input_topology,output_topology,current_topology)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFTopoLoader_QueryInterface(IMFTopoLoader* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFTopoLoader_AddRef(IMFTopoLoader* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFTopoLoader_Release(IMFTopoLoader* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFTopoLoader methods ***/
static __WIDL_INLINE HRESULT IMFTopoLoader_Load(IMFTopoLoader* This,IMFTopology *input_topology,IMFTopology **output_topology,IMFTopology *current_topology) {
    return This->lpVtbl->Load(This,input_topology,output_topology,current_topology);
}
#endif
#endif

#endif


#endif  /* __IMFTopoLoader_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 __WIDL_INLINE HRESULT IMFMediaSession_QueryInterface(IMFMediaSession* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFMediaSession_AddRef(IMFMediaSession* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFMediaSession_Release(IMFMediaSession* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFMediaEventGenerator methods ***/
static __WIDL_INLINE HRESULT IMFMediaSession_GetEvent(IMFMediaSession* This,DWORD dwFlags,IMFMediaEvent **ppEvent) {
    return This->lpVtbl->GetEvent(This,dwFlags,ppEvent);
}
static __WIDL_INLINE HRESULT IMFMediaSession_BeginGetEvent(IMFMediaSession* This,IMFAsyncCallback *pCallback,IUnknown *punkState) {
    return This->lpVtbl->BeginGetEvent(This,pCallback,punkState);
}
static __WIDL_INLINE HRESULT IMFMediaSession_EndGetEvent(IMFMediaSession* This,IMFAsyncResult *pResult,IMFMediaEvent **ppEvent) {
    return This->lpVtbl->EndGetEvent(This,pResult,ppEvent);
}
static __WIDL_INLINE 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 __WIDL_INLINE HRESULT IMFMediaSession_SetTopology(IMFMediaSession* This,DWORD flags,IMFTopology *topology) {
    return This->lpVtbl->SetTopology(This,flags,topology);
}
static __WIDL_INLINE HRESULT IMFMediaSession_ClearTopologies(IMFMediaSession* This) {
    return This->lpVtbl->ClearTopologies(This);
}
static __WIDL_INLINE HRESULT IMFMediaSession_Start(IMFMediaSession* This,const GUID *format,const PROPVARIANT *start) {
    return This->lpVtbl->Start(This,format,start);
}
static __WIDL_INLINE HRESULT IMFMediaSession_Pause(IMFMediaSession* This) {
    return This->lpVtbl->Pause(This);
}
static __WIDL_INLINE HRESULT IMFMediaSession_Stop(IMFMediaSession* This) {
    return This->lpVtbl->Stop(This);
}
static __WIDL_INLINE HRESULT IMFMediaSession_Close(IMFMediaSession* This) {
    return This->lpVtbl->Close(This);
}
static __WIDL_INLINE HRESULT IMFMediaSession_Shutdown(IMFMediaSession* This) {
    return This->lpVtbl->Shutdown(This);
}
static __WIDL_INLINE HRESULT IMFMediaSession_GetClock(IMFMediaSession* This,IMFClock **clock) {
    return This->lpVtbl->GetClock(This,clock);
}
static __WIDL_INLINE HRESULT IMFMediaSession_GetSessionCapabilities(IMFMediaSession* This,DWORD *caps) {
    return This->lpVtbl->GetSessionCapabilities(This,caps);
}
static __WIDL_INLINE 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__ */

/*****************************************************************************
 * IMFByteStreamHandler interface
 */
#ifndef __IMFByteStreamHandler_INTERFACE_DEFINED__
#define __IMFByteStreamHandler_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFByteStreamHandler, 0xbb420aa4, 0x765b, 0x4a1f, 0x91,0xfe, 0xd6,0xa8,0xa1,0x43,0x92,0x4c);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("bb420aa4-765b-4a1f-91fe-d6a8a143924c")
IMFByteStreamHandler : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE BeginCreateObject(
        IMFByteStream *stream,
        const WCHAR *url,
        DWORD flags,
        IPropertyStore *props,
        IUnknown **cancel_cookie,
        IMFAsyncCallback *callback,
        IUnknown *state) = 0;

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

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

    virtual HRESULT STDMETHODCALLTYPE GetMaxNumberOfBytesRequiredForResolution(
        QWORD *bytes) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFByteStreamHandler, 0xbb420aa4, 0x765b, 0x4a1f, 0x91,0xfe, 0xd6,0xa8,0xa1,0x43,0x92,0x4c)
#endif
#else
typedef struct IMFByteStreamHandlerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFByteStreamHandler methods ***/
    HRESULT (STDMETHODCALLTYPE *BeginCreateObject)(
        IMFByteStreamHandler *This,
        IMFByteStream *stream,
        const WCHAR *url,
        DWORD flags,
        IPropertyStore *props,
        IUnknown **cancel_cookie,
        IMFAsyncCallback *callback,
        IUnknown *state);

    HRESULT (STDMETHODCALLTYPE *EndCreateObject)(
        IMFByteStreamHandler *This,
        IMFAsyncResult *result,
        MF_OBJECT_TYPE *obj_type,
        IUnknown **object);

    HRESULT (STDMETHODCALLTYPE *CancelObjectCreation)(
        IMFByteStreamHandler *This,
        IUnknown *cancel_cookie);

    HRESULT (STDMETHODCALLTYPE *GetMaxNumberOfBytesRequiredForResolution)(
        IMFByteStreamHandler *This,
        QWORD *bytes);

    END_INTERFACE
} IMFByteStreamHandlerVtbl;

interface IMFByteStreamHandler {
    CONST_VTBL IMFByteStreamHandlerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFByteStreamHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFByteStreamHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFByteStreamHandler_Release(This) (This)->lpVtbl->Release(This)
/*** IMFByteStreamHandler methods ***/
#define IMFByteStreamHandler_BeginCreateObject(This,stream,url,flags,props,cancel_cookie,callback,state) (This)->lpVtbl->BeginCreateObject(This,stream,url,flags,props,cancel_cookie,callback,state)
#define IMFByteStreamHandler_EndCreateObject(This,result,obj_type,object) (This)->lpVtbl->EndCreateObject(This,result,obj_type,object)
#define IMFByteStreamHandler_CancelObjectCreation(This,cancel_cookie) (This)->lpVtbl->CancelObjectCreation(This,cancel_cookie)
#define IMFByteStreamHandler_GetMaxNumberOfBytesRequiredForResolution(This,bytes) (This)->lpVtbl->GetMaxNumberOfBytesRequiredForResolution(This,bytes)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFByteStreamHandler_QueryInterface(IMFByteStreamHandler* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFByteStreamHandler_AddRef(IMFByteStreamHandler* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFByteStreamHandler_Release(IMFByteStreamHandler* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFByteStreamHandler methods ***/
static __WIDL_INLINE HRESULT IMFByteStreamHandler_BeginCreateObject(IMFByteStreamHandler* This,IMFByteStream *stream,const WCHAR *url,DWORD flags,IPropertyStore *props,IUnknown **cancel_cookie,IMFAsyncCallback *callback,IUnknown *state) {
    return This->lpVtbl->BeginCreateObject(This,stream,url,flags,props,cancel_cookie,callback,state);
}
static __WIDL_INLINE HRESULT IMFByteStreamHandler_EndCreateObject(IMFByteStreamHandler* This,IMFAsyncResult *result,MF_OBJECT_TYPE *obj_type,IUnknown **object) {
    return This->lpVtbl->EndCreateObject(This,result,obj_type,object);
}
static __WIDL_INLINE HRESULT IMFByteStreamHandler_CancelObjectCreation(IMFByteStreamHandler* This,IUnknown *cancel_cookie) {
    return This->lpVtbl->CancelObjectCreation(This,cancel_cookie);
}
static __WIDL_INLINE HRESULT IMFByteStreamHandler_GetMaxNumberOfBytesRequiredForResolution(IMFByteStreamHandler* This,QWORD *bytes) {
    return This->lpVtbl->GetMaxNumberOfBytesRequiredForResolution(This,bytes);
}
#endif
#endif

#endif


#endif  /* __IMFByteStreamHandler_INTERFACE_DEFINED__ */

typedef struct _MF_LEAKY_BUCKET_PAIR {
    DWORD dwBitrate;
    DWORD msBufferWindow;
} MF_LEAKY_BUCKET_PAIR;
typedef struct _MFBYTESTREAM_BUFFERING_PARAMS {
    QWORD cbTotalFileSize;
    QWORD cbPlayableDataSize;
    MF_LEAKY_BUCKET_PAIR *prgBuckets;
    DWORD cBuckets;
    QWORD qwNetBufferingTime;
    QWORD qwExtraBufferingTimeDuringSeek;
    QWORD qwPlayDuration;
    float dRate;
} MFBYTESTREAM_BUFFERING_PARAMS;
/*****************************************************************************
 * IMFByteStreamBuffering interface
 */
#ifndef __IMFByteStreamBuffering_INTERFACE_DEFINED__
#define __IMFByteStreamBuffering_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFByteStreamBuffering, 0x6d66d782, 0x1d4f, 0x4db7, 0x8c,0x63, 0xcb,0x8c,0x77,0xf1,0xef,0x5e);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6d66d782-1d4f-4db7-8c63-cb8c77f1ef5e")
IMFByteStreamBuffering : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetBufferingParams(
        MFBYTESTREAM_BUFFERING_PARAMS *params) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnableBuffering(
        BOOL enable) = 0;

    virtual HRESULT STDMETHODCALLTYPE StopBuffering(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFByteStreamBuffering, 0x6d66d782, 0x1d4f, 0x4db7, 0x8c,0x63, 0xcb,0x8c,0x77,0xf1,0xef,0x5e)
#endif
#else
typedef struct IMFByteStreamBufferingVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFByteStreamBuffering methods ***/
    HRESULT (STDMETHODCALLTYPE *SetBufferingParams)(
        IMFByteStreamBuffering *This,
        MFBYTESTREAM_BUFFERING_PARAMS *params);

    HRESULT (STDMETHODCALLTYPE *EnableBuffering)(
        IMFByteStreamBuffering *This,
        BOOL enable);

    HRESULT (STDMETHODCALLTYPE *StopBuffering)(
        IMFByteStreamBuffering *This);

    END_INTERFACE
} IMFByteStreamBufferingVtbl;

interface IMFByteStreamBuffering {
    CONST_VTBL IMFByteStreamBufferingVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFByteStreamBuffering_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFByteStreamBuffering_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFByteStreamBuffering_Release(This) (This)->lpVtbl->Release(This)
/*** IMFByteStreamBuffering methods ***/
#define IMFByteStreamBuffering_SetBufferingParams(This,params) (This)->lpVtbl->SetBufferingParams(This,params)
#define IMFByteStreamBuffering_EnableBuffering(This,enable) (This)->lpVtbl->EnableBuffering(This,enable)
#define IMFByteStreamBuffering_StopBuffering(This) (This)->lpVtbl->StopBuffering(This)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFByteStreamBuffering_QueryInterface(IMFByteStreamBuffering* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFByteStreamBuffering_AddRef(IMFByteStreamBuffering* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFByteStreamBuffering_Release(IMFByteStreamBuffering* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFByteStreamBuffering methods ***/
static __WIDL_INLINE HRESULT IMFByteStreamBuffering_SetBufferingParams(IMFByteStreamBuffering* This,MFBYTESTREAM_BUFFERING_PARAMS *params) {
    return This->lpVtbl->SetBufferingParams(This,params);
}
static __WIDL_INLINE HRESULT IMFByteStreamBuffering_EnableBuffering(IMFByteStreamBuffering* This,BOOL enable) {
    return This->lpVtbl->EnableBuffering(This,enable);
}
static __WIDL_INLINE HRESULT IMFByteStreamBuffering_StopBuffering(IMFByteStreamBuffering* This) {
    return This->lpVtbl->StopBuffering(This);
}
#endif
#endif

#endif


#endif  /* __IMFByteStreamBuffering_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFByteStreamCacheControl interface
 */
#ifndef __IMFByteStreamCacheControl_INTERFACE_DEFINED__
#define __IMFByteStreamCacheControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFByteStreamCacheControl, 0xf5042ea4, 0x7a96, 0x4a75, 0xaa,0x7b, 0x2b,0xe1,0xef,0x7f,0x88,0xd5);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("f5042ea4-7a96-4a75-aa7b-2be1ef7f88d5")
IMFByteStreamCacheControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE StopBackgroundTransfer(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFByteStreamCacheControl, 0xf5042ea4, 0x7a96, 0x4a75, 0xaa,0x7b, 0x2b,0xe1,0xef,0x7f,0x88,0xd5)
#endif
#else
typedef struct IMFByteStreamCacheControlVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFByteStreamCacheControl methods ***/
    HRESULT (STDMETHODCALLTYPE *StopBackgroundTransfer)(
        IMFByteStreamCacheControl *This);

    END_INTERFACE
} IMFByteStreamCacheControlVtbl;

interface IMFByteStreamCacheControl {
    CONST_VTBL IMFByteStreamCacheControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFByteStreamCacheControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFByteStreamCacheControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFByteStreamCacheControl_Release(This) (This)->lpVtbl->Release(This)
/*** IMFByteStreamCacheControl methods ***/
#define IMFByteStreamCacheControl_StopBackgroundTransfer(This) (This)->lpVtbl->StopBackgroundTransfer(This)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFByteStreamCacheControl_QueryInterface(IMFByteStreamCacheControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFByteStreamCacheControl_AddRef(IMFByteStreamCacheControl* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFByteStreamCacheControl_Release(IMFByteStreamCacheControl* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFByteStreamCacheControl methods ***/
static __WIDL_INLINE HRESULT IMFByteStreamCacheControl_StopBackgroundTransfer(IMFByteStreamCacheControl* This) {
    return This->lpVtbl->StopBackgroundTransfer(This);
}
#endif
#endif

#endif


#endif  /* __IMFByteStreamCacheControl_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFByteStreamTimeSeek interface
 */
#ifndef __IMFByteStreamTimeSeek_INTERFACE_DEFINED__
#define __IMFByteStreamTimeSeek_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFByteStreamTimeSeek, 0x64976bfa, 0xfb61, 0x4041, 0x90,0x69, 0x8c,0x9a,0x5f,0x65,0x9b,0xeb);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("64976bfa-fb61-4041-9069-8c9a5f659beb")
IMFByteStreamTimeSeek : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE IsTimeSeekSupported(
        BOOL *is_supported) = 0;

    virtual HRESULT STDMETHODCALLTYPE TimeSeek(
        QWORD position) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTimeSeekResult(
        QWORD *start_time,
        QWORD *stop_time,
        QWORD *duration) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFByteStreamTimeSeek, 0x64976bfa, 0xfb61, 0x4041, 0x90,0x69, 0x8c,0x9a,0x5f,0x65,0x9b,0xeb)
#endif
#else
typedef struct IMFByteStreamTimeSeekVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFByteStreamTimeSeek methods ***/
    HRESULT (STDMETHODCALLTYPE *IsTimeSeekSupported)(
        IMFByteStreamTimeSeek *This,
        BOOL *is_supported);

    HRESULT (STDMETHODCALLTYPE *TimeSeek)(
        IMFByteStreamTimeSeek *This,
        QWORD position);

    HRESULT (STDMETHODCALLTYPE *GetTimeSeekResult)(
        IMFByteStreamTimeSeek *This,
        QWORD *start_time,
        QWORD *stop_time,
        QWORD *duration);

    END_INTERFACE
} IMFByteStreamTimeSeekVtbl;

interface IMFByteStreamTimeSeek {
    CONST_VTBL IMFByteStreamTimeSeekVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFByteStreamTimeSeek_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFByteStreamTimeSeek_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFByteStreamTimeSeek_Release(This) (This)->lpVtbl->Release(This)
/*** IMFByteStreamTimeSeek methods ***/
#define IMFByteStreamTimeSeek_IsTimeSeekSupported(This,is_supported) (This)->lpVtbl->IsTimeSeekSupported(This,is_supported)
#define IMFByteStreamTimeSeek_TimeSeek(This,position) (This)->lpVtbl->TimeSeek(This,position)
#define IMFByteStreamTimeSeek_GetTimeSeekResult(This,start_time,stop_time,duration) (This)->lpVtbl->GetTimeSeekResult(This,start_time,stop_time,duration)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFByteStreamTimeSeek_QueryInterface(IMFByteStreamTimeSeek* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFByteStreamTimeSeek_AddRef(IMFByteStreamTimeSeek* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFByteStreamTimeSeek_Release(IMFByteStreamTimeSeek* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFByteStreamTimeSeek methods ***/
static __WIDL_INLINE HRESULT IMFByteStreamTimeSeek_IsTimeSeekSupported(IMFByteStreamTimeSeek* This,BOOL *is_supported) {
    return This->lpVtbl->IsTimeSeekSupported(This,is_supported);
}
static __WIDL_INLINE HRESULT IMFByteStreamTimeSeek_TimeSeek(IMFByteStreamTimeSeek* This,QWORD position) {
    return This->lpVtbl->TimeSeek(This,position);
}
static __WIDL_INLINE HRESULT IMFByteStreamTimeSeek_GetTimeSeekResult(IMFByteStreamTimeSeek* This,QWORD *start_time,QWORD *stop_time,QWORD *duration) {
    return This->lpVtbl->GetTimeSeekResult(This,start_time,stop_time,duration);
}
#endif
#endif

#endif


#endif  /* __IMFByteStreamTimeSeek_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFSchemeHandler interface
 */
#ifndef __IMFSchemeHandler_INTERFACE_DEFINED__
#define __IMFSchemeHandler_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFSchemeHandler, 0x6d4c7b74, 0x52a0, 0x4bb7, 0xb0,0xdb, 0x55,0xf2,0x9f,0x47,0xa6,0x68);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6d4c7b74-52a0-4bb7-b0db-55f29f47a668")
IMFSchemeHandler : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE BeginCreateObject(
        const WCHAR *url,
        DWORD flags,
        IPropertyStore *props,
        IUnknown **cancel_cookie,
        IMFAsyncCallback *callback,
        IUnknown *state) = 0;

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

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

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFSchemeHandler, 0x6d4c7b74, 0x52a0, 0x4bb7, 0xb0,0xdb, 0x55,0xf2,0x9f,0x47,0xa6,0x68)
#endif
#else
typedef struct IMFSchemeHandlerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFSchemeHandler methods ***/
    HRESULT (STDMETHODCALLTYPE *BeginCreateObject)(
        IMFSchemeHandler *This,
        const WCHAR *url,
        DWORD flags,
        IPropertyStore *props,
        IUnknown **cancel_cookie,
        IMFAsyncCallback *callback,
        IUnknown *state);

    HRESULT (STDMETHODCALLTYPE *EndCreateObject)(
        IMFSchemeHandler *This,
        IMFAsyncResult *result,
        MF_OBJECT_TYPE *obj_type,
        IUnknown **object);

    HRESULT (STDMETHODCALLTYPE *CancelObjectCreation)(
        IMFSchemeHandler *This,
        IUnknown *cancel_cookie);

    END_INTERFACE
} IMFSchemeHandlerVtbl;

interface IMFSchemeHandler {
    CONST_VTBL IMFSchemeHandlerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFSchemeHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFSchemeHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFSchemeHandler_Release(This) (This)->lpVtbl->Release(This)
/*** IMFSchemeHandler methods ***/
#define IMFSchemeHandler_BeginCreateObject(This,url,flags,props,cancel_cookie,callback,state) (This)->lpVtbl->BeginCreateObject(This,url,flags,props,cancel_cookie,callback,state)
#define IMFSchemeHandler_EndCreateObject(This,result,obj_type,object) (This)->lpVtbl->EndCreateObject(This,result,obj_type,object)
#define IMFSchemeHandler_CancelObjectCreation(This,cancel_cookie) (This)->lpVtbl->CancelObjectCreation(This,cancel_cookie)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFSchemeHandler_QueryInterface(IMFSchemeHandler* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFSchemeHandler_AddRef(IMFSchemeHandler* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFSchemeHandler_Release(IMFSchemeHandler* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFSchemeHandler methods ***/
static __WIDL_INLINE HRESULT IMFSchemeHandler_BeginCreateObject(IMFSchemeHandler* This,const WCHAR *url,DWORD flags,IPropertyStore *props,IUnknown **cancel_cookie,IMFAsyncCallback *callback,IUnknown *state) {
    return This->lpVtbl->BeginCreateObject(This,url,flags,props,cancel_cookie,callback,state);
}
static __WIDL_INLINE HRESULT IMFSchemeHandler_EndCreateObject(IMFSchemeHandler* This,IMFAsyncResult *result,MF_OBJECT_TYPE *obj_type,IUnknown **object) {
    return This->lpVtbl->EndCreateObject(This,result,obj_type,object);
}
static __WIDL_INLINE HRESULT IMFSchemeHandler_CancelObjectCreation(IMFSchemeHandler* This,IUnknown *cancel_cookie) {
    return This->lpVtbl->CancelObjectCreation(This,cancel_cookie);
}
#endif
#endif

#endif


#endif  /* __IMFSchemeHandler_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 CancelObjectCreation(
        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 *CancelObjectCreation)(
        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_CancelObjectCreation(This,cancel_cookie) (This)->lpVtbl->CancelObjectCreation(This,cancel_cookie)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFSourceResolver_QueryInterface(IMFSourceResolver* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFSourceResolver_AddRef(IMFSourceResolver* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFSourceResolver_Release(IMFSourceResolver* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFSourceResolver methods ***/
static __WIDL_INLINE 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 __WIDL_INLINE 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 __WIDL_INLINE 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 __WIDL_INLINE HRESULT IMFSourceResolver_EndCreateObjectFromURL(IMFSourceResolver* This,IMFAsyncResult *result,MF_OBJECT_TYPE *obj_type,IUnknown **object) {
    return This->lpVtbl->EndCreateObjectFromURL(This,result,obj_type,object);
}
static __WIDL_INLINE 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 __WIDL_INLINE HRESULT IMFSourceResolver_EndCreateObjectFromByteStream(IMFSourceResolver* This,IMFAsyncResult *result,MF_OBJECT_TYPE *obj_type,IUnknown **object) {
    return This->lpVtbl->EndCreateObjectFromByteStream(This,result,obj_type,object);
}
static __WIDL_INLINE HRESULT IMFSourceResolver_CancelObjectCreation(IMFSourceResolver* This,IUnknown *cancel_cookie) {
    return This->lpVtbl->CancelObjectCreation(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 __WIDL_INLINE HRESULT IMFMediaTypeHandler_QueryInterface(IMFMediaTypeHandler* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFMediaTypeHandler_AddRef(IMFMediaTypeHandler* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFMediaTypeHandler_Release(IMFMediaTypeHandler* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFMediaTypeHandler methods ***/
static __WIDL_INLINE HRESULT IMFMediaTypeHandler_IsMediaTypeSupported(IMFMediaTypeHandler* This,IMFMediaType *in_type,IMFMediaType **out_type) {
    return This->lpVtbl->IsMediaTypeSupported(This,in_type,out_type);
}
static __WIDL_INLINE HRESULT IMFMediaTypeHandler_GetMediaTypeCount(IMFMediaTypeHandler* This,DWORD *count) {
    return This->lpVtbl->GetMediaTypeCount(This,count);
}
static __WIDL_INLINE HRESULT IMFMediaTypeHandler_GetMediaTypeByIndex(IMFMediaTypeHandler* This,DWORD index,IMFMediaType **type) {
    return This->lpVtbl->GetMediaTypeByIndex(This,index,type);
}
static __WIDL_INLINE HRESULT IMFMediaTypeHandler_SetCurrentMediaType(IMFMediaTypeHandler* This,IMFMediaType *type) {
    return This->lpVtbl->SetCurrentMediaType(This,type);
}
static __WIDL_INLINE HRESULT IMFMediaTypeHandler_GetCurrentMediaType(IMFMediaTypeHandler* This,IMFMediaType **type) {
    return This->lpVtbl->GetCurrentMediaType(This,type);
}
static __WIDL_INLINE 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 __WIDL_INLINE HRESULT IMFStreamDescriptor_QueryInterface(IMFStreamDescriptor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFStreamDescriptor_AddRef(IMFStreamDescriptor* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFStreamDescriptor_Release(IMFStreamDescriptor* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFAttributes methods ***/
static __WIDL_INLINE HRESULT IMFStreamDescriptor_GetItem(IMFStreamDescriptor* This,REFGUID guidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItem(This,guidKey,pValue);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_GetItemType(IMFStreamDescriptor* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
    return This->lpVtbl->GetItemType(This,guidKey,pType);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_CompareItem(IMFStreamDescriptor* This,REFGUID guidKey,REFPROPVARIANT Value,BOOL *pbResult) {
    return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_Compare(IMFStreamDescriptor* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,BOOL *pbResult) {
    return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_GetUINT32(IMFStreamDescriptor* This,REFGUID guidKey,UINT32 *punValue) {
    return This->lpVtbl->GetUINT32(This,guidKey,punValue);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_GetUINT64(IMFStreamDescriptor* This,REFGUID guidKey,UINT64 *punValue) {
    return This->lpVtbl->GetUINT64(This,guidKey,punValue);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_GetDouble(IMFStreamDescriptor* This,REFGUID guidKey,double *pfValue) {
    return This->lpVtbl->GetDouble(This,guidKey,pfValue);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_GetGUID(IMFStreamDescriptor* This,REFGUID guidKey,GUID *pguidValue) {
    return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_GetStringLength(IMFStreamDescriptor* This,REFGUID guidKey,UINT32 *pcchLength) {
    return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_GetString(IMFStreamDescriptor* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
    return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_GetAllocatedString(IMFStreamDescriptor* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
    return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_GetBlobSize(IMFStreamDescriptor* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_GetBlob(IMFStreamDescriptor* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_GetAllocatedBlob(IMFStreamDescriptor* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
    return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_GetUnknown(IMFStreamDescriptor* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
    return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_SetItem(IMFStreamDescriptor* This,REFGUID guidKey,REFPROPVARIANT Value) {
    return This->lpVtbl->SetItem(This,guidKey,Value);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_DeleteItem(IMFStreamDescriptor* This,REFGUID guidKey) {
    return This->lpVtbl->DeleteItem(This,guidKey);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_DeleteAllItems(IMFStreamDescriptor* This) {
    return This->lpVtbl->DeleteAllItems(This);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_SetUINT32(IMFStreamDescriptor* This,REFGUID guidKey,UINT32 unValue) {
    return This->lpVtbl->SetUINT32(This,guidKey,unValue);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_SetUINT64(IMFStreamDescriptor* This,REFGUID guidKey,UINT64 unValue) {
    return This->lpVtbl->SetUINT64(This,guidKey,unValue);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_SetDouble(IMFStreamDescriptor* This,REFGUID guidKey,double fValue) {
    return This->lpVtbl->SetDouble(This,guidKey,fValue);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_SetGUID(IMFStreamDescriptor* This,REFGUID guidKey,REFGUID guidValue) {
    return This->lpVtbl->SetGUID(This,guidKey,guidValue);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_SetString(IMFStreamDescriptor* This,REFGUID guidKey,LPCWSTR wszValue) {
    return This->lpVtbl->SetString(This,guidKey,wszValue);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_SetBlob(IMFStreamDescriptor* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
    return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_SetUnknown(IMFStreamDescriptor* This,REFGUID guidKey,IUnknown *pUnknown) {
    return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_LockStore(IMFStreamDescriptor* This) {
    return This->lpVtbl->LockStore(This);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_UnlockStore(IMFStreamDescriptor* This) {
    return This->lpVtbl->UnlockStore(This);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_GetCount(IMFStreamDescriptor* This,UINT32 *pcItems) {
    return This->lpVtbl->GetCount(This,pcItems);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_GetItemByIndex(IMFStreamDescriptor* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
}
static __WIDL_INLINE HRESULT IMFStreamDescriptor_CopyAllItems(IMFStreamDescriptor* This,IMFAttributes *pDest) {
    return This->lpVtbl->CopyAllItems(This,pDest);
}
/*** IMFStreamDescriptor methods ***/
static __WIDL_INLINE HRESULT IMFStreamDescriptor_GetStreamIdentifier(IMFStreamDescriptor* This,DWORD *identifier) {
    return This->lpVtbl->GetStreamIdentifier(This,identifier);
}
static __WIDL_INLINE 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 __WIDL_INLINE HRESULT IMFClockStateSink_QueryInterface(IMFClockStateSink* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFClockStateSink_AddRef(IMFClockStateSink* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFClockStateSink_Release(IMFClockStateSink* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFClockStateSink methods ***/
static __WIDL_INLINE HRESULT IMFClockStateSink_OnClockStart(IMFClockStateSink* This,MFTIME hnsSystemTime,LONGLONG llClockStartOffset) {
    return This->lpVtbl->OnClockStart(This,hnsSystemTime,llClockStartOffset);
}
static __WIDL_INLINE HRESULT IMFClockStateSink_OnClockStop(IMFClockStateSink* This,MFTIME hnssSystemTime) {
    return This->lpVtbl->OnClockStop(This,hnssSystemTime);
}
static __WIDL_INLINE HRESULT IMFClockStateSink_OnClockPause(IMFClockStateSink* This,MFTIME hnsSystemTime) {
    return This->lpVtbl->OnClockPause(This,hnsSystemTime);
}
static __WIDL_INLINE HRESULT IMFClockStateSink_OnClockRestart(IMFClockStateSink* This,MFTIME hnsSystemTime) {
    return This->lpVtbl->OnClockRestart(This,hnsSystemTime);
}
static __WIDL_INLINE 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 __WIDL_INLINE HRESULT IMFGetService_QueryInterface(IMFGetService* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFGetService_AddRef(IMFGetService* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFGetService_Release(IMFGetService* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFGetService methods ***/
static __WIDL_INLINE 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__ */

/*****************************************************************************
 * IMFPresentationDescriptor interface
 */
#ifndef __IMFPresentationDescriptor_INTERFACE_DEFINED__
#define __IMFPresentationDescriptor_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFPresentationDescriptor, 0x03cb2711, 0x24d7, 0x4db6, 0xa1,0x7f, 0xf3,0xa7,0xa4,0x79,0xa5,0x36);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("03cb2711-24d7-4db6-a17f-f3a7a479a536")
IMFPresentationDescriptor : public IMFAttributes
{
    virtual HRESULT STDMETHODCALLTYPE GetStreamDescriptorCount(
        DWORD *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStreamDescriptorByIndex(
        DWORD index,
        BOOL *selected,
        IMFStreamDescriptor **descriptor) = 0;

    virtual HRESULT STDMETHODCALLTYPE SelectStream(
        DWORD index) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeselectStream(
        DWORD index) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IMFPresentationDescriptor **descriptor) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFPresentationDescriptor, 0x03cb2711, 0x24d7, 0x4db6, 0xa1,0x7f, 0xf3,0xa7,0xa4,0x79,0xa5,0x36)
#endif
#else
typedef struct IMFPresentationDescriptorVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /*** IMFPresentationDescriptor methods ***/
    HRESULT (STDMETHODCALLTYPE *GetStreamDescriptorCount)(
        IMFPresentationDescriptor *This,
        DWORD *count);

    HRESULT (STDMETHODCALLTYPE *GetStreamDescriptorByIndex)(
        IMFPresentationDescriptor *This,
        DWORD index,
        BOOL *selected,
        IMFStreamDescriptor **descriptor);

    HRESULT (STDMETHODCALLTYPE *SelectStream)(
        IMFPresentationDescriptor *This,
        DWORD index);

    HRESULT (STDMETHODCALLTYPE *DeselectStream)(
        IMFPresentationDescriptor *This,
        DWORD index);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IMFPresentationDescriptor *This,
        IMFPresentationDescriptor **descriptor);

    END_INTERFACE
} IMFPresentationDescriptorVtbl;

interface IMFPresentationDescriptor {
    CONST_VTBL IMFPresentationDescriptorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFPresentationDescriptor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFPresentationDescriptor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFPresentationDescriptor_Release(This) (This)->lpVtbl->Release(This)
/*** IMFAttributes methods ***/
#define IMFPresentationDescriptor_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
#define IMFPresentationDescriptor_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
#define IMFPresentationDescriptor_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
#define IMFPresentationDescriptor_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
#define IMFPresentationDescriptor_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
#define IMFPresentationDescriptor_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
#define IMFPresentationDescriptor_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
#define IMFPresentationDescriptor_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
#define IMFPresentationDescriptor_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
#define IMFPresentationDescriptor_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
#define IMFPresentationDescriptor_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
#define IMFPresentationDescriptor_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
#define IMFPresentationDescriptor_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
#define IMFPresentationDescriptor_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
#define IMFPresentationDescriptor_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
#define IMFPresentationDescriptor_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
#define IMFPresentationDescriptor_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
#define IMFPresentationDescriptor_DeleteAllItems(This) (This)->lpVtbl->DeleteAllItems(This)
#define IMFPresentationDescriptor_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
#define IMFPresentationDescriptor_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
#define IMFPresentationDescriptor_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
#define IMFPresentationDescriptor_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
#define IMFPresentationDescriptor_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
#define IMFPresentationDescriptor_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
#define IMFPresentationDescriptor_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
#define IMFPresentationDescriptor_LockStore(This) (This)->lpVtbl->LockStore(This)
#define IMFPresentationDescriptor_UnlockStore(This) (This)->lpVtbl->UnlockStore(This)
#define IMFPresentationDescriptor_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
#define IMFPresentationDescriptor_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
#define IMFPresentationDescriptor_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
/*** IMFPresentationDescriptor methods ***/
#define IMFPresentationDescriptor_GetStreamDescriptorCount(This,count) (This)->lpVtbl->GetStreamDescriptorCount(This,count)
#define IMFPresentationDescriptor_GetStreamDescriptorByIndex(This,index,selected,descriptor) (This)->lpVtbl->GetStreamDescriptorByIndex(This,index,selected,descriptor)
#define IMFPresentationDescriptor_SelectStream(This,index) (This)->lpVtbl->SelectStream(This,index)
#define IMFPresentationDescriptor_DeselectStream(This,index) (This)->lpVtbl->DeselectStream(This,index)
#define IMFPresentationDescriptor_Clone(This,descriptor) (This)->lpVtbl->Clone(This,descriptor)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_QueryInterface(IMFPresentationDescriptor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFPresentationDescriptor_AddRef(IMFPresentationDescriptor* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFPresentationDescriptor_Release(IMFPresentationDescriptor* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFAttributes methods ***/
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_GetItem(IMFPresentationDescriptor* This,REFGUID guidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItem(This,guidKey,pValue);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_GetItemType(IMFPresentationDescriptor* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
    return This->lpVtbl->GetItemType(This,guidKey,pType);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_CompareItem(IMFPresentationDescriptor* This,REFGUID guidKey,REFPROPVARIANT Value,BOOL *pbResult) {
    return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_Compare(IMFPresentationDescriptor* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,BOOL *pbResult) {
    return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_GetUINT32(IMFPresentationDescriptor* This,REFGUID guidKey,UINT32 *punValue) {
    return This->lpVtbl->GetUINT32(This,guidKey,punValue);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_GetUINT64(IMFPresentationDescriptor* This,REFGUID guidKey,UINT64 *punValue) {
    return This->lpVtbl->GetUINT64(This,guidKey,punValue);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_GetDouble(IMFPresentationDescriptor* This,REFGUID guidKey,double *pfValue) {
    return This->lpVtbl->GetDouble(This,guidKey,pfValue);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_GetGUID(IMFPresentationDescriptor* This,REFGUID guidKey,GUID *pguidValue) {
    return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_GetStringLength(IMFPresentationDescriptor* This,REFGUID guidKey,UINT32 *pcchLength) {
    return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_GetString(IMFPresentationDescriptor* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
    return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_GetAllocatedString(IMFPresentationDescriptor* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
    return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_GetBlobSize(IMFPresentationDescriptor* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_GetBlob(IMFPresentationDescriptor* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_GetAllocatedBlob(IMFPresentationDescriptor* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
    return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_GetUnknown(IMFPresentationDescriptor* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
    return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_SetItem(IMFPresentationDescriptor* This,REFGUID guidKey,REFPROPVARIANT Value) {
    return This->lpVtbl->SetItem(This,guidKey,Value);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_DeleteItem(IMFPresentationDescriptor* This,REFGUID guidKey) {
    return This->lpVtbl->DeleteItem(This,guidKey);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_DeleteAllItems(IMFPresentationDescriptor* This) {
    return This->lpVtbl->DeleteAllItems(This);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_SetUINT32(IMFPresentationDescriptor* This,REFGUID guidKey,UINT32 unValue) {
    return This->lpVtbl->SetUINT32(This,guidKey,unValue);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_SetUINT64(IMFPresentationDescriptor* This,REFGUID guidKey,UINT64 unValue) {
    return This->lpVtbl->SetUINT64(This,guidKey,unValue);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_SetDouble(IMFPresentationDescriptor* This,REFGUID guidKey,double fValue) {
    return This->lpVtbl->SetDouble(This,guidKey,fValue);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_SetGUID(IMFPresentationDescriptor* This,REFGUID guidKey,REFGUID guidValue) {
    return This->lpVtbl->SetGUID(This,guidKey,guidValue);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_SetString(IMFPresentationDescriptor* This,REFGUID guidKey,LPCWSTR wszValue) {
    return This->lpVtbl->SetString(This,guidKey,wszValue);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_SetBlob(IMFPresentationDescriptor* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
    return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_SetUnknown(IMFPresentationDescriptor* This,REFGUID guidKey,IUnknown *pUnknown) {
    return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_LockStore(IMFPresentationDescriptor* This) {
    return This->lpVtbl->LockStore(This);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_UnlockStore(IMFPresentationDescriptor* This) {
    return This->lpVtbl->UnlockStore(This);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_GetCount(IMFPresentationDescriptor* This,UINT32 *pcItems) {
    return This->lpVtbl->GetCount(This,pcItems);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_GetItemByIndex(IMFPresentationDescriptor* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_CopyAllItems(IMFPresentationDescriptor* This,IMFAttributes *pDest) {
    return This->lpVtbl->CopyAllItems(This,pDest);
}
/*** IMFPresentationDescriptor methods ***/
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_GetStreamDescriptorCount(IMFPresentationDescriptor* This,DWORD *count) {
    return This->lpVtbl->GetStreamDescriptorCount(This,count);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_GetStreamDescriptorByIndex(IMFPresentationDescriptor* This,DWORD index,BOOL *selected,IMFStreamDescriptor **descriptor) {
    return This->lpVtbl->GetStreamDescriptorByIndex(This,index,selected,descriptor);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_SelectStream(IMFPresentationDescriptor* This,DWORD index) {
    return This->lpVtbl->SelectStream(This,index);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_DeselectStream(IMFPresentationDescriptor* This,DWORD index) {
    return This->lpVtbl->DeselectStream(This,index);
}
static __WIDL_INLINE HRESULT IMFPresentationDescriptor_Clone(IMFPresentationDescriptor* This,IMFPresentationDescriptor **descriptor) {
    return This->lpVtbl->Clone(This,descriptor);
}
#endif
#endif

#endif


#endif  /* __IMFPresentationDescriptor_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFMetadata interface
 */
#ifndef __IMFMetadata_INTERFACE_DEFINED__
#define __IMFMetadata_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFMetadata, 0xf88cfb8c, 0xef16, 0x4991, 0xb4,0x50, 0xcb,0x8c,0x69,0xe5,0x17,0x04);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("f88cfb8c-ef16-4991-b450-cb8c69e51704")
IMFMetadata : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetLanguage(
        const WCHAR *lang) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLanguage(
        WCHAR **lang) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAllLanguages(
        PROPVARIANT *languages) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetProperty(
        const WCHAR *name,
        const PROPVARIANT *values) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetProperty(
        const WCHAR *name,
        PROPVARIANT *values) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteProperty(
        const WCHAR *name) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAllPropertyNames(
        PROPVARIANT *names) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFMetadata, 0xf88cfb8c, 0xef16, 0x4991, 0xb4,0x50, 0xcb,0x8c,0x69,0xe5,0x17,0x04)
#endif
#else
typedef struct IMFMetadataVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFMetadata methods ***/
    HRESULT (STDMETHODCALLTYPE *SetLanguage)(
        IMFMetadata *This,
        const WCHAR *lang);

    HRESULT (STDMETHODCALLTYPE *GetLanguage)(
        IMFMetadata *This,
        WCHAR **lang);

    HRESULT (STDMETHODCALLTYPE *GetAllLanguages)(
        IMFMetadata *This,
        PROPVARIANT *languages);

    HRESULT (STDMETHODCALLTYPE *SetProperty)(
        IMFMetadata *This,
        const WCHAR *name,
        const PROPVARIANT *values);

    HRESULT (STDMETHODCALLTYPE *GetProperty)(
        IMFMetadata *This,
        const WCHAR *name,
        PROPVARIANT *values);

    HRESULT (STDMETHODCALLTYPE *DeleteProperty)(
        IMFMetadata *This,
        const WCHAR *name);

    HRESULT (STDMETHODCALLTYPE *GetAllPropertyNames)(
        IMFMetadata *This,
        PROPVARIANT *names);

    END_INTERFACE
} IMFMetadataVtbl;

interface IMFMetadata {
    CONST_VTBL IMFMetadataVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFMetadata_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFMetadata_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFMetadata_Release(This) (This)->lpVtbl->Release(This)
/*** IMFMetadata methods ***/
#define IMFMetadata_SetLanguage(This,lang) (This)->lpVtbl->SetLanguage(This,lang)
#define IMFMetadata_GetLanguage(This,lang) (This)->lpVtbl->GetLanguage(This,lang)
#define IMFMetadata_GetAllLanguages(This,languages) (This)->lpVtbl->GetAllLanguages(This,languages)
#define IMFMetadata_SetProperty(This,name,values) (This)->lpVtbl->SetProperty(This,name,values)
#define IMFMetadata_GetProperty(This,name,values) (This)->lpVtbl->GetProperty(This,name,values)
#define IMFMetadata_DeleteProperty(This,name) (This)->lpVtbl->DeleteProperty(This,name)
#define IMFMetadata_GetAllPropertyNames(This,names) (This)->lpVtbl->GetAllPropertyNames(This,names)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFMetadata_QueryInterface(IMFMetadata* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFMetadata_AddRef(IMFMetadata* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFMetadata_Release(IMFMetadata* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFMetadata methods ***/
static __WIDL_INLINE HRESULT IMFMetadata_SetLanguage(IMFMetadata* This,const WCHAR *lang) {
    return This->lpVtbl->SetLanguage(This,lang);
}
static __WIDL_INLINE HRESULT IMFMetadata_GetLanguage(IMFMetadata* This,WCHAR **lang) {
    return This->lpVtbl->GetLanguage(This,lang);
}
static __WIDL_INLINE HRESULT IMFMetadata_GetAllLanguages(IMFMetadata* This,PROPVARIANT *languages) {
    return This->lpVtbl->GetAllLanguages(This,languages);
}
static __WIDL_INLINE HRESULT IMFMetadata_SetProperty(IMFMetadata* This,const WCHAR *name,const PROPVARIANT *values) {
    return This->lpVtbl->SetProperty(This,name,values);
}
static __WIDL_INLINE HRESULT IMFMetadata_GetProperty(IMFMetadata* This,const WCHAR *name,PROPVARIANT *values) {
    return This->lpVtbl->GetProperty(This,name,values);
}
static __WIDL_INLINE HRESULT IMFMetadata_DeleteProperty(IMFMetadata* This,const WCHAR *name) {
    return This->lpVtbl->DeleteProperty(This,name);
}
static __WIDL_INLINE HRESULT IMFMetadata_GetAllPropertyNames(IMFMetadata* This,PROPVARIANT *names) {
    return This->lpVtbl->GetAllPropertyNames(This,names);
}
#endif
#endif

#endif


#endif  /* __IMFMetadata_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFMetadataProvider interface
 */
#ifndef __IMFMetadataProvider_INTERFACE_DEFINED__
#define __IMFMetadataProvider_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFMetadataProvider, 0x56181d2d, 0xe221, 0x4adb, 0xb1,0xc8, 0x3c,0xee,0x6a,0x53,0xf7,0x6f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("56181d2d-e221-4adb-b1c8-3cee6a53f76f")
IMFMetadataProvider : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetMFMetadata(
        IMFPresentationDescriptor *descriptor,
        DWORD identifier,
        DWORD flags,
        IMFMetadata **metadata) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFMetadataProvider, 0x56181d2d, 0xe221, 0x4adb, 0xb1,0xc8, 0x3c,0xee,0x6a,0x53,0xf7,0x6f)
#endif
#else
typedef struct IMFMetadataProviderVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFMetadataProvider methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMFMetadata)(
        IMFMetadataProvider *This,
        IMFPresentationDescriptor *descriptor,
        DWORD identifier,
        DWORD flags,
        IMFMetadata **metadata);

    END_INTERFACE
} IMFMetadataProviderVtbl;

interface IMFMetadataProvider {
    CONST_VTBL IMFMetadataProviderVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFMetadataProvider_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFMetadataProvider_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFMetadataProvider_Release(This) (This)->lpVtbl->Release(This)
/*** IMFMetadataProvider methods ***/
#define IMFMetadataProvider_GetMFMetadata(This,descriptor,identifier,flags,metadata) (This)->lpVtbl->GetMFMetadata(This,descriptor,identifier,flags,metadata)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFMetadataProvider_QueryInterface(IMFMetadataProvider* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFMetadataProvider_AddRef(IMFMetadataProvider* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFMetadataProvider_Release(IMFMetadataProvider* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFMetadataProvider methods ***/
static __WIDL_INLINE HRESULT IMFMetadataProvider_GetMFMetadata(IMFMetadataProvider* This,IMFPresentationDescriptor *descriptor,DWORD identifier,DWORD flags,IMFMetadata **metadata) {
    return This->lpVtbl->GetMFMetadata(This,descriptor,identifier,flags,metadata);
}
#endif
#endif

#endif


#endif  /* __IMFMetadataProvider_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFSequencerSource interface
 */
#ifndef __IMFSequencerSource_INTERFACE_DEFINED__
#define __IMFSequencerSource_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFSequencerSource, 0x197cd219, 0x19cb, 0x4de1, 0xa6,0x4c, 0xac,0xf2,0xed,0xcb,0xe5,0x9e);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("197cd219-19cb-4de1-a64c-acf2edcbe59e")
IMFSequencerSource : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE AppendTopology(
        IMFTopology *topology,
        DWORD flags,
        MFSequencerElementId *element) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteTopology(
        MFSequencerElementId element) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPresentationContext(
        IMFPresentationDescriptor *pd,
        MFSequencerElementId *id,
        IMFTopology **topology) = 0;

    virtual HRESULT STDMETHODCALLTYPE UpdateTopology(
        MFSequencerElementId od,
        IMFTopology *topology) = 0;

    virtual HRESULT STDMETHODCALLTYPE UpdateTopologyFlags(
        MFSequencerElementId id,
        DWORD flags) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFSequencerSource, 0x197cd219, 0x19cb, 0x4de1, 0xa6,0x4c, 0xac,0xf2,0xed,0xcb,0xe5,0x9e)
#endif
#else
typedef struct IMFSequencerSourceVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFSequencerSource methods ***/
    HRESULT (STDMETHODCALLTYPE *AppendTopology)(
        IMFSequencerSource *This,
        IMFTopology *topology,
        DWORD flags,
        MFSequencerElementId *element);

    HRESULT (STDMETHODCALLTYPE *DeleteTopology)(
        IMFSequencerSource *This,
        MFSequencerElementId element);

    HRESULT (STDMETHODCALLTYPE *GetPresentationContext)(
        IMFSequencerSource *This,
        IMFPresentationDescriptor *pd,
        MFSequencerElementId *id,
        IMFTopology **topology);

    HRESULT (STDMETHODCALLTYPE *UpdateTopology)(
        IMFSequencerSource *This,
        MFSequencerElementId od,
        IMFTopology *topology);

    HRESULT (STDMETHODCALLTYPE *UpdateTopologyFlags)(
        IMFSequencerSource *This,
        MFSequencerElementId id,
        DWORD flags);

    END_INTERFACE
} IMFSequencerSourceVtbl;

interface IMFSequencerSource {
    CONST_VTBL IMFSequencerSourceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFSequencerSource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFSequencerSource_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFSequencerSource_Release(This) (This)->lpVtbl->Release(This)
/*** IMFSequencerSource methods ***/
#define IMFSequencerSource_AppendTopology(This,topology,flags,element) (This)->lpVtbl->AppendTopology(This,topology,flags,element)
#define IMFSequencerSource_DeleteTopology(This,element) (This)->lpVtbl->DeleteTopology(This,element)
#define IMFSequencerSource_GetPresentationContext(This,pd,id,topology) (This)->lpVtbl->GetPresentationContext(This,pd,id,topology)
#define IMFSequencerSource_UpdateTopology(This,od,topology) (This)->lpVtbl->UpdateTopology(This,od,topology)
#define IMFSequencerSource_UpdateTopologyFlags(This,id,flags) (This)->lpVtbl->UpdateTopologyFlags(This,id,flags)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFSequencerSource_QueryInterface(IMFSequencerSource* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFSequencerSource_AddRef(IMFSequencerSource* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFSequencerSource_Release(IMFSequencerSource* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFSequencerSource methods ***/
static __WIDL_INLINE HRESULT IMFSequencerSource_AppendTopology(IMFSequencerSource* This,IMFTopology *topology,DWORD flags,MFSequencerElementId *element) {
    return This->lpVtbl->AppendTopology(This,topology,flags,element);
}
static __WIDL_INLINE HRESULT IMFSequencerSource_DeleteTopology(IMFSequencerSource* This,MFSequencerElementId element) {
    return This->lpVtbl->DeleteTopology(This,element);
}
static __WIDL_INLINE HRESULT IMFSequencerSource_GetPresentationContext(IMFSequencerSource* This,IMFPresentationDescriptor *pd,MFSequencerElementId *id,IMFTopology **topology) {
    return This->lpVtbl->GetPresentationContext(This,pd,id,topology);
}
static __WIDL_INLINE HRESULT IMFSequencerSource_UpdateTopology(IMFSequencerSource* This,MFSequencerElementId od,IMFTopology *topology) {
    return This->lpVtbl->UpdateTopology(This,od,topology);
}
static __WIDL_INLINE HRESULT IMFSequencerSource_UpdateTopologyFlags(IMFSequencerSource* This,MFSequencerElementId id,DWORD flags) {
    return This->lpVtbl->UpdateTopologyFlags(This,id,flags);
}
#endif
#endif

#endif


#endif  /* __IMFSequencerSource_INTERFACE_DEFINED__ */

#ifndef __IMFPresentationClock_FWD_DEFINED__
#define __IMFPresentationClock_FWD_DEFINED__
typedef interface IMFPresentationClock IMFPresentationClock;
#ifdef __cplusplus
interface IMFPresentationClock;
#endif /* __cplusplus */
#endif

/*****************************************************************************
 * IMFSampleGrabberSinkCallback interface
 */
#ifndef __IMFSampleGrabberSinkCallback_INTERFACE_DEFINED__
#define __IMFSampleGrabberSinkCallback_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFSampleGrabberSinkCallback, 0x8c7b80bf, 0xee42, 0x4b59, 0xb1,0xdf, 0x55,0x66,0x8e,0x1b,0xdc,0xa8);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("8c7b80bf-ee42-4b59-b1df-55668e1bdca8")
IMFSampleGrabberSinkCallback : public IMFClockStateSink
{
    virtual HRESULT STDMETHODCALLTYPE OnSetPresentationClock(
        IMFPresentationClock *clock) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnProcessSample(
        REFGUID major_type,
        DWORD sample_flags,
        LONGLONG sample_time,
        LONGLONG sample_duration,
        const BYTE *buffer,
        DWORD sample_size) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnShutdown(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFSampleGrabberSinkCallback, 0x8c7b80bf, 0xee42, 0x4b59, 0xb1,0xdf, 0x55,0x66,0x8e,0x1b,0xdc,0xa8)
#endif
#else
typedef struct IMFSampleGrabberSinkCallbackVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

    /*** IMFSampleGrabberSinkCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *OnSetPresentationClock)(
        IMFSampleGrabberSinkCallback *This,
        IMFPresentationClock *clock);

    HRESULT (STDMETHODCALLTYPE *OnProcessSample)(
        IMFSampleGrabberSinkCallback *This,
        REFGUID major_type,
        DWORD sample_flags,
        LONGLONG sample_time,
        LONGLONG sample_duration,
        const BYTE *buffer,
        DWORD sample_size);

    HRESULT (STDMETHODCALLTYPE *OnShutdown)(
        IMFSampleGrabberSinkCallback *This);

    END_INTERFACE
} IMFSampleGrabberSinkCallbackVtbl;

interface IMFSampleGrabberSinkCallback {
    CONST_VTBL IMFSampleGrabberSinkCallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFSampleGrabberSinkCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFSampleGrabberSinkCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFSampleGrabberSinkCallback_Release(This) (This)->lpVtbl->Release(This)
/*** IMFClockStateSink methods ***/
#define IMFSampleGrabberSinkCallback_OnClockStart(This,hnsSystemTime,llClockStartOffset) (This)->lpVtbl->OnClockStart(This,hnsSystemTime,llClockStartOffset)
#define IMFSampleGrabberSinkCallback_OnClockStop(This,hnssSystemTime) (This)->lpVtbl->OnClockStop(This,hnssSystemTime)
#define IMFSampleGrabberSinkCallback_OnClockPause(This,hnsSystemTime) (This)->lpVtbl->OnClockPause(This,hnsSystemTime)
#define IMFSampleGrabberSinkCallback_OnClockRestart(This,hnsSystemTime) (This)->lpVtbl->OnClockRestart(This,hnsSystemTime)
#define IMFSampleGrabberSinkCallback_OnClockSetRate(This,hnsSystemTime,flRate) (This)->lpVtbl->OnClockSetRate(This,hnsSystemTime,flRate)
/*** IMFSampleGrabberSinkCallback methods ***/
#define IMFSampleGrabberSinkCallback_OnSetPresentationClock(This,clock) (This)->lpVtbl->OnSetPresentationClock(This,clock)
#define IMFSampleGrabberSinkCallback_OnProcessSample(This,major_type,sample_flags,sample_time,sample_duration,buffer,sample_size) (This)->lpVtbl->OnProcessSample(This,major_type,sample_flags,sample_time,sample_duration,buffer,sample_size)
#define IMFSampleGrabberSinkCallback_OnShutdown(This) (This)->lpVtbl->OnShutdown(This)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback_QueryInterface(IMFSampleGrabberSinkCallback* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFSampleGrabberSinkCallback_AddRef(IMFSampleGrabberSinkCallback* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFSampleGrabberSinkCallback_Release(IMFSampleGrabberSinkCallback* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFClockStateSink methods ***/
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback_OnClockStart(IMFSampleGrabberSinkCallback* This,MFTIME hnsSystemTime,LONGLONG llClockStartOffset) {
    return This->lpVtbl->OnClockStart(This,hnsSystemTime,llClockStartOffset);
}
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback_OnClockStop(IMFSampleGrabberSinkCallback* This,MFTIME hnssSystemTime) {
    return This->lpVtbl->OnClockStop(This,hnssSystemTime);
}
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback_OnClockPause(IMFSampleGrabberSinkCallback* This,MFTIME hnsSystemTime) {
    return This->lpVtbl->OnClockPause(This,hnsSystemTime);
}
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback_OnClockRestart(IMFSampleGrabberSinkCallback* This,MFTIME hnsSystemTime) {
    return This->lpVtbl->OnClockRestart(This,hnsSystemTime);
}
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback_OnClockSetRate(IMFSampleGrabberSinkCallback* This,MFTIME hnsSystemTime,float flRate) {
    return This->lpVtbl->OnClockSetRate(This,hnsSystemTime,flRate);
}
/*** IMFSampleGrabberSinkCallback methods ***/
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback_OnSetPresentationClock(IMFSampleGrabberSinkCallback* This,IMFPresentationClock *clock) {
    return This->lpVtbl->OnSetPresentationClock(This,clock);
}
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback_OnProcessSample(IMFSampleGrabberSinkCallback* This,REFGUID major_type,DWORD sample_flags,LONGLONG sample_time,LONGLONG sample_duration,const BYTE *buffer,DWORD sample_size) {
    return This->lpVtbl->OnProcessSample(This,major_type,sample_flags,sample_time,sample_duration,buffer,sample_size);
}
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback_OnShutdown(IMFSampleGrabberSinkCallback* This) {
    return This->lpVtbl->OnShutdown(This);
}
#endif
#endif

#endif


#endif  /* __IMFSampleGrabberSinkCallback_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFSampleGrabberSinkCallback2 interface
 */
#ifndef __IMFSampleGrabberSinkCallback2_INTERFACE_DEFINED__
#define __IMFSampleGrabberSinkCallback2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFSampleGrabberSinkCallback2, 0xca86aa50, 0xc46e, 0x429e, 0xab,0x27, 0x16,0xd6,0xac,0x68,0x44,0xcb);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ca86aa50-c46e-429e-ab27-16d6ac6844cb")
IMFSampleGrabberSinkCallback2 : public IMFSampleGrabberSinkCallback
{
    virtual HRESULT STDMETHODCALLTYPE OnProcessSampleEx(
        REFGUID major_type,
        DWORD sample_flags,
        LONGLONG sample_time,
        LONGLONG sample_duration,
        const BYTE *buffer,
        DWORD sample_size,
        IMFAttributes *attributes) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFSampleGrabberSinkCallback2, 0xca86aa50, 0xc46e, 0x429e, 0xab,0x27, 0x16,0xd6,0xac,0x68,0x44,0xcb)
#endif
#else
typedef struct IMFSampleGrabberSinkCallback2Vtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

    /*** IMFSampleGrabberSinkCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *OnSetPresentationClock)(
        IMFSampleGrabberSinkCallback2 *This,
        IMFPresentationClock *clock);

    HRESULT (STDMETHODCALLTYPE *OnProcessSample)(
        IMFSampleGrabberSinkCallback2 *This,
        REFGUID major_type,
        DWORD sample_flags,
        LONGLONG sample_time,
        LONGLONG sample_duration,
        const BYTE *buffer,
        DWORD sample_size);

    HRESULT (STDMETHODCALLTYPE *OnShutdown)(
        IMFSampleGrabberSinkCallback2 *This);

    /*** IMFSampleGrabberSinkCallback2 methods ***/
    HRESULT (STDMETHODCALLTYPE *OnProcessSampleEx)(
        IMFSampleGrabberSinkCallback2 *This,
        REFGUID major_type,
        DWORD sample_flags,
        LONGLONG sample_time,
        LONGLONG sample_duration,
        const BYTE *buffer,
        DWORD sample_size,
        IMFAttributes *attributes);

    END_INTERFACE
} IMFSampleGrabberSinkCallback2Vtbl;

interface IMFSampleGrabberSinkCallback2 {
    CONST_VTBL IMFSampleGrabberSinkCallback2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFSampleGrabberSinkCallback2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFSampleGrabberSinkCallback2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFSampleGrabberSinkCallback2_Release(This) (This)->lpVtbl->Release(This)
/*** IMFClockStateSink methods ***/
#define IMFSampleGrabberSinkCallback2_OnClockStart(This,hnsSystemTime,llClockStartOffset) (This)->lpVtbl->OnClockStart(This,hnsSystemTime,llClockStartOffset)
#define IMFSampleGrabberSinkCallback2_OnClockStop(This,hnssSystemTime) (This)->lpVtbl->OnClockStop(This,hnssSystemTime)
#define IMFSampleGrabberSinkCallback2_OnClockPause(This,hnsSystemTime) (This)->lpVtbl->OnClockPause(This,hnsSystemTime)
#define IMFSampleGrabberSinkCallback2_OnClockRestart(This,hnsSystemTime) (This)->lpVtbl->OnClockRestart(This,hnsSystemTime)
#define IMFSampleGrabberSinkCallback2_OnClockSetRate(This,hnsSystemTime,flRate) (This)->lpVtbl->OnClockSetRate(This,hnsSystemTime,flRate)
/*** IMFSampleGrabberSinkCallback methods ***/
#define IMFSampleGrabberSinkCallback2_OnSetPresentationClock(This,clock) (This)->lpVtbl->OnSetPresentationClock(This,clock)
#define IMFSampleGrabberSinkCallback2_OnProcessSample(This,major_type,sample_flags,sample_time,sample_duration,buffer,sample_size) (This)->lpVtbl->OnProcessSample(This,major_type,sample_flags,sample_time,sample_duration,buffer,sample_size)
#define IMFSampleGrabberSinkCallback2_OnShutdown(This) (This)->lpVtbl->OnShutdown(This)
/*** IMFSampleGrabberSinkCallback2 methods ***/
#define IMFSampleGrabberSinkCallback2_OnProcessSampleEx(This,major_type,sample_flags,sample_time,sample_duration,buffer,sample_size,attributes) (This)->lpVtbl->OnProcessSampleEx(This,major_type,sample_flags,sample_time,sample_duration,buffer,sample_size,attributes)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback2_QueryInterface(IMFSampleGrabberSinkCallback2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFSampleGrabberSinkCallback2_AddRef(IMFSampleGrabberSinkCallback2* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFSampleGrabberSinkCallback2_Release(IMFSampleGrabberSinkCallback2* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFClockStateSink methods ***/
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback2_OnClockStart(IMFSampleGrabberSinkCallback2* This,MFTIME hnsSystemTime,LONGLONG llClockStartOffset) {
    return This->lpVtbl->OnClockStart(This,hnsSystemTime,llClockStartOffset);
}
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback2_OnClockStop(IMFSampleGrabberSinkCallback2* This,MFTIME hnssSystemTime) {
    return This->lpVtbl->OnClockStop(This,hnssSystemTime);
}
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback2_OnClockPause(IMFSampleGrabberSinkCallback2* This,MFTIME hnsSystemTime) {
    return This->lpVtbl->OnClockPause(This,hnsSystemTime);
}
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback2_OnClockRestart(IMFSampleGrabberSinkCallback2* This,MFTIME hnsSystemTime) {
    return This->lpVtbl->OnClockRestart(This,hnsSystemTime);
}
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback2_OnClockSetRate(IMFSampleGrabberSinkCallback2* This,MFTIME hnsSystemTime,float flRate) {
    return This->lpVtbl->OnClockSetRate(This,hnsSystemTime,flRate);
}
/*** IMFSampleGrabberSinkCallback methods ***/
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback2_OnSetPresentationClock(IMFSampleGrabberSinkCallback2* This,IMFPresentationClock *clock) {
    return This->lpVtbl->OnSetPresentationClock(This,clock);
}
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback2_OnProcessSample(IMFSampleGrabberSinkCallback2* This,REFGUID major_type,DWORD sample_flags,LONGLONG sample_time,LONGLONG sample_duration,const BYTE *buffer,DWORD sample_size) {
    return This->lpVtbl->OnProcessSample(This,major_type,sample_flags,sample_time,sample_duration,buffer,sample_size);
}
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback2_OnShutdown(IMFSampleGrabberSinkCallback2* This) {
    return This->lpVtbl->OnShutdown(This);
}
/*** IMFSampleGrabberSinkCallback2 methods ***/
static __WIDL_INLINE HRESULT IMFSampleGrabberSinkCallback2_OnProcessSampleEx(IMFSampleGrabberSinkCallback2* This,REFGUID major_type,DWORD sample_flags,LONGLONG sample_time,LONGLONG sample_duration,const BYTE *buffer,DWORD sample_size,IMFAttributes *attributes) {
    return This->lpVtbl->OnProcessSampleEx(This,major_type,sample_flags,sample_time,sample_duration,buffer,sample_size,attributes);
}
#endif
#endif

#endif


#endif  /* __IMFSampleGrabberSinkCallback2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFSeekInfo interface
 */
#ifndef __IMFSeekInfo_INTERFACE_DEFINED__
#define __IMFSeekInfo_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFSeekInfo, 0x26afea53, 0xd9ed, 0x42b5, 0xab,0x80, 0xe6,0x4f,0x9e,0xe3,0x47,0x79);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("26afea53-d9ed-42b5-ab80-e64f9ee34779")
IMFSeekInfo : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetNearestKeyFrames(
        const GUID *format,
        const PROPVARIANT *position,
        PROPVARIANT *prev_frame,
        PROPVARIANT *next_frame) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFSeekInfo, 0x26afea53, 0xd9ed, 0x42b5, 0xab,0x80, 0xe6,0x4f,0x9e,0xe3,0x47,0x79)
#endif
#else
typedef struct IMFSeekInfoVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFSeekInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *GetNearestKeyFrames)(
        IMFSeekInfo *This,
        const GUID *format,
        const PROPVARIANT *position,
        PROPVARIANT *prev_frame,
        PROPVARIANT *next_frame);

    END_INTERFACE
} IMFSeekInfoVtbl;

interface IMFSeekInfo {
    CONST_VTBL IMFSeekInfoVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFSeekInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFSeekInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFSeekInfo_Release(This) (This)->lpVtbl->Release(This)
/*** IMFSeekInfo methods ***/
#define IMFSeekInfo_GetNearestKeyFrames(This,format,position,prev_frame,next_frame) (This)->lpVtbl->GetNearestKeyFrames(This,format,position,prev_frame,next_frame)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFSeekInfo_QueryInterface(IMFSeekInfo* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFSeekInfo_AddRef(IMFSeekInfo* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFSeekInfo_Release(IMFSeekInfo* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFSeekInfo methods ***/
static __WIDL_INLINE HRESULT IMFSeekInfo_GetNearestKeyFrames(IMFSeekInfo* This,const GUID *format,const PROPVARIANT *position,PROPVARIANT *prev_frame,PROPVARIANT *next_frame) {
    return This->lpVtbl->GetNearestKeyFrames(This,format,position,prev_frame,next_frame);
}
#endif
#endif

#endif


#endif  /* __IMFSeekInfo_INTERFACE_DEFINED__ */

HRESULT WINAPI CreatePropertyStore(IPropertyStore **store);
HRESULT WINAPI MFCreate3GPMediaSink(IMFByteStream *stream, IMFMediaType *video_type,
    IMFMediaType *audio_type, IMFMediaSink **sink);
HRESULT WINAPI MFCreateAC3MediaSink(IMFByteStream *stream, IMFMediaType *audio_type,
    IMFMediaSink **sink);
HRESULT WINAPI MFCreateADTSMediaSink(IMFByteStream *stream, IMFMediaType *audio_type,
    IMFMediaSink **sink);
HRESULT WINAPI MFCreateAudioRenderer(IMFAttributes *config, IMFMediaSink **sink);
HRESULT WINAPI MFCreateAudioRendererActivate(IMFActivate **activate);
HRESULT WINAPI MFCreateFMPEG4MediaSink(IMFByteStream *stream, IMFMediaType *video_type,
    IMFMediaType *audio_type, IMFMediaSink **sink);
HRESULT WINAPI MFCreateMediaSession(IMFAttributes *config, IMFMediaSession **session);
HRESULT WINAPI MFCreateMFByteStreamOnStream(IStream *stream, IMFByteStream **bytestream);
HRESULT WINAPI MFCreateMFByteStreamOnStreamEx(IUnknown *stream, IMFByteStream **bytestream);
HRESULT WINAPI MFCreateMP3MediaSink(IMFByteStream *stream, IMFMediaSink **sink);
HRESULT WINAPI MFCreateMPEG4MediaSink(IMFByteStream *stream, IMFMediaType *video_type,
    IMFMediaType *audio_type, IMFMediaSink **sink);
HRESULT WINAPI MFCreatePresentationClock(IMFPresentationClock **clock);
HRESULT WINAPI MFCreatePresentationDescriptor(DWORD count, IMFStreamDescriptor **descriptors,
     IMFPresentationDescriptor **presentation_desc);
HRESULT WINAPI MFCreateSimpleTypeHandler(IMFMediaTypeHandler **handler);
HRESULT WINAPI MFCreateSampleCopierMFT(IMFTransform **transform);
HRESULT WINAPI MFCreateSampleGrabberSinkActivate(IMFMediaType *media_type,
        IMFSampleGrabberSinkCallback *callback, IMFActivate **activate);
HRESULT WINAPI MFCreateSequencerSegmentOffset(MFSequencerElementId id, MFTIME offset, PROPVARIANT *segment_offset);
HRESULT WINAPI MFCreateSequencerSource(IUnknown *reserved, IMFSequencerSource **seq_source);
HRESULT WINAPI MFCreateSourceResolver(IMFSourceResolver **resolver);
HRESULT WINAPI MFCreateStandardQualityManager(IMFQualityManager **manager);
HRESULT WINAPI MFCreateStreamDescriptor(DWORD identifier, DWORD cMediaTypes,
     IMFMediaType **types, IMFStreamDescriptor **descriptor);
HRESULT WINAPI MFCreateSystemTimeSource(IMFPresentationTimeSource **time_source);
HRESULT WINAPI MFCreateTopology(IMFTopology **topology);
HRESULT WINAPI MFCreateTopologyNode(MF_TOPOLOGY_TYPE node_type, IMFTopologyNode **node);
HRESULT WINAPI MFCreateTopoLoader(IMFTopoLoader **loader);
HRESULT WINAPI MFCreateVideoRendererActivate(HWND hwnd, IMFActivate **activate);
HRESULT WINAPI MFCreateWAVEMediaSink(IMFByteStream *stream, IMFMediaType *media_type, IMFMediaSink **sink);
HRESULT WINAPI MFEnumDeviceSources(IMFAttributes *attributes, IMFActivate ***sources, UINT32 *count);
HRESULT WINAPI MFGetSupportedMimeTypes(PROPVARIANT *array);
HRESULT WINAPI MFGetSupportedSchemes(PROPVARIANT *array);
HRESULT WINAPI MFGetService(IUnknown *object, REFGUID service, REFIID iid, void **obj);
MFTIME  WINAPI MFGetSystemTime(void);
HRESULT WINAPI MFGetTopoNodeCurrentType(IMFTopologyNode *node, DWORD stream, BOOL output, IMFMediaType **type);
HRESULT WINAPI MFShutdownObject(IUnknown *object);
HRESULT WINAPI MFCreateTrackedSample(IMFTrackedSample **sample);
HRESULT WINAPI MFRequireProtectedEnvironment(IMFPresentationDescriptor *pd);
typedef enum _MFMEDIASOURCE_CHARACTERISTICS {
    MFMEDIASOURCE_IS_LIVE = 0x1,
    MFMEDIASOURCE_CAN_SEEK = 0x2,
    MFMEDIASOURCE_CAN_PAUSE = 0x4,
    MFMEDIASOURCE_HAS_SLOW_SEEK = 0x8,
    MFMEDIASOURCE_HAS_MULTIPLE_PRESENTATIONS = 0x10,
    MFMEDIASOURCE_CAN_SKIPFORWARD = 0x20,
    MFMEDIASOURCE_CAN_SKIPBACKWARD = 0x40,
    MFMEDIASOURCE_DOES_NOT_USE_NETWORK = 0x80
} MFMEDIASOURCE_CHARACTERISTICS;
/*****************************************************************************
 * IMFMediaSource interface
 */
#ifndef __IMFMediaSource_INTERFACE_DEFINED__
#define __IMFMediaSource_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFMediaSource, 0x279a808d, 0xaec7, 0x40c8, 0x9c,0x6b, 0xa6,0xb4,0x92,0xc7,0x8a,0x66);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("279a808d-aec7-40c8-9c6b-a6b492c78a66")
IMFMediaSource : public IMFMediaEventGenerator
{
    virtual HRESULT STDMETHODCALLTYPE GetCharacteristics(
        DWORD *characteristics) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreatePresentationDescriptor(
        IMFPresentationDescriptor **descriptor) = 0;

    virtual HRESULT STDMETHODCALLTYPE Start(
        IMFPresentationDescriptor *descriptor,
        const GUID *time_format,
        const PROPVARIANT *start_position) = 0;

    virtual HRESULT STDMETHODCALLTYPE Stop(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Pause(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Shutdown(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFMediaSource, 0x279a808d, 0xaec7, 0x40c8, 0x9c,0x6b, 0xa6,0xb4,0x92,0xc7,0x8a,0x66)
#endif
#else
typedef struct IMFMediaSourceVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

    /*** IMFMediaSource methods ***/
    HRESULT (STDMETHODCALLTYPE *GetCharacteristics)(
        IMFMediaSource *This,
        DWORD *characteristics);

    HRESULT (STDMETHODCALLTYPE *CreatePresentationDescriptor)(
        IMFMediaSource *This,
        IMFPresentationDescriptor **descriptor);

    HRESULT (STDMETHODCALLTYPE *Start)(
        IMFMediaSource *This,
        IMFPresentationDescriptor *descriptor,
        const GUID *time_format,
        const PROPVARIANT *start_position);

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

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

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

    END_INTERFACE
} IMFMediaSourceVtbl;

interface IMFMediaSource {
    CONST_VTBL IMFMediaSourceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFMediaSource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFMediaSource_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFMediaSource_Release(This) (This)->lpVtbl->Release(This)
/*** IMFMediaEventGenerator methods ***/
#define IMFMediaSource_GetEvent(This,dwFlags,ppEvent) (This)->lpVtbl->GetEvent(This,dwFlags,ppEvent)
#define IMFMediaSource_BeginGetEvent(This,pCallback,punkState) (This)->lpVtbl->BeginGetEvent(This,pCallback,punkState)
#define IMFMediaSource_EndGetEvent(This,pResult,ppEvent) (This)->lpVtbl->EndGetEvent(This,pResult,ppEvent)
#define IMFMediaSource_QueueEvent(This,met,guidExtendedType,hrStatus,pvValue) (This)->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue)
/*** IMFMediaSource methods ***/
#define IMFMediaSource_GetCharacteristics(This,characteristics) (This)->lpVtbl->GetCharacteristics(This,characteristics)
#define IMFMediaSource_CreatePresentationDescriptor(This,descriptor) (This)->lpVtbl->CreatePresentationDescriptor(This,descriptor)
#define IMFMediaSource_Start(This,descriptor,time_format,start_position) (This)->lpVtbl->Start(This,descriptor,time_format,start_position)
#define IMFMediaSource_Stop(This) (This)->lpVtbl->Stop(This)
#define IMFMediaSource_Pause(This) (This)->lpVtbl->Pause(This)
#define IMFMediaSource_Shutdown(This) (This)->lpVtbl->Shutdown(This)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFMediaSource_QueryInterface(IMFMediaSource* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFMediaSource_AddRef(IMFMediaSource* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFMediaSource_Release(IMFMediaSource* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFMediaEventGenerator methods ***/
static __WIDL_INLINE HRESULT IMFMediaSource_GetEvent(IMFMediaSource* This,DWORD dwFlags,IMFMediaEvent **ppEvent) {
    return This->lpVtbl->GetEvent(This,dwFlags,ppEvent);
}
static __WIDL_INLINE HRESULT IMFMediaSource_BeginGetEvent(IMFMediaSource* This,IMFAsyncCallback *pCallback,IUnknown *punkState) {
    return This->lpVtbl->BeginGetEvent(This,pCallback,punkState);
}
static __WIDL_INLINE HRESULT IMFMediaSource_EndGetEvent(IMFMediaSource* This,IMFAsyncResult *pResult,IMFMediaEvent **ppEvent) {
    return This->lpVtbl->EndGetEvent(This,pResult,ppEvent);
}
static __WIDL_INLINE HRESULT IMFMediaSource_QueueEvent(IMFMediaSource* This,MediaEventType met,REFGUID guidExtendedType,HRESULT hrStatus,const PROPVARIANT *pvValue) {
    return This->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue);
}
/*** IMFMediaSource methods ***/
static __WIDL_INLINE HRESULT IMFMediaSource_GetCharacteristics(IMFMediaSource* This,DWORD *characteristics) {
    return This->lpVtbl->GetCharacteristics(This,characteristics);
}
static __WIDL_INLINE HRESULT IMFMediaSource_CreatePresentationDescriptor(IMFMediaSource* This,IMFPresentationDescriptor **descriptor) {
    return This->lpVtbl->CreatePresentationDescriptor(This,descriptor);
}
static __WIDL_INLINE HRESULT IMFMediaSource_Start(IMFMediaSource* This,IMFPresentationDescriptor *descriptor,const GUID *time_format,const PROPVARIANT *start_position) {
    return This->lpVtbl->Start(This,descriptor,time_format,start_position);
}
static __WIDL_INLINE HRESULT IMFMediaSource_Stop(IMFMediaSource* This) {
    return This->lpVtbl->Stop(This);
}
static __WIDL_INLINE HRESULT IMFMediaSource_Pause(IMFMediaSource* This) {
    return This->lpVtbl->Pause(This);
}
static __WIDL_INLINE HRESULT IMFMediaSource_Shutdown(IMFMediaSource* This) {
    return This->lpVtbl->Shutdown(This);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMFMediaSource_RemoteCreatePresentationDescriptor_Proxy(
    IMFMediaSource* This,
    DWORD *count,
    BYTE **data,
    IMFPresentationDescriptor **descriptor);
void __RPC_STUB IMFMediaSource_RemoteCreatePresentationDescriptor_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMFMediaSource_CreatePresentationDescriptor_Proxy(
    IMFMediaSource* This,
    IMFPresentationDescriptor **descriptor);
HRESULT __RPC_STUB IMFMediaSource_CreatePresentationDescriptor_Stub(
    IMFMediaSource* This,
    DWORD *count,
    BYTE **data,
    IMFPresentationDescriptor **descriptor);

#endif  /* __IMFMediaSource_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFMediaSourceEx interface
 */
#ifndef __IMFMediaSourceEx_INTERFACE_DEFINED__
#define __IMFMediaSourceEx_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFMediaSourceEx, 0x3c9b2eb9, 0x86d5, 0x4514, 0xa3,0x94, 0xf5,0x66,0x64,0xf9,0xf0,0xd8);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("3c9b2eb9-86d5-4514-a394-f56664f9f0d8")
IMFMediaSourceEx : public IMFMediaSource
{
    virtual HRESULT STDMETHODCALLTYPE GetSourceAttributes(
        IMFAttributes **attributes) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStreamAttributes(
        DWORD streamid,
        IMFAttributes **attributes) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetD3DManager(
        IUnknown *manager) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFMediaSourceEx, 0x3c9b2eb9, 0x86d5, 0x4514, 0xa3,0x94, 0xf5,0x66,0x64,0xf9,0xf0,0xd8)
#endif
#else
typedef struct IMFMediaSourceExVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

    /*** IMFMediaSource methods ***/
    HRESULT (STDMETHODCALLTYPE *GetCharacteristics)(
        IMFMediaSourceEx *This,
        DWORD *characteristics);

    HRESULT (STDMETHODCALLTYPE *CreatePresentationDescriptor)(
        IMFMediaSourceEx *This,
        IMFPresentationDescriptor **descriptor);

    HRESULT (STDMETHODCALLTYPE *Start)(
        IMFMediaSourceEx *This,
        IMFPresentationDescriptor *descriptor,
        const GUID *time_format,
        const PROPVARIANT *start_position);

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

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

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

    /*** IMFMediaSourceEx methods ***/
    HRESULT (STDMETHODCALLTYPE *GetSourceAttributes)(
        IMFMediaSourceEx *This,
        IMFAttributes **attributes);

    HRESULT (STDMETHODCALLTYPE *GetStreamAttributes)(
        IMFMediaSourceEx *This,
        DWORD streamid,
        IMFAttributes **attributes);

    HRESULT (STDMETHODCALLTYPE *SetD3DManager)(
        IMFMediaSourceEx *This,
        IUnknown *manager);

    END_INTERFACE
} IMFMediaSourceExVtbl;

interface IMFMediaSourceEx {
    CONST_VTBL IMFMediaSourceExVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFMediaSourceEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFMediaSourceEx_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFMediaSourceEx_Release(This) (This)->lpVtbl->Release(This)
/*** IMFMediaEventGenerator methods ***/
#define IMFMediaSourceEx_GetEvent(This,dwFlags,ppEvent) (This)->lpVtbl->GetEvent(This,dwFlags,ppEvent)
#define IMFMediaSourceEx_BeginGetEvent(This,pCallback,punkState) (This)->lpVtbl->BeginGetEvent(This,pCallback,punkState)
#define IMFMediaSourceEx_EndGetEvent(This,pResult,ppEvent) (This)->lpVtbl->EndGetEvent(This,pResult,ppEvent)
#define IMFMediaSourceEx_QueueEvent(This,met,guidExtendedType,hrStatus,pvValue) (This)->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue)
/*** IMFMediaSource methods ***/
#define IMFMediaSourceEx_GetCharacteristics(This,characteristics) (This)->lpVtbl->GetCharacteristics(This,characteristics)
#define IMFMediaSourceEx_CreatePresentationDescriptor(This,descriptor) (This)->lpVtbl->CreatePresentationDescriptor(This,descriptor)
#define IMFMediaSourceEx_Start(This,descriptor,time_format,start_position) (This)->lpVtbl->Start(This,descriptor,time_format,start_position)
#define IMFMediaSourceEx_Stop(This) (This)->lpVtbl->Stop(This)
#define IMFMediaSourceEx_Pause(This) (This)->lpVtbl->Pause(This)
#define IMFMediaSourceEx_Shutdown(This) (This)->lpVtbl->Shutdown(This)
/*** IMFMediaSourceEx methods ***/
#define IMFMediaSourceEx_GetSourceAttributes(This,attributes) (This)->lpVtbl->GetSourceAttributes(This,attributes)
#define IMFMediaSourceEx_GetStreamAttributes(This,streamid,attributes) (This)->lpVtbl->GetStreamAttributes(This,streamid,attributes)
#define IMFMediaSourceEx_SetD3DManager(This,manager) (This)->lpVtbl->SetD3DManager(This,manager)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFMediaSourceEx_QueryInterface(IMFMediaSourceEx* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFMediaSourceEx_AddRef(IMFMediaSourceEx* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFMediaSourceEx_Release(IMFMediaSourceEx* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFMediaEventGenerator methods ***/
static __WIDL_INLINE HRESULT IMFMediaSourceEx_GetEvent(IMFMediaSourceEx* This,DWORD dwFlags,IMFMediaEvent **ppEvent) {
    return This->lpVtbl->GetEvent(This,dwFlags,ppEvent);
}
static __WIDL_INLINE HRESULT IMFMediaSourceEx_BeginGetEvent(IMFMediaSourceEx* This,IMFAsyncCallback *pCallback,IUnknown *punkState) {
    return This->lpVtbl->BeginGetEvent(This,pCallback,punkState);
}
static __WIDL_INLINE HRESULT IMFMediaSourceEx_EndGetEvent(IMFMediaSourceEx* This,IMFAsyncResult *pResult,IMFMediaEvent **ppEvent) {
    return This->lpVtbl->EndGetEvent(This,pResult,ppEvent);
}
static __WIDL_INLINE HRESULT IMFMediaSourceEx_QueueEvent(IMFMediaSourceEx* This,MediaEventType met,REFGUID guidExtendedType,HRESULT hrStatus,const PROPVARIANT *pvValue) {
    return This->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue);
}
/*** IMFMediaSource methods ***/
static __WIDL_INLINE HRESULT IMFMediaSourceEx_GetCharacteristics(IMFMediaSourceEx* This,DWORD *characteristics) {
    return This->lpVtbl->GetCharacteristics(This,characteristics);
}
static __WIDL_INLINE HRESULT IMFMediaSourceEx_CreatePresentationDescriptor(IMFMediaSourceEx* This,IMFPresentationDescriptor **descriptor) {
    return This->lpVtbl->CreatePresentationDescriptor(This,descriptor);
}
static __WIDL_INLINE HRESULT IMFMediaSourceEx_Start(IMFMediaSourceEx* This,IMFPresentationDescriptor *descriptor,const GUID *time_format,const PROPVARIANT *start_position) {
    return This->lpVtbl->Start(This,descriptor,time_format,start_position);
}
static __WIDL_INLINE HRESULT IMFMediaSourceEx_Stop(IMFMediaSourceEx* This) {
    return This->lpVtbl->Stop(This);
}
static __WIDL_INLINE HRESULT IMFMediaSourceEx_Pause(IMFMediaSourceEx* This) {
    return This->lpVtbl->Pause(This);
}
static __WIDL_INLINE HRESULT IMFMediaSourceEx_Shutdown(IMFMediaSourceEx* This) {
    return This->lpVtbl->Shutdown(This);
}
/*** IMFMediaSourceEx methods ***/
static __WIDL_INLINE HRESULT IMFMediaSourceEx_GetSourceAttributes(IMFMediaSourceEx* This,IMFAttributes **attributes) {
    return This->lpVtbl->GetSourceAttributes(This,attributes);
}
static __WIDL_INLINE HRESULT IMFMediaSourceEx_GetStreamAttributes(IMFMediaSourceEx* This,DWORD streamid,IMFAttributes **attributes) {
    return This->lpVtbl->GetStreamAttributes(This,streamid,attributes);
}
static __WIDL_INLINE HRESULT IMFMediaSourceEx_SetD3DManager(IMFMediaSourceEx* This,IUnknown *manager) {
    return This->lpVtbl->SetD3DManager(This,manager);
}
#endif
#endif

#endif


#endif  /* __IMFMediaSourceEx_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFMediaStream interface
 */
#ifndef __IMFMediaStream_INTERFACE_DEFINED__
#define __IMFMediaStream_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFMediaStream, 0xd182108f, 0x4ec6, 0x443f, 0xaa,0x42, 0xa7,0x11,0x06,0xec,0x82,0x5f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("d182108f-4ec6-443f-aa42-a71106ec825f")
IMFMediaStream : public IMFMediaEventGenerator
{
    virtual HRESULT STDMETHODCALLTYPE GetMediaSource(
        IMFMediaSource **source) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStreamDescriptor(
        IMFStreamDescriptor **descriptor) = 0;

    virtual HRESULT STDMETHODCALLTYPE RequestSample(
        IUnknown *token) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFMediaStream, 0xd182108f, 0x4ec6, 0x443f, 0xaa,0x42, 0xa7,0x11,0x06,0xec,0x82,0x5f)
#endif
#else
typedef struct IMFMediaStreamVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

    /*** IMFMediaStream methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMediaSource)(
        IMFMediaStream *This,
        IMFMediaSource **source);

    HRESULT (STDMETHODCALLTYPE *GetStreamDescriptor)(
        IMFMediaStream *This,
        IMFStreamDescriptor **descriptor);

    HRESULT (STDMETHODCALLTYPE *RequestSample)(
        IMFMediaStream *This,
        IUnknown *token);

    END_INTERFACE
} IMFMediaStreamVtbl;

interface IMFMediaStream {
    CONST_VTBL IMFMediaStreamVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFMediaStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFMediaStream_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFMediaStream_Release(This) (This)->lpVtbl->Release(This)
/*** IMFMediaEventGenerator methods ***/
#define IMFMediaStream_GetEvent(This,dwFlags,ppEvent) (This)->lpVtbl->GetEvent(This,dwFlags,ppEvent)
#define IMFMediaStream_BeginGetEvent(This,pCallback,punkState) (This)->lpVtbl->BeginGetEvent(This,pCallback,punkState)
#define IMFMediaStream_EndGetEvent(This,pResult,ppEvent) (This)->lpVtbl->EndGetEvent(This,pResult,ppEvent)
#define IMFMediaStream_QueueEvent(This,met,guidExtendedType,hrStatus,pvValue) (This)->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue)
/*** IMFMediaStream methods ***/
#define IMFMediaStream_GetMediaSource(This,source) (This)->lpVtbl->GetMediaSource(This,source)
#define IMFMediaStream_GetStreamDescriptor(This,descriptor) (This)->lpVtbl->GetStreamDescriptor(This,descriptor)
#define IMFMediaStream_RequestSample(This,token) (This)->lpVtbl->RequestSample(This,token)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFMediaStream_QueryInterface(IMFMediaStream* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFMediaStream_AddRef(IMFMediaStream* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFMediaStream_Release(IMFMediaStream* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFMediaEventGenerator methods ***/
static __WIDL_INLINE HRESULT IMFMediaStream_GetEvent(IMFMediaStream* This,DWORD dwFlags,IMFMediaEvent **ppEvent) {
    return This->lpVtbl->GetEvent(This,dwFlags,ppEvent);
}
static __WIDL_INLINE HRESULT IMFMediaStream_BeginGetEvent(IMFMediaStream* This,IMFAsyncCallback *pCallback,IUnknown *punkState) {
    return This->lpVtbl->BeginGetEvent(This,pCallback,punkState);
}
static __WIDL_INLINE HRESULT IMFMediaStream_EndGetEvent(IMFMediaStream* This,IMFAsyncResult *pResult,IMFMediaEvent **ppEvent) {
    return This->lpVtbl->EndGetEvent(This,pResult,ppEvent);
}
static __WIDL_INLINE HRESULT IMFMediaStream_QueueEvent(IMFMediaStream* This,MediaEventType met,REFGUID guidExtendedType,HRESULT hrStatus,const PROPVARIANT *pvValue) {
    return This->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue);
}
/*** IMFMediaStream methods ***/
static __WIDL_INLINE HRESULT IMFMediaStream_GetMediaSource(IMFMediaStream* This,IMFMediaSource **source) {
    return This->lpVtbl->GetMediaSource(This,source);
}
static __WIDL_INLINE HRESULT IMFMediaStream_GetStreamDescriptor(IMFMediaStream* This,IMFStreamDescriptor **descriptor) {
    return This->lpVtbl->GetStreamDescriptor(This,descriptor);
}
static __WIDL_INLINE HRESULT IMFMediaStream_RequestSample(IMFMediaStream* This,IUnknown *token) {
    return This->lpVtbl->RequestSample(This,token);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMFMediaStream_RemoteRequestSample_Proxy(
    IMFMediaStream* This);
void __RPC_STUB IMFMediaStream_RemoteRequestSample_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMFMediaStream_RequestSample_Proxy(
    IMFMediaStream* This,
    IUnknown *token);
HRESULT __RPC_STUB IMFMediaStream_RequestSample_Stub(
    IMFMediaStream* This);

#endif  /* __IMFMediaStream_INTERFACE_DEFINED__ */

#ifndef __IMFStreamSink_FWD_DEFINED__
#define __IMFStreamSink_FWD_DEFINED__
typedef interface IMFStreamSink IMFStreamSink;
#ifdef __cplusplus
interface IMFStreamSink;
#endif /* __cplusplus */
#endif

/*****************************************************************************
 * IMFPresentationTimeSource interface
 */
#ifndef __IMFPresentationTimeSource_INTERFACE_DEFINED__
#define __IMFPresentationTimeSource_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFPresentationTimeSource, 0x7ff12cce, 0xf76f, 0x41c2, 0x86,0x3b, 0x16,0x66,0xc8,0xe5,0xe1,0x39);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("7ff12cce-f76f-41c2-863b-1666c8e5e139")
IMFPresentationTimeSource : public IMFClock
{
    virtual HRESULT STDMETHODCALLTYPE GetUnderlyingClock(
        IMFClock **clock) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFPresentationTimeSource, 0x7ff12cce, 0xf76f, 0x41c2, 0x86,0x3b, 0x16,0x66,0xc8,0xe5,0xe1,0x39)
#endif
#else
typedef struct IMFPresentationTimeSourceVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

    /*** IMFPresentationTimeSource methods ***/
    HRESULT (STDMETHODCALLTYPE *GetUnderlyingClock)(
        IMFPresentationTimeSource *This,
        IMFClock **clock);

    END_INTERFACE
} IMFPresentationTimeSourceVtbl;

interface IMFPresentationTimeSource {
    CONST_VTBL IMFPresentationTimeSourceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFPresentationTimeSource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFPresentationTimeSource_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFPresentationTimeSource_Release(This) (This)->lpVtbl->Release(This)
/*** IMFClock methods ***/
#define IMFPresentationTimeSource_GetClockCharacteristics(This,characteristics) (This)->lpVtbl->GetClockCharacteristics(This,characteristics)
#define IMFPresentationTimeSource_GetCorrelatedTime(This,reserved,clock_time,system_time) (This)->lpVtbl->GetCorrelatedTime(This,reserved,clock_time,system_time)
#define IMFPresentationTimeSource_GetContinuityKey(This,key) (This)->lpVtbl->GetContinuityKey(This,key)
#define IMFPresentationTimeSource_GetState(This,reserved,state) (This)->lpVtbl->GetState(This,reserved,state)
#define IMFPresentationTimeSource_GetProperties(This,props) (This)->lpVtbl->GetProperties(This,props)
/*** IMFPresentationTimeSource methods ***/
#define IMFPresentationTimeSource_GetUnderlyingClock(This,clock) (This)->lpVtbl->GetUnderlyingClock(This,clock)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFPresentationTimeSource_QueryInterface(IMFPresentationTimeSource* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFPresentationTimeSource_AddRef(IMFPresentationTimeSource* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFPresentationTimeSource_Release(IMFPresentationTimeSource* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFClock methods ***/
static __WIDL_INLINE HRESULT IMFPresentationTimeSource_GetClockCharacteristics(IMFPresentationTimeSource* This,DWORD *characteristics) {
    return This->lpVtbl->GetClockCharacteristics(This,characteristics);
}
static __WIDL_INLINE HRESULT IMFPresentationTimeSource_GetCorrelatedTime(IMFPresentationTimeSource* This,DWORD reserved,LONGLONG *clock_time,MFTIME *system_time) {
    return This->lpVtbl->GetCorrelatedTime(This,reserved,clock_time,system_time);
}
static __WIDL_INLINE HRESULT IMFPresentationTimeSource_GetContinuityKey(IMFPresentationTimeSource* This,DWORD *key) {
    return This->lpVtbl->GetContinuityKey(This,key);
}
static __WIDL_INLINE HRESULT IMFPresentationTimeSource_GetState(IMFPresentationTimeSource* This,DWORD reserved,MFCLOCK_STATE *state) {
    return This->lpVtbl->GetState(This,reserved,state);
}
static __WIDL_INLINE HRESULT IMFPresentationTimeSource_GetProperties(IMFPresentationTimeSource* This,MFCLOCK_PROPERTIES *props) {
    return This->lpVtbl->GetProperties(This,props);
}
/*** IMFPresentationTimeSource methods ***/
static __WIDL_INLINE HRESULT IMFPresentationTimeSource_GetUnderlyingClock(IMFPresentationTimeSource* This,IMFClock **clock) {
    return This->lpVtbl->GetUnderlyingClock(This,clock);
}
#endif
#endif

#endif


#endif  /* __IMFPresentationTimeSource_INTERFACE_DEFINED__ */

#define PRESENTATION_CURRENT_POSITION 0x7fffffffffffffff
/*****************************************************************************
 * IMFPresentationClock interface
 */
#ifndef __IMFPresentationClock_INTERFACE_DEFINED__
#define __IMFPresentationClock_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFPresentationClock, 0x868ce85c, 0x8ea9, 0x4f55, 0xab,0x82, 0xb0,0x09,0xa9,0x10,0xa8,0x05);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("868ce85c-8ea9-4f55-ab82-b009a910a805")
IMFPresentationClock : public IMFClock
{
    virtual HRESULT STDMETHODCALLTYPE SetTimeSource(
        IMFPresentationTimeSource *time_source) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTimeSource(
        IMFPresentationTimeSource **time_source) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTime(
        MFTIME *time) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddClockStateSink(
        IMFClockStateSink *state_sink) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveClockStateSink(
        IMFClockStateSink *state_sink) = 0;

    virtual HRESULT STDMETHODCALLTYPE Start(
        LONGLONG start_offset) = 0;

    virtual HRESULT STDMETHODCALLTYPE Stop(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Pause(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFPresentationClock, 0x868ce85c, 0x8ea9, 0x4f55, 0xab,0x82, 0xb0,0x09,0xa9,0x10,0xa8,0x05)
#endif
#else
typedef struct IMFPresentationClockVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

    /*** IMFPresentationClock methods ***/
    HRESULT (STDMETHODCALLTYPE *SetTimeSource)(
        IMFPresentationClock *This,
        IMFPresentationTimeSource *time_source);

    HRESULT (STDMETHODCALLTYPE *GetTimeSource)(
        IMFPresentationClock *This,
        IMFPresentationTimeSource **time_source);

    HRESULT (STDMETHODCALLTYPE *GetTime)(
        IMFPresentationClock *This,
        MFTIME *time);

    HRESULT (STDMETHODCALLTYPE *AddClockStateSink)(
        IMFPresentationClock *This,
        IMFClockStateSink *state_sink);

    HRESULT (STDMETHODCALLTYPE *RemoveClockStateSink)(
        IMFPresentationClock *This,
        IMFClockStateSink *state_sink);

    HRESULT (STDMETHODCALLTYPE *Start)(
        IMFPresentationClock *This,
        LONGLONG start_offset);

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

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

    END_INTERFACE
} IMFPresentationClockVtbl;

interface IMFPresentationClock {
    CONST_VTBL IMFPresentationClockVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFPresentationClock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFPresentationClock_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFPresentationClock_Release(This) (This)->lpVtbl->Release(This)
/*** IMFClock methods ***/
#define IMFPresentationClock_GetClockCharacteristics(This,characteristics) (This)->lpVtbl->GetClockCharacteristics(This,characteristics)
#define IMFPresentationClock_GetCorrelatedTime(This,reserved,clock_time,system_time) (This)->lpVtbl->GetCorrelatedTime(This,reserved,clock_time,system_time)
#define IMFPresentationClock_GetContinuityKey(This,key) (This)->lpVtbl->GetContinuityKey(This,key)
#define IMFPresentationClock_GetState(This,reserved,state) (This)->lpVtbl->GetState(This,reserved,state)
#define IMFPresentationClock_GetProperties(This,props) (This)->lpVtbl->GetProperties(This,props)
/*** IMFPresentationClock methods ***/
#define IMFPresentationClock_SetTimeSource(This,time_source) (This)->lpVtbl->SetTimeSource(This,time_source)
#define IMFPresentationClock_GetTimeSource(This,time_source) (This)->lpVtbl->GetTimeSource(This,time_source)
#define IMFPresentationClock_GetTime(This,time) (This)->lpVtbl->GetTime(This,time)
#define IMFPresentationClock_AddClockStateSink(This,state_sink) (This)->lpVtbl->AddClockStateSink(This,state_sink)
#define IMFPresentationClock_RemoveClockStateSink(This,state_sink) (This)->lpVtbl->RemoveClockStateSink(This,state_sink)
#define IMFPresentationClock_Start(This,start_offset) (This)->lpVtbl->Start(This,start_offset)
#define IMFPresentationClock_Stop(This) (This)->lpVtbl->Stop(This)
#define IMFPresentationClock_Pause(This) (This)->lpVtbl->Pause(This)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFPresentationClock_QueryInterface(IMFPresentationClock* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFPresentationClock_AddRef(IMFPresentationClock* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFPresentationClock_Release(IMFPresentationClock* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFClock methods ***/
static __WIDL_INLINE HRESULT IMFPresentationClock_GetClockCharacteristics(IMFPresentationClock* This,DWORD *characteristics) {
    return This->lpVtbl->GetClockCharacteristics(This,characteristics);
}
static __WIDL_INLINE HRESULT IMFPresentationClock_GetCorrelatedTime(IMFPresentationClock* This,DWORD reserved,LONGLONG *clock_time,MFTIME *system_time) {
    return This->lpVtbl->GetCorrelatedTime(This,reserved,clock_time,system_time);
}
static __WIDL_INLINE HRESULT IMFPresentationClock_GetContinuityKey(IMFPresentationClock* This,DWORD *key) {
    return This->lpVtbl->GetContinuityKey(This,key);
}
static __WIDL_INLINE HRESULT IMFPresentationClock_GetState(IMFPresentationClock* This,DWORD reserved,MFCLOCK_STATE *state) {
    return This->lpVtbl->GetState(This,reserved,state);
}
static __WIDL_INLINE HRESULT IMFPresentationClock_GetProperties(IMFPresentationClock* This,MFCLOCK_PROPERTIES *props) {
    return This->lpVtbl->GetProperties(This,props);
}
/*** IMFPresentationClock methods ***/
static __WIDL_INLINE HRESULT IMFPresentationClock_SetTimeSource(IMFPresentationClock* This,IMFPresentationTimeSource *time_source) {
    return This->lpVtbl->SetTimeSource(This,time_source);
}
static __WIDL_INLINE HRESULT IMFPresentationClock_GetTimeSource(IMFPresentationClock* This,IMFPresentationTimeSource **time_source) {
    return This->lpVtbl->GetTimeSource(This,time_source);
}
static __WIDL_INLINE HRESULT IMFPresentationClock_GetTime(IMFPresentationClock* This,MFTIME *time) {
    return This->lpVtbl->GetTime(This,time);
}
static __WIDL_INLINE HRESULT IMFPresentationClock_AddClockStateSink(IMFPresentationClock* This,IMFClockStateSink *state_sink) {
    return This->lpVtbl->AddClockStateSink(This,state_sink);
}
static __WIDL_INLINE HRESULT IMFPresentationClock_RemoveClockStateSink(IMFPresentationClock* This,IMFClockStateSink *state_sink) {
    return This->lpVtbl->RemoveClockStateSink(This,state_sink);
}
static __WIDL_INLINE HRESULT IMFPresentationClock_Start(IMFPresentationClock* This,LONGLONG start_offset) {
    return This->lpVtbl->Start(This,start_offset);
}
static __WIDL_INLINE HRESULT IMFPresentationClock_Stop(IMFPresentationClock* This) {
    return This->lpVtbl->Stop(This);
}
static __WIDL_INLINE HRESULT IMFPresentationClock_Pause(IMFPresentationClock* This) {
    return This->lpVtbl->Pause(This);
}
#endif
#endif

#endif


#endif  /* __IMFPresentationClock_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFClockConsumer interface
 */
#ifndef __IMFClockConsumer_INTERFACE_DEFINED__
#define __IMFClockConsumer_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFClockConsumer, 0x6ef2a662, 0x47c0, 0x4666, 0xb1,0x3d, 0xcb,0xb7,0x17,0xf2,0xfa,0x2c);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6ef2a662-47c0-4666-b13d-cbb717f2fa2c")
IMFClockConsumer : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetPresentationClock(
        IMFPresentationClock *clock) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPresentationClock(
        IMFPresentationClock **clock) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFClockConsumer, 0x6ef2a662, 0x47c0, 0x4666, 0xb1,0x3d, 0xcb,0xb7,0x17,0xf2,0xfa,0x2c)
#endif
#else
typedef struct IMFClockConsumerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFClockConsumer methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPresentationClock)(
        IMFClockConsumer *This,
        IMFPresentationClock *clock);

    HRESULT (STDMETHODCALLTYPE *GetPresentationClock)(
        IMFClockConsumer *This,
        IMFPresentationClock **clock);

    END_INTERFACE
} IMFClockConsumerVtbl;

interface IMFClockConsumer {
    CONST_VTBL IMFClockConsumerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFClockConsumer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFClockConsumer_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFClockConsumer_Release(This) (This)->lpVtbl->Release(This)
/*** IMFClockConsumer methods ***/
#define IMFClockConsumer_SetPresentationClock(This,clock) (This)->lpVtbl->SetPresentationClock(This,clock)
#define IMFClockConsumer_GetPresentationClock(This,clock) (This)->lpVtbl->GetPresentationClock(This,clock)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFClockConsumer_QueryInterface(IMFClockConsumer* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFClockConsumer_AddRef(IMFClockConsumer* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFClockConsumer_Release(IMFClockConsumer* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFClockConsumer methods ***/
static __WIDL_INLINE HRESULT IMFClockConsumer_SetPresentationClock(IMFClockConsumer* This,IMFPresentationClock *clock) {
    return This->lpVtbl->SetPresentationClock(This,clock);
}
static __WIDL_INLINE HRESULT IMFClockConsumer_GetPresentationClock(IMFClockConsumer* This,IMFPresentationClock **clock) {
    return This->lpVtbl->GetPresentationClock(This,clock);
}
#endif
#endif

#endif


#endif  /* __IMFClockConsumer_INTERFACE_DEFINED__ */

#define MEDIASINK_FIXED_STREAMS                0x00000001
#define MEDIASINK_CANNOT_MATCH_CLOCK           0x00000002
#define MEDIASINK_RATELESS                     0x00000004
#define MEDIASINK_CLOCK_REQUIRED               0x00000008
#define MEDIASINK_CAN_PREROLL                  0x00000010
#define MEDIASINK_REQUIRE_REFERENCE_MEDIATYPE  0x00000020
/*****************************************************************************
 * IMFMediaSink interface
 */
#ifndef __IMFMediaSink_INTERFACE_DEFINED__
#define __IMFMediaSink_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFMediaSink, 0x6ef2a660, 0x47c0, 0x4666, 0xb1,0x3d, 0xcb,0xb7,0x17,0xf2,0xfa,0x2c);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6ef2a660-47c0-4666-b13d-cbb717f2fa2c")
IMFMediaSink : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetCharacteristics(
        DWORD *characteristics) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddStreamSink(
        DWORD stream_sink_id,
        IMFMediaType *media_type,
        IMFStreamSink **stream_sink) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveStreamSink(
        DWORD stream_sink_id) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE GetStreamSinkByIndex(
        DWORD index,
        IMFStreamSink **sink) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStreamSinkById(
        DWORD stream_sink_id,
        IMFStreamSink **sink) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPresentationClock(
        IMFPresentationClock *clock) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPresentationClock(
        IMFPresentationClock **clock) = 0;

    virtual HRESULT STDMETHODCALLTYPE Shutdown(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFMediaSink, 0x6ef2a660, 0x47c0, 0x4666, 0xb1,0x3d, 0xcb,0xb7,0x17,0xf2,0xfa,0x2c)
#endif
#else
typedef struct IMFMediaSinkVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFMediaSink methods ***/
    HRESULT (STDMETHODCALLTYPE *GetCharacteristics)(
        IMFMediaSink *This,
        DWORD *characteristics);

    HRESULT (STDMETHODCALLTYPE *AddStreamSink)(
        IMFMediaSink *This,
        DWORD stream_sink_id,
        IMFMediaType *media_type,
        IMFStreamSink **stream_sink);

    HRESULT (STDMETHODCALLTYPE *RemoveStreamSink)(
        IMFMediaSink *This,
        DWORD stream_sink_id);

    HRESULT (STDMETHODCALLTYPE *GetStreamSinkCount)(
        IMFMediaSink *This,
        DWORD *count);

    HRESULT (STDMETHODCALLTYPE *GetStreamSinkByIndex)(
        IMFMediaSink *This,
        DWORD index,
        IMFStreamSink **sink);

    HRESULT (STDMETHODCALLTYPE *GetStreamSinkById)(
        IMFMediaSink *This,
        DWORD stream_sink_id,
        IMFStreamSink **sink);

    HRESULT (STDMETHODCALLTYPE *SetPresentationClock)(
        IMFMediaSink *This,
        IMFPresentationClock *clock);

    HRESULT (STDMETHODCALLTYPE *GetPresentationClock)(
        IMFMediaSink *This,
        IMFPresentationClock **clock);

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

    END_INTERFACE
} IMFMediaSinkVtbl;

interface IMFMediaSink {
    CONST_VTBL IMFMediaSinkVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFMediaSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFMediaSink_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFMediaSink_Release(This) (This)->lpVtbl->Release(This)
/*** IMFMediaSink methods ***/
#define IMFMediaSink_GetCharacteristics(This,characteristics) (This)->lpVtbl->GetCharacteristics(This,characteristics)
#define IMFMediaSink_AddStreamSink(This,stream_sink_id,media_type,stream_sink) (This)->lpVtbl->AddStreamSink(This,stream_sink_id,media_type,stream_sink)
#define IMFMediaSink_RemoveStreamSink(This,stream_sink_id) (This)->lpVtbl->RemoveStreamSink(This,stream_sink_id)
#define IMFMediaSink_GetStreamSinkCount(This,count) (This)->lpVtbl->GetStreamSinkCount(This,count)
#define IMFMediaSink_GetStreamSinkByIndex(This,index,sink) (This)->lpVtbl->GetStreamSinkByIndex(This,index,sink)
#define IMFMediaSink_GetStreamSinkById(This,stream_sink_id,sink) (This)->lpVtbl->GetStreamSinkById(This,stream_sink_id,sink)
#define IMFMediaSink_SetPresentationClock(This,clock) (This)->lpVtbl->SetPresentationClock(This,clock)
#define IMFMediaSink_GetPresentationClock(This,clock) (This)->lpVtbl->GetPresentationClock(This,clock)
#define IMFMediaSink_Shutdown(This) (This)->lpVtbl->Shutdown(This)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFMediaSink_QueryInterface(IMFMediaSink* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFMediaSink_AddRef(IMFMediaSink* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFMediaSink_Release(IMFMediaSink* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFMediaSink methods ***/
static __WIDL_INLINE HRESULT IMFMediaSink_GetCharacteristics(IMFMediaSink* This,DWORD *characteristics) {
    return This->lpVtbl->GetCharacteristics(This,characteristics);
}
static __WIDL_INLINE HRESULT IMFMediaSink_AddStreamSink(IMFMediaSink* This,DWORD stream_sink_id,IMFMediaType *media_type,IMFStreamSink **stream_sink) {
    return This->lpVtbl->AddStreamSink(This,stream_sink_id,media_type,stream_sink);
}
static __WIDL_INLINE HRESULT IMFMediaSink_RemoveStreamSink(IMFMediaSink* This,DWORD stream_sink_id) {
    return This->lpVtbl->RemoveStreamSink(This,stream_sink_id);
}
static __WIDL_INLINE HRESULT IMFMediaSink_GetStreamSinkCount(IMFMediaSink* This,DWORD *count) {
    return This->lpVtbl->GetStreamSinkCount(This,count);
}
static __WIDL_INLINE HRESULT IMFMediaSink_GetStreamSinkByIndex(IMFMediaSink* This,DWORD index,IMFStreamSink **sink) {
    return This->lpVtbl->GetStreamSinkByIndex(This,index,sink);
}
static __WIDL_INLINE HRESULT IMFMediaSink_GetStreamSinkById(IMFMediaSink* This,DWORD stream_sink_id,IMFStreamSink **sink) {
    return This->lpVtbl->GetStreamSinkById(This,stream_sink_id,sink);
}
static __WIDL_INLINE HRESULT IMFMediaSink_SetPresentationClock(IMFMediaSink* This,IMFPresentationClock *clock) {
    return This->lpVtbl->SetPresentationClock(This,clock);
}
static __WIDL_INLINE HRESULT IMFMediaSink_GetPresentationClock(IMFMediaSink* This,IMFPresentationClock **clock) {
    return This->lpVtbl->GetPresentationClock(This,clock);
}
static __WIDL_INLINE HRESULT IMFMediaSink_Shutdown(IMFMediaSink* This) {
    return This->lpVtbl->Shutdown(This);
}
#endif
#endif

#endif


#endif  /* __IMFMediaSink_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFFinalizableMediaSink interface
 */
#ifndef __IMFFinalizableMediaSink_INTERFACE_DEFINED__
#define __IMFFinalizableMediaSink_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFFinalizableMediaSink, 0xeaecb74a, 0x9a50, 0x42ce, 0x95,0x41, 0x6a,0x7f,0x57,0xaa,0x4a,0xd7);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("eaecb74a-9a50-42ce-9541-6a7f57aa4ad7")
IMFFinalizableMediaSink : public IMFMediaSink
{
    virtual HRESULT STDMETHODCALLTYPE BeginFinalize(
        IMFAsyncCallback *callback,
        IUnknown *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE EndFinalize(
        IMFAsyncResult *result) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFFinalizableMediaSink, 0xeaecb74a, 0x9a50, 0x42ce, 0x95,0x41, 0x6a,0x7f,0x57,0xaa,0x4a,0xd7)
#endif
#else
typedef struct IMFFinalizableMediaSinkVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFMediaSink methods ***/
    HRESULT (STDMETHODCALLTYPE *GetCharacteristics)(
        IMFFinalizableMediaSink *This,
        DWORD *characteristics);

    HRESULT (STDMETHODCALLTYPE *AddStreamSink)(
        IMFFinalizableMediaSink *This,
        DWORD stream_sink_id,
        IMFMediaType *media_type,
        IMFStreamSink **stream_sink);

    HRESULT (STDMETHODCALLTYPE *RemoveStreamSink)(
        IMFFinalizableMediaSink *This,
        DWORD stream_sink_id);

    HRESULT (STDMETHODCALLTYPE *GetStreamSinkCount)(
        IMFFinalizableMediaSink *This,
        DWORD *count);

    HRESULT (STDMETHODCALLTYPE *GetStreamSinkByIndex)(
        IMFFinalizableMediaSink *This,
        DWORD index,
        IMFStreamSink **sink);

    HRESULT (STDMETHODCALLTYPE *GetStreamSinkById)(
        IMFFinalizableMediaSink *This,
        DWORD stream_sink_id,
        IMFStreamSink **sink);

    HRESULT (STDMETHODCALLTYPE *SetPresentationClock)(
        IMFFinalizableMediaSink *This,
        IMFPresentationClock *clock);

    HRESULT (STDMETHODCALLTYPE *GetPresentationClock)(
        IMFFinalizableMediaSink *This,
        IMFPresentationClock **clock);

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

    /*** IMFFinalizableMediaSink methods ***/
    HRESULT (STDMETHODCALLTYPE *BeginFinalize)(
        IMFFinalizableMediaSink *This,
        IMFAsyncCallback *callback,
        IUnknown *state);

    HRESULT (STDMETHODCALLTYPE *EndFinalize)(
        IMFFinalizableMediaSink *This,
        IMFAsyncResult *result);

    END_INTERFACE
} IMFFinalizableMediaSinkVtbl;

interface IMFFinalizableMediaSink {
    CONST_VTBL IMFFinalizableMediaSinkVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFFinalizableMediaSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFFinalizableMediaSink_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFFinalizableMediaSink_Release(This) (This)->lpVtbl->Release(This)
/*** IMFMediaSink methods ***/
#define IMFFinalizableMediaSink_GetCharacteristics(This,characteristics) (This)->lpVtbl->GetCharacteristics(This,characteristics)
#define IMFFinalizableMediaSink_AddStreamSink(This,stream_sink_id,media_type,stream_sink) (This)->lpVtbl->AddStreamSink(This,stream_sink_id,media_type,stream_sink)
#define IMFFinalizableMediaSink_RemoveStreamSink(This,stream_sink_id) (This)->lpVtbl->RemoveStreamSink(This,stream_sink_id)
#define IMFFinalizableMediaSink_GetStreamSinkCount(This,count) (This)->lpVtbl->GetStreamSinkCount(This,count)
#define IMFFinalizableMediaSink_GetStreamSinkByIndex(This,index,sink) (This)->lpVtbl->GetStreamSinkByIndex(This,index,sink)
#define IMFFinalizableMediaSink_GetStreamSinkById(This,stream_sink_id,sink) (This)->lpVtbl->GetStreamSinkById(This,stream_sink_id,sink)
#define IMFFinalizableMediaSink_SetPresentationClock(This,clock) (This)->lpVtbl->SetPresentationClock(This,clock)
#define IMFFinalizableMediaSink_GetPresentationClock(This,clock) (This)->lpVtbl->GetPresentationClock(This,clock)
#define IMFFinalizableMediaSink_Shutdown(This) (This)->lpVtbl->Shutdown(This)
/*** IMFFinalizableMediaSink methods ***/
#define IMFFinalizableMediaSink_BeginFinalize(This,callback,state) (This)->lpVtbl->BeginFinalize(This,callback,state)
#define IMFFinalizableMediaSink_EndFinalize(This,result) (This)->lpVtbl->EndFinalize(This,result)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFFinalizableMediaSink_QueryInterface(IMFFinalizableMediaSink* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFFinalizableMediaSink_AddRef(IMFFinalizableMediaSink* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFFinalizableMediaSink_Release(IMFFinalizableMediaSink* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFMediaSink methods ***/
static __WIDL_INLINE HRESULT IMFFinalizableMediaSink_GetCharacteristics(IMFFinalizableMediaSink* This,DWORD *characteristics) {
    return This->lpVtbl->GetCharacteristics(This,characteristics);
}
static __WIDL_INLINE HRESULT IMFFinalizableMediaSink_AddStreamSink(IMFFinalizableMediaSink* This,DWORD stream_sink_id,IMFMediaType *media_type,IMFStreamSink **stream_sink) {
    return This->lpVtbl->AddStreamSink(This,stream_sink_id,media_type,stream_sink);
}
static __WIDL_INLINE HRESULT IMFFinalizableMediaSink_RemoveStreamSink(IMFFinalizableMediaSink* This,DWORD stream_sink_id) {
    return This->lpVtbl->RemoveStreamSink(This,stream_sink_id);
}
static __WIDL_INLINE HRESULT IMFFinalizableMediaSink_GetStreamSinkCount(IMFFinalizableMediaSink* This,DWORD *count) {
    return This->lpVtbl->GetStreamSinkCount(This,count);
}
static __WIDL_INLINE HRESULT IMFFinalizableMediaSink_GetStreamSinkByIndex(IMFFinalizableMediaSink* This,DWORD index,IMFStreamSink **sink) {
    return This->lpVtbl->GetStreamSinkByIndex(This,index,sink);
}
static __WIDL_INLINE HRESULT IMFFinalizableMediaSink_GetStreamSinkById(IMFFinalizableMediaSink* This,DWORD stream_sink_id,IMFStreamSink **sink) {
    return This->lpVtbl->GetStreamSinkById(This,stream_sink_id,sink);
}
static __WIDL_INLINE HRESULT IMFFinalizableMediaSink_SetPresentationClock(IMFFinalizableMediaSink* This,IMFPresentationClock *clock) {
    return This->lpVtbl->SetPresentationClock(This,clock);
}
static __WIDL_INLINE HRESULT IMFFinalizableMediaSink_GetPresentationClock(IMFFinalizableMediaSink* This,IMFPresentationClock **clock) {
    return This->lpVtbl->GetPresentationClock(This,clock);
}
static __WIDL_INLINE HRESULT IMFFinalizableMediaSink_Shutdown(IMFFinalizableMediaSink* This) {
    return This->lpVtbl->Shutdown(This);
}
/*** IMFFinalizableMediaSink methods ***/
static __WIDL_INLINE HRESULT IMFFinalizableMediaSink_BeginFinalize(IMFFinalizableMediaSink* This,IMFAsyncCallback *callback,IUnknown *state) {
    return This->lpVtbl->BeginFinalize(This,callback,state);
}
static __WIDL_INLINE HRESULT IMFFinalizableMediaSink_EndFinalize(IMFFinalizableMediaSink* This,IMFAsyncResult *result) {
    return This->lpVtbl->EndFinalize(This,result);
}
#endif
#endif

#endif


#endif  /* __IMFFinalizableMediaSink_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFMediaSinkPreroll interface
 */
#ifndef __IMFMediaSinkPreroll_INTERFACE_DEFINED__
#define __IMFMediaSinkPreroll_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFMediaSinkPreroll, 0x5dfd4b2a, 0x7674, 0x4110, 0xa4,0xe6, 0x8a,0x68,0xfd,0x5f,0x36,0x88);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("5dfd4b2a-7674-4110-a4e6-8a68fd5f3688")
IMFMediaSinkPreroll : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE NotifyPreroll(
        MFTIME start_time) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFMediaSinkPreroll, 0x5dfd4b2a, 0x7674, 0x4110, 0xa4,0xe6, 0x8a,0x68,0xfd,0x5f,0x36,0x88)
#endif
#else
typedef struct IMFMediaSinkPrerollVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFMediaSinkPreroll methods ***/
    HRESULT (STDMETHODCALLTYPE *NotifyPreroll)(
        IMFMediaSinkPreroll *This,
        MFTIME start_time);

    END_INTERFACE
} IMFMediaSinkPrerollVtbl;

interface IMFMediaSinkPreroll {
    CONST_VTBL IMFMediaSinkPrerollVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFMediaSinkPreroll_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFMediaSinkPreroll_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFMediaSinkPreroll_Release(This) (This)->lpVtbl->Release(This)
/*** IMFMediaSinkPreroll methods ***/
#define IMFMediaSinkPreroll_NotifyPreroll(This,start_time) (This)->lpVtbl->NotifyPreroll(This,start_time)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFMediaSinkPreroll_QueryInterface(IMFMediaSinkPreroll* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFMediaSinkPreroll_AddRef(IMFMediaSinkPreroll* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFMediaSinkPreroll_Release(IMFMediaSinkPreroll* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFMediaSinkPreroll methods ***/
static __WIDL_INLINE HRESULT IMFMediaSinkPreroll_NotifyPreroll(IMFMediaSinkPreroll* This,MFTIME start_time) {
    return This->lpVtbl->NotifyPreroll(This,start_time);
}
#endif
#endif

#endif


#endif  /* __IMFMediaSinkPreroll_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFStreamingSinkConfig interface
 */
#ifndef __IMFStreamingSinkConfig_INTERFACE_DEFINED__
#define __IMFStreamingSinkConfig_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFStreamingSinkConfig, 0x9db7aa41, 0x3cc5, 0x40d4, 0x85,0x09, 0x55,0x58,0x04,0xad,0x34,0xcc);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("9db7aa41-3cc5-40d4-8509-555804ad34cc")
IMFStreamingSinkConfig : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE StartStreaming(
        BOOL is_byte_offset,
        QWORD seek_offset) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFStreamingSinkConfig, 0x9db7aa41, 0x3cc5, 0x40d4, 0x85,0x09, 0x55,0x58,0x04,0xad,0x34,0xcc)
#endif
#else
typedef struct IMFStreamingSinkConfigVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFStreamingSinkConfig methods ***/
    HRESULT (STDMETHODCALLTYPE *StartStreaming)(
        IMFStreamingSinkConfig *This,
        BOOL is_byte_offset,
        QWORD seek_offset);

    END_INTERFACE
} IMFStreamingSinkConfigVtbl;

interface IMFStreamingSinkConfig {
    CONST_VTBL IMFStreamingSinkConfigVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFStreamingSinkConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFStreamingSinkConfig_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFStreamingSinkConfig_Release(This) (This)->lpVtbl->Release(This)
/*** IMFStreamingSinkConfig methods ***/
#define IMFStreamingSinkConfig_StartStreaming(This,is_byte_offset,seek_offset) (This)->lpVtbl->StartStreaming(This,is_byte_offset,seek_offset)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFStreamingSinkConfig_QueryInterface(IMFStreamingSinkConfig* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFStreamingSinkConfig_AddRef(IMFStreamingSinkConfig* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFStreamingSinkConfig_Release(IMFStreamingSinkConfig* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFStreamingSinkConfig methods ***/
static __WIDL_INLINE HRESULT IMFStreamingSinkConfig_StartStreaming(IMFStreamingSinkConfig* This,BOOL is_byte_offset,QWORD seek_offset) {
    return This->lpVtbl->StartStreaming(This,is_byte_offset,seek_offset);
}
#endif
#endif

#endif


#endif  /* __IMFStreamingSinkConfig_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFStreamSink interface
 */
#ifndef __IMFStreamSink_INTERFACE_DEFINED__
#define __IMFStreamSink_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFStreamSink, 0x0a97b3cf, 0x8e7c, 0x4a3d, 0x8f,0x8c, 0x0c,0x84,0x3d,0xc2,0x47,0xfb);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0a97b3cf-8e7c-4a3d-8f8c-0c843dc247fb")
IMFStreamSink : public IMFMediaEventGenerator
{
    virtual HRESULT STDMETHODCALLTYPE GetMediaSink(
        IMFMediaSink **sink) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetIdentifier(
        DWORD *identifier) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE ProcessSample(
        IMFSample *sample) = 0;

    virtual HRESULT STDMETHODCALLTYPE PlaceMarker(
        MFSTREAMSINK_MARKER_TYPE marker_type,
        const PROPVARIANT *marker_value,
        const PROPVARIANT *context_value) = 0;

    virtual HRESULT STDMETHODCALLTYPE Flush(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFStreamSink, 0x0a97b3cf, 0x8e7c, 0x4a3d, 0x8f,0x8c, 0x0c,0x84,0x3d,0xc2,0x47,0xfb)
#endif
#else
typedef struct IMFStreamSinkVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

    /*** IMFStreamSink methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMediaSink)(
        IMFStreamSink *This,
        IMFMediaSink **sink);

    HRESULT (STDMETHODCALLTYPE *GetIdentifier)(
        IMFStreamSink *This,
        DWORD *identifier);

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

    HRESULT (STDMETHODCALLTYPE *ProcessSample)(
        IMFStreamSink *This,
        IMFSample *sample);

    HRESULT (STDMETHODCALLTYPE *PlaceMarker)(
        IMFStreamSink *This,
        MFSTREAMSINK_MARKER_TYPE marker_type,
        const PROPVARIANT *marker_value,
        const PROPVARIANT *context_value);

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

    END_INTERFACE
} IMFStreamSinkVtbl;

interface IMFStreamSink {
    CONST_VTBL IMFStreamSinkVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFStreamSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFStreamSink_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFStreamSink_Release(This) (This)->lpVtbl->Release(This)
/*** IMFMediaEventGenerator methods ***/
#define IMFStreamSink_GetEvent(This,dwFlags,ppEvent) (This)->lpVtbl->GetEvent(This,dwFlags,ppEvent)
#define IMFStreamSink_BeginGetEvent(This,pCallback,punkState) (This)->lpVtbl->BeginGetEvent(This,pCallback,punkState)
#define IMFStreamSink_EndGetEvent(This,pResult,ppEvent) (This)->lpVtbl->EndGetEvent(This,pResult,ppEvent)
#define IMFStreamSink_QueueEvent(This,met,guidExtendedType,hrStatus,pvValue) (This)->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue)
/*** IMFStreamSink methods ***/
#define IMFStreamSink_GetMediaSink(This,sink) (This)->lpVtbl->GetMediaSink(This,sink)
#define IMFStreamSink_GetIdentifier(This,identifier) (This)->lpVtbl->GetIdentifier(This,identifier)
#define IMFStreamSink_GetMediaTypeHandler(This,handler) (This)->lpVtbl->GetMediaTypeHandler(This,handler)
#define IMFStreamSink_ProcessSample(This,sample) (This)->lpVtbl->ProcessSample(This,sample)
#define IMFStreamSink_PlaceMarker(This,marker_type,marker_value,context_value) (This)->lpVtbl->PlaceMarker(This,marker_type,marker_value,context_value)
#define IMFStreamSink_Flush(This) (This)->lpVtbl->Flush(This)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFStreamSink_QueryInterface(IMFStreamSink* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFStreamSink_AddRef(IMFStreamSink* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFStreamSink_Release(IMFStreamSink* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFMediaEventGenerator methods ***/
static __WIDL_INLINE HRESULT IMFStreamSink_GetEvent(IMFStreamSink* This,DWORD dwFlags,IMFMediaEvent **ppEvent) {
    return This->lpVtbl->GetEvent(This,dwFlags,ppEvent);
}
static __WIDL_INLINE HRESULT IMFStreamSink_BeginGetEvent(IMFStreamSink* This,IMFAsyncCallback *pCallback,IUnknown *punkState) {
    return This->lpVtbl->BeginGetEvent(This,pCallback,punkState);
}
static __WIDL_INLINE HRESULT IMFStreamSink_EndGetEvent(IMFStreamSink* This,IMFAsyncResult *pResult,IMFMediaEvent **ppEvent) {
    return This->lpVtbl->EndGetEvent(This,pResult,ppEvent);
}
static __WIDL_INLINE HRESULT IMFStreamSink_QueueEvent(IMFStreamSink* This,MediaEventType met,REFGUID guidExtendedType,HRESULT hrStatus,const PROPVARIANT *pvValue) {
    return This->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue);
}
/*** IMFStreamSink methods ***/
static __WIDL_INLINE HRESULT IMFStreamSink_GetMediaSink(IMFStreamSink* This,IMFMediaSink **sink) {
    return This->lpVtbl->GetMediaSink(This,sink);
}
static __WIDL_INLINE HRESULT IMFStreamSink_GetIdentifier(IMFStreamSink* This,DWORD *identifier) {
    return This->lpVtbl->GetIdentifier(This,identifier);
}
static __WIDL_INLINE HRESULT IMFStreamSink_GetMediaTypeHandler(IMFStreamSink* This,IMFMediaTypeHandler **handler) {
    return This->lpVtbl->GetMediaTypeHandler(This,handler);
}
static __WIDL_INLINE HRESULT IMFStreamSink_ProcessSample(IMFStreamSink* This,IMFSample *sample) {
    return This->lpVtbl->ProcessSample(This,sample);
}
static __WIDL_INLINE HRESULT IMFStreamSink_PlaceMarker(IMFStreamSink* This,MFSTREAMSINK_MARKER_TYPE marker_type,const PROPVARIANT *marker_value,const PROPVARIANT *context_value) {
    return This->lpVtbl->PlaceMarker(This,marker_type,marker_value,context_value);
}
static __WIDL_INLINE HRESULT IMFStreamSink_Flush(IMFStreamSink* This) {
    return This->lpVtbl->Flush(This);
}
#endif
#endif

#endif


#endif  /* __IMFStreamSink_INTERFACE_DEFINED__ */

typedef enum _MFSHUTDOWN_STATUS {
    MFSHUTDOWN_INITIATED = 0,
    MFSHUTDOWN_COMPLETED = 1
} MFSHUTDOWN_STATUS;
/*****************************************************************************
 * IMFShutdown interface
 */
#ifndef __IMFShutdown_INTERFACE_DEFINED__
#define __IMFShutdown_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFShutdown, 0x97ec2ea4, 0x0e42, 0x4937, 0x97,0xac, 0x9d,0x6d,0x32,0x88,0x24,0xe1);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("97ec2ea4-0e42-4937-97ac-9d6d328824e1")
IMFShutdown : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Shutdown(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetShutdownStatus(
        MFSHUTDOWN_STATUS *status) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFShutdown, 0x97ec2ea4, 0x0e42, 0x4937, 0x97,0xac, 0x9d,0x6d,0x32,0x88,0x24,0xe1)
#endif
#else
typedef struct IMFShutdownVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFShutdown methods ***/
    HRESULT (STDMETHODCALLTYPE *Shutdown)(
        IMFShutdown *This);

    HRESULT (STDMETHODCALLTYPE *GetShutdownStatus)(
        IMFShutdown *This,
        MFSHUTDOWN_STATUS *status);

    END_INTERFACE
} IMFShutdownVtbl;

interface IMFShutdown {
    CONST_VTBL IMFShutdownVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFShutdown_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFShutdown_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFShutdown_Release(This) (This)->lpVtbl->Release(This)
/*** IMFShutdown methods ***/
#define IMFShutdown_Shutdown(This) (This)->lpVtbl->Shutdown(This)
#define IMFShutdown_GetShutdownStatus(This,status) (This)->lpVtbl->GetShutdownStatus(This,status)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFShutdown_QueryInterface(IMFShutdown* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFShutdown_AddRef(IMFShutdown* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFShutdown_Release(IMFShutdown* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFShutdown methods ***/
static __WIDL_INLINE HRESULT IMFShutdown_Shutdown(IMFShutdown* This) {
    return This->lpVtbl->Shutdown(This);
}
static __WIDL_INLINE HRESULT IMFShutdown_GetShutdownStatus(IMFShutdown* This,MFSHUTDOWN_STATUS *status) {
    return This->lpVtbl->GetShutdownStatus(This,status);
}
#endif
#endif

#endif


#endif  /* __IMFShutdown_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFQualityManager interface
 */
#ifndef __IMFQualityManager_INTERFACE_DEFINED__
#define __IMFQualityManager_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFQualityManager, 0x8d009d86, 0x5b9f, 0x4115, 0xb1,0xfc, 0x9f,0x80,0xd5,0x2a,0xb8,0xab);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("8d009d86-5b9f-4115-b1fc-9f80d52ab8ab")
IMFQualityManager : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE NotifyTopology(
        IMFTopology *topology) = 0;

    virtual HRESULT STDMETHODCALLTYPE NotifyPresentationClock(
        IMFPresentationClock *clock) = 0;

    virtual HRESULT STDMETHODCALLTYPE NotifyProcessInput(
        IMFTopologyNode *node,
        LONG input_index,
        IMFSample *sample) = 0;

    virtual HRESULT STDMETHODCALLTYPE NotifyProcessOutput(
        IMFTopologyNode *node,
        LONG output_index,
        IMFSample *sample) = 0;

    virtual HRESULT STDMETHODCALLTYPE NotifyQualityEvent(
        IUnknown *object,
        IMFMediaEvent *event) = 0;

    virtual HRESULT STDMETHODCALLTYPE Shutdown(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFQualityManager, 0x8d009d86, 0x5b9f, 0x4115, 0xb1,0xfc, 0x9f,0x80,0xd5,0x2a,0xb8,0xab)
#endif
#else
typedef struct IMFQualityManagerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFQualityManager methods ***/
    HRESULT (STDMETHODCALLTYPE *NotifyTopology)(
        IMFQualityManager *This,
        IMFTopology *topology);

    HRESULT (STDMETHODCALLTYPE *NotifyPresentationClock)(
        IMFQualityManager *This,
        IMFPresentationClock *clock);

    HRESULT (STDMETHODCALLTYPE *NotifyProcessInput)(
        IMFQualityManager *This,
        IMFTopologyNode *node,
        LONG input_index,
        IMFSample *sample);

    HRESULT (STDMETHODCALLTYPE *NotifyProcessOutput)(
        IMFQualityManager *This,
        IMFTopologyNode *node,
        LONG output_index,
        IMFSample *sample);

    HRESULT (STDMETHODCALLTYPE *NotifyQualityEvent)(
        IMFQualityManager *This,
        IUnknown *object,
        IMFMediaEvent *event);

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

    END_INTERFACE
} IMFQualityManagerVtbl;

interface IMFQualityManager {
    CONST_VTBL IMFQualityManagerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFQualityManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFQualityManager_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFQualityManager_Release(This) (This)->lpVtbl->Release(This)
/*** IMFQualityManager methods ***/
#define IMFQualityManager_NotifyTopology(This,topology) (This)->lpVtbl->NotifyTopology(This,topology)
#define IMFQualityManager_NotifyPresentationClock(This,clock) (This)->lpVtbl->NotifyPresentationClock(This,clock)
#define IMFQualityManager_NotifyProcessInput(This,node,input_index,sample) (This)->lpVtbl->NotifyProcessInput(This,node,input_index,sample)
#define IMFQualityManager_NotifyProcessOutput(This,node,output_index,sample) (This)->lpVtbl->NotifyProcessOutput(This,node,output_index,sample)
#define IMFQualityManager_NotifyQualityEvent(This,object,event) (This)->lpVtbl->NotifyQualityEvent(This,object,event)
#define IMFQualityManager_Shutdown(This) (This)->lpVtbl->Shutdown(This)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFQualityManager_QueryInterface(IMFQualityManager* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFQualityManager_AddRef(IMFQualityManager* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFQualityManager_Release(IMFQualityManager* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFQualityManager methods ***/
static __WIDL_INLINE HRESULT IMFQualityManager_NotifyTopology(IMFQualityManager* This,IMFTopology *topology) {
    return This->lpVtbl->NotifyTopology(This,topology);
}
static __WIDL_INLINE HRESULT IMFQualityManager_NotifyPresentationClock(IMFQualityManager* This,IMFPresentationClock *clock) {
    return This->lpVtbl->NotifyPresentationClock(This,clock);
}
static __WIDL_INLINE HRESULT IMFQualityManager_NotifyProcessInput(IMFQualityManager* This,IMFTopologyNode *node,LONG input_index,IMFSample *sample) {
    return This->lpVtbl->NotifyProcessInput(This,node,input_index,sample);
}
static __WIDL_INLINE HRESULT IMFQualityManager_NotifyProcessOutput(IMFQualityManager* This,IMFTopologyNode *node,LONG output_index,IMFSample *sample) {
    return This->lpVtbl->NotifyProcessOutput(This,node,output_index,sample);
}
static __WIDL_INLINE HRESULT IMFQualityManager_NotifyQualityEvent(IMFQualityManager* This,IUnknown *object,IMFMediaEvent *event) {
    return This->lpVtbl->NotifyQualityEvent(This,object,event);
}
static __WIDL_INLINE HRESULT IMFQualityManager_Shutdown(IMFQualityManager* This) {
    return This->lpVtbl->Shutdown(This);
}
#endif
#endif

#endif


#endif  /* __IMFQualityManager_INTERFACE_DEFINED__ */

typedef enum _MF_QUALITY_DROP_MODE {
    MF_DROP_MODE_NONE = 0,
    MF_DROP_MODE_1 = 1,
    MF_DROP_MODE_2 = 2,
    MF_DROP_MODE_3 = 3,
    MF_DROP_MODE_4 = 4,
    MF_DROP_MODE_5 = 5,
    MF_NUM_DROP_MODES = 6
} MF_QUALITY_DROP_MODE;
typedef enum _MF_QUALITY_LEVEL {
    MF_QUALITY_NORMAL = 0,
    MF_QUALITY_NORMAL_MINUS_1 = 1,
    MF_QUALITY_NORMAL_MINUS_2 = 2,
    MF_QUALITY_NORMAL_MINUS_3 = 3,
    MF_QUALITY_NORMAL_MINUS_4 = 4,
    MF_QUALITY_NORMAL_MINUS_5 = 5,
    MF_NUM_QUALITY_LEVELS = 6
} MF_QUALITY_LEVEL;
/*****************************************************************************
 * IMFQualityAdvise interface
 */
#ifndef __IMFQualityAdvise_INTERFACE_DEFINED__
#define __IMFQualityAdvise_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFQualityAdvise, 0xec15e2e9, 0xe36b, 0x4f7c, 0x87,0x58, 0x77,0xd4,0x52,0xef,0x4c,0xe7);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ec15e2e9-e36b-4f7c-8758-77d452ef4ce7")
IMFQualityAdvise : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetDropMode(
        MF_QUALITY_DROP_MODE mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetQualityLevel(
        MF_QUALITY_LEVEL level) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDropMode(
        MF_QUALITY_DROP_MODE *mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetQualityLevel(
        MF_QUALITY_LEVEL *level) = 0;

    virtual HRESULT STDMETHODCALLTYPE DropTime(
        LONGLONG interval) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFQualityAdvise, 0xec15e2e9, 0xe36b, 0x4f7c, 0x87,0x58, 0x77,0xd4,0x52,0xef,0x4c,0xe7)
#endif
#else
typedef struct IMFQualityAdviseVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFQualityAdvise methods ***/
    HRESULT (STDMETHODCALLTYPE *SetDropMode)(
        IMFQualityAdvise *This,
        MF_QUALITY_DROP_MODE mode);

    HRESULT (STDMETHODCALLTYPE *SetQualityLevel)(
        IMFQualityAdvise *This,
        MF_QUALITY_LEVEL level);

    HRESULT (STDMETHODCALLTYPE *GetDropMode)(
        IMFQualityAdvise *This,
        MF_QUALITY_DROP_MODE *mode);

    HRESULT (STDMETHODCALLTYPE *GetQualityLevel)(
        IMFQualityAdvise *This,
        MF_QUALITY_LEVEL *level);

    HRESULT (STDMETHODCALLTYPE *DropTime)(
        IMFQualityAdvise *This,
        LONGLONG interval);

    END_INTERFACE
} IMFQualityAdviseVtbl;

interface IMFQualityAdvise {
    CONST_VTBL IMFQualityAdviseVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFQualityAdvise_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFQualityAdvise_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFQualityAdvise_Release(This) (This)->lpVtbl->Release(This)
/*** IMFQualityAdvise methods ***/
#define IMFQualityAdvise_SetDropMode(This,mode) (This)->lpVtbl->SetDropMode(This,mode)
#define IMFQualityAdvise_SetQualityLevel(This,level) (This)->lpVtbl->SetQualityLevel(This,level)
#define IMFQualityAdvise_GetDropMode(This,mode) (This)->lpVtbl->GetDropMode(This,mode)
#define IMFQualityAdvise_GetQualityLevel(This,level) (This)->lpVtbl->GetQualityLevel(This,level)
#define IMFQualityAdvise_DropTime(This,interval) (This)->lpVtbl->DropTime(This,interval)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFQualityAdvise_QueryInterface(IMFQualityAdvise* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFQualityAdvise_AddRef(IMFQualityAdvise* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFQualityAdvise_Release(IMFQualityAdvise* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFQualityAdvise methods ***/
static __WIDL_INLINE HRESULT IMFQualityAdvise_SetDropMode(IMFQualityAdvise* This,MF_QUALITY_DROP_MODE mode) {
    return This->lpVtbl->SetDropMode(This,mode);
}
static __WIDL_INLINE HRESULT IMFQualityAdvise_SetQualityLevel(IMFQualityAdvise* This,MF_QUALITY_LEVEL level) {
    return This->lpVtbl->SetQualityLevel(This,level);
}
static __WIDL_INLINE HRESULT IMFQualityAdvise_GetDropMode(IMFQualityAdvise* This,MF_QUALITY_DROP_MODE *mode) {
    return This->lpVtbl->GetDropMode(This,mode);
}
static __WIDL_INLINE HRESULT IMFQualityAdvise_GetQualityLevel(IMFQualityAdvise* This,MF_QUALITY_LEVEL *level) {
    return This->lpVtbl->GetQualityLevel(This,level);
}
static __WIDL_INLINE HRESULT IMFQualityAdvise_DropTime(IMFQualityAdvise* This,LONGLONG interval) {
    return This->lpVtbl->DropTime(This,interval);
}
#endif
#endif

#endif


#endif  /* __IMFQualityAdvise_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFQualityAdvise2 interface
 */
#ifndef __IMFQualityAdvise2_INTERFACE_DEFINED__
#define __IMFQualityAdvise2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFQualityAdvise2, 0xf3706f0d, 0x8ea2, 0x4886, 0x80,0x00, 0x71,0x55,0xe9,0xec,0x2e,0xae);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("f3706f0d-8ea2-4886-8000-7155e9ec2eae")
IMFQualityAdvise2 : public IMFQualityAdvise
{
    virtual HRESULT STDMETHODCALLTYPE NotifyQualityEvent(
        IMFMediaEvent *event,
        DWORD *flags) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFQualityAdvise2, 0xf3706f0d, 0x8ea2, 0x4886, 0x80,0x00, 0x71,0x55,0xe9,0xec,0x2e,0xae)
#endif
#else
typedef struct IMFQualityAdvise2Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFQualityAdvise methods ***/
    HRESULT (STDMETHODCALLTYPE *SetDropMode)(
        IMFQualityAdvise2 *This,
        MF_QUALITY_DROP_MODE mode);

    HRESULT (STDMETHODCALLTYPE *SetQualityLevel)(
        IMFQualityAdvise2 *This,
        MF_QUALITY_LEVEL level);

    HRESULT (STDMETHODCALLTYPE *GetDropMode)(
        IMFQualityAdvise2 *This,
        MF_QUALITY_DROP_MODE *mode);

    HRESULT (STDMETHODCALLTYPE *GetQualityLevel)(
        IMFQualityAdvise2 *This,
        MF_QUALITY_LEVEL *level);

    HRESULT (STDMETHODCALLTYPE *DropTime)(
        IMFQualityAdvise2 *This,
        LONGLONG interval);

    /*** IMFQualityAdvise2 methods ***/
    HRESULT (STDMETHODCALLTYPE *NotifyQualityEvent)(
        IMFQualityAdvise2 *This,
        IMFMediaEvent *event,
        DWORD *flags);

    END_INTERFACE
} IMFQualityAdvise2Vtbl;

interface IMFQualityAdvise2 {
    CONST_VTBL IMFQualityAdvise2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFQualityAdvise2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFQualityAdvise2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFQualityAdvise2_Release(This) (This)->lpVtbl->Release(This)
/*** IMFQualityAdvise methods ***/
#define IMFQualityAdvise2_SetDropMode(This,mode) (This)->lpVtbl->SetDropMode(This,mode)
#define IMFQualityAdvise2_SetQualityLevel(This,level) (This)->lpVtbl->SetQualityLevel(This,level)
#define IMFQualityAdvise2_GetDropMode(This,mode) (This)->lpVtbl->GetDropMode(This,mode)
#define IMFQualityAdvise2_GetQualityLevel(This,level) (This)->lpVtbl->GetQualityLevel(This,level)
#define IMFQualityAdvise2_DropTime(This,interval) (This)->lpVtbl->DropTime(This,interval)
/*** IMFQualityAdvise2 methods ***/
#define IMFQualityAdvise2_NotifyQualityEvent(This,event,flags) (This)->lpVtbl->NotifyQualityEvent(This,event,flags)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFQualityAdvise2_QueryInterface(IMFQualityAdvise2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFQualityAdvise2_AddRef(IMFQualityAdvise2* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFQualityAdvise2_Release(IMFQualityAdvise2* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFQualityAdvise methods ***/
static __WIDL_INLINE HRESULT IMFQualityAdvise2_SetDropMode(IMFQualityAdvise2* This,MF_QUALITY_DROP_MODE mode) {
    return This->lpVtbl->SetDropMode(This,mode);
}
static __WIDL_INLINE HRESULT IMFQualityAdvise2_SetQualityLevel(IMFQualityAdvise2* This,MF_QUALITY_LEVEL level) {
    return This->lpVtbl->SetQualityLevel(This,level);
}
static __WIDL_INLINE HRESULT IMFQualityAdvise2_GetDropMode(IMFQualityAdvise2* This,MF_QUALITY_DROP_MODE *mode) {
    return This->lpVtbl->GetDropMode(This,mode);
}
static __WIDL_INLINE HRESULT IMFQualityAdvise2_GetQualityLevel(IMFQualityAdvise2* This,MF_QUALITY_LEVEL *level) {
    return This->lpVtbl->GetQualityLevel(This,level);
}
static __WIDL_INLINE HRESULT IMFQualityAdvise2_DropTime(IMFQualityAdvise2* This,LONGLONG interval) {
    return This->lpVtbl->DropTime(This,interval);
}
/*** IMFQualityAdvise2 methods ***/
static __WIDL_INLINE HRESULT IMFQualityAdvise2_NotifyQualityEvent(IMFQualityAdvise2* This,IMFMediaEvent *event,DWORD *flags) {
    return This->lpVtbl->NotifyQualityEvent(This,event,flags);
}
#endif
#endif

#endif


#endif  /* __IMFQualityAdvise2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFQualityAdviseLimits interface
 */
#ifndef __IMFQualityAdviseLimits_INTERFACE_DEFINED__
#define __IMFQualityAdviseLimits_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFQualityAdviseLimits, 0xdfcd8e4d, 0x30b5, 0x4567, 0xac,0xaa, 0x8e,0xb5,0xb7,0x85,0x3d,0xc9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("dfcd8e4d-30b5-4567-acaa-8eb5b7853dc9")
IMFQualityAdviseLimits : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetMaximumDropMode(
        MF_QUALITY_DROP_MODE *mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMinimumQualityLevel(
        MF_QUALITY_LEVEL *level) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFQualityAdviseLimits, 0xdfcd8e4d, 0x30b5, 0x4567, 0xac,0xaa, 0x8e,0xb5,0xb7,0x85,0x3d,0xc9)
#endif
#else
typedef struct IMFQualityAdviseLimitsVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFQualityAdviseLimits methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMaximumDropMode)(
        IMFQualityAdviseLimits *This,
        MF_QUALITY_DROP_MODE *mode);

    HRESULT (STDMETHODCALLTYPE *GetMinimumQualityLevel)(
        IMFQualityAdviseLimits *This,
        MF_QUALITY_LEVEL *level);

    END_INTERFACE
} IMFQualityAdviseLimitsVtbl;

interface IMFQualityAdviseLimits {
    CONST_VTBL IMFQualityAdviseLimitsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFQualityAdviseLimits_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFQualityAdviseLimits_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFQualityAdviseLimits_Release(This) (This)->lpVtbl->Release(This)
/*** IMFQualityAdviseLimits methods ***/
#define IMFQualityAdviseLimits_GetMaximumDropMode(This,mode) (This)->lpVtbl->GetMaximumDropMode(This,mode)
#define IMFQualityAdviseLimits_GetMinimumQualityLevel(This,level) (This)->lpVtbl->GetMinimumQualityLevel(This,level)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFQualityAdviseLimits_QueryInterface(IMFQualityAdviseLimits* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFQualityAdviseLimits_AddRef(IMFQualityAdviseLimits* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFQualityAdviseLimits_Release(IMFQualityAdviseLimits* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFQualityAdviseLimits methods ***/
static __WIDL_INLINE HRESULT IMFQualityAdviseLimits_GetMaximumDropMode(IMFQualityAdviseLimits* This,MF_QUALITY_DROP_MODE *mode) {
    return This->lpVtbl->GetMaximumDropMode(This,mode);
}
static __WIDL_INLINE HRESULT IMFQualityAdviseLimits_GetMinimumQualityLevel(IMFQualityAdviseLimits* This,MF_QUALITY_LEVEL *level) {
    return This->lpVtbl->GetMinimumQualityLevel(This,level);
}
#endif
#endif

#endif


#endif  /* __IMFQualityAdviseLimits_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFTrackedSample interface
 */
#ifndef __IMFTrackedSample_INTERFACE_DEFINED__
#define __IMFTrackedSample_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFTrackedSample, 0x245bf8e9, 0x0755, 0x40f7, 0x88,0xa5, 0xae,0x0f,0x18,0xd5,0x5e,0x17);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("245bf8e9-0755-40f7-88a5-ae0f18d55e17")
IMFTrackedSample : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetAllocator(
        IMFAsyncCallback *sample_allocator,
        IUnknown *state) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFTrackedSample, 0x245bf8e9, 0x0755, 0x40f7, 0x88,0xa5, 0xae,0x0f,0x18,0xd5,0x5e,0x17)
#endif
#else
typedef struct IMFTrackedSampleVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFTrackedSample methods ***/
    HRESULT (STDMETHODCALLTYPE *SetAllocator)(
        IMFTrackedSample *This,
        IMFAsyncCallback *sample_allocator,
        IUnknown *state);

    END_INTERFACE
} IMFTrackedSampleVtbl;

interface IMFTrackedSample {
    CONST_VTBL IMFTrackedSampleVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFTrackedSample_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFTrackedSample_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFTrackedSample_Release(This) (This)->lpVtbl->Release(This)
/*** IMFTrackedSample methods ***/
#define IMFTrackedSample_SetAllocator(This,sample_allocator,state) (This)->lpVtbl->SetAllocator(This,sample_allocator,state)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFTrackedSample_QueryInterface(IMFTrackedSample* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFTrackedSample_AddRef(IMFTrackedSample* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFTrackedSample_Release(IMFTrackedSample* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFTrackedSample methods ***/
static __WIDL_INLINE HRESULT IMFTrackedSample_SetAllocator(IMFTrackedSample* This,IMFAsyncCallback *sample_allocator,IUnknown *state) {
    return This->lpVtbl->SetAllocator(This,sample_allocator,state);
}
#endif
#endif

#endif


#endif  /* __IMFTrackedSample_INTERFACE_DEFINED__ */

typedef struct _MFT_REGISTRATION_INFO {
    CLSID clsid;
    GUID guidCategory;
    UINT32 uiFlags;
    LPCWSTR pszName;
    DWORD cInTypes;
    MFT_REGISTER_TYPE_INFO *pInTypes;
    DWORD cOutTypes;
    MFT_REGISTER_TYPE_INFO *pOutTypes;
} MFT_REGISTRATION_INFO;
/*****************************************************************************
 * IMFLocalMFTRegistration interface
 */
#ifndef __IMFLocalMFTRegistration_INTERFACE_DEFINED__
#define __IMFLocalMFTRegistration_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFLocalMFTRegistration, 0x149c4d73, 0xb4be, 0x4f8d, 0x8b,0x87, 0x07,0x9e,0x92,0x6b,0x6a,0xdd);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("149c4d73-b4be-4f8d-8b87-079e926b6add")
IMFLocalMFTRegistration : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE RegisterMFTs(
        MFT_REGISTRATION_INFO *info,
        DWORD count) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFLocalMFTRegistration, 0x149c4d73, 0xb4be, 0x4f8d, 0x8b,0x87, 0x07,0x9e,0x92,0x6b,0x6a,0xdd)
#endif
#else
typedef struct IMFLocalMFTRegistrationVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFLocalMFTRegistration methods ***/
    HRESULT (STDMETHODCALLTYPE *RegisterMFTs)(
        IMFLocalMFTRegistration *This,
        MFT_REGISTRATION_INFO *info,
        DWORD count);

    END_INTERFACE
} IMFLocalMFTRegistrationVtbl;

interface IMFLocalMFTRegistration {
    CONST_VTBL IMFLocalMFTRegistrationVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFLocalMFTRegistration_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFLocalMFTRegistration_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFLocalMFTRegistration_Release(This) (This)->lpVtbl->Release(This)
/*** IMFLocalMFTRegistration methods ***/
#define IMFLocalMFTRegistration_RegisterMFTs(This,info,count) (This)->lpVtbl->RegisterMFTs(This,info,count)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFLocalMFTRegistration_QueryInterface(IMFLocalMFTRegistration* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFLocalMFTRegistration_AddRef(IMFLocalMFTRegistration* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFLocalMFTRegistration_Release(IMFLocalMFTRegistration* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFLocalMFTRegistration methods ***/
static __WIDL_INLINE HRESULT IMFLocalMFTRegistration_RegisterMFTs(IMFLocalMFTRegistration* This,MFT_REGISTRATION_INFO *info,DWORD count) {
    return This->lpVtbl->RegisterMFTs(This,info,count);
}
#endif
#endif

#endif


#endif  /* __IMFLocalMFTRegistration_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFMediaSourceTopologyProvider interface
 */
#ifndef __IMFMediaSourceTopologyProvider_INTERFACE_DEFINED__
#define __IMFMediaSourceTopologyProvider_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFMediaSourceTopologyProvider, 0x0e1d6009, 0xc9f3, 0x442d, 0x8c,0x51, 0xa4,0x2d,0x2d,0x49,0x45,0x2f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0e1d6009-c9f3-442d-8c51-a42d2d49452f")
IMFMediaSourceTopologyProvider : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetMediaSourceTopology(
        IMFPresentationDescriptor *pd,
        IMFTopology **topology) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFMediaSourceTopologyProvider, 0x0e1d6009, 0xc9f3, 0x442d, 0x8c,0x51, 0xa4,0x2d,0x2d,0x49,0x45,0x2f)
#endif
#else
typedef struct IMFMediaSourceTopologyProviderVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFMediaSourceTopologyProvider methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMediaSourceTopology)(
        IMFMediaSourceTopologyProvider *This,
        IMFPresentationDescriptor *pd,
        IMFTopology **topology);

    END_INTERFACE
} IMFMediaSourceTopologyProviderVtbl;

interface IMFMediaSourceTopologyProvider {
    CONST_VTBL IMFMediaSourceTopologyProviderVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFMediaSourceTopologyProvider_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFMediaSourceTopologyProvider_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFMediaSourceTopologyProvider_Release(This) (This)->lpVtbl->Release(This)
/*** IMFMediaSourceTopologyProvider methods ***/
#define IMFMediaSourceTopologyProvider_GetMediaSourceTopology(This,pd,topology) (This)->lpVtbl->GetMediaSourceTopology(This,pd,topology)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFMediaSourceTopologyProvider_QueryInterface(IMFMediaSourceTopologyProvider* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFMediaSourceTopologyProvider_AddRef(IMFMediaSourceTopologyProvider* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFMediaSourceTopologyProvider_Release(IMFMediaSourceTopologyProvider* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFMediaSourceTopologyProvider methods ***/
static __WIDL_INLINE HRESULT IMFMediaSourceTopologyProvider_GetMediaSourceTopology(IMFMediaSourceTopologyProvider* This,IMFPresentationDescriptor *pd,IMFTopology **topology) {
    return This->lpVtbl->GetMediaSourceTopology(This,pd,topology);
}
#endif
#endif

#endif


#endif  /* __IMFMediaSourceTopologyProvider_INTERFACE_DEFINED__ */

enum {
    MF_RESOLUTION_MEDIASOURCE = 0x1,
    MF_RESOLUTION_BYTESTREAM = 0x2,
    MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE = 0x10,
    MF_RESOLUTION_KEEP_BYTE_STREAM_ALIVE_ON_FAIL = 0x20,
    MF_RESOLUTION_DISABLE_LOCAL_PLUGINS = 0x40,
    MF_RESOLUTION_PLUGIN_CONTROL_POLICY_APPROVED_ONLY = 0x80,
    MF_RESOLUTION_PLUGIN_CONTROL_POLICY_WEB_ONLY = 0x100,
    MF_RESOLUTION_PLUGIN_CONTROL_POLICY_WEB_ONLY_EDGEMODE = 0x200,
    MF_RESOLUTION_ENABLE_STORE_PLUGINS = 0x400,
    MF_RESOLUTION_READ = 0x10000,
    MF_RESOLUTION_WRITE = 0x20000
};
/*****************************************************************************
 * IMFSimpleAudioVolume interface
 */
#ifndef __IMFSimpleAudioVolume_INTERFACE_DEFINED__
#define __IMFSimpleAudioVolume_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFSimpleAudioVolume, 0x089edf13, 0xcf71, 0x4338, 0x8d,0x13, 0x9e,0x56,0x9d,0xbd,0xc3,0x19);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("089edf13-cf71-4338-8d13-9e569dbdc319")
IMFSimpleAudioVolume : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetMasterVolume(
        float level) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMasterVolume(
        float *level) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetMute(
        BOOL mute) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMute(
        BOOL *mute) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFSimpleAudioVolume, 0x089edf13, 0xcf71, 0x4338, 0x8d,0x13, 0x9e,0x56,0x9d,0xbd,0xc3,0x19)
#endif
#else
typedef struct IMFSimpleAudioVolumeVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFSimpleAudioVolume methods ***/
    HRESULT (STDMETHODCALLTYPE *SetMasterVolume)(
        IMFSimpleAudioVolume *This,
        float level);

    HRESULT (STDMETHODCALLTYPE *GetMasterVolume)(
        IMFSimpleAudioVolume *This,
        float *level);

    HRESULT (STDMETHODCALLTYPE *SetMute)(
        IMFSimpleAudioVolume *This,
        BOOL mute);

    HRESULT (STDMETHODCALLTYPE *GetMute)(
        IMFSimpleAudioVolume *This,
        BOOL *mute);

    END_INTERFACE
} IMFSimpleAudioVolumeVtbl;

interface IMFSimpleAudioVolume {
    CONST_VTBL IMFSimpleAudioVolumeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFSimpleAudioVolume_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFSimpleAudioVolume_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFSimpleAudioVolume_Release(This) (This)->lpVtbl->Release(This)
/*** IMFSimpleAudioVolume methods ***/
#define IMFSimpleAudioVolume_SetMasterVolume(This,level) (This)->lpVtbl->SetMasterVolume(This,level)
#define IMFSimpleAudioVolume_GetMasterVolume(This,level) (This)->lpVtbl->GetMasterVolume(This,level)
#define IMFSimpleAudioVolume_SetMute(This,mute) (This)->lpVtbl->SetMute(This,mute)
#define IMFSimpleAudioVolume_GetMute(This,mute) (This)->lpVtbl->GetMute(This,mute)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFSimpleAudioVolume_QueryInterface(IMFSimpleAudioVolume* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFSimpleAudioVolume_AddRef(IMFSimpleAudioVolume* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFSimpleAudioVolume_Release(IMFSimpleAudioVolume* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFSimpleAudioVolume methods ***/
static __WIDL_INLINE HRESULT IMFSimpleAudioVolume_SetMasterVolume(IMFSimpleAudioVolume* This,float level) {
    return This->lpVtbl->SetMasterVolume(This,level);
}
static __WIDL_INLINE HRESULT IMFSimpleAudioVolume_GetMasterVolume(IMFSimpleAudioVolume* This,float *level) {
    return This->lpVtbl->GetMasterVolume(This,level);
}
static __WIDL_INLINE HRESULT IMFSimpleAudioVolume_SetMute(IMFSimpleAudioVolume* This,BOOL mute) {
    return This->lpVtbl->SetMute(This,mute);
}
static __WIDL_INLINE HRESULT IMFSimpleAudioVolume_GetMute(IMFSimpleAudioVolume* This,BOOL *mute) {
    return This->lpVtbl->GetMute(This,mute);
}
#endif
#endif

#endif


#endif  /* __IMFSimpleAudioVolume_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFAudioStreamVolume interface
 */
#ifndef __IMFAudioStreamVolume_INTERFACE_DEFINED__
#define __IMFAudioStreamVolume_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFAudioStreamVolume, 0x76b1bbdb, 0x4ec8, 0x4f36, 0xb1,0x06, 0x70,0xa9,0x31,0x6d,0xf5,0x93);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("76b1bbdb-4ec8-4f36-b106-70a9316df593")
IMFAudioStreamVolume : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetChannelCount(
        UINT32 *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetChannelVolume(
        UINT32 index,
        const float level) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetChannelVolume(
        UINT32 index,
        float *level) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAllVolumes(
        UINT32 count,
        const float *volumes) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAllVolumes(
        UINT32 count,
        float *volumes) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFAudioStreamVolume, 0x76b1bbdb, 0x4ec8, 0x4f36, 0xb1,0x06, 0x70,0xa9,0x31,0x6d,0xf5,0x93)
#endif
#else
typedef struct IMFAudioStreamVolumeVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFAudioStreamVolume methods ***/
    HRESULT (STDMETHODCALLTYPE *GetChannelCount)(
        IMFAudioStreamVolume *This,
        UINT32 *count);

    HRESULT (STDMETHODCALLTYPE *SetChannelVolume)(
        IMFAudioStreamVolume *This,
        UINT32 index,
        const float level);

    HRESULT (STDMETHODCALLTYPE *GetChannelVolume)(
        IMFAudioStreamVolume *This,
        UINT32 index,
        float *level);

    HRESULT (STDMETHODCALLTYPE *SetAllVolumes)(
        IMFAudioStreamVolume *This,
        UINT32 count,
        const float *volumes);

    HRESULT (STDMETHODCALLTYPE *GetAllVolumes)(
        IMFAudioStreamVolume *This,
        UINT32 count,
        float *volumes);

    END_INTERFACE
} IMFAudioStreamVolumeVtbl;

interface IMFAudioStreamVolume {
    CONST_VTBL IMFAudioStreamVolumeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFAudioStreamVolume_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFAudioStreamVolume_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFAudioStreamVolume_Release(This) (This)->lpVtbl->Release(This)
/*** IMFAudioStreamVolume methods ***/
#define IMFAudioStreamVolume_GetChannelCount(This,count) (This)->lpVtbl->GetChannelCount(This,count)
#define IMFAudioStreamVolume_SetChannelVolume(This,index,level) (This)->lpVtbl->SetChannelVolume(This,index,level)
#define IMFAudioStreamVolume_GetChannelVolume(This,index,level) (This)->lpVtbl->GetChannelVolume(This,index,level)
#define IMFAudioStreamVolume_SetAllVolumes(This,count,volumes) (This)->lpVtbl->SetAllVolumes(This,count,volumes)
#define IMFAudioStreamVolume_GetAllVolumes(This,count,volumes) (This)->lpVtbl->GetAllVolumes(This,count,volumes)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFAudioStreamVolume_QueryInterface(IMFAudioStreamVolume* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFAudioStreamVolume_AddRef(IMFAudioStreamVolume* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFAudioStreamVolume_Release(IMFAudioStreamVolume* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFAudioStreamVolume methods ***/
static __WIDL_INLINE HRESULT IMFAudioStreamVolume_GetChannelCount(IMFAudioStreamVolume* This,UINT32 *count) {
    return This->lpVtbl->GetChannelCount(This,count);
}
static __WIDL_INLINE HRESULT IMFAudioStreamVolume_SetChannelVolume(IMFAudioStreamVolume* This,UINT32 index,const float level) {
    return This->lpVtbl->SetChannelVolume(This,index,level);
}
static __WIDL_INLINE HRESULT IMFAudioStreamVolume_GetChannelVolume(IMFAudioStreamVolume* This,UINT32 index,float *level) {
    return This->lpVtbl->GetChannelVolume(This,index,level);
}
static __WIDL_INLINE HRESULT IMFAudioStreamVolume_SetAllVolumes(IMFAudioStreamVolume* This,UINT32 count,const float *volumes) {
    return This->lpVtbl->SetAllVolumes(This,count,volumes);
}
static __WIDL_INLINE HRESULT IMFAudioStreamVolume_GetAllVolumes(IMFAudioStreamVolume* This,UINT32 count,float *volumes) {
    return This->lpVtbl->GetAllVolumes(This,count,volumes);
}
#endif
#endif

#endif


#endif  /* __IMFAudioStreamVolume_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFAudioPolicy interface
 */
#ifndef __IMFAudioPolicy_INTERFACE_DEFINED__
#define __IMFAudioPolicy_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFAudioPolicy, 0xa0638c2b, 0x6465, 0x4395, 0x9a,0xe7, 0xa3,0x21,0xa9,0xfd,0x28,0x56);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a0638c2b-6465-4395-9ae7-a321a9fd2856")
IMFAudioPolicy : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetGroupingParam(
        REFGUID param) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetGroupingParam(
        GUID *param) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDisplayName(
        LPCWSTR name) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDisplayName(
        LPWSTR *name) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetIconPath(
        LPCWSTR path) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetIconPath(
        LPWSTR *path) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFAudioPolicy, 0xa0638c2b, 0x6465, 0x4395, 0x9a,0xe7, 0xa3,0x21,0xa9,0xfd,0x28,0x56)
#endif
#else
typedef struct IMFAudioPolicyVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFAudioPolicy methods ***/
    HRESULT (STDMETHODCALLTYPE *SetGroupingParam)(
        IMFAudioPolicy *This,
        REFGUID param);

    HRESULT (STDMETHODCALLTYPE *GetGroupingParam)(
        IMFAudioPolicy *This,
        GUID *param);

    HRESULT (STDMETHODCALLTYPE *SetDisplayName)(
        IMFAudioPolicy *This,
        LPCWSTR name);

    HRESULT (STDMETHODCALLTYPE *GetDisplayName)(
        IMFAudioPolicy *This,
        LPWSTR *name);

    HRESULT (STDMETHODCALLTYPE *SetIconPath)(
        IMFAudioPolicy *This,
        LPCWSTR path);

    HRESULT (STDMETHODCALLTYPE *GetIconPath)(
        IMFAudioPolicy *This,
        LPWSTR *path);

    END_INTERFACE
} IMFAudioPolicyVtbl;

interface IMFAudioPolicy {
    CONST_VTBL IMFAudioPolicyVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFAudioPolicy_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFAudioPolicy_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFAudioPolicy_Release(This) (This)->lpVtbl->Release(This)
/*** IMFAudioPolicy methods ***/
#define IMFAudioPolicy_SetGroupingParam(This,param) (This)->lpVtbl->SetGroupingParam(This,param)
#define IMFAudioPolicy_GetGroupingParam(This,param) (This)->lpVtbl->GetGroupingParam(This,param)
#define IMFAudioPolicy_SetDisplayName(This,name) (This)->lpVtbl->SetDisplayName(This,name)
#define IMFAudioPolicy_GetDisplayName(This,name) (This)->lpVtbl->GetDisplayName(This,name)
#define IMFAudioPolicy_SetIconPath(This,path) (This)->lpVtbl->SetIconPath(This,path)
#define IMFAudioPolicy_GetIconPath(This,path) (This)->lpVtbl->GetIconPath(This,path)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFAudioPolicy_QueryInterface(IMFAudioPolicy* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFAudioPolicy_AddRef(IMFAudioPolicy* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFAudioPolicy_Release(IMFAudioPolicy* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFAudioPolicy methods ***/
static __WIDL_INLINE HRESULT IMFAudioPolicy_SetGroupingParam(IMFAudioPolicy* This,REFGUID param) {
    return This->lpVtbl->SetGroupingParam(This,param);
}
static __WIDL_INLINE HRESULT IMFAudioPolicy_GetGroupingParam(IMFAudioPolicy* This,GUID *param) {
    return This->lpVtbl->GetGroupingParam(This,param);
}
static __WIDL_INLINE HRESULT IMFAudioPolicy_SetDisplayName(IMFAudioPolicy* This,LPCWSTR name) {
    return This->lpVtbl->SetDisplayName(This,name);
}
static __WIDL_INLINE HRESULT IMFAudioPolicy_GetDisplayName(IMFAudioPolicy* This,LPWSTR *name) {
    return This->lpVtbl->GetDisplayName(This,name);
}
static __WIDL_INLINE HRESULT IMFAudioPolicy_SetIconPath(IMFAudioPolicy* This,LPCWSTR path) {
    return This->lpVtbl->SetIconPath(This,path);
}
static __WIDL_INLINE HRESULT IMFAudioPolicy_GetIconPath(IMFAudioPolicy* This,LPWSTR *path) {
    return This->lpVtbl->GetIconPath(This,path);
}
#endif
#endif

#endif


#endif  /* __IMFAudioPolicy_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFVideoSampleAllocator interface
 */
#ifndef __IMFVideoSampleAllocator_INTERFACE_DEFINED__
#define __IMFVideoSampleAllocator_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFVideoSampleAllocator, 0x86cbc910, 0xe533, 0x4751, 0x8e,0x3b, 0xf1,0x9b,0x5b,0x80,0x6a,0x03);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("86cbc910-e533-4751-8e3b-f19b5b806a03")
IMFVideoSampleAllocator : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetDirectXManager(
        IUnknown *manager) = 0;

    virtual HRESULT STDMETHODCALLTYPE UninitializeSampleAllocator(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE InitializeSampleAllocator(
        DWORD sample_count,
        IMFMediaType *media_type) = 0;

    virtual HRESULT STDMETHODCALLTYPE AllocateSample(
        IMFSample **sample) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFVideoSampleAllocator, 0x86cbc910, 0xe533, 0x4751, 0x8e,0x3b, 0xf1,0x9b,0x5b,0x80,0x6a,0x03)
#endif
#else
typedef struct IMFVideoSampleAllocatorVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFVideoSampleAllocator methods ***/
    HRESULT (STDMETHODCALLTYPE *SetDirectXManager)(
        IMFVideoSampleAllocator *This,
        IUnknown *manager);

    HRESULT (STDMETHODCALLTYPE *UninitializeSampleAllocator)(
        IMFVideoSampleAllocator *This);

    HRESULT (STDMETHODCALLTYPE *InitializeSampleAllocator)(
        IMFVideoSampleAllocator *This,
        DWORD sample_count,
        IMFMediaType *media_type);

    HRESULT (STDMETHODCALLTYPE *AllocateSample)(
        IMFVideoSampleAllocator *This,
        IMFSample **sample);

    END_INTERFACE
} IMFVideoSampleAllocatorVtbl;

interface IMFVideoSampleAllocator {
    CONST_VTBL IMFVideoSampleAllocatorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFVideoSampleAllocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFVideoSampleAllocator_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFVideoSampleAllocator_Release(This) (This)->lpVtbl->Release(This)
/*** IMFVideoSampleAllocator methods ***/
#define IMFVideoSampleAllocator_SetDirectXManager(This,manager) (This)->lpVtbl->SetDirectXManager(This,manager)
#define IMFVideoSampleAllocator_UninitializeSampleAllocator(This) (This)->lpVtbl->UninitializeSampleAllocator(This)
#define IMFVideoSampleAllocator_InitializeSampleAllocator(This,sample_count,media_type) (This)->lpVtbl->InitializeSampleAllocator(This,sample_count,media_type)
#define IMFVideoSampleAllocator_AllocateSample(This,sample) (This)->lpVtbl->AllocateSample(This,sample)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFVideoSampleAllocator_QueryInterface(IMFVideoSampleAllocator* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFVideoSampleAllocator_AddRef(IMFVideoSampleAllocator* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFVideoSampleAllocator_Release(IMFVideoSampleAllocator* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFVideoSampleAllocator methods ***/
static __WIDL_INLINE HRESULT IMFVideoSampleAllocator_SetDirectXManager(IMFVideoSampleAllocator* This,IUnknown *manager) {
    return This->lpVtbl->SetDirectXManager(This,manager);
}
static __WIDL_INLINE HRESULT IMFVideoSampleAllocator_UninitializeSampleAllocator(IMFVideoSampleAllocator* This) {
    return This->lpVtbl->UninitializeSampleAllocator(This);
}
static __WIDL_INLINE HRESULT IMFVideoSampleAllocator_InitializeSampleAllocator(IMFVideoSampleAllocator* This,DWORD sample_count,IMFMediaType *media_type) {
    return This->lpVtbl->InitializeSampleAllocator(This,sample_count,media_type);
}
static __WIDL_INLINE HRESULT IMFVideoSampleAllocator_AllocateSample(IMFVideoSampleAllocator* This,IMFSample **sample) {
    return This->lpVtbl->AllocateSample(This,sample);
}
#endif
#endif

#endif


#endif  /* __IMFVideoSampleAllocator_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFVideoSampleAllocatorNotify interface
 */
#ifndef __IMFVideoSampleAllocatorNotify_INTERFACE_DEFINED__
#define __IMFVideoSampleAllocatorNotify_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFVideoSampleAllocatorNotify, 0xa792cdbe, 0xc374, 0x4e89, 0x83,0x35, 0x27,0x8e,0x7b,0x99,0x56,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a792cdbe-c374-4e89-8335-278e7b9956a4")
IMFVideoSampleAllocatorNotify : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE NotifyRelease(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFVideoSampleAllocatorNotify, 0xa792cdbe, 0xc374, 0x4e89, 0x83,0x35, 0x27,0x8e,0x7b,0x99,0x56,0xa4)
#endif
#else
typedef struct IMFVideoSampleAllocatorNotifyVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFVideoSampleAllocatorNotify methods ***/
    HRESULT (STDMETHODCALLTYPE *NotifyRelease)(
        IMFVideoSampleAllocatorNotify *This);

    END_INTERFACE
} IMFVideoSampleAllocatorNotifyVtbl;

interface IMFVideoSampleAllocatorNotify {
    CONST_VTBL IMFVideoSampleAllocatorNotifyVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFVideoSampleAllocatorNotify_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFVideoSampleAllocatorNotify_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFVideoSampleAllocatorNotify_Release(This) (This)->lpVtbl->Release(This)
/*** IMFVideoSampleAllocatorNotify methods ***/
#define IMFVideoSampleAllocatorNotify_NotifyRelease(This) (This)->lpVtbl->NotifyRelease(This)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFVideoSampleAllocatorNotify_QueryInterface(IMFVideoSampleAllocatorNotify* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFVideoSampleAllocatorNotify_AddRef(IMFVideoSampleAllocatorNotify* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFVideoSampleAllocatorNotify_Release(IMFVideoSampleAllocatorNotify* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFVideoSampleAllocatorNotify methods ***/
static __WIDL_INLINE HRESULT IMFVideoSampleAllocatorNotify_NotifyRelease(IMFVideoSampleAllocatorNotify* This) {
    return This->lpVtbl->NotifyRelease(This);
}
#endif
#endif

#endif


#endif  /* __IMFVideoSampleAllocatorNotify_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFVideoSampleAllocatorNotifyEx interface
 */
#ifndef __IMFVideoSampleAllocatorNotifyEx_INTERFACE_DEFINED__
#define __IMFVideoSampleAllocatorNotifyEx_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFVideoSampleAllocatorNotifyEx, 0x3978aa1a, 0x6d5b, 0x4b7f, 0xa3,0x40, 0x90,0x89,0x91,0x89,0xae,0x34);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("3978aa1a-6d5b-4b7f-a340-90899189ae34")
IMFVideoSampleAllocatorNotifyEx : public IMFVideoSampleAllocatorNotify
{
    virtual HRESULT STDMETHODCALLTYPE NotifyPrune(
        IMFSample *sample) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFVideoSampleAllocatorNotifyEx, 0x3978aa1a, 0x6d5b, 0x4b7f, 0xa3,0x40, 0x90,0x89,0x91,0x89,0xae,0x34)
#endif
#else
typedef struct IMFVideoSampleAllocatorNotifyExVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFVideoSampleAllocatorNotify methods ***/
    HRESULT (STDMETHODCALLTYPE *NotifyRelease)(
        IMFVideoSampleAllocatorNotifyEx *This);

    /*** IMFVideoSampleAllocatorNotifyEx methods ***/
    HRESULT (STDMETHODCALLTYPE *NotifyPrune)(
        IMFVideoSampleAllocatorNotifyEx *This,
        IMFSample *sample);

    END_INTERFACE
} IMFVideoSampleAllocatorNotifyExVtbl;

interface IMFVideoSampleAllocatorNotifyEx {
    CONST_VTBL IMFVideoSampleAllocatorNotifyExVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFVideoSampleAllocatorNotifyEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFVideoSampleAllocatorNotifyEx_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFVideoSampleAllocatorNotifyEx_Release(This) (This)->lpVtbl->Release(This)
/*** IMFVideoSampleAllocatorNotify methods ***/
#define IMFVideoSampleAllocatorNotifyEx_NotifyRelease(This) (This)->lpVtbl->NotifyRelease(This)
/*** IMFVideoSampleAllocatorNotifyEx methods ***/
#define IMFVideoSampleAllocatorNotifyEx_NotifyPrune(This,sample) (This)->lpVtbl->NotifyPrune(This,sample)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFVideoSampleAllocatorNotifyEx_QueryInterface(IMFVideoSampleAllocatorNotifyEx* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFVideoSampleAllocatorNotifyEx_AddRef(IMFVideoSampleAllocatorNotifyEx* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFVideoSampleAllocatorNotifyEx_Release(IMFVideoSampleAllocatorNotifyEx* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFVideoSampleAllocatorNotify methods ***/
static __WIDL_INLINE HRESULT IMFVideoSampleAllocatorNotifyEx_NotifyRelease(IMFVideoSampleAllocatorNotifyEx* This) {
    return This->lpVtbl->NotifyRelease(This);
}
/*** IMFVideoSampleAllocatorNotifyEx methods ***/
static __WIDL_INLINE HRESULT IMFVideoSampleAllocatorNotifyEx_NotifyPrune(IMFVideoSampleAllocatorNotifyEx* This,IMFSample *sample) {
    return This->lpVtbl->NotifyPrune(This,sample);
}
#endif
#endif

#endif


#endif  /* __IMFVideoSampleAllocatorNotifyEx_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFVideoSampleAllocatorCallback interface
 */
#ifndef __IMFVideoSampleAllocatorCallback_INTERFACE_DEFINED__
#define __IMFVideoSampleAllocatorCallback_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFVideoSampleAllocatorCallback, 0x992388b4, 0x3372, 0x4f67, 0x8b,0x6f, 0xc8,0x4c,0x07,0x1f,0x47,0x51);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("992388b4-3372-4f67-8b6f-c84c071f4751")
IMFVideoSampleAllocatorCallback : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetCallback(
        IMFVideoSampleAllocatorNotify *callback) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFreeSampleCount(
        LONG *count) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFVideoSampleAllocatorCallback, 0x992388b4, 0x3372, 0x4f67, 0x8b,0x6f, 0xc8,0x4c,0x07,0x1f,0x47,0x51)
#endif
#else
typedef struct IMFVideoSampleAllocatorCallbackVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFVideoSampleAllocatorCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *SetCallback)(
        IMFVideoSampleAllocatorCallback *This,
        IMFVideoSampleAllocatorNotify *callback);

    HRESULT (STDMETHODCALLTYPE *GetFreeSampleCount)(
        IMFVideoSampleAllocatorCallback *This,
        LONG *count);

    END_INTERFACE
} IMFVideoSampleAllocatorCallbackVtbl;

interface IMFVideoSampleAllocatorCallback {
    CONST_VTBL IMFVideoSampleAllocatorCallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFVideoSampleAllocatorCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFVideoSampleAllocatorCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFVideoSampleAllocatorCallback_Release(This) (This)->lpVtbl->Release(This)
/*** IMFVideoSampleAllocatorCallback methods ***/
#define IMFVideoSampleAllocatorCallback_SetCallback(This,callback) (This)->lpVtbl->SetCallback(This,callback)
#define IMFVideoSampleAllocatorCallback_GetFreeSampleCount(This,count) (This)->lpVtbl->GetFreeSampleCount(This,count)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFVideoSampleAllocatorCallback_QueryInterface(IMFVideoSampleAllocatorCallback* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFVideoSampleAllocatorCallback_AddRef(IMFVideoSampleAllocatorCallback* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFVideoSampleAllocatorCallback_Release(IMFVideoSampleAllocatorCallback* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFVideoSampleAllocatorCallback methods ***/
static __WIDL_INLINE HRESULT IMFVideoSampleAllocatorCallback_SetCallback(IMFVideoSampleAllocatorCallback* This,IMFVideoSampleAllocatorNotify *callback) {
    return This->lpVtbl->SetCallback(This,callback);
}
static __WIDL_INLINE HRESULT IMFVideoSampleAllocatorCallback_GetFreeSampleCount(IMFVideoSampleAllocatorCallback* This,LONG *count) {
    return This->lpVtbl->GetFreeSampleCount(This,count);
}
#endif
#endif

#endif


#endif  /* __IMFVideoSampleAllocatorCallback_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFVideoSampleAllocatorEx interface
 */
#ifndef __IMFVideoSampleAllocatorEx_INTERFACE_DEFINED__
#define __IMFVideoSampleAllocatorEx_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFVideoSampleAllocatorEx, 0x545b3a48, 0x3283, 0x4f62, 0x86,0x6f, 0xa6,0x2d,0x8f,0x59,0x8f,0x9f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("545b3a48-3283-4f62-866f-a62d8f598f9f")
IMFVideoSampleAllocatorEx : public IMFVideoSampleAllocator
{
    virtual HRESULT STDMETHODCALLTYPE InitializeSampleAllocatorEx(
        DWORD initial_sample_count,
        DWORD max_sample_count,
        IMFAttributes *attributes,
        IMFMediaType *media_type) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFVideoSampleAllocatorEx, 0x545b3a48, 0x3283, 0x4f62, 0x86,0x6f, 0xa6,0x2d,0x8f,0x59,0x8f,0x9f)
#endif
#else
typedef struct IMFVideoSampleAllocatorExVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFVideoSampleAllocator methods ***/
    HRESULT (STDMETHODCALLTYPE *SetDirectXManager)(
        IMFVideoSampleAllocatorEx *This,
        IUnknown *manager);

    HRESULT (STDMETHODCALLTYPE *UninitializeSampleAllocator)(
        IMFVideoSampleAllocatorEx *This);

    HRESULT (STDMETHODCALLTYPE *InitializeSampleAllocator)(
        IMFVideoSampleAllocatorEx *This,
        DWORD sample_count,
        IMFMediaType *media_type);

    HRESULT (STDMETHODCALLTYPE *AllocateSample)(
        IMFVideoSampleAllocatorEx *This,
        IMFSample **sample);

    /*** IMFVideoSampleAllocatorEx methods ***/
    HRESULT (STDMETHODCALLTYPE *InitializeSampleAllocatorEx)(
        IMFVideoSampleAllocatorEx *This,
        DWORD initial_sample_count,
        DWORD max_sample_count,
        IMFAttributes *attributes,
        IMFMediaType *media_type);

    END_INTERFACE
} IMFVideoSampleAllocatorExVtbl;

interface IMFVideoSampleAllocatorEx {
    CONST_VTBL IMFVideoSampleAllocatorExVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFVideoSampleAllocatorEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFVideoSampleAllocatorEx_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFVideoSampleAllocatorEx_Release(This) (This)->lpVtbl->Release(This)
/*** IMFVideoSampleAllocator methods ***/
#define IMFVideoSampleAllocatorEx_SetDirectXManager(This,manager) (This)->lpVtbl->SetDirectXManager(This,manager)
#define IMFVideoSampleAllocatorEx_UninitializeSampleAllocator(This) (This)->lpVtbl->UninitializeSampleAllocator(This)
#define IMFVideoSampleAllocatorEx_InitializeSampleAllocator(This,sample_count,media_type) (This)->lpVtbl->InitializeSampleAllocator(This,sample_count,media_type)
#define IMFVideoSampleAllocatorEx_AllocateSample(This,sample) (This)->lpVtbl->AllocateSample(This,sample)
/*** IMFVideoSampleAllocatorEx methods ***/
#define IMFVideoSampleAllocatorEx_InitializeSampleAllocatorEx(This,initial_sample_count,max_sample_count,attributes,media_type) (This)->lpVtbl->InitializeSampleAllocatorEx(This,initial_sample_count,max_sample_count,attributes,media_type)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFVideoSampleAllocatorEx_QueryInterface(IMFVideoSampleAllocatorEx* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFVideoSampleAllocatorEx_AddRef(IMFVideoSampleAllocatorEx* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFVideoSampleAllocatorEx_Release(IMFVideoSampleAllocatorEx* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFVideoSampleAllocator methods ***/
static __WIDL_INLINE HRESULT IMFVideoSampleAllocatorEx_SetDirectXManager(IMFVideoSampleAllocatorEx* This,IUnknown *manager) {
    return This->lpVtbl->SetDirectXManager(This,manager);
}
static __WIDL_INLINE HRESULT IMFVideoSampleAllocatorEx_UninitializeSampleAllocator(IMFVideoSampleAllocatorEx* This) {
    return This->lpVtbl->UninitializeSampleAllocator(This);
}
static __WIDL_INLINE HRESULT IMFVideoSampleAllocatorEx_InitializeSampleAllocator(IMFVideoSampleAllocatorEx* This,DWORD sample_count,IMFMediaType *media_type) {
    return This->lpVtbl->InitializeSampleAllocator(This,sample_count,media_type);
}
static __WIDL_INLINE HRESULT IMFVideoSampleAllocatorEx_AllocateSample(IMFVideoSampleAllocatorEx* This,IMFSample **sample) {
    return This->lpVtbl->AllocateSample(This,sample);
}
/*** IMFVideoSampleAllocatorEx methods ***/
static __WIDL_INLINE HRESULT IMFVideoSampleAllocatorEx_InitializeSampleAllocatorEx(IMFVideoSampleAllocatorEx* This,DWORD initial_sample_count,DWORD max_sample_count,IMFAttributes *attributes,IMFMediaType *media_type) {
    return This->lpVtbl->InitializeSampleAllocatorEx(This,initial_sample_count,max_sample_count,attributes,media_type);
}
#endif
#endif

#endif


#endif  /* __IMFVideoSampleAllocatorEx_INTERFACE_DEFINED__ */

typedef enum _MF_VIDEO_PROCESSOR_MIRROR {
    MIRROR_NONE = 0,
    MIRROR_HORIZONTAL = 1,
    MIRROR_VERTICAL = 2
} MF_VIDEO_PROCESSOR_MIRROR;
typedef enum _MF_VIDEO_PROCESSOR_ROTATION {
    ROTATION_NONE = 0,
    ROTATION_NORMAL = 1
} MF_VIDEO_PROCESSOR_ROTATION;
/*****************************************************************************
 * IMFVideoProcessorControl interface
 */
#ifndef __IMFVideoProcessorControl_INTERFACE_DEFINED__
#define __IMFVideoProcessorControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFVideoProcessorControl, 0xa3f675d5, 0x6119, 0x4f7f, 0xa1,0x00, 0x1d,0x8b,0x28,0x0f,0x0e,0xfb);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a3f675d5-6119-4f7f-a100-1d8b280f0efb")
IMFVideoProcessorControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetBorderColor(
        MFARGB *color) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSourceRectangle(
        RECT *rect) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDestinationRectangle(
        RECT *rect) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetMirror(
        MF_VIDEO_PROCESSOR_MIRROR mirror) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRotation(
        MF_VIDEO_PROCESSOR_ROTATION rotation) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetConstrictionSize(
        SIZE *size) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFVideoProcessorControl, 0xa3f675d5, 0x6119, 0x4f7f, 0xa1,0x00, 0x1d,0x8b,0x28,0x0f,0x0e,0xfb)
#endif
#else
typedef struct IMFVideoProcessorControlVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFVideoProcessorControl methods ***/
    HRESULT (STDMETHODCALLTYPE *SetBorderColor)(
        IMFVideoProcessorControl *This,
        MFARGB *color);

    HRESULT (STDMETHODCALLTYPE *SetSourceRectangle)(
        IMFVideoProcessorControl *This,
        RECT *rect);

    HRESULT (STDMETHODCALLTYPE *SetDestinationRectangle)(
        IMFVideoProcessorControl *This,
        RECT *rect);

    HRESULT (STDMETHODCALLTYPE *SetMirror)(
        IMFVideoProcessorControl *This,
        MF_VIDEO_PROCESSOR_MIRROR mirror);

    HRESULT (STDMETHODCALLTYPE *SetRotation)(
        IMFVideoProcessorControl *This,
        MF_VIDEO_PROCESSOR_ROTATION rotation);

    HRESULT (STDMETHODCALLTYPE *SetConstrictionSize)(
        IMFVideoProcessorControl *This,
        SIZE *size);

    END_INTERFACE
} IMFVideoProcessorControlVtbl;

interface IMFVideoProcessorControl {
    CONST_VTBL IMFVideoProcessorControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFVideoProcessorControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFVideoProcessorControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFVideoProcessorControl_Release(This) (This)->lpVtbl->Release(This)
/*** IMFVideoProcessorControl methods ***/
#define IMFVideoProcessorControl_SetBorderColor(This,color) (This)->lpVtbl->SetBorderColor(This,color)
#define IMFVideoProcessorControl_SetSourceRectangle(This,rect) (This)->lpVtbl->SetSourceRectangle(This,rect)
#define IMFVideoProcessorControl_SetDestinationRectangle(This,rect) (This)->lpVtbl->SetDestinationRectangle(This,rect)
#define IMFVideoProcessorControl_SetMirror(This,mirror) (This)->lpVtbl->SetMirror(This,mirror)
#define IMFVideoProcessorControl_SetRotation(This,rotation) (This)->lpVtbl->SetRotation(This,rotation)
#define IMFVideoProcessorControl_SetConstrictionSize(This,size) (This)->lpVtbl->SetConstrictionSize(This,size)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFVideoProcessorControl_QueryInterface(IMFVideoProcessorControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFVideoProcessorControl_AddRef(IMFVideoProcessorControl* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFVideoProcessorControl_Release(IMFVideoProcessorControl* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFVideoProcessorControl methods ***/
static __WIDL_INLINE HRESULT IMFVideoProcessorControl_SetBorderColor(IMFVideoProcessorControl* This,MFARGB *color) {
    return This->lpVtbl->SetBorderColor(This,color);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl_SetSourceRectangle(IMFVideoProcessorControl* This,RECT *rect) {
    return This->lpVtbl->SetSourceRectangle(This,rect);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl_SetDestinationRectangle(IMFVideoProcessorControl* This,RECT *rect) {
    return This->lpVtbl->SetDestinationRectangle(This,rect);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl_SetMirror(IMFVideoProcessorControl* This,MF_VIDEO_PROCESSOR_MIRROR mirror) {
    return This->lpVtbl->SetMirror(This,mirror);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl_SetRotation(IMFVideoProcessorControl* This,MF_VIDEO_PROCESSOR_ROTATION rotation) {
    return This->lpVtbl->SetRotation(This,rotation);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl_SetConstrictionSize(IMFVideoProcessorControl* This,SIZE *size) {
    return This->lpVtbl->SetConstrictionSize(This,size);
}
#endif
#endif

#endif


#endif  /* __IMFVideoProcessorControl_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFVideoProcessorControl2 interface
 */
#ifndef __IMFVideoProcessorControl2_INTERFACE_DEFINED__
#define __IMFVideoProcessorControl2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFVideoProcessorControl2, 0xbde633d3, 0xe1dc, 0x4a7f, 0xa6,0x93, 0xbb,0xae,0x39,0x9c,0x4a,0x20);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("bde633d3-e1dc-4a7f-a693-bbae399c4a20")
IMFVideoProcessorControl2 : public IMFVideoProcessorControl
{
    virtual HRESULT STDMETHODCALLTYPE SetRotationOverride(
        UINT rotation) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnableHardwareEffects(
        BOOL enabled) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSupportedHardwareEffects(
        UINT *support) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFVideoProcessorControl2, 0xbde633d3, 0xe1dc, 0x4a7f, 0xa6,0x93, 0xbb,0xae,0x39,0x9c,0x4a,0x20)
#endif
#else
typedef struct IMFVideoProcessorControl2Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFVideoProcessorControl methods ***/
    HRESULT (STDMETHODCALLTYPE *SetBorderColor)(
        IMFVideoProcessorControl2 *This,
        MFARGB *color);

    HRESULT (STDMETHODCALLTYPE *SetSourceRectangle)(
        IMFVideoProcessorControl2 *This,
        RECT *rect);

    HRESULT (STDMETHODCALLTYPE *SetDestinationRectangle)(
        IMFVideoProcessorControl2 *This,
        RECT *rect);

    HRESULT (STDMETHODCALLTYPE *SetMirror)(
        IMFVideoProcessorControl2 *This,
        MF_VIDEO_PROCESSOR_MIRROR mirror);

    HRESULT (STDMETHODCALLTYPE *SetRotation)(
        IMFVideoProcessorControl2 *This,
        MF_VIDEO_PROCESSOR_ROTATION rotation);

    HRESULT (STDMETHODCALLTYPE *SetConstrictionSize)(
        IMFVideoProcessorControl2 *This,
        SIZE *size);

    /*** IMFVideoProcessorControl2 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetRotationOverride)(
        IMFVideoProcessorControl2 *This,
        UINT rotation);

    HRESULT (STDMETHODCALLTYPE *EnableHardwareEffects)(
        IMFVideoProcessorControl2 *This,
        BOOL enabled);

    HRESULT (STDMETHODCALLTYPE *GetSupportedHardwareEffects)(
        IMFVideoProcessorControl2 *This,
        UINT *support);

    END_INTERFACE
} IMFVideoProcessorControl2Vtbl;

interface IMFVideoProcessorControl2 {
    CONST_VTBL IMFVideoProcessorControl2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFVideoProcessorControl2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFVideoProcessorControl2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFVideoProcessorControl2_Release(This) (This)->lpVtbl->Release(This)
/*** IMFVideoProcessorControl methods ***/
#define IMFVideoProcessorControl2_SetBorderColor(This,color) (This)->lpVtbl->SetBorderColor(This,color)
#define IMFVideoProcessorControl2_SetSourceRectangle(This,rect) (This)->lpVtbl->SetSourceRectangle(This,rect)
#define IMFVideoProcessorControl2_SetDestinationRectangle(This,rect) (This)->lpVtbl->SetDestinationRectangle(This,rect)
#define IMFVideoProcessorControl2_SetMirror(This,mirror) (This)->lpVtbl->SetMirror(This,mirror)
#define IMFVideoProcessorControl2_SetRotation(This,rotation) (This)->lpVtbl->SetRotation(This,rotation)
#define IMFVideoProcessorControl2_SetConstrictionSize(This,size) (This)->lpVtbl->SetConstrictionSize(This,size)
/*** IMFVideoProcessorControl2 methods ***/
#define IMFVideoProcessorControl2_SetRotationOverride(This,rotation) (This)->lpVtbl->SetRotationOverride(This,rotation)
#define IMFVideoProcessorControl2_EnableHardwareEffects(This,enabled) (This)->lpVtbl->EnableHardwareEffects(This,enabled)
#define IMFVideoProcessorControl2_GetSupportedHardwareEffects(This,support) (This)->lpVtbl->GetSupportedHardwareEffects(This,support)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFVideoProcessorControl2_QueryInterface(IMFVideoProcessorControl2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFVideoProcessorControl2_AddRef(IMFVideoProcessorControl2* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFVideoProcessorControl2_Release(IMFVideoProcessorControl2* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFVideoProcessorControl methods ***/
static __WIDL_INLINE HRESULT IMFVideoProcessorControl2_SetBorderColor(IMFVideoProcessorControl2* This,MFARGB *color) {
    return This->lpVtbl->SetBorderColor(This,color);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl2_SetSourceRectangle(IMFVideoProcessorControl2* This,RECT *rect) {
    return This->lpVtbl->SetSourceRectangle(This,rect);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl2_SetDestinationRectangle(IMFVideoProcessorControl2* This,RECT *rect) {
    return This->lpVtbl->SetDestinationRectangle(This,rect);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl2_SetMirror(IMFVideoProcessorControl2* This,MF_VIDEO_PROCESSOR_MIRROR mirror) {
    return This->lpVtbl->SetMirror(This,mirror);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl2_SetRotation(IMFVideoProcessorControl2* This,MF_VIDEO_PROCESSOR_ROTATION rotation) {
    return This->lpVtbl->SetRotation(This,rotation);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl2_SetConstrictionSize(IMFVideoProcessorControl2* This,SIZE *size) {
    return This->lpVtbl->SetConstrictionSize(This,size);
}
/*** IMFVideoProcessorControl2 methods ***/
static __WIDL_INLINE HRESULT IMFVideoProcessorControl2_SetRotationOverride(IMFVideoProcessorControl2* This,UINT rotation) {
    return This->lpVtbl->SetRotationOverride(This,rotation);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl2_EnableHardwareEffects(IMFVideoProcessorControl2* This,BOOL enabled) {
    return This->lpVtbl->EnableHardwareEffects(This,enabled);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl2_GetSupportedHardwareEffects(IMFVideoProcessorControl2* This,UINT *support) {
    return This->lpVtbl->GetSupportedHardwareEffects(This,support);
}
#endif
#endif

#endif


#endif  /* __IMFVideoProcessorControl2_INTERFACE_DEFINED__ */

typedef enum _MFVideoSphericalFormat {
    MFVideoSphericalFormat_Unsupported = 0,
    MFVideoSphericalFormat_Equirectangular = 1
} MFVideoSphericalFormat;
typedef enum MFVideoSphericalProjectionMode {
    MFVideoSphericalProjectionMode_Spherical = 0,
    MFVideoSphericalProjectionMode_Flat = 1
} MFVideoSphericalProjectionMode;
/*****************************************************************************
 * IMFVideoProcessorControl3 interface
 */
#ifndef __IMFVideoProcessorControl3_INTERFACE_DEFINED__
#define __IMFVideoProcessorControl3_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFVideoProcessorControl3, 0x2424b3f2, 0xeb23, 0x40f1, 0x91,0xaa, 0x74,0xbd,0xde,0xea,0x08,0x83);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2424b3f2-eb23-40f1-91aa-74bddeea0883")
IMFVideoProcessorControl3 : public IMFVideoProcessorControl2
{
    virtual HRESULT STDMETHODCALLTYPE GetNaturalOutputType(
        IMFMediaType **media_type) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnableSphericalVideoProcessing(
        BOOL enable,
        MFVideoSphericalFormat format,
        MFVideoSphericalProjectionMode projection_mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSphericalVideoProperties(
        float x,
        float y,
        float z,
        float w,
        float fov) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOutputDevice(
        IUnknown *output_device) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFVideoProcessorControl3, 0x2424b3f2, 0xeb23, 0x40f1, 0x91,0xaa, 0x74,0xbd,0xde,0xea,0x08,0x83)
#endif
#else
typedef struct IMFVideoProcessorControl3Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFVideoProcessorControl methods ***/
    HRESULT (STDMETHODCALLTYPE *SetBorderColor)(
        IMFVideoProcessorControl3 *This,
        MFARGB *color);

    HRESULT (STDMETHODCALLTYPE *SetSourceRectangle)(
        IMFVideoProcessorControl3 *This,
        RECT *rect);

    HRESULT (STDMETHODCALLTYPE *SetDestinationRectangle)(
        IMFVideoProcessorControl3 *This,
        RECT *rect);

    HRESULT (STDMETHODCALLTYPE *SetMirror)(
        IMFVideoProcessorControl3 *This,
        MF_VIDEO_PROCESSOR_MIRROR mirror);

    HRESULT (STDMETHODCALLTYPE *SetRotation)(
        IMFVideoProcessorControl3 *This,
        MF_VIDEO_PROCESSOR_ROTATION rotation);

    HRESULT (STDMETHODCALLTYPE *SetConstrictionSize)(
        IMFVideoProcessorControl3 *This,
        SIZE *size);

    /*** IMFVideoProcessorControl2 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetRotationOverride)(
        IMFVideoProcessorControl3 *This,
        UINT rotation);

    HRESULT (STDMETHODCALLTYPE *EnableHardwareEffects)(
        IMFVideoProcessorControl3 *This,
        BOOL enabled);

    HRESULT (STDMETHODCALLTYPE *GetSupportedHardwareEffects)(
        IMFVideoProcessorControl3 *This,
        UINT *support);

    /*** IMFVideoProcessorControl3 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetNaturalOutputType)(
        IMFVideoProcessorControl3 *This,
        IMFMediaType **media_type);

    HRESULT (STDMETHODCALLTYPE *EnableSphericalVideoProcessing)(
        IMFVideoProcessorControl3 *This,
        BOOL enable,
        MFVideoSphericalFormat format,
        MFVideoSphericalProjectionMode projection_mode);

    HRESULT (STDMETHODCALLTYPE *SetSphericalVideoProperties)(
        IMFVideoProcessorControl3 *This,
        float x,
        float y,
        float z,
        float w,
        float fov);

    HRESULT (STDMETHODCALLTYPE *SetOutputDevice)(
        IMFVideoProcessorControl3 *This,
        IUnknown *output_device);

    END_INTERFACE
} IMFVideoProcessorControl3Vtbl;

interface IMFVideoProcessorControl3 {
    CONST_VTBL IMFVideoProcessorControl3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFVideoProcessorControl3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFVideoProcessorControl3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFVideoProcessorControl3_Release(This) (This)->lpVtbl->Release(This)
/*** IMFVideoProcessorControl methods ***/
#define IMFVideoProcessorControl3_SetBorderColor(This,color) (This)->lpVtbl->SetBorderColor(This,color)
#define IMFVideoProcessorControl3_SetSourceRectangle(This,rect) (This)->lpVtbl->SetSourceRectangle(This,rect)
#define IMFVideoProcessorControl3_SetDestinationRectangle(This,rect) (This)->lpVtbl->SetDestinationRectangle(This,rect)
#define IMFVideoProcessorControl3_SetMirror(This,mirror) (This)->lpVtbl->SetMirror(This,mirror)
#define IMFVideoProcessorControl3_SetRotation(This,rotation) (This)->lpVtbl->SetRotation(This,rotation)
#define IMFVideoProcessorControl3_SetConstrictionSize(This,size) (This)->lpVtbl->SetConstrictionSize(This,size)
/*** IMFVideoProcessorControl2 methods ***/
#define IMFVideoProcessorControl3_SetRotationOverride(This,rotation) (This)->lpVtbl->SetRotationOverride(This,rotation)
#define IMFVideoProcessorControl3_EnableHardwareEffects(This,enabled) (This)->lpVtbl->EnableHardwareEffects(This,enabled)
#define IMFVideoProcessorControl3_GetSupportedHardwareEffects(This,support) (This)->lpVtbl->GetSupportedHardwareEffects(This,support)
/*** IMFVideoProcessorControl3 methods ***/
#define IMFVideoProcessorControl3_GetNaturalOutputType(This,media_type) (This)->lpVtbl->GetNaturalOutputType(This,media_type)
#define IMFVideoProcessorControl3_EnableSphericalVideoProcessing(This,enable,format,projection_mode) (This)->lpVtbl->EnableSphericalVideoProcessing(This,enable,format,projection_mode)
#define IMFVideoProcessorControl3_SetSphericalVideoProperties(This,x,y,z,w,fov) (This)->lpVtbl->SetSphericalVideoProperties(This,x,y,z,w,fov)
#define IMFVideoProcessorControl3_SetOutputDevice(This,output_device) (This)->lpVtbl->SetOutputDevice(This,output_device)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFVideoProcessorControl3_QueryInterface(IMFVideoProcessorControl3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFVideoProcessorControl3_AddRef(IMFVideoProcessorControl3* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFVideoProcessorControl3_Release(IMFVideoProcessorControl3* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFVideoProcessorControl methods ***/
static __WIDL_INLINE HRESULT IMFVideoProcessorControl3_SetBorderColor(IMFVideoProcessorControl3* This,MFARGB *color) {
    return This->lpVtbl->SetBorderColor(This,color);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl3_SetSourceRectangle(IMFVideoProcessorControl3* This,RECT *rect) {
    return This->lpVtbl->SetSourceRectangle(This,rect);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl3_SetDestinationRectangle(IMFVideoProcessorControl3* This,RECT *rect) {
    return This->lpVtbl->SetDestinationRectangle(This,rect);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl3_SetMirror(IMFVideoProcessorControl3* This,MF_VIDEO_PROCESSOR_MIRROR mirror) {
    return This->lpVtbl->SetMirror(This,mirror);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl3_SetRotation(IMFVideoProcessorControl3* This,MF_VIDEO_PROCESSOR_ROTATION rotation) {
    return This->lpVtbl->SetRotation(This,rotation);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl3_SetConstrictionSize(IMFVideoProcessorControl3* This,SIZE *size) {
    return This->lpVtbl->SetConstrictionSize(This,size);
}
/*** IMFVideoProcessorControl2 methods ***/
static __WIDL_INLINE HRESULT IMFVideoProcessorControl3_SetRotationOverride(IMFVideoProcessorControl3* This,UINT rotation) {
    return This->lpVtbl->SetRotationOverride(This,rotation);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl3_EnableHardwareEffects(IMFVideoProcessorControl3* This,BOOL enabled) {
    return This->lpVtbl->EnableHardwareEffects(This,enabled);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl3_GetSupportedHardwareEffects(IMFVideoProcessorControl3* This,UINT *support) {
    return This->lpVtbl->GetSupportedHardwareEffects(This,support);
}
/*** IMFVideoProcessorControl3 methods ***/
static __WIDL_INLINE HRESULT IMFVideoProcessorControl3_GetNaturalOutputType(IMFVideoProcessorControl3* This,IMFMediaType **media_type) {
    return This->lpVtbl->GetNaturalOutputType(This,media_type);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl3_EnableSphericalVideoProcessing(IMFVideoProcessorControl3* This,BOOL enable,MFVideoSphericalFormat format,MFVideoSphericalProjectionMode projection_mode) {
    return This->lpVtbl->EnableSphericalVideoProcessing(This,enable,format,projection_mode);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl3_SetSphericalVideoProperties(IMFVideoProcessorControl3* This,float x,float y,float z,float w,float fov) {
    return This->lpVtbl->SetSphericalVideoProperties(This,x,y,z,w,fov);
}
static __WIDL_INLINE HRESULT IMFVideoProcessorControl3_SetOutputDevice(IMFVideoProcessorControl3* This,IUnknown *output_device) {
    return This->lpVtbl->SetOutputDevice(This,output_device);
}
#endif
#endif

#endif


#endif  /* __IMFVideoProcessorControl3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFRealTimeClient interface
 */
#ifndef __IMFRealTimeClient_INTERFACE_DEFINED__
#define __IMFRealTimeClient_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFRealTimeClient, 0x2347d60b, 0x3fb5, 0x480c, 0x88,0x03, 0x8d,0xf3,0xad,0xcd,0x3e,0xf0);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2347d60b-3fb5-480c-8803-8df3adcd3ef0")
IMFRealTimeClient : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE RegisterThreads(
        DWORD task_index,
        LPCWSTR classname) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnregisterThreads(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetWorkQueue(
        DWORD queue_id) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFRealTimeClient, 0x2347d60b, 0x3fb5, 0x480c, 0x88,0x03, 0x8d,0xf3,0xad,0xcd,0x3e,0xf0)
#endif
#else
typedef struct IMFRealTimeClientVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFRealTimeClient methods ***/
    HRESULT (STDMETHODCALLTYPE *RegisterThreads)(
        IMFRealTimeClient *This,
        DWORD task_index,
        LPCWSTR classname);

    HRESULT (STDMETHODCALLTYPE *UnregisterThreads)(
        IMFRealTimeClient *This);

    HRESULT (STDMETHODCALLTYPE *SetWorkQueue)(
        IMFRealTimeClient *This,
        DWORD queue_id);

    END_INTERFACE
} IMFRealTimeClientVtbl;

interface IMFRealTimeClient {
    CONST_VTBL IMFRealTimeClientVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFRealTimeClient_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFRealTimeClient_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFRealTimeClient_Release(This) (This)->lpVtbl->Release(This)
/*** IMFRealTimeClient methods ***/
#define IMFRealTimeClient_RegisterThreads(This,task_index,classname) (This)->lpVtbl->RegisterThreads(This,task_index,classname)
#define IMFRealTimeClient_UnregisterThreads(This) (This)->lpVtbl->UnregisterThreads(This)
#define IMFRealTimeClient_SetWorkQueue(This,queue_id) (This)->lpVtbl->SetWorkQueue(This,queue_id)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFRealTimeClient_QueryInterface(IMFRealTimeClient* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFRealTimeClient_AddRef(IMFRealTimeClient* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFRealTimeClient_Release(IMFRealTimeClient* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFRealTimeClient methods ***/
static __WIDL_INLINE HRESULT IMFRealTimeClient_RegisterThreads(IMFRealTimeClient* This,DWORD task_index,LPCWSTR classname) {
    return This->lpVtbl->RegisterThreads(This,task_index,classname);
}
static __WIDL_INLINE HRESULT IMFRealTimeClient_UnregisterThreads(IMFRealTimeClient* This) {
    return This->lpVtbl->UnregisterThreads(This);
}
static __WIDL_INLINE HRESULT IMFRealTimeClient_SetWorkQueue(IMFRealTimeClient* This,DWORD queue_id) {
    return This->lpVtbl->SetWorkQueue(This,queue_id);
}
#endif
#endif

#endif


#endif  /* __IMFRealTimeClient_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFRealTimeClientEx interface
 */
#ifndef __IMFRealTimeClientEx_INTERFACE_DEFINED__
#define __IMFRealTimeClientEx_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFRealTimeClientEx, 0x03910848, 0xab16, 0x4611, 0xb1,0x00, 0x17,0xb8,0x8a,0xe2,0xf2,0x48);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("03910848-ab16-4611-b100-17b88ae2f248")
IMFRealTimeClientEx : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE RegisterThreadsEx(
        DWORD *task_index,
        LPCWSTR classname,
        LONG basepriority) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnregisterThreads(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetWorkQueueEx(
        DWORD mtqueue_id,
        LONG base_priority) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFRealTimeClientEx, 0x03910848, 0xab16, 0x4611, 0xb1,0x00, 0x17,0xb8,0x8a,0xe2,0xf2,0x48)
#endif
#else
typedef struct IMFRealTimeClientExVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFRealTimeClientEx methods ***/
    HRESULT (STDMETHODCALLTYPE *RegisterThreadsEx)(
        IMFRealTimeClientEx *This,
        DWORD *task_index,
        LPCWSTR classname,
        LONG basepriority);

    HRESULT (STDMETHODCALLTYPE *UnregisterThreads)(
        IMFRealTimeClientEx *This);

    HRESULT (STDMETHODCALLTYPE *SetWorkQueueEx)(
        IMFRealTimeClientEx *This,
        DWORD mtqueue_id,
        LONG base_priority);

    END_INTERFACE
} IMFRealTimeClientExVtbl;

interface IMFRealTimeClientEx {
    CONST_VTBL IMFRealTimeClientExVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFRealTimeClientEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFRealTimeClientEx_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFRealTimeClientEx_Release(This) (This)->lpVtbl->Release(This)
/*** IMFRealTimeClientEx methods ***/
#define IMFRealTimeClientEx_RegisterThreadsEx(This,task_index,classname,basepriority) (This)->lpVtbl->RegisterThreadsEx(This,task_index,classname,basepriority)
#define IMFRealTimeClientEx_UnregisterThreads(This) (This)->lpVtbl->UnregisterThreads(This)
#define IMFRealTimeClientEx_SetWorkQueueEx(This,mtqueue_id,base_priority) (This)->lpVtbl->SetWorkQueueEx(This,mtqueue_id,base_priority)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFRealTimeClientEx_QueryInterface(IMFRealTimeClientEx* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFRealTimeClientEx_AddRef(IMFRealTimeClientEx* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFRealTimeClientEx_Release(IMFRealTimeClientEx* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFRealTimeClientEx methods ***/
static __WIDL_INLINE HRESULT IMFRealTimeClientEx_RegisterThreadsEx(IMFRealTimeClientEx* This,DWORD *task_index,LPCWSTR classname,LONG basepriority) {
    return This->lpVtbl->RegisterThreadsEx(This,task_index,classname,basepriority);
}
static __WIDL_INLINE HRESULT IMFRealTimeClientEx_UnregisterThreads(IMFRealTimeClientEx* This) {
    return This->lpVtbl->UnregisterThreads(This);
}
static __WIDL_INLINE HRESULT IMFRealTimeClientEx_SetWorkQueueEx(IMFRealTimeClientEx* This,DWORD mtqueue_id,LONG base_priority) {
    return This->lpVtbl->SetWorkQueueEx(This,mtqueue_id,base_priority);
}
#endif
#endif

#endif


#endif  /* __IMFRealTimeClientEx_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFWorkQueueServices interface
 */
#ifndef __IMFWorkQueueServices_INTERFACE_DEFINED__
#define __IMFWorkQueueServices_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFWorkQueueServices, 0x35fe1bb8, 0xa3a9, 0x40fe, 0xbb,0xec, 0xeb,0x56,0x9c,0x9c,0xcc,0xa3);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("35fe1bb8-a3a9-40fe-bbec-eb569c9ccca3")
IMFWorkQueueServices : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE BeginRegisterTopologyWorkQueuesWithMMCSS(
        IMFAsyncCallback *callback,
        IUnknown *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE EndRegisterTopologyWorkQueuesWithMMCSS(
        IMFAsyncResult *result) = 0;

    virtual HRESULT STDMETHODCALLTYPE BeginUnregisterTopologyWorkQueuesWithMMCSS(
        IMFAsyncCallback *callback,
        IUnknown *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE EndUnregisterTopologyWorkQueuesWithMMCSS(
        IMFAsyncResult *result) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTopologyWorkQueueMMCSSClass(
        DWORD queue,
        LPWSTR classname,
        DWORD *classname_len) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTopologyWorkQueueMMCSSTaskId(
        DWORD queue,
        DWORD *taksid) = 0;

    virtual HRESULT STDMETHODCALLTYPE BeginRegisterPlatformWorkQueueWithMMCSS(
        DWORD platform_queue,
        LPCWSTR classname,
        DWORD taskid,
        IMFAsyncCallback *callback,
        IUnknown *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE EndRegisterPlatformWorkQueueWithMMCSS(
        IMFAsyncResult *result,
        DWORD *taskid) = 0;

    virtual HRESULT STDMETHODCALLTYPE BeginUnregisterPlatformWorkQueueWithMMCSS(
        DWORD platform_queue,
        IMFAsyncCallback *callback,
        IUnknown *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE EndUnregisterPlatformWorkQueueWithMMCSS(
        IMFAsyncResult *result) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPlaftormWorkQueueMMCSSClass(
        DWORD platform_queue,
        LPWSTR classname,
        DWORD *classname_len) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPlatformWorkQueueMMCSSTaskId(
        DWORD platform_queue,
        DWORD *taskid) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFWorkQueueServices, 0x35fe1bb8, 0xa3a9, 0x40fe, 0xbb,0xec, 0xeb,0x56,0x9c,0x9c,0xcc,0xa3)
#endif
#else
typedef struct IMFWorkQueueServicesVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFWorkQueueServices methods ***/
    HRESULT (STDMETHODCALLTYPE *BeginRegisterTopologyWorkQueuesWithMMCSS)(
        IMFWorkQueueServices *This,
        IMFAsyncCallback *callback,
        IUnknown *state);

    HRESULT (STDMETHODCALLTYPE *EndRegisterTopologyWorkQueuesWithMMCSS)(
        IMFWorkQueueServices *This,
        IMFAsyncResult *result);

    HRESULT (STDMETHODCALLTYPE *BeginUnregisterTopologyWorkQueuesWithMMCSS)(
        IMFWorkQueueServices *This,
        IMFAsyncCallback *callback,
        IUnknown *state);

    HRESULT (STDMETHODCALLTYPE *EndUnregisterTopologyWorkQueuesWithMMCSS)(
        IMFWorkQueueServices *This,
        IMFAsyncResult *result);

    HRESULT (STDMETHODCALLTYPE *GetTopologyWorkQueueMMCSSClass)(
        IMFWorkQueueServices *This,
        DWORD queue,
        LPWSTR classname,
        DWORD *classname_len);

    HRESULT (STDMETHODCALLTYPE *GetTopologyWorkQueueMMCSSTaskId)(
        IMFWorkQueueServices *This,
        DWORD queue,
        DWORD *taksid);

    HRESULT (STDMETHODCALLTYPE *BeginRegisterPlatformWorkQueueWithMMCSS)(
        IMFWorkQueueServices *This,
        DWORD platform_queue,
        LPCWSTR classname,
        DWORD taskid,
        IMFAsyncCallback *callback,
        IUnknown *state);

    HRESULT (STDMETHODCALLTYPE *EndRegisterPlatformWorkQueueWithMMCSS)(
        IMFWorkQueueServices *This,
        IMFAsyncResult *result,
        DWORD *taskid);

    HRESULT (STDMETHODCALLTYPE *BeginUnregisterPlatformWorkQueueWithMMCSS)(
        IMFWorkQueueServices *This,
        DWORD platform_queue,
        IMFAsyncCallback *callback,
        IUnknown *state);

    HRESULT (STDMETHODCALLTYPE *EndUnregisterPlatformWorkQueueWithMMCSS)(
        IMFWorkQueueServices *This,
        IMFAsyncResult *result);

    HRESULT (STDMETHODCALLTYPE *GetPlaftormWorkQueueMMCSSClass)(
        IMFWorkQueueServices *This,
        DWORD platform_queue,
        LPWSTR classname,
        DWORD *classname_len);

    HRESULT (STDMETHODCALLTYPE *GetPlatformWorkQueueMMCSSTaskId)(
        IMFWorkQueueServices *This,
        DWORD platform_queue,
        DWORD *taskid);

    END_INTERFACE
} IMFWorkQueueServicesVtbl;

interface IMFWorkQueueServices {
    CONST_VTBL IMFWorkQueueServicesVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFWorkQueueServices_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFWorkQueueServices_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFWorkQueueServices_Release(This) (This)->lpVtbl->Release(This)
/*** IMFWorkQueueServices methods ***/
#define IMFWorkQueueServices_BeginRegisterTopologyWorkQueuesWithMMCSS(This,callback,state) (This)->lpVtbl->BeginRegisterTopologyWorkQueuesWithMMCSS(This,callback,state)
#define IMFWorkQueueServices_EndRegisterTopologyWorkQueuesWithMMCSS(This,result) (This)->lpVtbl->EndRegisterTopologyWorkQueuesWithMMCSS(This,result)
#define IMFWorkQueueServices_BeginUnregisterTopologyWorkQueuesWithMMCSS(This,callback,state) (This)->lpVtbl->BeginUnregisterTopologyWorkQueuesWithMMCSS(This,callback,state)
#define IMFWorkQueueServices_EndUnregisterTopologyWorkQueuesWithMMCSS(This,result) (This)->lpVtbl->EndUnregisterTopologyWorkQueuesWithMMCSS(This,result)
#define IMFWorkQueueServices_GetTopologyWorkQueueMMCSSClass(This,queue,classname,classname_len) (This)->lpVtbl->GetTopologyWorkQueueMMCSSClass(This,queue,classname,classname_len)
#define IMFWorkQueueServices_GetTopologyWorkQueueMMCSSTaskId(This,queue,taksid) (This)->lpVtbl->GetTopologyWorkQueueMMCSSTaskId(This,queue,taksid)
#define IMFWorkQueueServices_BeginRegisterPlatformWorkQueueWithMMCSS(This,platform_queue,classname,taskid,callback,state) (This)->lpVtbl->BeginRegisterPlatformWorkQueueWithMMCSS(This,platform_queue,classname,taskid,callback,state)
#define IMFWorkQueueServices_EndRegisterPlatformWorkQueueWithMMCSS(This,result,taskid) (This)->lpVtbl->EndRegisterPlatformWorkQueueWithMMCSS(This,result,taskid)
#define IMFWorkQueueServices_BeginUnregisterPlatformWorkQueueWithMMCSS(This,platform_queue,callback,state) (This)->lpVtbl->BeginUnregisterPlatformWorkQueueWithMMCSS(This,platform_queue,callback,state)
#define IMFWorkQueueServices_EndUnregisterPlatformWorkQueueWithMMCSS(This,result) (This)->lpVtbl->EndUnregisterPlatformWorkQueueWithMMCSS(This,result)
#define IMFWorkQueueServices_GetPlaftormWorkQueueMMCSSClass(This,platform_queue,classname,classname_len) (This)->lpVtbl->GetPlaftormWorkQueueMMCSSClass(This,platform_queue,classname,classname_len)
#define IMFWorkQueueServices_GetPlatformWorkQueueMMCSSTaskId(This,platform_queue,taskid) (This)->lpVtbl->GetPlatformWorkQueueMMCSSTaskId(This,platform_queue,taskid)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFWorkQueueServices_QueryInterface(IMFWorkQueueServices* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFWorkQueueServices_AddRef(IMFWorkQueueServices* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFWorkQueueServices_Release(IMFWorkQueueServices* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFWorkQueueServices methods ***/
static __WIDL_INLINE HRESULT IMFWorkQueueServices_BeginRegisterTopologyWorkQueuesWithMMCSS(IMFWorkQueueServices* This,IMFAsyncCallback *callback,IUnknown *state) {
    return This->lpVtbl->BeginRegisterTopologyWorkQueuesWithMMCSS(This,callback,state);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServices_EndRegisterTopologyWorkQueuesWithMMCSS(IMFWorkQueueServices* This,IMFAsyncResult *result) {
    return This->lpVtbl->EndRegisterTopologyWorkQueuesWithMMCSS(This,result);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServices_BeginUnregisterTopologyWorkQueuesWithMMCSS(IMFWorkQueueServices* This,IMFAsyncCallback *callback,IUnknown *state) {
    return This->lpVtbl->BeginUnregisterTopologyWorkQueuesWithMMCSS(This,callback,state);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServices_EndUnregisterTopologyWorkQueuesWithMMCSS(IMFWorkQueueServices* This,IMFAsyncResult *result) {
    return This->lpVtbl->EndUnregisterTopologyWorkQueuesWithMMCSS(This,result);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServices_GetTopologyWorkQueueMMCSSClass(IMFWorkQueueServices* This,DWORD queue,LPWSTR classname,DWORD *classname_len) {
    return This->lpVtbl->GetTopologyWorkQueueMMCSSClass(This,queue,classname,classname_len);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServices_GetTopologyWorkQueueMMCSSTaskId(IMFWorkQueueServices* This,DWORD queue,DWORD *taksid) {
    return This->lpVtbl->GetTopologyWorkQueueMMCSSTaskId(This,queue,taksid);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServices_BeginRegisterPlatformWorkQueueWithMMCSS(IMFWorkQueueServices* This,DWORD platform_queue,LPCWSTR classname,DWORD taskid,IMFAsyncCallback *callback,IUnknown *state) {
    return This->lpVtbl->BeginRegisterPlatformWorkQueueWithMMCSS(This,platform_queue,classname,taskid,callback,state);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServices_EndRegisterPlatformWorkQueueWithMMCSS(IMFWorkQueueServices* This,IMFAsyncResult *result,DWORD *taskid) {
    return This->lpVtbl->EndRegisterPlatformWorkQueueWithMMCSS(This,result,taskid);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServices_BeginUnregisterPlatformWorkQueueWithMMCSS(IMFWorkQueueServices* This,DWORD platform_queue,IMFAsyncCallback *callback,IUnknown *state) {
    return This->lpVtbl->BeginUnregisterPlatformWorkQueueWithMMCSS(This,platform_queue,callback,state);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServices_EndUnregisterPlatformWorkQueueWithMMCSS(IMFWorkQueueServices* This,IMFAsyncResult *result) {
    return This->lpVtbl->EndUnregisterPlatformWorkQueueWithMMCSS(This,result);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServices_GetPlaftormWorkQueueMMCSSClass(IMFWorkQueueServices* This,DWORD platform_queue,LPWSTR classname,DWORD *classname_len) {
    return This->lpVtbl->GetPlaftormWorkQueueMMCSSClass(This,platform_queue,classname,classname_len);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServices_GetPlatformWorkQueueMMCSSTaskId(IMFWorkQueueServices* This,DWORD platform_queue,DWORD *taskid) {
    return This->lpVtbl->GetPlatformWorkQueueMMCSSTaskId(This,platform_queue,taskid);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMFWorkQueueServices_RemoteBeginRegisterTopologyWorkQueuesWithMMCSS_Proxy(
    IMFWorkQueueServices* This,
    IMFRemoteAsyncCallback *callback);
void __RPC_STUB IMFWorkQueueServices_RemoteBeginRegisterTopologyWorkQueuesWithMMCSS_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFWorkQueueServices_RemoteEndRegisterTopologyWorkQueuesWithMMCSS_Proxy(
    IMFWorkQueueServices* This,
    IUnknown *result);
void __RPC_STUB IMFWorkQueueServices_RemoteEndRegisterTopologyWorkQueuesWithMMCSS_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFWorkQueueServices_RemoteBeginUnregisterTopologyWorkQueuesWithMMCSS_Proxy(
    IMFWorkQueueServices* This,
    IMFRemoteAsyncCallback *callback);
void __RPC_STUB IMFWorkQueueServices_RemoteBeginUnregisterTopologyWorkQueuesWithMMCSS_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFWorkQueueServices_RemoteEndUnregisterTopologyWorkQueuesWithMMCSS_Proxy(
    IMFWorkQueueServices* This,
    IUnknown *result);
void __RPC_STUB IMFWorkQueueServices_RemoteEndUnregisterTopologyWorkQueuesWithMMCSS_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFWorkQueueServices_RemoteBeginRegisterPlatformWorkQueueWithMMCSS_Proxy(
    IMFWorkQueueServices* This,
    DWORD platform_queue,
    LPCWSTR classname,
    DWORD taskid,
    IMFRemoteAsyncCallback *callback);
void __RPC_STUB IMFWorkQueueServices_RemoteBeginRegisterPlatformWorkQueueWithMMCSS_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFWorkQueueServices_RemoteEndRegisterPlatformWorkQueueWithMMCSS_Proxy(
    IMFWorkQueueServices* This,
    IUnknown *result,
    DWORD *taskid);
void __RPC_STUB IMFWorkQueueServices_RemoteEndRegisterPlatformWorkQueueWithMMCSS_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFWorkQueueServices_RemoteBeginUnregisterPlatformWorkQueueWithMMCSS_Proxy(
    IMFWorkQueueServices* This,
    DWORD platform_queue,
    IMFRemoteAsyncCallback *callback);
void __RPC_STUB IMFWorkQueueServices_RemoteBeginUnregisterPlatformWorkQueueWithMMCSS_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFWorkQueueServices_RemoteEndUnregisterPlatformWorkQueueWithMMCSS_Proxy(
    IMFWorkQueueServices* This,
    IUnknown *result);
void __RPC_STUB IMFWorkQueueServices_RemoteEndUnregisterPlatformWorkQueueWithMMCSS_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMFWorkQueueServices_BeginRegisterTopologyWorkQueuesWithMMCSS_Proxy(
    IMFWorkQueueServices* This,
    IMFAsyncCallback *callback,
    IUnknown *state);
HRESULT __RPC_STUB IMFWorkQueueServices_BeginRegisterTopologyWorkQueuesWithMMCSS_Stub(
    IMFWorkQueueServices* This,
    IMFRemoteAsyncCallback *callback);
HRESULT CALLBACK IMFWorkQueueServices_EndRegisterTopologyWorkQueuesWithMMCSS_Proxy(
    IMFWorkQueueServices* This,
    IMFAsyncResult *result);
HRESULT __RPC_STUB IMFWorkQueueServices_EndRegisterTopologyWorkQueuesWithMMCSS_Stub(
    IMFWorkQueueServices* This,
    IUnknown *result);
HRESULT CALLBACK IMFWorkQueueServices_BeginUnregisterTopologyWorkQueuesWithMMCSS_Proxy(
    IMFWorkQueueServices* This,
    IMFAsyncCallback *callback,
    IUnknown *state);
HRESULT __RPC_STUB IMFWorkQueueServices_BeginUnregisterTopologyWorkQueuesWithMMCSS_Stub(
    IMFWorkQueueServices* This,
    IMFRemoteAsyncCallback *callback);
HRESULT CALLBACK IMFWorkQueueServices_EndUnregisterTopologyWorkQueuesWithMMCSS_Proxy(
    IMFWorkQueueServices* This,
    IMFAsyncResult *result);
HRESULT __RPC_STUB IMFWorkQueueServices_EndUnregisterTopologyWorkQueuesWithMMCSS_Stub(
    IMFWorkQueueServices* This,
    IUnknown *result);
HRESULT CALLBACK IMFWorkQueueServices_BeginRegisterPlatformWorkQueueWithMMCSS_Proxy(
    IMFWorkQueueServices* This,
    DWORD platform_queue,
    LPCWSTR classname,
    DWORD taskid,
    IMFAsyncCallback *callback,
    IUnknown *state);
HRESULT __RPC_STUB IMFWorkQueueServices_BeginRegisterPlatformWorkQueueWithMMCSS_Stub(
    IMFWorkQueueServices* This,
    DWORD platform_queue,
    LPCWSTR classname,
    DWORD taskid,
    IMFRemoteAsyncCallback *callback);
HRESULT CALLBACK IMFWorkQueueServices_EndRegisterPlatformWorkQueueWithMMCSS_Proxy(
    IMFWorkQueueServices* This,
    IMFAsyncResult *result,
    DWORD *taskid);
HRESULT __RPC_STUB IMFWorkQueueServices_EndRegisterPlatformWorkQueueWithMMCSS_Stub(
    IMFWorkQueueServices* This,
    IUnknown *result,
    DWORD *taskid);
HRESULT CALLBACK IMFWorkQueueServices_BeginUnregisterPlatformWorkQueueWithMMCSS_Proxy(
    IMFWorkQueueServices* This,
    DWORD platform_queue,
    IMFAsyncCallback *callback,
    IUnknown *state);
HRESULT __RPC_STUB IMFWorkQueueServices_BeginUnregisterPlatformWorkQueueWithMMCSS_Stub(
    IMFWorkQueueServices* This,
    DWORD platform_queue,
    IMFRemoteAsyncCallback *callback);
HRESULT CALLBACK IMFWorkQueueServices_EndUnregisterPlatformWorkQueueWithMMCSS_Proxy(
    IMFWorkQueueServices* This,
    IMFAsyncResult *result);
HRESULT __RPC_STUB IMFWorkQueueServices_EndUnregisterPlatformWorkQueueWithMMCSS_Stub(
    IMFWorkQueueServices* This,
    IUnknown *result);

#endif  /* __IMFWorkQueueServices_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFWorkQueueServicesEx interface
 */
#ifndef __IMFWorkQueueServicesEx_INTERFACE_DEFINED__
#define __IMFWorkQueueServicesEx_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFWorkQueueServicesEx, 0x96bf961b, 0x40fe, 0x42f1, 0xba,0x9d, 0x32,0x02,0x38,0xb4,0x97,0x00);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("96bf961b-40fe-42f1-ba9d-320238b49700")
IMFWorkQueueServicesEx : public IMFWorkQueueServices
{
    virtual HRESULT STDMETHODCALLTYPE GetTopologyWorkQueueMMCSSPriority(
        DWORD queueid,
        LONG *priority) = 0;

    virtual HRESULT STDMETHODCALLTYPE BeginRegisterPlatformWorkQueueWithMMCSSEx(
        DWORD platform_queue,
        LPCWSTR classname,
        DWORD taskid,
        LONG priority,
        IMFAsyncCallback *callback,
        IUnknown *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPlatformWorkQueueMMCSSPriority(
        DWORD platform_queue,
        LONG *priority) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFWorkQueueServicesEx, 0x96bf961b, 0x40fe, 0x42f1, 0xba,0x9d, 0x32,0x02,0x38,0xb4,0x97,0x00)
#endif
#else
typedef struct IMFWorkQueueServicesExVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFWorkQueueServices methods ***/
    HRESULT (STDMETHODCALLTYPE *BeginRegisterTopologyWorkQueuesWithMMCSS)(
        IMFWorkQueueServicesEx *This,
        IMFAsyncCallback *callback,
        IUnknown *state);

    HRESULT (STDMETHODCALLTYPE *EndRegisterTopologyWorkQueuesWithMMCSS)(
        IMFWorkQueueServicesEx *This,
        IMFAsyncResult *result);

    HRESULT (STDMETHODCALLTYPE *BeginUnregisterTopologyWorkQueuesWithMMCSS)(
        IMFWorkQueueServicesEx *This,
        IMFAsyncCallback *callback,
        IUnknown *state);

    HRESULT (STDMETHODCALLTYPE *EndUnregisterTopologyWorkQueuesWithMMCSS)(
        IMFWorkQueueServicesEx *This,
        IMFAsyncResult *result);

    HRESULT (STDMETHODCALLTYPE *GetTopologyWorkQueueMMCSSClass)(
        IMFWorkQueueServicesEx *This,
        DWORD queue,
        LPWSTR classname,
        DWORD *classname_len);

    HRESULT (STDMETHODCALLTYPE *GetTopologyWorkQueueMMCSSTaskId)(
        IMFWorkQueueServicesEx *This,
        DWORD queue,
        DWORD *taksid);

    HRESULT (STDMETHODCALLTYPE *BeginRegisterPlatformWorkQueueWithMMCSS)(
        IMFWorkQueueServicesEx *This,
        DWORD platform_queue,
        LPCWSTR classname,
        DWORD taskid,
        IMFAsyncCallback *callback,
        IUnknown *state);

    HRESULT (STDMETHODCALLTYPE *EndRegisterPlatformWorkQueueWithMMCSS)(
        IMFWorkQueueServicesEx *This,
        IMFAsyncResult *result,
        DWORD *taskid);

    HRESULT (STDMETHODCALLTYPE *BeginUnregisterPlatformWorkQueueWithMMCSS)(
        IMFWorkQueueServicesEx *This,
        DWORD platform_queue,
        IMFAsyncCallback *callback,
        IUnknown *state);

    HRESULT (STDMETHODCALLTYPE *EndUnregisterPlatformWorkQueueWithMMCSS)(
        IMFWorkQueueServicesEx *This,
        IMFAsyncResult *result);

    HRESULT (STDMETHODCALLTYPE *GetPlaftormWorkQueueMMCSSClass)(
        IMFWorkQueueServicesEx *This,
        DWORD platform_queue,
        LPWSTR classname,
        DWORD *classname_len);

    HRESULT (STDMETHODCALLTYPE *GetPlatformWorkQueueMMCSSTaskId)(
        IMFWorkQueueServicesEx *This,
        DWORD platform_queue,
        DWORD *taskid);

    /*** IMFWorkQueueServicesEx methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTopologyWorkQueueMMCSSPriority)(
        IMFWorkQueueServicesEx *This,
        DWORD queueid,
        LONG *priority);

    HRESULT (STDMETHODCALLTYPE *BeginRegisterPlatformWorkQueueWithMMCSSEx)(
        IMFWorkQueueServicesEx *This,
        DWORD platform_queue,
        LPCWSTR classname,
        DWORD taskid,
        LONG priority,
        IMFAsyncCallback *callback,
        IUnknown *state);

    HRESULT (STDMETHODCALLTYPE *GetPlatformWorkQueueMMCSSPriority)(
        IMFWorkQueueServicesEx *This,
        DWORD platform_queue,
        LONG *priority);

    END_INTERFACE
} IMFWorkQueueServicesExVtbl;

interface IMFWorkQueueServicesEx {
    CONST_VTBL IMFWorkQueueServicesExVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFWorkQueueServicesEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFWorkQueueServicesEx_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFWorkQueueServicesEx_Release(This) (This)->lpVtbl->Release(This)
/*** IMFWorkQueueServices methods ***/
#define IMFWorkQueueServicesEx_BeginRegisterTopologyWorkQueuesWithMMCSS(This,callback,state) (This)->lpVtbl->BeginRegisterTopologyWorkQueuesWithMMCSS(This,callback,state)
#define IMFWorkQueueServicesEx_EndRegisterTopologyWorkQueuesWithMMCSS(This,result) (This)->lpVtbl->EndRegisterTopologyWorkQueuesWithMMCSS(This,result)
#define IMFWorkQueueServicesEx_BeginUnregisterTopologyWorkQueuesWithMMCSS(This,callback,state) (This)->lpVtbl->BeginUnregisterTopologyWorkQueuesWithMMCSS(This,callback,state)
#define IMFWorkQueueServicesEx_EndUnregisterTopologyWorkQueuesWithMMCSS(This,result) (This)->lpVtbl->EndUnregisterTopologyWorkQueuesWithMMCSS(This,result)
#define IMFWorkQueueServicesEx_GetTopologyWorkQueueMMCSSClass(This,queue,classname,classname_len) (This)->lpVtbl->GetTopologyWorkQueueMMCSSClass(This,queue,classname,classname_len)
#define IMFWorkQueueServicesEx_GetTopologyWorkQueueMMCSSTaskId(This,queue,taksid) (This)->lpVtbl->GetTopologyWorkQueueMMCSSTaskId(This,queue,taksid)
#define IMFWorkQueueServicesEx_BeginRegisterPlatformWorkQueueWithMMCSS(This,platform_queue,classname,taskid,callback,state) (This)->lpVtbl->BeginRegisterPlatformWorkQueueWithMMCSS(This,platform_queue,classname,taskid,callback,state)
#define IMFWorkQueueServicesEx_EndRegisterPlatformWorkQueueWithMMCSS(This,result,taskid) (This)->lpVtbl->EndRegisterPlatformWorkQueueWithMMCSS(This,result,taskid)
#define IMFWorkQueueServicesEx_BeginUnregisterPlatformWorkQueueWithMMCSS(This,platform_queue,callback,state) (This)->lpVtbl->BeginUnregisterPlatformWorkQueueWithMMCSS(This,platform_queue,callback,state)
#define IMFWorkQueueServicesEx_EndUnregisterPlatformWorkQueueWithMMCSS(This,result) (This)->lpVtbl->EndUnregisterPlatformWorkQueueWithMMCSS(This,result)
#define IMFWorkQueueServicesEx_GetPlaftormWorkQueueMMCSSClass(This,platform_queue,classname,classname_len) (This)->lpVtbl->GetPlaftormWorkQueueMMCSSClass(This,platform_queue,classname,classname_len)
#define IMFWorkQueueServicesEx_GetPlatformWorkQueueMMCSSTaskId(This,platform_queue,taskid) (This)->lpVtbl->GetPlatformWorkQueueMMCSSTaskId(This,platform_queue,taskid)
/*** IMFWorkQueueServicesEx methods ***/
#define IMFWorkQueueServicesEx_GetTopologyWorkQueueMMCSSPriority(This,queueid,priority) (This)->lpVtbl->GetTopologyWorkQueueMMCSSPriority(This,queueid,priority)
#define IMFWorkQueueServicesEx_BeginRegisterPlatformWorkQueueWithMMCSSEx(This,platform_queue,classname,taskid,priority,callback,state) (This)->lpVtbl->BeginRegisterPlatformWorkQueueWithMMCSSEx(This,platform_queue,classname,taskid,priority,callback,state)
#define IMFWorkQueueServicesEx_GetPlatformWorkQueueMMCSSPriority(This,platform_queue,priority) (This)->lpVtbl->GetPlatformWorkQueueMMCSSPriority(This,platform_queue,priority)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IMFWorkQueueServicesEx_QueryInterface(IMFWorkQueueServicesEx* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IMFWorkQueueServicesEx_AddRef(IMFWorkQueueServicesEx* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IMFWorkQueueServicesEx_Release(IMFWorkQueueServicesEx* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFWorkQueueServices methods ***/
static __WIDL_INLINE HRESULT IMFWorkQueueServicesEx_BeginRegisterTopologyWorkQueuesWithMMCSS(IMFWorkQueueServicesEx* This,IMFAsyncCallback *callback,IUnknown *state) {
    return This->lpVtbl->BeginRegisterTopologyWorkQueuesWithMMCSS(This,callback,state);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServicesEx_EndRegisterTopologyWorkQueuesWithMMCSS(IMFWorkQueueServicesEx* This,IMFAsyncResult *result) {
    return This->lpVtbl->EndRegisterTopologyWorkQueuesWithMMCSS(This,result);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServicesEx_BeginUnregisterTopologyWorkQueuesWithMMCSS(IMFWorkQueueServicesEx* This,IMFAsyncCallback *callback,IUnknown *state) {
    return This->lpVtbl->BeginUnregisterTopologyWorkQueuesWithMMCSS(This,callback,state);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServicesEx_EndUnregisterTopologyWorkQueuesWithMMCSS(IMFWorkQueueServicesEx* This,IMFAsyncResult *result) {
    return This->lpVtbl->EndUnregisterTopologyWorkQueuesWithMMCSS(This,result);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServicesEx_GetTopologyWorkQueueMMCSSClass(IMFWorkQueueServicesEx* This,DWORD queue,LPWSTR classname,DWORD *classname_len) {
    return This->lpVtbl->GetTopologyWorkQueueMMCSSClass(This,queue,classname,classname_len);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServicesEx_GetTopologyWorkQueueMMCSSTaskId(IMFWorkQueueServicesEx* This,DWORD queue,DWORD *taksid) {
    return This->lpVtbl->GetTopologyWorkQueueMMCSSTaskId(This,queue,taksid);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServicesEx_BeginRegisterPlatformWorkQueueWithMMCSS(IMFWorkQueueServicesEx* This,DWORD platform_queue,LPCWSTR classname,DWORD taskid,IMFAsyncCallback *callback,IUnknown *state) {
    return This->lpVtbl->BeginRegisterPlatformWorkQueueWithMMCSS(This,platform_queue,classname,taskid,callback,state);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServicesEx_EndRegisterPlatformWorkQueueWithMMCSS(IMFWorkQueueServicesEx* This,IMFAsyncResult *result,DWORD *taskid) {
    return This->lpVtbl->EndRegisterPlatformWorkQueueWithMMCSS(This,result,taskid);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServicesEx_BeginUnregisterPlatformWorkQueueWithMMCSS(IMFWorkQueueServicesEx* This,DWORD platform_queue,IMFAsyncCallback *callback,IUnknown *state) {
    return This->lpVtbl->BeginUnregisterPlatformWorkQueueWithMMCSS(This,platform_queue,callback,state);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServicesEx_EndUnregisterPlatformWorkQueueWithMMCSS(IMFWorkQueueServicesEx* This,IMFAsyncResult *result) {
    return This->lpVtbl->EndUnregisterPlatformWorkQueueWithMMCSS(This,result);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServicesEx_GetPlaftormWorkQueueMMCSSClass(IMFWorkQueueServicesEx* This,DWORD platform_queue,LPWSTR classname,DWORD *classname_len) {
    return This->lpVtbl->GetPlaftormWorkQueueMMCSSClass(This,platform_queue,classname,classname_len);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServicesEx_GetPlatformWorkQueueMMCSSTaskId(IMFWorkQueueServicesEx* This,DWORD platform_queue,DWORD *taskid) {
    return This->lpVtbl->GetPlatformWorkQueueMMCSSTaskId(This,platform_queue,taskid);
}
/*** IMFWorkQueueServicesEx methods ***/
static __WIDL_INLINE HRESULT IMFWorkQueueServicesEx_GetTopologyWorkQueueMMCSSPriority(IMFWorkQueueServicesEx* This,DWORD queueid,LONG *priority) {
    return This->lpVtbl->GetTopologyWorkQueueMMCSSPriority(This,queueid,priority);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServicesEx_BeginRegisterPlatformWorkQueueWithMMCSSEx(IMFWorkQueueServicesEx* This,DWORD platform_queue,LPCWSTR classname,DWORD taskid,LONG priority,IMFAsyncCallback *callback,IUnknown *state) {
    return This->lpVtbl->BeginRegisterPlatformWorkQueueWithMMCSSEx(This,platform_queue,classname,taskid,priority,callback,state);
}
static __WIDL_INLINE HRESULT IMFWorkQueueServicesEx_GetPlatformWorkQueueMMCSSPriority(IMFWorkQueueServicesEx* This,DWORD platform_queue,LONG *priority) {
    return This->lpVtbl->GetPlatformWorkQueueMMCSSPriority(This,platform_queue,priority);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMFWorkQueueServicesEx_RemoteBeginRegisterPlatformWorkQueueWithMMCSSEx_Proxy(
    IMFWorkQueueServicesEx* This,
    DWORD platform_queue,
    LPCWSTR classname,
    DWORD taskid,
    LONG priority,
    IMFRemoteAsyncCallback *callback);
void __RPC_STUB IMFWorkQueueServicesEx_RemoteBeginRegisterPlatformWorkQueueWithMMCSSEx_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMFWorkQueueServicesEx_BeginRegisterPlatformWorkQueueWithMMCSSEx_Proxy(
    IMFWorkQueueServicesEx* This,
    DWORD platform_queue,
    LPCWSTR classname,
    DWORD taskid,
    LONG priority,
    IMFAsyncCallback *callback,
    IUnknown *state);
HRESULT __RPC_STUB IMFWorkQueueServicesEx_BeginRegisterPlatformWorkQueueWithMMCSSEx_Stub(
    IMFWorkQueueServicesEx* This,
    DWORD platform_queue,
    LPCWSTR classname,
    DWORD taskid,
    LONG priority,
    IMFRemoteAsyncCallback *callback);

#endif  /* __IMFWorkQueueServicesEx_INTERFACE_DEFINED__ */

enum {
    MF_ACTIVATE_CUSTOM_MIXER_ALLOWFAIL = 0x1
};
enum {
    MF_ACTIVATE_CUSTOM_PRESENTER_ALLOWFAIL = 0x1
};
#ifdef __cplusplus
static inline HRESULT MFSetAttributeSize(IMFAttributes *attributes, REFGUID key, UINT32 width, UINT32 height)
{
    return attributes->SetUINT64(key, ((UINT64)width << 32) | height);
}
static inline HRESULT MFSetAttributeRatio(IMFAttributes *attributes, REFGUID key, UINT32 numerator, UINT32 denominator)
{
    return attributes->SetUINT64(key, ((UINT64)numerator << 32) | denominator);
}
#endif
#define MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS_CROSSPROCESS              0x00000001
#define MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS_NOPERSIST                 0x00000002
#define MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS_DONT_ALLOW_FORMAT_CHANGES 0x00000004
EXTERN_GUID(MF_ACTIVATE_MFT_LOCKED,        0xc1f6093c, 0x7f65, 0x4fbd, 0x9e, 0x39, 0x5f, 0xae, 0xc3, 0xc4, 0xfb, 0xd7);
EXTERN_GUID(MF_SD_LANGUAGE,                0x00af2180, 0xbdc2, 0x423c, 0xab, 0xca, 0xf5, 0x03, 0x59, 0x3b, 0xc1, 0x21);
EXTERN_GUID(MF_SD_MUTUALLY_EXCLUSIVE,      0x023ef79c, 0x388d, 0x487f, 0xac, 0x17, 0x69, 0x6c, 0xd6, 0xe3, 0xc6, 0xf5);
EXTERN_GUID(MF_SD_PROTECTED,               0x00af2181, 0xbdc2, 0x423c, 0xab, 0xca, 0xf5, 0x03, 0x59, 0x3b, 0xc1, 0x21);
EXTERN_GUID(MF_SD_STREAM_NAME,             0x4f1b099d, 0xd314, 0x41e5, 0xa7, 0x81, 0x7f, 0xef, 0xaa, 0x4c, 0x50, 0x1f);
EXTERN_GUID(MF_SD_SAMI_LANGUAGE,           0x36fcb98a, 0x6cd0, 0x44cb, 0xac, 0xb9, 0xa8, 0xf5, 0x60, 0x0d, 0xd0, 0xbb);
EXTERN_GUID(MF_PD_PMPHOST_CONTEXT,         0x6c990d31, 0xbb8e, 0x477a, 0x85, 0x98, 0x0d, 0x5d, 0x96, 0xfc, 0xd8, 0x8a);
EXTERN_GUID(MF_PD_APP_CONTEXT,             0x6c990d32, 0xbb8e, 0x477a, 0x85, 0x98, 0x0d, 0x5d, 0x96, 0xfc, 0xd8, 0x8a);
EXTERN_GUID(MF_PD_DURATION,                0x6c990d33, 0xbb8e, 0x477a, 0x85, 0x98, 0x0d, 0x5d, 0x96, 0xfc, 0xd8, 0x8a);
EXTERN_GUID(MF_PD_TOTAL_FILE_SIZE,         0x6c990d34, 0xbb8e, 0x477a, 0x85, 0x98, 0x0d, 0x5d, 0x96, 0xfc, 0xd8, 0x8a);
EXTERN_GUID(MF_PD_AUDIO_ENCODING_BITRATE,  0x6c990d35, 0xbb8e, 0x477a, 0x85, 0x98, 0x0d, 0x5d, 0x96, 0xfc, 0xd8, 0x8a);
EXTERN_GUID(MF_PD_VIDEO_ENCODING_BITRATE,  0x6c990d36, 0xbb8e, 0x477a, 0x85, 0x98, 0x0d, 0x5d, 0x96, 0xfc, 0xd8, 0x8a);
EXTERN_GUID(MF_PD_MIME_TYPE,               0x6c990d37, 0xbb8e, 0x477a, 0x85, 0x98, 0x0d, 0x5d, 0x96, 0xfc, 0xd8, 0x8a);
EXTERN_GUID(MF_PD_LAST_MODIFIED_TIME,      0x6c990d38, 0xbb8e, 0x477a, 0x85, 0x98, 0x0d, 0x5d, 0x96, 0xfc, 0xd8, 0x8a);
EXTERN_GUID(MF_PD_PLAYBACK_ELEMENT_ID,     0x6c990d39, 0xbb8e, 0x477a, 0x85, 0x98, 0x0d, 0x5d, 0x96, 0xfc, 0xd8, 0x8a);
EXTERN_GUID(MF_PD_PREFERRED_LANGUAGE,      0x6c990d3a, 0xbb8e, 0x477a, 0x85, 0x98, 0x0d, 0x5d, 0x96, 0xfc, 0xd8, 0x8a);
EXTERN_GUID(MF_PD_PLAYBACK_BOUNDARY_TIME,  0x6c990d3b, 0xbb8e, 0x477a, 0x85, 0x98, 0x0d, 0x5d, 0x96, 0xfc, 0xd8, 0x8a);
EXTERN_GUID(MF_PD_AUDIO_ISVARIABLEBITRATE, 0x33026ee0, 0xe387, 0x4582, 0xae, 0x0a, 0x34, 0xa2, 0xad, 0x3b, 0xaa, 0x18);
DEFINE_GUID(MF_PD_ADAPTIVE_STREAMING,      0xea0d5d97, 0x29f9, 0x488b, 0xae, 0x6b, 0x7d, 0x6b, 0x41, 0x36, 0x11, 0x2b);
EXTERN_GUID(MF_PD_SAMI_STYLELIST,          0xe0b73c7f, 0x486d, 0x484e, 0x98, 0x72, 0x4d, 0xe5, 0x19, 0x2a, 0x7b, 0xf8);
EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE, 0xc60ac5fe, 0x252a, 0x478f, 0xa0, 0xef, 0xbc, 0x8f, 0xa5, 0xf7, 0xca, 0xd3);
EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_MEDIA_TYPE, 0x56a819ca, 0x0c78, 0x4de4, 0xa0, 0xa7, 0x3d, 0xda, 0xba, 0x0f, 0x24, 0xd4);
EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME, 0x60d0e559, 0x52f8, 0x4fa2, 0xbb, 0xce, 0xac, 0xdb, 0x34, 0xa8, 0xec, 0x01);
EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_SYMBOLIC_LINK, 0x98d24b5e, 0x5930, 0x4614, 0xb5, 0xa1, 0xf6, 0x00, 0xf9, 0x35, 0x5a, 0x78);
EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID, 0x30da9258, 0xfeb9, 0x47a7, 0xa4, 0x53, 0x76, 0x3a, 0x7a, 0x8e, 0x1c, 0x5f);
EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE, 0xbc9d118e, 0x8c67, 0x4a18, 0x85, 0xd4, 0x12, 0xd3, 0x00, 0x40, 0x05, 0x52);
EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY, 0x77f0ae69, 0xc3bd, 0x4509, 0x94, 0x1d, 0x46, 0x7e, 0x4d, 0x24, 0x89, 0x9e);
EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_HW_SOURCE, 0xde7046ba, 0x54d6, 0x4487, 0xa2, 0xa4, 0xec, 0x7c, 0x0d, 0x1b, 0xd1, 0x63);
EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_PROVIDER_DEVICE_ID, 0x36689d42, 0xa06c, 0x40ae, 0x84, 0xcf, 0xf5, 0xa0, 0x34, 0x06, 0x7c, 0xc4);
EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK, 0x58f0aad8, 0x22bf, 0x4f8a, 0xbb, 0x3d, 0xd2, 0xc4, 0x97, 0x8c, 0x6e, 0x2f);
EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_MAX_BUFFERS, 0x7dd9b730, 0x4f2d, 0x41d5, 0x8f, 0x95, 0x0c, 0xc9, 0xa9, 0x12, 0xba, 0x26);
EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_GUID, 0x14dd9a1c, 0x7cff, 0x41be, 0xb1, 0xb9, 0xba, 0x1a, 0xc6, 0xec, 0xb5, 0x71);
EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID, 0x8ac3587a, 0x4ae7, 0x42d8, 0x99, 0xe0, 0x0a, 0x60, 0x13, 0xee, 0xf9, 0x0f);
EXTERN_GUID(MF_TOPONODE_CONNECT_METHOD, 0x494bbcf1, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);
EXTERN_GUID(MF_TOPONODE_D3DAWARE, 0x494bbced, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);
EXTERN_GUID(MF_TOPONODE_DECODER, 0x494bbd02, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);
EXTERN_GUID(MF_TOPONODE_DECRYPTOR, 0x494bbcfa, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);
EXTERN_GUID(MF_TOPONODE_DISABLE_PREROLL, 0x14932f9e, 0x9087, 0x4bb4, 0x84, 0x12, 0x51, 0x67, 0x14, 0x5c, 0xbe, 0x04);
EXTERN_GUID(MF_TOPONODE_DISCARDABLE, 0x494bbcfb, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);
EXTERN_GUID(MF_TOPONODE_DRAIN, 0x494bbce9, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);
EXTERN_GUID(MF_TOPONODE_ERROR_MAJORTYPE, 0x494bbcfd, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);
EXTERN_GUID(MF_TOPONODE_ERROR_SUBTYPE, 0x494bbcfe, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);
EXTERN_GUID(MF_TOPONODE_ERRORCODE, 0x494bbcee, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);
EXTERN_GUID(MF_TOPONODE_FLUSH, 0x494bbce8, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);
EXTERN_GUID(MF_TOPONODE_LOCKED, 0x494bbcf7, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);
EXTERN_GUID(MF_TOPONODE_MARKIN_HERE, 0x494bbd00, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);
EXTERN_GUID(MF_TOPONODE_MARKOUT_HERE, 0x494bbd01, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);
EXTERN_GUID(MF_TOPONODE_MEDIASTART, 0x835c58ea, 0xe075, 0x4bc7, 0xbc, 0xba, 0x4d, 0xe0, 0x00, 0xdf, 0x9a, 0xe6);
EXTERN_GUID(MF_TOPONODE_MEDIASTOP, 0x835c58eb, 0xe075, 0x4bc7, 0xbc, 0xba, 0x4d, 0xe0, 0x00, 0xdf, 0x9a, 0xe6);
EXTERN_GUID(MF_TOPONODE_NOSHUTDOWN_ON_REMOVE, 0x14932f9c, 0x9087, 0x4bb4, 0x84, 0x12, 0x51, 0x67, 0x14, 0x5c, 0xbe, 0x04);
EXTERN_GUID(MF_TOPONODE_PRESENTATION_DESCRIPTOR, 0x835c58ed, 0xe075, 0x4bc7, 0xbc, 0xba, 0x4d, 0xe0, 0x00, 0xdf, 0x9a, 0xe6);
EXTERN_GUID(MF_TOPONODE_PRIMARYOUTPUT, 0x6304ef99, 0x16b2, 0x4ebe, 0x9d, 0x67, 0xe4, 0xc5, 0x39, 0xb3, 0xa2, 0x59);
EXTERN_GUID(MF_TOPONODE_RATELESS, 0x14932f9d, 0x9087, 0x4bb4, 0x84, 0x12, 0x51, 0x67, 0x14, 0x5c, 0xbe, 0x04);
EXTERN_GUID(MF_TOPONODE_SEQUENCE_ELEMENTID, 0x835c58ef, 0xe075, 0x4bc7, 0xbc, 0xba, 0x4d, 0xe0, 0x00, 0xdf, 0x9a, 0xe6);
EXTERN_GUID(MF_TOPONODE_SOURCE, 0x835c58ec, 0xe075, 0x4bc7, 0xbc, 0xba, 0x4d, 0xe0, 0x00, 0xdf, 0x9a, 0xe6);
EXTERN_GUID(MF_TOPONODE_STREAM_DESCRIPTOR, 0x835c58ee, 0xe075, 0x4bc7, 0xbc, 0xba, 0x4d, 0xe0, 0x00, 0xdf, 0x9a, 0xe6);
EXTERN_GUID(MF_TOPONODE_STREAMID, 0x14932f9b, 0x9087, 0x4bb4, 0x84, 0x12, 0x51, 0x67, 0x14, 0x5c, 0xbe, 0x04);
EXTERN_GUID(MF_TOPONODE_TRANSFORM_OBJECTID, 0x88dcc0c9, 0x293e, 0x4e8b, 0x9a, 0xeb, 0xa, 0xd6, 0x4c, 0xc0, 0x16, 0xb0);
EXTERN_GUID(MF_TOPONODE_WORKQUEUE_ID, 0x494bbcf8, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);
EXTERN_GUID(MF_TOPONODE_WORKQUEUE_ITEM_PRIORITY, 0xa1ff99be, 0x5e97, 0x4a53, 0xb4, 0x94, 0x56, 0x8c, 0x64, 0x2c, 0x0f, 0xf3);
EXTERN_GUID(MF_TOPONODE_WORKQUEUE_MMCSS_CLASS, 0x494bbcf9, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);
EXTERN_GUID(MF_TOPONODE_WORKQUEUE_MMCSS_PRIORITY, 0x5001f840, 0x2816, 0x48f4, 0x93, 0x64, 0xad, 0x1e, 0xf6, 0x61, 0xa1, 0x23);
EXTERN_GUID(MF_TOPONODE_WORKQUEUE_MMCSS_TASKID, 0x494bbcff, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);
EXTERN_GUID(MF_TOPOLOGY_DXVA_MODE, 0x1e8d34f6, 0xf5ab, 0x4e23, 0xbb, 0x88, 0x87, 0x4a, 0xa3, 0xa1, 0xa7, 0x4d);
EXTERN_GUID(MF_TOPOLOGY_DYNAMIC_CHANGE_NOT_ALLOWED, 0xd529950b, 0xd484, 0x4527, 0xa9, 0xcd, 0xb1, 0x90, 0x95, 0x32, 0xb5, 0xb0);
EXTERN_GUID(MF_TOPOLOGY_ENABLE_XVP_FOR_PLAYBACK, 0x1967731f, 0xcd78, 0x42fc, 0xb0, 0x26, 0x09, 0x92, 0xa5, 0x6e, 0x56, 0x93);
EXTERN_GUID(MF_TOPOLOGY_ENUMERATE_SOURCE_TYPES, 0x6248c36d, 0x5d0b, 0x4f40, 0xa0, 0xbb, 0xb0, 0xb3, 0x05, 0xf7, 0x76, 0x98);
EXTERN_GUID(MF_TOPOLOGY_HARDWARE_MODE, 0xd2d362fd, 0x4e4f, 0x4191, 0xa5, 0x79, 0xc6, 0x18, 0xb6, 0x67, 0x06, 0xaf);
EXTERN_GUID(MF_TOPOLOGY_NO_MARKIN_MARKOUT, 0x7ed3f804, 0x86bb, 0x4b3f, 0xb7, 0xe4, 0x7c, 0xb4, 0x3a, 0xfd, 0x4b, 0x80);
EXTERN_GUID(MF_TOPOLOGY_PLAYBACK_FRAMERATE, 0xc164737a, 0xc2b1, 0x4553, 0x83, 0xbb, 0x5a, 0x52, 0x60, 0x72, 0x44, 0x8f);
EXTERN_GUID(MF_TOPOLOGY_PLAYBACK_MAX_DIMS, 0x5715cf19, 0x5768, 0x44aa, 0xad, 0x6e, 0x87, 0x21, 0xf1, 0xb0, 0xf9, 0xbb);
EXTERN_GUID(MF_TOPOLOGY_PROJECTSTART, 0x7ed3f802, 0x86bb, 0x4b3f, 0xb7, 0xe4, 0x7c, 0xb4, 0x3a, 0xfd, 0x4b, 0x80);
EXTERN_GUID(MF_TOPOLOGY_PROJECTSTOP, 0x7ed3f803, 0x86bb, 0x4b3f, 0xb7, 0xe4, 0x7c, 0xb4, 0x3a, 0xfd, 0x4b, 0x80);
EXTERN_GUID(MF_TOPOLOGY_RESOLUTION_STATUS, 0x494bbcde, 0xb031, 0x4e38,  0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);
EXTERN_GUID(MF_TOPOLOGY_START_TIME_ON_PRESENTATION_SWITCH, 0xc8cc113f, 0x7951, 0x4548, 0xaa, 0xd6, 0x9e, 0xd6, 0x20, 0x2e, 0x62, 0xb3);
EXTERN_GUID(MF_TOPOLOGY_STATIC_PLAYBACK_OPTIMIZATIONS, 0xb86cac42, 0x41a6, 0x4b79, 0x89, 0x7a, 0x1a, 0xb0, 0xe5, 0x2b, 0x4a, 0x1b);
EXTERN_GUID(MF_RATE_CONTROL_SERVICE, 0x866fa297, 0xb802, 0x4bf8, 0x9d, 0xc9, 0x5e, 0x3b, 0x6a, 0x9f, 0x53, 0xc9);
EXTERN_GUID(MF_LOCAL_MFT_REGISTRATION_SERVICE, 0xddf5cf9c, 0x4506, 0x45aa, 0xab, 0xf0, 0x6d, 0x5d, 0x94, 0xdd, 0x1b, 0x4a);
EXTERN_C const GUID MF_SCRUBBING_SERVICE;
EXTERN_GUID(MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE, 0x65656e1a, 0x077f, 0x4472, 0x83, 0xef, 0x31, 0x6f, 0x11, 0xd5, 0x08, 0x7a);
EXTERN_GUID(MR_POLICY_VOLUME_SERVICE, 0x1abaa2ac, 0x9d3b, 0x47c6, 0xab, 0x48, 0xc5, 0x95, 0x06, 0xde, 0x78, 0x4d);
EXTERN_GUID(MR_CAPTURE_POLICY_VOLUME_SERVICE, 0x24030acd, 0x107a, 0x4265, 0x97, 0x5c, 0x41, 0x4e, 0x33, 0xe6, 0x5f, 0x2a);
EXTERN_GUID(MR_STREAM_VOLUME_SERVICE, 0xf8b5fa2f, 0x32ef, 0x46f5, 0xb1, 0x72, 0x13, 0x21, 0x21, 0x2f, 0xb2, 0xc4);
EXTERN_GUID(MR_AUDIO_POLICY_SERVICE, 0x911fd737, 0x6775, 0x4ab0, 0xa6, 0x14, 0x29, 0x78, 0x62, 0xfd, 0xac, 0x88);
EXTERN_GUID(MF_PROPERTY_HANDLER_SERVICE, 0xa3face02, 0x32b8, 0x41dd, 0x90, 0xe7, 0x5f, 0xef, 0x7c, 0x89, 0x91, 0xb5);
EXTERN_GUID(MF_WORKQUEUE_SERVICES, 0x8e37d489, 0x41e0, 0x413a, 0x90, 0x68, 0x28, 0x7c, 0x88, 0x6d, 0x8d, 0xda);
EXTERN_GUID(MF_PROGRESSIVE_CODING_CONTENT, 0x8f020eea, 0x1508, 0x471f, 0x9d, 0xa6, 0x50, 0x7d, 0x7c, 0xfa, 0x40, 0xdb);
EXTERN_GUID(MF_NALU_LENGTH_SET, 0xa7911d53, 0x12a4, 0x4965, 0xae, 0x70, 0x6e, 0xad, 0xd6, 0xff, 0x05, 0x51);
EXTERN_GUID(MF_SAMPLEGRABBERSINK_SAMPLE_TIME_OFFSET, 0x62e3d776, 0x8100, 0x4e03, 0xa6, 0xe8, 0xbd, 0x38, 0x57, 0xac, 0x9c, 0x47);
EXTERN_GUID(MF_SAMPLEGRABBERSINK_IGNORE_CLOCK, 0x0efda2c0, 0x2b69, 0x4e2e, 0xab, 0x8d, 0x46, 0xdc, 0xbf, 0xf7, 0xd2, 0x5d);
EXTERN_GUID(MF_SESSION_TOPOLOADER, 0x1e83d482, 0x1f1c, 0x4571, 0x84, 0x05, 0x88, 0xf4, 0xb2, 0x18, 0x1f, 0x71);
EXTERN_GUID(MF_SESSION_GLOBAL_TIME, 0x1e83d482, 0x1f1c, 0x4571, 0x84, 0x05, 0x88, 0xf4, 0xb2, 0x18, 0x1f, 0x72);
EXTERN_GUID(MF_SESSION_QUALITY_MANAGER, 0x1e83d482, 0x1f1c, 0x4571, 0x84, 0x05, 0x88, 0xf4, 0xb2, 0x18, 0x1f, 0x73);
EXTERN_GUID(MF_SESSION_CONTENT_PROTECTION_MANAGER, 0x1e83d482, 0x1f1c, 0x4571, 0x84, 0x05, 0x88, 0xf4, 0xb2, 0x18, 0x1f, 0x74);
EXTERN_GUID(MF_SESSION_SERVER_CONTEXT, 0xafe5b291, 0x50fa, 0x46e8, 0xb9, 0xbe, 0x0c, 0x0c, 0x3c, 0xe4, 0xb3, 0xa5);
EXTERN_GUID(MF_SESSION_REMOTE_SOURCE_MODE, 0xf4033ef4, 0x9bb3, 0x4378, 0x94, 0x1f, 0x85, 0xa0, 0x85, 0x6b, 0xc2, 0x44);
EXTERN_GUID(MF_SESSION_APPROX_EVENT_OCCURRENCE_TIME, 0x190e852f, 0x6238, 0x42d1, 0xb5, 0xaf, 0x69, 0xea, 0x33, 0x8e, 0xf8, 0x50);
EXTERN_GUID(MF_PMP_SERVER_CONTEXT, 0x2f00c910, 0xd2cf, 0x4278, 0x8b, 0x6a, 0xd0, 0x77, 0xfa, 0xc3, 0xa2, 0x5f);
EXTERN_GUID(MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS, 0xede4b5e0, 0xf805, 0x4d6c, 0x99, 0xb3, 0xdb, 0x01, 0xbf, 0x95, 0xdf, 0xab);
EXTERN_GUID(MF_AUDIO_RENDERER_ATTRIBUTE_SESSION_ID, 0xede4b5e3, 0xf805, 0x4d6c, 0x99, 0xb3, 0xdb, 0x01, 0xbf, 0x95, 0xdf, 0xab);
EXTERN_GUID(MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID, 0xb10aaec3, 0xef71, 0x4cc3, 0xb8, 0x73, 0x05, 0xa9, 0xa0, 0x8b, 0x9f, 0x8e);
EXTERN_GUID(MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ROLE, 0x6ba644ff, 0x27c5, 0x4d02, 0x98, 0x87, 0xc2, 0x86, 0x19, 0xfd, 0xb9, 0x1b);
EXTERN_GUID(MF_AUDIO_RENDERER_ATTRIBUTE_STREAM_CATEGORY, 0xa9770471, 0x92ec, 0x4df4, 0x94, 0xfe, 0x81, 0xc3, 0x6f, 0x0c, 0x3a, 0x7a);
EXTERN_GUID(MF_ACTIVATE_VIDEO_WINDOW, 0x9a2dbbdd, 0xf57e, 0x4162, 0x82, 0xb9, 0x68, 0x31, 0x37, 0x76, 0x82, 0xd3);
EXTERN_GUID(MF_ACTIVATE_CUSTOM_VIDEO_MIXER_CLSID, 0xba491360, 0xbe50, 0x451e, 0x95, 0xab, 0x6d, 0x4a, 0xcc, 0xc7, 0xda, 0xd8);
EXTERN_GUID(MF_ACTIVATE_CUSTOM_VIDEO_MIXER_ACTIVATE, 0xba491361, 0xbe50, 0x451e, 0x95, 0xab, 0x6d, 0x4a, 0xcc, 0xc7, 0xda, 0xd8);
EXTERN_GUID(MF_ACTIVATE_CUSTOM_VIDEO_MIXER_FLAGS, 0xba491362, 0xbe50, 0x451e, 0x95, 0xab, 0x6d, 0x4a, 0xcc, 0xc7, 0xda, 0xd8);
EXTERN_GUID(MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_CLSID, 0xba491364, 0xbe50, 0x451e, 0x95, 0xab, 0x6d, 0x4a, 0xcc, 0xc7, 0xda, 0xd8);
EXTERN_GUID(MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_ACTIVATE, 0xba491365, 0xbe50, 0x451e, 0x95, 0xab, 0x6d, 0x4a, 0xcc, 0xc7, 0xda, 0xd8);
EXTERN_GUID(MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_FLAGS, 0xba491366, 0xbe50, 0x451e, 0x95, 0xab, 0x6d, 0x4a, 0xcc, 0xc7, 0xda, 0xd8);
EXTERN_GUID(MF_VIDEO_PROCESSOR_ALGORITHM, 0x4a0a1e1f, 0x272c, 0x4fb6, 0x9e, 0xb1, 0xdb, 0x33, 0x0c, 0xbc, 0x97, 0xca);
EXTERN_GUID(MF_XVP_DISABLE_FRC, 0x2c0afa19, 0x7a97, 0x4d5a, 0x9e, 0xe8, 0x16, 0xd4, 0xfc, 0x51, 0x8d, 0x8c);
EXTERN_GUID(MF_XVP_CALLER_ALLOCATES_OUTPUT, 0x4a2cabc, 0x0cab, 0x40b1, 0xa1, 0xb9, 0x75, 0xbc, 0x36, 0x58, 0xf0, 0x00);
EXTERN_GUID(MF_XVP_SAMPLE_LOCK_TIMEOUT, 0xaa4ddb29, 0x5134, 0x4363, 0xac, 0x72, 0x83, 0xec, 0x4b, 0xc1, 0x04, 0x26);
EXTERN_GUID(CLSID_MSAACDecMFT, 0x32d186a7, 0x218f, 0x4c75, 0x88, 0x76, 0xdd, 0x77, 0x27, 0x3a, 0x89, 0x99);
EXTERN_GUID(CLSID_MSDDPlusDecMFT, 0x177c0afe, 0x900b, 0x48d4, 0x9e, 0x4c, 0x57, 0xad, 0xd2, 0x50, 0xb3, 0xd4);
EXTERN_GUID(CLSID_MSMPEGAudDecMFT, 0x70707b39, 0xb2ca, 0x4015, 0xab, 0xea, 0xf8, 0x44, 0x7d, 0x22, 0xd8, 0x8b);
EXTERN_GUID(CLSID_MSMPEGDecoderMFT, 0x2d709e52, 0x123f, 0x49b5, 0x9c, 0xbc, 0x9a, 0xf5, 0xcd, 0xe2, 0x8f, 0xb9);
EXTERN_GUID(CLSID_MSH264DecoderMFT, 0x62ce7e72, 0x4c71, 0x4d20, 0xb1, 0x5d, 0x45, 0x28, 0x31, 0xa8, 0x7d, 0x9d);
EXTERN_GUID(CLSID_MSH264EncoderMFT, 0x6ca50344, 0x051a, 0x4ded, 0x97, 0x79, 0xa4, 0x33, 0x05, 0x16, 0x5e, 0x35);
EXTERN_GUID(CLSID_MSH265DecoderMFT, 0x420a51a3, 0xd605, 0x430c, 0xb4, 0xfc, 0x45, 0x27, 0x4f, 0xa6, 0xc5, 0x62);
EXTERN_GUID(CLSID_MSVPxDecoder, 0xe3aaf548, 0xc9a4, 0x4c6e, 0x23, 0x4d, 0x5a, 0xda, 0x37, 0x4b, 0x00, 0x00);
EXTERN_GUID(CLSID_VideoProcessorMFT, 0x88753b26, 0x5b24, 0x49bd, 0xb2, 0xe7, 0xc, 0x44, 0x5c, 0x78, 0xc9, 0x82);
EXTERN_GUID(CLSID_WMVDecoderMFT, 0x82d353df, 0x90bd, 0x4382, 0x8b, 0xc2, 0x3f, 0x61, 0x92, 0xb7, 0x6e, 0x34);
EXTERN_GUID(CLSID_AudioResamplerMediaObject, 0xf447b69e, 0x1884, 0x4a7e, 0x80, 0x55, 0x34, 0x6f, 0x74, 0xd6, 0xed, 0xb3);
EXTERN_GUID(CLSID_MP3DecMediaObject, 0xbbeea841, 0x0a63, 0x4f52, 0xa7, 0xab, 0xa9, 0xb3, 0xa8, 0x4e, 0xd3, 0x8a);
EXTERN_GUID(CLSID_WMADecMediaObject, 0x2eeb4adf, 0x4578, 0x4d10, 0xbc, 0xa7, 0xbb, 0x95, 0x5f, 0x56, 0x32, 0x0a);
EXTERN_GUID(CLSID_HttpSchemePlugin, 0x44cb442b, 0x9da9, 0x49df, 0xb3, 0xfd, 0x02, 0x37, 0x77, 0xb1, 0x6e, 0x50);
EXTERN_GUID(CLSID_NetSchemePlugin, 0xe9f4ebab, 0xd97b, 0x463e, 0xa2, 0xb1, 0xc5, 0x4e, 0xe3, 0xf9, 0x41, 0x4d);
EXTERN_GUID(CLSID_UrlmonSchemePlugin, 0x9ec4b4f9, 0x3029, 0x45ad, 0x94, 0x7b, 0x34, 0x4d, 0xe2, 0xa2, 0x49, 0xe2);
EXTERN_GUID(MF_TRANSCODE_ADJUST_PROFILE, 0x9c37c21b, 0x060f, 0x487c, 0xa6, 0x90, 0x80, 0xd7, 0xf5, 0x0d, 0x1c, 0x72);
EXTERN_GUID(MF_TRANSCODE_CONTAINERTYPE, 0x150ff23f, 0x4abc, 0x478b, 0xac, 0x4f, 0xe1, 0x91, 0x6f, 0xba, 0x1c, 0xca);
EXTERN_GUID(MF_TRANSCODE_DONOT_INSERT_ENCODER, 0xf45aa7ce, 0xab24, 0x4012, 0xa1, 0x1b, 0xdc, 0x82, 0x20, 0x20, 0x14, 0x10);
EXTERN_GUID(MF_TRANSCODE_ENCODINGPROFILE, 0x6947787c, 0xf508, 0x4ea9, 0xb1, 0xe9, 0xa1, 0xfe, 0x3a, 0x49, 0xfb, 0xc9);
EXTERN_GUID(MF_TRANSCODE_SKIP_METADATA_TRANSFER, 0x4e4469ef, 0xb571, 0x4959, 0x8f, 0x83, 0x3d, 0xcf, 0xba, 0x33, 0xa3, 0x93);
EXTERN_GUID(MF_TRANSCODE_TOPOLOGYMODE, 0x3e3df610, 0x394a, 0x40b2, 0x9d, 0xea, 0x3b, 0xab, 0x65, 0x0b, 0xeb, 0xf2);
EXTERN_GUID(MF_TRANSCODE_QUALITYVSSPEED, 0x98332df8, 0x03cd, 0x476b, 0x89, 0xfa, 0x3f, 0x9e, 0x44, 0x2d, 0xec, 0x9f);
EXTERN_GUID(MFTranscodeContainerType_3GP, 0x34c50167, 0x4472, 0x4f34, 0x9e, 0xa0, 0xc4, 0x9f, 0xba, 0xcf, 0x03, 0x7d);
EXTERN_GUID(MFTranscodeContainerType_AC3, 0x6d8d91c3, 0x8c91, 0x4ed1, 0x87, 0x42, 0x8c, 0x34, 0x7d, 0x5b, 0x44, 0xd0);
EXTERN_GUID(MFTranscodeContainerType_ADTS, 0x132fd27d, 0x0f02, 0x43de, 0xa3, 0x01, 0x38, 0xfb, 0xbb, 0xb3, 0x83, 0x4e);
EXTERN_GUID(MFTranscodeContainerType_AMR, 0x25d5ad3, 0x621a, 0x475b, 0x96, 0x4d, 0x66, 0xb1, 0xc8, 0x24, 0xf0, 0x79);
EXTERN_GUID(MFTranscodeContainerType_ASF, 0x430f6f6e, 0xb6bf, 0x4fc1, 0xa0, 0xbd, 0x9e, 0xe4, 0x6e, 0xee, 0x2a, 0xfb);
EXTERN_GUID(MFTranscodeContainerType_AVI, 0x7edfe8af, 0x402f, 0x4d76, 0xa3, 0x3c, 0x61, 0x9f, 0xd1, 0x57, 0xd0, 0xf1);
EXTERN_GUID(MFTranscodeContainerType_FLAC, 0x31344aa3, 0x05a9, 0x42b5, 0x90, 0x1b, 0x8e, 0x9d, 0x42, 0x57, 0xf7, 0x5e);
EXTERN_GUID(MFTranscodeContainerType_FMPEG4, 0x9ba876f1, 0x419f, 0x4b77, 0xa1, 0xe0, 0x35, 0x95, 0x9d, 0x9d, 0x40, 0x04);
EXTERN_GUID(MFTranscodeContainerType_MP3, 0xe438b912, 0x83f1, 0x4de6, 0x9e, 0x3a, 0x9f, 0xfb, 0xc6, 0xdd, 0x24, 0xd1);
EXTERN_GUID(MFTranscodeContainerType_MPEG2, 0xbfc2dbf9, 0x7bb4, 0x4f8f, 0xaf, 0xde, 0xe1, 0x12, 0xc4, 0x4b, 0xa8, 0x82);
EXTERN_GUID(MFTranscodeContainerType_MPEG4, 0xdc6cd05d, 0xb9d0, 0x40ef, 0xbd, 0x35, 0xfa, 0x62, 0x2c, 0x1a, 0xb2, 0x8a);
EXTERN_GUID(MFTranscodeContainerType_WAVE, 0x64c3453c, 0x0f26, 0x4741, 0xbe, 0x63, 0x87, 0xbd, 0xf8, 0xbb, 0x93, 0x5b);
/* 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__ */
