/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */

import "mfobjects.idl";

cpp_quote("#include <mftransform.h>") // FIXME: import "mftransform.idl";

cpp_quote("#include <windef.h>")

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 unsigned __int64 TOPOID;

typedef enum MF_TOPOLOGY_TYPE {
    MF_TOPOLOGY_OUTPUT_NODE,
    MF_TOPOLOGY_SOURCESTREAM_NODE,
    MF_TOPOLOGY_TRANSFORM_NODE,
    MF_TOPOLOGY_TEE_NODE,
    MF_TOPOLOGY_MAX = 0xffffffff
} MF_TOPOLOGY_TYPE;

[
    object,
    uuid(83cf873a-f6da-4bc8-823f-bacfd55dc430),
]
interface IMFTopologyNode : IMFAttributes
{
    HRESULT SetObject([in] IUnknown *pObject);
    HRESULT GetObject([out] IUnknown **ppObject);
    HRESULT GetNodeType([out] MF_TOPOLOGY_TYPE *pType);
    HRESULT GetTopoNodeID([out] TOPOID *pID);
    HRESULT SetTopoNodeID([in] TOPOID ullTopoID);
    HRESULT GetInputCount([out] DWORD *pcInputs);
    HRESULT GetOutputCount([out] DWORD *pcOutputs);

    [local]
    HRESULT ConnectOutput([in] DWORD dwOutputIndex, [in] IMFTopologyNode* pDownstreamNode,
            [in] DWORD dwInputIndexOnDownstreamNode);
    [local] HRESULT DisconnectOutput([in] DWORD dwOutputIndex);
    HRESULT GetInput([in] DWORD dwInputIndex, [out] IMFTopologyNode** ppUpstreamNode,
            [out] DWORD *pdwOutputIndexOnUpstreamNode);
    HRESULT GetOutput([in] DWORD dwOutputIndex, [out] IMFTopologyNode** ppDownstreamNode,
            [out] DWORD* pdwInputIndexOnDownstreamNode);
    [local] HRESULT SetOutputPrefType([in] DWORD dwOutputIndex, [in] IMFMediaType *pType);

    [local] HRESULT GetOutputPrefType([in] DWORD dwOutputIndex, [out] IMFMediaType **ppType);
    [call_as(GetOutputPrefType)] HRESULT RemoteGetOutputPrefType([in] DWORD dwOutputIndex,
                                         [out] DWORD *pcbData, [out, size_is(,*pcbData)] BYTE **ppbData);

    [local] HRESULT SetInputPrefType([in] DWORD dwInputIndex, [in] IMFMediaType *pType);

    [local] HRESULT GetInputPrefType([in] DWORD dwInputIndex, [out] IMFMediaType **ppType);
    [call_as(GetInputPrefType)] HRESULT RemoteGetInputPrefType( [in] DWORD dwInputIndex,
                                        [out] DWORD *pcbData, [out, size_is(,*pcbData)] BYTE **ppbData);

    HRESULT CloneFrom([in] IMFTopologyNode *pNode);
}

[
    object,
    uuid(83cf873a-f6da-4bc8-823f-bacfd55dc433),
]
interface IMFTopology : IMFAttributes
{
    HRESULT GetTopologyID([out] TOPOID *pID);
    [local] HRESULT AddNode([in] IMFTopologyNode *pNode);
    [local] HRESULT RemoveNode([in] IMFTopologyNode *pNode);
    HRESULT GetNodeCount([out] WORD *pwNodes);
    HRESULT GetNode([in] WORD wIndex, [out] IMFTopologyNode **ppNode);
    [local] HRESULT Clear();
    HRESULT CloneFrom([in] IMFTopology *pTopology);
    HRESULT GetNodeByID([in] TOPOID qwTopoNodeID, [out] IMFTopologyNode **ppNode);
    HRESULT GetSourceNodeCollection([out] IMFCollection **ppCollection);
    HRESULT GetOutputNodeCollection([out] IMFCollection **ppCollection);
}

[
    object,
    uuid(fa993888-4383-415a-a930-dd472a8cf6f7)
]
interface IMFGetService : IUnknown
{
    HRESULT GetService([in] REFGUID guidService, [in] REFIID riid, [out, iid_is(riid)] LPVOID *ppvObject);
}

typedef LONGLONG MFTIME;

typedef enum _MF_CLOCK_STATE {
    MFCLOCK_STATE_INVALID,
    MFCLOCK_STATE_RUNNING,
    MFCLOCK_STATE_STOPPED,
    MFCLOCK_STATE_PAUSED
} MF_CLOCK_STATE, MFCLOCK_STATE;

typedef struct _MFCLOCK_PROPERTIES {
    unsigned __int64 qwCorrelationRate;
    GUID             guidClockId;
    DWORD            dwClockFlags;
    unsigned __int64 qwClockFrequency;
    DWORD            dwClockTolerance;
    DWORD            dwClockJitter;
} MFCLOCK_PROPERTIES;

[
    object,
    uuid(2eb1e945-18b8-4139-9b1a-d5d584818530),
]
interface IMFClock : IUnknown
{
    HRESULT GetClockCharacteristics([out] DWORD *pdwCharacteristics);
    HRESULT GetCorrelatedTime([in] DWORD dwReserved, [out] LONGLONG *pllClockTime, [out] MFTIME *phnsSystemTime);
    HRESULT GetContinuityKey([out] DWORD *pdwContinuityKey);
    HRESULT GetState([in] DWORD dwReserved, [out] MFCLOCK_STATE *peClockState);
    HRESULT GetProperties([out] MFCLOCK_PROPERTIES *pClockProperties);
}

cpp_quote("#define SHA_HASH_LEN 20")
cpp_quote("#define STR_HASH_LEN (SHA_HASH_LEN*2+3)")

cpp_quote("typedef struct _MFRR_COMPONENT_HASH_INFO {")
cpp_quote("  DWORD ulReason;")
cpp_quote("  WCHAR rgHeaderHash[STR_HASH_LEN];")
cpp_quote("  WCHAR rgPublicKeyHash[STR_HASH_LEN];")
cpp_quote("  WCHAR wszName[MAX_PATH];")
cpp_quote("} MFRR_COMPONENT_HASH_INFO, *PMFRR_COMPONENT_HASH_INFO;")

cpp_quote("EXTERN_GUID(MF_PD_DURATION, 0x6c990d33,0xbb8e,0x477a,0x85,0x98,0xd,0x5d,0x96,0xfc,0xd8,0x8a);")

typedef enum _MF_CONNECT_METHOD {
    MF_CONNECT_DIRECT                            = 0x00000000,
    MF_CONNECT_ALLOW_CONVERTER                   = 0x00000001,
    MF_CONNECT_ALLOW_DECODER                     = 0x00000003,
    MF_CONNECT_RESOLVE_INDEPENDENT_OUTPUTTYPES   = 0x00000004,
    MF_CONNECT_AS_OPTIONAL                       = 0x00010000,
    MF_CONNECT_AS_OPTIONAL_BRANCH                = 0x00020000
} MF_CONNECT_METHOD;

[
    object,
    uuid(90377834-21d0-4dee-8214-ba2e3e6c1127),
]
interface IMFMediaSession : IMFMediaEventGenerator
{
    HRESULT SetTopology([in] DWORD dwSetTopologyFlags, [in] IMFTopology *pTopology);
    HRESULT ClearTopologies();
    HRESULT Start([in, unique] const GUID *pguidTimeFormat, [in, unique] const PROPVARIANT *pvarStartPosition);
    HRESULT Pause();
    HRESULT Stop();
    HRESULT Close();
    HRESULT Shutdown();
    HRESULT GetClock([out] IMFClock **ppClock);
    HRESULT GetSessionCapabilities([out] DWORD *pdwCaps);
    HRESULT GetFullTopology([in] DWORD dwGetFullTopologyFlags, [in] TOPOID TopoId, [out] IMFTopology **ppFullTopology);
}

[
    object,
    uuid(e93dcf6c-4b07-4e1e-8123-aa16ed6eadf5),
]
interface IMFMediaTypeHandler : IUnknown
{
    [local] HRESULT IsMediaTypeSupported([in] IMFMediaType *pMediaType, [out] IMFMediaType **ppMediaType);
    [local] HRESULT GetMediaTypeCount([out] DWORD *pdwTypeCount);
    [local] HRESULT GetMediaTypeByIndex([in] DWORD dwIndex, [out] IMFMediaType **ppType);
    [local] HRESULT SetCurrentMediaType([in] IMFMediaType *pMediaType);

    [local]
    HRESULT GetCurrentMediaType([out] IMFMediaType **ppMediaType);
    [call_as(GetCurrentMediaType)]
    HRESULT RemoteGetCurrentMediaType([out, size_is(,*pcbData)] BYTE **ppbData, [out] DWORD *pcbData);

    HRESULT GetMajorType([out] GUID *pguidMajorType);
}

[
    object,
    uuid(56c03d9c-9dbb-45f5-ab4b-d80f47c05938),
]
interface IMFStreamDescriptor : IMFAttributes
{
    HRESULT GetStreamIdentifier([out] DWORD *pdwStreamIdentifier);
    HRESULT GetMediaTypeHandler([out] IMFMediaTypeHandler **ppMediaTypeHandler);
}

[
    object,
    uuid(03cb2711-24d7-4db6-a17f-f3a7a479a536),
]
interface IMFPresentationDescriptor : IMFAttributes
{
    HRESULT GetStreamDescriptorCount([out] DWORD *pdwDescriptorCount);
    HRESULT GetStreamDescriptorByIndex([in] DWORD dwIndex, [out] BOOL *pfSelected, [out] IMFStreamDescriptor **ppDescriptor);
    HRESULT SelectStream([in] DWORD dwDescriptorIndex);
    HRESULT DeselectStream([in] DWORD dwDescriptorIndex);
    HRESULT Clone([out] IMFPresentationDescriptor **ppPresentationDescriptor);
}

[
    object,
    uuid(279a808d-aec7-40c8-9c6b-a6b492c78a66),
]
interface IMFMediaSource : IMFMediaEventGenerator
{
    HRESULT GetCharacteristics([out] DWORD *pdwCharacteristics);

    [local]
    HRESULT CreatePresentationDescriptor([out] IMFPresentationDescriptor **ppPresentationDescriptor);
    [call_as(CreatePresentationDescriptor)]
    HRESULT RemoteCreatePresentationDescriptor(
            [out] DWORD *pcbPD,
            [out, size_is(,*pcbPD)] BYTE **pbPD,
            [out] IMFPresentationDescriptor **ppRemotePD);

    HRESULT Start(
            [in] IMFPresentationDescriptor *pPresentationDescriptor,
            [in, unique] const GUID *pguidTimeFormat,
            [in, unique] const PROPVARIANT *pvarStartPosition);

    HRESULT Stop();
    HRESULT Pause();
    HRESULT Shutdown();
}

cpp_quote("#if (WINVER >= _WIN32_WINNT_WIN8)")
[object, uuid(3c9b2eb9-86d5-4514-a394-f56664f9f0d8)]
interface IMFMediaSourceEx : IMFMediaSource
{
  HRESULT GetSourceAttributes([out] IMFAttributes **ppAttributes);
  HRESULT GetStreamAttributes([in] DWORD dwStreamIdentifier, [out] IMFAttributes **ppAttributes);
  HRESULT SetD3DManager([in] IUnknown *pManager);
}
cpp_quote("EXTERN_GUID(MF_SOURCE_STREAM_SUPPORTS_HW_CONNECTION, 0xa38253aa, 0x6314, 0x42fd, 0xa3, 0xce, 0xbb, 0x27, 0xb6, 0x85, 0x99, 0x46);")

cpp_quote("#endif /* (WINVER >= _WIN32_WINNT_WIN8) */")

typedef [public] struct _MF_LEAKY_BUCKET_PAIR {
    DWORD dwBitrate;
    DWORD msBufferWindow;
} MF_LEAKY_BUCKET_PAIR;

typedef [public] 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;

[
    object,
    uuid(6d66d782-1d4f-4db7-8c63-cb8c77f1ef5e),
    local
]
interface IMFByteStreamBuffering : IUnknown
{
    HRESULT SetBufferingParams([in] MFBYTESTREAM_BUFFERING_PARAMS *pParams);
    HRESULT EnableBuffering([in] BOOL fEnable);
    HRESULT StopBuffering();
}

[
    object,
    uuid(F6696E82-74F7-4f3d-A178-8A5E09C3659F),
]
interface IMFClockStateSink : IUnknown
{
    HRESULT OnClockStart([in] MFTIME hnsSystemTime,[in] LONGLONG llClockStartOffset);
    HRESULT OnClockStop([in] MFTIME hnsSystemTime);
    HRESULT OnClockPause([in] MFTIME hnsSystemTime);
    HRESULT OnClockRestart([in] MFTIME hnsSystemTime);
    HRESULT OnClockSetRate([in] MFTIME hnsSystemTime, [in] float flRate);
}

cpp_quote("HRESULT WINAPI MFRequireProtectedEnvironment(IMFPresentationDescriptor *pPresentationDescriptor);")
cpp_quote("HRESULT WINAPI MFSerializePresentationDescriptor(IMFPresentationDescriptor *pPD,DWORD *pcbData,BYTE **ppbData);")

typedef DWORD MFSequencerElementId;

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;

cpp_quote("#if (WINVER >= 0x0601)")

typedef enum _MF_QUALITY_ADVISE_FLAGS
{
    MF_QUALITY_CANNOT_KEEP_UP = 0x1
} MF_QUALITY_ADVISE_FLAGS;

cpp_quote("#endif /*(WINVER >= 0x0601)*/")

typedef enum _MF_QUALITY_DROP_MODE
{
    MF_DROP_MODE_NONE = 0x0,
    MF_DROP_MODE_1    = 0x1,
    MF_DROP_MODE_2    = 0x2,
    MF_DROP_MODE_3    = 0x3,
    MF_DROP_MODE_4    = 0x4,
    MF_DROP_MODE_5    = 0x5,
    MF_NUM_DROP_MODES = 0x6
} MF_QUALITY_DROP_MODE;

typedef enum _MF_QUALITY_LEVEL
{
    MF_QUALITY_NORMAL         = 0x0,
    MF_QUALITY_NORMAL_MINUS_1 = 0x1,
    MF_QUALITY_NORMAL_MINUS_2 = 0x2,
    MF_QUALITY_NORMAL_MINUS_3 = 0x3,
    MF_QUALITY_NORMAL_MINUS_4 = 0x4,
    MF_QUALITY_NORMAL_MINUS_5 = 0x5,
    MF_NUM_QUALITY_LEVELS     = 0x6
} MF_QUALITY_LEVEL;

typedef enum _MF_TOPOLOGY_RESOLUTION_STATUS_FLAGS
{
    MF_TOPOLOGY_RESOLUTION_SUCCEEDED            = 0x00000000,
    MF_OPTIONAL_NODE_REJECTED_MEDIA_TYPE        = 0x00000001,
    MF_OPTIONAL_NODE_REJECTED_PROTECTED_PROCESS = 0x00000002
} MF_TOPOLOGY_RESOLUTION_STATUS_FLAGS;

typedef enum _MF_TOPONODE_DRAIN_MODE
{
    MF_TOPONODE_DRAIN_DEFAULT,
    MF_TOPONODE_DRAIN_ALWAYS,
    MF_TOPONODE_DRAIN_NEVER
} MF_TOPONODE_DRAIN_MODE;

typedef enum _MF_TOPONODE_FLUSH_MODE
{
    MF_TOPONODE_FLUSH_ALWAYS,
    MF_TOPONODE_FLUSH_SEEK,
    MF_TOPONODE_FLUSH_NEVER
} MF_TOPONODE_FLUSH_MODE;

cpp_quote("#if (WINVER >= 0x0601)")

typedef enum _MF_TRANSCODE_TOPOLOGY_MODE_FLAGS
{
  MF_TRANSCODE_TOPOLOGYMODE_SOFTWARE_ONLY    = 0,
  MF_TRANSCODE_TOPOLOGYMODE_HARDWARE_ALLOWED = 1
} MF_TRANSCODE_TOPOLOGYMODE_FLAGS;

cpp_quote("#endif")

cpp_quote("EXTERN_GUID(MF_TRANSCODE_CONTAINERTYPE, 0x150ff23f, 0x4abc, 0x478b, 0xac, 0x4f, 0xe1, 0x91, 0x6f, 0xba, 0x1c, 0xca);")
cpp_quote("EXTERN_GUID(MFTranscodeContainerType_ASF, 0x430f6f6e, 0xb6bf, 0x4fc1, 0xa0, 0xbd, 0x9e, 0xe4, 0x6e, 0xee, 0x2a, 0xfb);")
cpp_quote("EXTERN_GUID(MFTranscodeContainerType_MPEG4, 0xdc6cd05d, 0xb9d0, 0x40ef, 0xbd, 0x35, 0xfa, 0x62, 0x2c, 0x1a, 0xb2, 0x8a);")
cpp_quote("EXTERN_GUID(MFTranscodeContainerType_MP3, 0xe438b912, 0x83f1, 0x4de6, 0x9e, 0x3a, 0x9f, 0xfb, 0xc6, 0xdd, 0x24, 0xd1);")
cpp_quote("EXTERN_GUID(MFTranscodeContainerType_FLAC, 0x31344aa3, 0x05a9, 0x42b5, 0x90, 0x1b, 0x8e, 0x9d, 0x42, 0x57, 0xf7, 0x5e);")
cpp_quote("EXTERN_GUID(MFTranscodeContainerType_3GP, 0x34c50167, 0x4472, 0x4f34, 0x9e, 0xa0, 0xc4, 0x9f, 0xba, 0xcf, 0x03, 0x7d);")
cpp_quote("EXTERN_GUID(MFTranscodeContainerType_AC3, 0x6d8d91c3, 0x8c91, 0x4ed1, 0x87, 0x42, 0x8c, 0x34, 0x7d, 0x5b, 0x44, 0xd0);")
cpp_quote("EXTERN_GUID(MFTranscodeContainerType_ADTS, 0x132fd27d, 0x0f02, 0x43de, 0xa3, 0x01, 0x38, 0xfb, 0xbb, 0xb3, 0x83, 0x4e);")
cpp_quote("EXTERN_GUID(MFTranscodeContainerType_MPEG2, 0xbfc2dbf9, 0x7bb4, 0x4f8f, 0xaf, 0xde, 0xe1, 0x12, 0xc4, 0x4b, 0xa8, 0x82);")
cpp_quote("EXTERN_GUID(MFTranscodeContainerType_WAVE, 0x64c3453c, 0x0f26, 0x4741, 0xbe, 0x63, 0x87, 0xbd, 0xf8, 0xbb, 0x93, 0x5b);")
cpp_quote("EXTERN_GUID(MFTranscodeContainerType_AVI, 0x7edfe8af, 0x402f, 0x4d76, 0xa3, 0x3c, 0x61, 0x9f, 0xd1, 0x57, 0xd0, 0xf1);")
cpp_quote("#if (WINVER >= _WIN32_WINNT_WIN8)")
cpp_quote("EXTERN_GUID(MFTranscodeContainerType_FMPEG4, 0x9ba876f1, 0x419f, 0x4b77, 0xa1, 0xe0, 0x35, 0x95, 0x9d, 0x9d, 0x40, 0x4);")
cpp_quote("#endif /* (WINVER >= _WIN32_WINNT_WIN8) */")
cpp_quote("EXTERN_GUID(MFTranscodeContainerType_AMR, 0x25d5ad3, 0x621a, 0x475b, 0x96, 0x4d, 0x66, 0xb1, 0xc8, 0x24, 0xf0, 0x79);")

typedef enum
{
    MF_LICENSE_URL_UNTRUSTED,
    MF_LICENSE_URL_TRUSTED,
    MF_LICENSE_URL_TAMPERED
} MF_URL_TRUST_STATUS;

typedef enum _MFCLOCK_RELATIONAL_FLAGS
{
    MFCLOCK_RELATIONAL_FLAG_JITTER_NEVER_AHEAD = 0x1
} MFCLOCK_RELATIONAL_FLAGS;

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_CHARACTERISTICS;

typedef enum _MFNET_PROXYSETTINGS
{
    MFNET_PROXYSETTING_NONE    = 0,
    MFNET_PROXYSETTING_MANUAL  = 1,
    MFNET_PROXYSETTING_AUTO    = 2,
    MFNET_PROXYSETTING_BROWSER = 3
} MFNET_PROXYSETTINGS;

typedef enum _MFNetAuthenticationFlags
{
    MFNET_AUTHENTICATION_PROXY          = 0x00000001,
    MFNET_AUTHENTICATION_CLEAR_TEXT     = 0x00000002,
    MFNET_AUTHENTICATION_LOGGED_ON_USER = 0x00000004
} MFNetAuthenticationFlags;

typedef enum _MFNetCredentialOptions
{
    MFNET_CREDENTIAL_SAVE             = 0x00000001,
    MFNET_CREDENTIAL_DONT_CACHE       = 0x00000002,
    MFNET_CREDENTIAL_ALLOW_CLEAR_TEXT = 0x00000004
} MFNetCredentialOptions;

typedef enum _MFNetCredentialRequirements {
    REQUIRE_PROMPT        = 0x00000001,
    REQUIRE_SAVE_SELECTED = 0x00000002
} MFNetCredentialRequirements;

typedef enum _MFNETSOURCE_CACHE_STATE
{
    MFNETSOURCE_CACHE_UNAVAILABLE,
    MFNETSOURCE_CACHE_ACTIVE_WRITING,
    MFNETSOURCE_CACHE_ACTIVE_COMPLETE
} MFNETSOURCE_CACHE_STATE;

typedef enum _MFNETSOURCE_PROTOCOL_TYPE
{
    MFNETSOURCE_UNDEFINED = 0x0,
    MFNETSOURCE_HTTP      = 0x1,
    MFNETSOURCE_RTSP      = 0x2,
    MFNETSOURCE_FILE      = 0x3,
    MFNETSOURCE_MULTICAST = 0x4
} MFNETSOURCE_PROTOCOL_TYPE;

typedef enum _MFNETSOURCE_STATISTICS_IDS
{
    MFNETSOURCE_RECVPACKETS_ID = 0,
    MFNETSOURCE_LOSTPACKETS_ID,
    MFNETSOURCE_RESENDSREQUESTED_ID,
    MFNETSOURCE_RESENDSRECEIVED_ID,
    MFNETSOURCE_RECOVEREDBYECCPACKETS_ID,
    MFNETSOURCE_RECOVEREDBYRTXPACKETS_ID,
    MFNETSOURCE_OUTPACKETS_ID,
    MFNETSOURCE_RECVRATE_ID,
    MFNETSOURCE_AVGBANDWIDTHBPS_ID,
    MFNETSOURCE_BYTESRECEIVED_ID,
    MFNETSOURCE_PROTOCOL_ID,
    MFNETSOURCE_TRANSPORT_ID,
    MFNETSOURCE_CACHE_STATE_ID,
    MFNETSOURCE_LINKBANDWIDTH_ID,
    MFNETSOURCE_CONTENTBITRATE_ID,
    MFNETSOURCE_SPEEDFACTOR_ID,
    MFNETSOURCE_BUFFERSIZE_ID,
    MFNETSOURCE_BUFFERPROGRESS_ID,
    MFNETSOURCE_LASTBWSWITCHTS_ID,
    MFNETSOURCE_SEEKRANGESTART_ID,
    MFNETSOURCE_SEEKRANGEEND_ID,
    MFNETSOURCE_BUFFERINGCOUNT_ID,
    MFNETSOURCE_INCORRECTLYSIGNEDPACKETS_ID,
    MFNETSOURCE_SIGNEDSESSION_ID,
    MFNETSOURCE_MAXBITRATE_ID,
    MFNETSOURCE_RECEPTION_QUALITY_ID,
    MFNETSOURCE_RECOVEREDPACKETS_ID,
    MFNETSOURCE_VBR_ID,
    MFNETSOURCE_DOWNLOADPROGRESS_ID
} MFNETSOURCE_STATISTICS_IDS;

typedef enum _MFNETSOURCE_TRANSPORT_TYPE
{
    MFNETSOURCE_UDP,
    MFNETSOURCE_TCP
} MFNETSOURCE_TRANSPORT_TYPE;

typedef enum MF_OBJECT_TYPE
{
    MF_OBJECT_MEDIASOURCE,
    MF_OBJECT_BYTESTREAM,
    MF_OBJECT_INVALID
} MF_OBJECT_TYPE;

typedef enum _MFPOLICYMANAGER_ACTION
{
    PEACTION_NO        = 0,
    PEACTION_PLAY      = 1,
    PEACTION_COPY      = 2,
    PEACTION_EXPORT    = 3,
    PEACTION_EXTRACT   = 4,
    PEACTION_RESERVED1 = 5,
    PEACTION_RESERVED2 = 6,
    PEACTION_RESERVED3 = 7,
    PEACTION_LAST      = 7
} MFPOLICYMANAGER_ACTION;

typedef enum _MFRATE_DIRECTION
{
    MFRATE_FORWARD,
    MFRATE_REVERSE
} MFRATE_DIRECTION;

typedef enum _MFSequencerTopologyFlags
{
    SequencerTopologyFlags_Last = 0x00000001
} MFSequencerTopologyFlags;

typedef enum _MFSHUTDOWN_STATUS
{
    MFSHUTDOWN_INITIATED,
    MFSHUTDOWN_COMPLETED
} MFSHUTDOWN_STATUS;

typedef enum MFSTREAMSINK_MARKER_TYPE
{
    MFSTREAMSINK_MARKER_DEFAULT,
    MFSTREAMSINK_MARKER_ENDOFSEGMENT,
    MFSTREAMSINK_MARKER_TICK,
    MFSTREAMSINK_MARKER_EVENT
} MFSTREAMSINK_MARKER_TYPE;

typedef enum MFTIMER_FLAGS
{
    MFTIMER_RELATIVE = 0x00000001
} MFTIMER_FLAGS;

cpp_quote("#if (WINVER >= 0x0601)")

typedef enum MFTOPOLOGY_DXVA_MODE
{
    MFTOPOLOGY_DXVA_DEFAULT = 0,
    MFTOPOLOGY_DXVA_NONE    = 1,
    MFTOPOLOGY_DXVA_FULL    = 2
} MFTOPOLOGY_DXVA_MODE;

typedef enum MFTOPOLOGY_HARDWARE_MODE
{
    MFTOPOLOGY_HWMODE_SOFTWARE_ONLY = 0,
    MFTOPOLOGY_HWMODE_USE_HARDWARE  = 1
} MFTOPOLOGY_HARDWARE_MODE;

typedef struct _MFT_REGISTRATION_INFO
{
    CLSID clsid;
    GUID guidCategory;
    UINT32 uiFlags;
    LPCWSTR pszName;
    DWORD cInTypes;
    [size_is(cInTypes)] MFT_REGISTER_TYPE_INFO *pInTypes;
    DWORD cOutTypes;
    [size_is(cOutTypes)] MFT_REGISTER_TYPE_INFO *pOutTypes;
} MFT_REGISTRATION_INFO;

cpp_quote("#endif /*(WINVER >= 0x0601)*/")

cpp_quote("typedef struct _ASFFlatPicture {")
cpp_quote("  BYTE  bPictureType;")
cpp_quote("  DWORD dwDataLen;")
cpp_quote("} ASF_FLAT_PICTURE;")
cpp_quote("")
cpp_quote("typedef struct _ASFFlatSynchronisedLyrics {")
cpp_quote("  BYTE  bTimeStampFormat;")
cpp_quote("  BYTE  bContentType;")
cpp_quote("  DWORD dwLyricsLen;")
cpp_quote("} ASF_FLAT_SYNCHRONISED_LYRICS;")

typedef enum SAMPLE_PROTECTION_VERSION
{
    SAMPLE_PROTECTION_VERSION_NO         = 0,
    SAMPLE_PROTECTION_VERSION_BASIC_LOKI = 1,
    SAMPLE_PROTECTION_VERSION_SCATTER    = 2,
    SAMPLE_PROTECTION_VERSION_RC4        = 3
} SAMPLE_PROTECTION_VERSION;

typedef struct _MFINPUTTRUSTAUTHORITY_ACTION
{
    MFPOLICYMANAGER_ACTION Action;
    BYTE                   *pbTicket;
    DWORD                  cbTicket;
} MFINPUTTRUSTAUTHORITY_ACCESS_ACTION;

typedef struct _MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS
{
    DWORD                               dwSize;
    DWORD                               dwVer;
    DWORD                               cbSignatureOffset;
    DWORD                               cbSignatureSize;
    DWORD                               cbExtensionOffset;
    DWORD                               cbExtensionSize;
    DWORD                               cActions;
    MFINPUTTRUSTAUTHORITY_ACCESS_ACTION rgOutputActions[1];
} MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS;

typedef struct _MFNetCredentialManagerGetParam
{
    HRESULT hrOp;
    WINBOOL fAllowLoggedOnUser;
    WINBOOL fClearTextPackage;
    LPCWSTR pszUrl;
    LPCWSTR pszSite;
    LPCWSTR pszRealm;
    LPCWSTR pszPackage;
    LONG    nRetries;
} MFNetCredentialManagerGetParam;

cpp_quote("#define MEDIASINK_FIXED_STREAMS                 0x00000001")
cpp_quote("#define MEDIASINK_CANNOT_MATCH_CLOCK            0x00000002")
cpp_quote("#define MEDIASINK_RATELESS                      0x00000004")
cpp_quote("#define MEDIASINK_CLOCK_REQUIRED                0x00000008")
cpp_quote("#define MEDIASINK_CAN_PREROLL                   0x00000010")
cpp_quote("#define MEDIASINK_REQUIRE_REFERENCE_MEDIATYPE   0x00000020")

enum
{
    MF_RESOLUTION_MEDIASOURCE                                           = 0x00000001,
    MF_RESOLUTION_BYTESTREAM                                            = 0x00000002,
    MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE = 0x00000010,
    MF_RESOLUTION_KEEP_BYTE_STREAM_ALIVE_ON_FAIL                        = 0x00000020,
    MF_RESOLUTION_READ                                                  = 0x00010000,
    MF_RESOLUTION_WRITE                                                 = 0x00020000
};

/* Forward declaration goes here.
 * Just for ease, declare interfaces alphabatically.
 */
interface IMFASFContentInfo;
interface IMFASFIndexer;
interface IMFASFMultiplexer;
interface IMFASFProfile;
interface IMFASFSplitter;
interface IMFPMPServer;
interface IMFPresentationClock;
interface IMFNetProxyLocator;
interface IMFRemoteDesktopPlugin;
interface IMFTransform;
interface IMFSequencerSource;
interface IMFStreamSink;
interface IMFQualityManager;
interface IMFTranscodeProfile;

[object, uuid(76b1bbdb-4ec8-4f36-b106-70a9316df593)]
interface IMFAudioStreamVolume : IUnknown
{
  HRESULT GetChannelCount([out] UINT32 *pdwCount);
  HRESULT SetChannelVolume([in] UINT32 dwIndex, [in] const float fLevel);
  HRESULT GetChannelVolume([in] UINT32 dwIndex, [out] float *pfLevel);
  HRESULT SetAllVolumes([in] UINT32 dwCount, [in, size_is(dwCount)] const float *pfVolumes);
  HRESULT GetAllVolumes([in] UINT32 dwCount, [out, size_is(dwCount)] float *pfVolumes);
}

[object, uuid(6ef2a660-47c0-4666-b13d-cbb717f2fa2c)]
interface IMFMediaSink : IUnknown
{
  HRESULT GetCharacteristics([out] DWORD *pdwCharacteristics);
  HRESULT AddStreamSink([in] DWORD dwStreamSinkIdentifier, [in] IMFMediaType *pMediaType, [out] IMFStreamSink **ppStreamSink);
  HRESULT RemoveStreamSink([in] DWORD dwStreamSinkIdentifier);
  HRESULT GetStreamSinkCount([out] DWORD *pcStreamSinkCount);
  HRESULT GetStreamSinkByIndex([in] DWORD dwIndex, [out] IMFStreamSink **ppStreamSink);
  HRESULT GetStreamSinkById([in] DWORD dwStreamSinkIdentifier, [out] IMFStreamSink **ppStreamSink);
  HRESULT SetPresentationClock([in] IMFPresentationClock *pPresentationClock);
  HRESULT GetPresentationClock([out] IMFPresentationClock **ppPresentationClock);
  HRESULT Shutdown(void);
}

[object, uuid(eaecb74a-9a50-42ce-9541-6a7f57aa4ad7), local]
interface IMFFinalizableMediaSink : IMFMediaSink
{
  HRESULT BeginFinalize([in] IMFAsyncCallback *pCallback, [in] IUnknown *punkState);
  HRESULT EndFinalize([in] IMFAsyncResult *pResult);
}

[object, uuid(5dfd4b2a-7674-4110-a4e6-8a68fd5f3688)]
interface IMFMediaSinkPreroll : IUnknown
{
  HRESULT NotifyPreroll([in] MFTIME hnsUpcomingStartTime);
}

[object, uuid(d182108f-4ec6-443f-aa42-a71106ec825f)]
interface IMFMediaStream : IMFMediaEventGenerator
{
  HRESULT GetMediaSource([out] IMFMediaSource**ppMediaSource);
  HRESULT GetStreamDescriptor([out] IMFStreamDescriptor **ppStreamDescriptor);

  [local]
  HRESULT RequestSample([in] IUnknown *pToken);

  [call_as(RequestSample)]
  HRESULT RemoteRequestSample(void);
}

[object, uuid(f88cfb8c-ef16-4991-b450-cb8c69e51704)]
interface IMFMetadata : IUnknown
{
  HRESULT SetLanguage([in] LPCWSTR pwszRFC1766);
  HRESULT GetLanguage([out] LPWSTR *ppwszRFC1766);
  HRESULT GetAllLanguages([out] PROPVARIANT *ppvLanguages);
  HRESULT SetProperty([in] LPCWSTR pwszName, [in] const PROPVARIANT *ppvValue);
  HRESULT GetProperty([in] LPCWSTR pwszName, [out] PROPVARIANT *ppvValue);
  HRESULT DeleteProperty([in] LPCWSTR pwszName);
  HRESULT GetAllPropertyNames([out] PROPVARIANT *ppvNames);
}

[object, uuid(56181d2d-e221-4adb-b1c8-3cee6a53f76f)]
interface IMFMetadataProvider : IUnknown
{
  HRESULT GetMFMetadata([in] IMFPresentationDescriptor *pPresentationDescriptor, [in] DWORD dwStreamIdentifier, [in] DWORD dwFlags, [out] IMFMetadata **ppMFMetadata);
}

[object, uuid(7ff12cce-f76f-41c2-863b-1666c8e5e139)]
interface IMFPresentationTimeSource : IMFClock
{
  HRESULT GetUnderlyingClock([out] IMFClock **ppClock);
}

[object, uuid(868ce85c-8ea9-4f55-ab82-b009a910a805)]
interface IMFPresentationClock : IMFClock
{
  HRESULT SetTimeSource([in] IMFPresentationTimeSource *pTimeSource);
  HRESULT GetTimeSource([out] IMFPresentationTimeSource **ppTimeSource);
  HRESULT GetTime([out] MFTIME *phnsClockTime);
  HRESULT AddClockStateSink([in] IMFClockStateSink *pStateSink);
  HRESULT RemoveClockStateSink([in] IMFClockStateSink* pStateSink);
  HRESULT Start([in] LONGLONG llClockStartOffset);
  HRESULT Stop(void);
  HRESULT Pause(void);
}

[object, uuid(88ddcd21-03c3-4275-91ed-55ee3929328f), pointer_default(unique)]
interface IMFRateControl : IUnknown
{
  HRESULT SetRate([in] WINBOOL fThin, [in] float flRate);
  HRESULT GetRate([in, out, unique] WINBOOL *pfThin, [in, out, unique] float *pflRate);
}

[object, uuid(0a9ccdbc-d797-4563-9667-94ec5d79292d), pointer_default(unique)]
interface IMFRateSupport : IUnknown
{
  HRESULT GetSlowestRate([in] MFRATE_DIRECTION eDirection, [in] WINBOOL fThin, [out] float *pflRate);
  HRESULT GetFastestRate([in] MFRATE_DIRECTION eDirection, [in] WINBOOL fThin, [out] float *pflRate);
  HRESULT IsRateSupported([in] WINBOOL fThin, [in] float flRate, [in, out, unique] float *pflNearestSupportedRate);
}

[object, uuid(8c7b80bf-ee42-4b59-b1df-55668e1bdca8), local]
interface IMFSampleGrabberSinkCallback : IMFClockStateSink
{
  HRESULT OnSetPresentationClock([in] IMFPresentationClock *pPresentationClock);
  HRESULT OnProcessSample([in] REFGUID guidMajorMediaType, [in] DWORD dwSampleFlags, [in] LONGLONG llSampleTime, [in] LONGLONG llSampleDuration, [in] const BYTE *pSampleBuffer, [in] DWORD dwSampleSize);
  HRESULT OnShutdown(void);
}

[object, uuid(97ec2ea4-0e42-4937-97ac-9d6d328824e1)]
interface IMFShutdown : IUnknown
{
  HRESULT Shutdown(void);
  HRESULT GetShutdownStatus([out] MFSHUTDOWN_STATUS *pStatus);
};

[object, uuid(089edf13-cf71-4338-8d13-9e569dbdc319)]
interface IMFSimpleAudioVolume : IUnknown
{
  HRESULT SetMasterVolume([in] float fLevel);
  HRESULT GetMasterVolume([out] float *pfLevel);
  HRESULT SetMute([in] const WINBOOL bMute);
  HRESULT GetMute([out] WINBOOL *pbMute);
}

[object, uuid(fbe5a32d-a497-4b61-bb85-97b1a848a6e3)]
interface IMFSourceResolver : IUnknown
{
  [local]
  HRESULT CreateObjectFromURL([in] LPCWSTR pwszURL, [in] DWORD dwFlags, [in] IPropertyStore *pProps, [out] MF_OBJECT_TYPE *pObjectType, [out] IUnknown **ppObject);

  [local]
  HRESULT CreateObjectFromByteStream([in] IMFByteStream* pByteStream, [in] LPCWSTR pwszURL, [in] DWORD dwFlags, [in] IPropertyStore *pProps, [out] MF_OBJECT_TYPE *pObjectType, [out] IUnknown **ppObject);

  [local]
  HRESULT BeginCreateObjectFromURL([in] LPCWSTR pwszURL, [in] DWORD dwFlags, [in] IPropertyStore *pProps, [out] IUnknown **ppIUnknownCancelCookie, [in] IMFAsyncCallback *pCallback, [in] IUnknown *punkState);

  [call_as(BeginCreateObjectFromURL)]
  HRESULT RemoteBeginCreateObjectFromURL([in, string] LPCWSTR pwszURL, [in] DWORD dwFlags, [in] IPropertyStore *pProps, [in] IMFRemoteAsyncCallback *pCallback);

  [local]
  HRESULT EndCreateObjectFromURL([in] IMFAsyncResult *pResult, [out] MF_OBJECT_TYPE *pObjectType, [out] IUnknown **ppObject);

  [call_as(EndCreateObjectFromURL)]
  HRESULT RemoteEndCreateObjectFromURL([in] IUnknown *pResult, [out] MF_OBJECT_TYPE *pObjectType, [out] IUnknown **ppObject);

  [local]
  HRESULT BeginCreateObjectFromByteStream([in] IMFByteStream* pByteStream, [in] LPCWSTR pwszURL, [in] DWORD dwFlags, [in] IPropertyStore *pProps, [out] IUnknown **ppIUnknownCancelCookie, [in] IMFAsyncCallback *pCallback, [in] IUnknown *punkState);

  [call_as(BeginCreateObjectFromByteStream)]
  HRESULT RemoteBeginCreateObjectFromByteStream([in] IMFByteStream* pByteStream, [in, unique] LPCWSTR pwszURL, [in] DWORD dwFlags, [in, unique] IPropertyStore *pProps, [in] IMFRemoteAsyncCallback *pCallback);

  [local]
  HRESULT EndCreateObjectFromByteStream([in] IMFAsyncResult *pResult, [out] MF_OBJECT_TYPE *pObjectType, [out] IUnknown **ppObject);

  [call_as(EndCreateObjectFromByteStream)]
  HRESULT RemoteEndCreateObjectFromByteStream([in] IUnknown *pResult, [out] MF_OBJECT_TYPE *pObjectType, [out] IUnknown **ppObject);

  [local]
  HRESULT CancelObjectCreation([in] IUnknown *pIUnknownCancelCookie);
}

[object, uuid(0a97b3cf-8e7c-4a3d-8f8c-0c843dc247fb)]
interface IMFStreamSink : IMFMediaEventGenerator
{
  HRESULT GetMediaSink([out] IMFMediaSink **ppMediaSink);
  HRESULT GetIdentifier([out] DWORD *pdwIdentifier);
  HRESULT GetMediaTypeHandler([out] IMFMediaTypeHandler **ppHandler);
  HRESULT ProcessSample([in] IMFSample *pSample);
  HRESULT PlaceMarker([in] MFSTREAMSINK_MARKER_TYPE eMarkerType, [in] const PROPVARIANT *pvarMarkerValue, [in] const PROPVARIANT *pvarContextValue);
  HRESULT Flush(void);
}

[object, uuid(e56e4cbd-8f70-49d8-a0f8-edb3d6ab9bf2), local]
interface IMFTimer : IUnknown
{
  HRESULT SetTimer([in] DWORD dwFlags, [in] LONGLONG llClockTime, [in] IMFAsyncCallback *pCallback, [in] IUnknown *punkState, [out] IUnknown **ppunkKey);
  HRESULT CancelTimer([in] IUnknown *punkKey);
}

[object, uuid(de9a6157-f660-4643-b56a-df9f7998c7cd), local]
interface IMFTopoLoader : IUnknown
{
  HRESULT Load([in] IMFTopology *pInputTopo, [out] IMFTopology **ppOutputTopo, [in] IMFTopology *pCurrentTopo);
}

[object, uuid(86cbc910-e533-4751-8e3b-f19b5b806a03), local]
interface IMFVideoSampleAllocator : IUnknown
{
  HRESULT SetDirectXManager([in, unique] IUnknown *pManager);
  HRESULT UninitializeSampleAllocator();
  HRESULT InitializeSampleAllocator([in] DWORD cRequestedFrames, [in] IMFMediaType *pMediaType);
  HRESULT AllocateSample([out] IMFSample **ppSample);
}

cpp_quote("#if WINVER >= _WIN32_WINNT_WIN7")

[object, uuid(a792cdbe-c374-4e89-8335-278e7b9956a4), local]
interface IMFVideoSampleAllocatorNotify : IUnknown
{
  HRESULT NotifyRelease();
}

[object, uuid(3978aa1a-6d5b-4b7f-a340-90899189ae34), local]
interface IMFVideoSampleAllocatorNotifyEx : IMFVideoSampleAllocatorNotify
{
  HRESULT NotifyPrune(IMFSample *ppSample);
}

[object, uuid(992388b4-3372-4f67-8b6f-c84c071f4751), local]
interface IMFVideoSampleAllocatorCallback : IUnknown
{
  HRESULT SetCallback([in, unique] IMFVideoSampleAllocatorNotify *pNotify);
  HRESULT GetFreeSampleCount([out] LONG *plSamples);
}

[object, local, uuid(545b3a48-3283-4f62-866f-a62d8f598f9f), pointer_default(unique)]
interface IMFVideoSampleAllocatorEx : IMFVideoSampleAllocator
{
  HRESULT InitializeSampleAllocatorEx([in] DWORD cInitialSamples, [in] DWORD cMaximumSamples, [in, optional] IMFAttributes *pAttributes, [in] IMFMediaType *pMediaType);
}

cpp_quote("#endif /* WINVER >= _WIN32_WINNT_WIN7 */")

cpp_quote("#if WINVER >= _WIN32_WINNT_WIN8")

typedef enum _MF_VIDEO_PROCESSOR_ROTATION {
  ROTATION_NONE = 0,
  ROTATION_NORMAL = 1
} MF_VIDEO_PROCESSOR_ROTATION;

typedef enum _MF_VIDEO_PROCESSOR_MIRROR {
  MIRROR_NONE = 0,
  MIRROR_HORIZONTAL = 1,
  MIRROR_VERTICAL = 2
} MF_VIDEO_PROCESSOR_MIRROR;

[object, local, uuid(a3f675d5-6119-4f7f-a100-1d8b280f0efb), pointer_default(unique)]
interface IMFVideoProcessorControl : IUnknown
{
  HRESULT SetBorderColor([in, optional] MFARGB *pBorderColor);
  HRESULT SetSourceRectangle([in, optional] RECT *pSrcRect);
  HRESULT SetDestinationRectangle([in, optional] RECT *pDstRect);
  HRESULT SetMirror([in] MF_VIDEO_PROCESSOR_MIRROR eMirror);
  HRESULT SetRotation([in] MF_VIDEO_PROCESSOR_ROTATION eRotation);
  HRESULT SetConstrictionSize([in, optional] SIZE *pConstrictionSize);
}

cpp_quote("#if WINVER >= _WIN32_WINNT_WINBLUE")
[object, local, uuid(bde633d3-e1dc-4a7f-a693-bbae399c4a20), pointer_default(unique)]
interface IMFVideoProcessorControl2 : IMFVideoProcessorControl
{
  HRESULT SetRotationOverride([in] UINT uiRotation);
  HRESULT EnableHardwareEffects([in] WINBOOL fEnabled);
  HRESULT GetSupportedHardwareEffects([out, retval] UINT *puiSupport);
}

cpp_quote("#if WINVER >= _WIN32_WINNT_WIN10")

typedef enum _MFVideoSphericalFormat {
  MFVideoSphericalFormat_Unsupported = 0,
  MFVideoSphericalFormat_Equirectangular = 1,
  MFVideoSphericalFormat_CubeMap = 2,
  MFVideoSphericalFormat_3DMesh = 3
} MFVideoSphericalFormat;

cpp_quote("#endif /* WINVER >= _WIN32_WINNT_WIN10 */")

cpp_quote("#if NTDDI_VERSION >= NTDDI_WIN10_RS3")

cpp_quote("EXTERN_GUID(MF_XVP_SAMPLE_LOCK_TIMEOUT, 0xaa4ddb29, 0x5134, 0x4363, 0xac, 0x72, 0x83, 0xec, 0x4b, 0xc1, 0x4, 0x26);")

typedef enum MFVideoSphericalProjectionMode {
  MFVideoSphericalProjectionMode_Spherical = 0,
  MFVideoSphericalProjectionMode_Flat
} MFVideoSphericalProjectionMode;

[object, local, uuid(2424b3f2-eb23-40f1-91aa-74bddeea0883)]
interface IMFVideoProcessorControl3 : IMFVideoProcessorControl2
{
  HRESULT GetNaturalOutputType([out] IMFMediaType **ppType);
  HRESULT EnableSphericalVideoProcessing([in] WINBOOL fEnable, [in] MFVideoSphericalFormat eFormat, [in] MFVideoSphericalProjectionMode eProjectionMode);
  HRESULT SetSphericalVideoProperties([in] float X, [in] float Y, [in] float Z, [in] float W, [in] float fieldOfView);
  HRESULT SetOutputDevice([in] IUnknown *pOutputDevice);
}

cpp_quote("#endif /* NTDDI_VERSION >= NTDDI_WIN10_RS3 */")

cpp_quote("#endif /* WINVER >= _WIN32_WINNT_WINBLUE */")

cpp_quote("#if NTDDI_VERSION >= NTDDI_WIN10_VB")

[object, local, uuid(604d33d7-cf23-41d5-8224-5bbbb1a87475)]
interface IMFVideoRendererEffectControl : IUnknown
{
  HRESULT OnAppServiceConnectionEstablished([in] IUnknown *pAppServiceConnection);
}

cpp_quote("#endif /* WINVER >= NTDDI_WIN10_VB */")

cpp_quote("#endif /* WINVER >= _WIN32_WINNT_WIN8 */")

cpp_quote("HRESULT WINAPI MFCreate3GPMediaSink(IMFByteStream *pIByteStream,IMFMediaType *pVideoMediaType,IMFMediaType *pAudioMediaType,IMFMediaSink **ppIMediaSink);")
cpp_quote("HRESULT WINAPI MFCreateAggregateSource(IMFCollection *pSourceCollection,IMFMediaSource **ppAggSource);")
cpp_quote("")
cpp_quote("HRESULT WINAPI MFCreateAlignedMemoryBuffer(DWORD cbMaxLength,DWORD fAlignmentFlags,IMFMediaBuffer **ppBuffer);")
cpp_quote("HRESULT WINAPI MFCreateASFContentInfo(IMFASFContentInfo **ppIContentInfo);")
cpp_quote("HRESULT WINAPI MFCreateASFIndexer(IMFASFIndexer **ppIIndexer);")
cpp_quote("HRESULT WINAPI MFCreateASFIndexerByteStream(IMFByteStream *pIContentByteStream,QWORD cbIndexStartOffset,IMFByteStream **pIIndexByteStream);")
cpp_quote("HRESULT WINAPI MFCreateASFMediaSink(IMFByteStream *pIByteStream,IMFMediaSink **ppIMediaSink);")
cpp_quote("HRESULT WINAPI MFCreateASFMediaSinkActivate(LPCWSTR pwszFileName,IMFASFContentInfo *pContentInfo,IMFActivate **ppIActivate);")
cpp_quote("HRESULT WINAPI MFCreateASFMultiplexer(IMFASFMultiplexer **ppIMultiplexer);")
cpp_quote("HRESULT WINAPI MFCreateASFProfile(IMFASFProfile **ppIProfile);")
cpp_quote("HRESULT WINAPI MFCreateASFProfileFromPresentationDescriptor(IMFPresentationDescriptor *pIPD,IMFASFProfile **ppIProfile);")
cpp_quote("HRESULT WINAPI MFCreateASFSplitter(IMFASFSplitter **ppISplitter);")
cpp_quote("HRESULT WINAPI MFCreateAudioRenderer(IMFAttributes *pAudioAttributes, IMFMediaSink **ppSink);")
cpp_quote("HRESULT WINAPI MFCreateAudioRendererActivate(IMFActivate **ppActivate);")
cpp_quote("HRESULT WINAPI MFCreateDeviceSource(IMFAttributes *pAttributes,IMFMediaSource **ppSource);")
cpp_quote("HRESULT WINAPI MFCreateMediaSession(IMFAttributes *pConfiguration,IMFMediaSession **ppMS);")
cpp_quote("HRESULT WINAPI MFCreateMP3MediaSink(IMFByteStream *pTargetByteStream,IMFMediaSink **ppMediaSink);")
cpp_quote("HRESULT WINAPI MFCreateMPEG4MediaSink(IMFByteStream *pIByteStream,IMFMediaType *pVideoMediaType,IMFMediaType *pAudioMediaType,IMFMediaSink **ppIMediaSink);")
cpp_quote("HRESULT WINAPI MFCreateNetSchemePlugin(REFIID riid,LPVOID *ppvHandler);")
cpp_quote("HRESULT WINAPI MFCreatePMPServer(DWORD dwCreationFlags,IMFPMPServer **ppPMPServer);")
cpp_quote("HRESULT WINAPI MFCreatePMPMediaSession(DWORD dwCreationFlags,IMFAttributes *pConfiguration,IMFMediaSession **ppMediaSession,IMFActivate **ppEnablerActivate);")
cpp_quote("HRESULT WINAPI MFCreatePathFromURL(LPCWSTR pwszFileURL,LPWSTR *ppwszFilePath);")
cpp_quote("HRESULT WINAPI MFCreatePresentationClock(IMFPresentationClock **ppPresentationClock);")
cpp_quote("HRESULT WINAPI MFCreatePresentationDescriptor(DWORD cStreamDescriptors,IMFStreamDescriptor **apStreamDescriptors,IMFPresentationDescriptor **ppPresentationDescriptor);")
cpp_quote("HRESULT WINAPI MFCreatePresentationDescriptorFromASFProfile(IMFASFProfile *pIProfile,IMFPresentationDescriptor **ppIPD);")
cpp_quote("HRESULT WINAPI MFCreateProxyLocator(LPCWSTR pszProtocol,IPropertyStore *pProxyConfig,IMFNetProxyLocator **ppProxyLocator);")
cpp_quote("HRESULT WINAPI MFCreateRemoteDesktopPlugin(IMFRemoteDesktopPlugin **ppPlugin);")
cpp_quote("HRESULT WINAPI MFCreateSample(IMFSample **ppIMFSample);")
cpp_quote("HRESULT WINAPI MFCreateSampleCopierMFT(IMFTransform **ppCopierMFT);")
cpp_quote("HRESULT WINAPI MFCreateSampleGrabberSinkActivate(IMFMediaType *pIMFMediaType,IMFSampleGrabberSinkCallback *pIMFSampleGrabberSinkCallback,IMFActivate **ppIActivate);")
cpp_quote("HRESULT WINAPI MFCreateSequencerSource(IUnknown *pReserved,IMFSequencerSource **ppSequencerSource);")
cpp_quote("HRESULT WINAPI MFCreateSimpleTypeHandler(IMFMediaTypeHandler **ppHandler);")
cpp_quote("HRESULT WINAPI MFCreateStandardQualityManager(IMFQualityManager **ppQualityManager);")
cpp_quote("HRESULT WINAPI MFCreateStreamDescriptor(DWORD dwStreamIdentifier,DWORD cMediaTypes,IMFMediaType **apMediaTypes,IMFStreamDescriptor **ppDescriptor);")
cpp_quote("HRESULT WINAPI MFCreateSourceResolver(IMFSourceResolver **ppISourceResolver);")
cpp_quote("HRESULT WINAPI MFCreateSystemTimeSource(IMFPresentationTimeSource **ppSystemTimeSource);")
cpp_quote("HRESULT WINAPI MFCreateTopoLoader(IMFTopoLoader **ppObj);")
cpp_quote("HRESULT WINAPI MFCreateTopology(IMFTopology **ppTopo);")
cpp_quote("HRESULT WINAPI MFCreateTopologyNode(MF_TOPOLOGY_TYPE NodeType,IMFTopologyNode **ppNode);")
cpp_quote("HRESULT WINAPI MFCreateVideoRenderer(REFIID riidRenderer,void **ppVideoRenderer);")
cpp_quote("HRESULT WINAPI MFCreateVideoRendererActivate(HWND hwndVideo,IMFActivate **ppActivate);")
cpp_quote("HRESULT WINAPI MFGetService(IUnknown *punkObject,REFGUID guidService,REFIID riid,LPVOID *ppvObject);")
cpp_quote("HRESULT WINAPI MFGetSupportedMimeTypes(PROPVARIANT *pPropVarMimeTypeArray);")
cpp_quote("HRESULT WINAPI MFGetSupportedSchemes(PROPVARIANT *pPropVarSchemeArray);")
cpp_quote("MFTIME WINAPI MFGetSystemTime(void);")
cpp_quote("HRESULT WINAPI MFShutdownObject(IUnknown *pUnk);")
cpp_quote("HRESULT WINAPI CreateNamedPropertyStore(INamedPropertyStore **ppStore);")
cpp_quote("HRESULT WINAPI CreatePropertyStore(IPropertyStore **ppStore);")
cpp_quote("#if (WINVER >= 0x0601)")
cpp_quote("")
cpp_quote("HRESULT WINAPI MFCreateTranscodeProfile(IMFTranscodeProfile **ppTranscodeProfile);")
cpp_quote("HRESULT WINAPI MFCreateTranscodeSinkActivate(IMFActivate **ppActivate);")
cpp_quote("HRESULT WINAPI MFCreateTranscodeTopology(IMFMediaSource *pSrc,LPCWSTR pwszOutputFilePath,IMFTranscodeProfile *pProfile,IMFTopology **ppTranscodeTopo);")
cpp_quote("HRESULT WINAPI MFEnumDeviceSources(IMFAttributes *pAttributes,IMFActivate ***pppSourceActivate,UINT32 *pcSourceActivate);")
cpp_quote("HRESULT WINAPI MFGetTopoNodeCurrentType(IMFTopologyNode *pNode,DWORD dwStreamIndex,WINBOOL fOutput,IMFMediaType **ppType);")
cpp_quote("HRESULT WINAPI MFTranscodeGetAudioOutputAvailableTypes(REFGUID guidSubType,DWORD dwMFTFlags,IMFAttributes *pCodecConfig,IMFCollection **ppAvailableTypes);")
cpp_quote("#endif")

cpp_quote("EXTERN_GUID(MFNETSOURCE_STATISTICS, 0x3cb1f274, 0x0505, 0x4c5d, 0xae, 0x71, 0x0a, 0x55, 0x63, 0x44, 0xef, 0xa1);")
cpp_quote("EXTERN_GUID(MFNETSOURCE_STATISTICS_SERVICE, 0x3cb1f275, 0x0505, 0x4c5d, 0xae, 0x71, 0x0a, 0x55, 0x63, 0x44, 0xef, 0xa1);")

cpp_quote("EXTERN_GUID(MF_ACTIVATE_CUSTOM_VIDEO_MIXER_CLSID, 0xba491360, 0xbe50, 0x451e, 0x95, 0xab, 0x6d, 0x4a, 0xcc, 0xc7, 0xda, 0xd8 );")
cpp_quote("EXTERN_GUID(MF_ACTIVATE_CUSTOM_VIDEO_MIXER_ACTIVATE, 0xba491361, 0xbe50, 0x451e, 0x95, 0xab, 0x6d, 0x4a, 0xcc, 0xc7, 0xda, 0xd8 );")
cpp_quote("EXTERN_GUID(MF_ACTIVATE_CUSTOM_VIDEO_MIXER_FLAGS, 0xba491362, 0xbe50, 0x451e, 0x95, 0xab, 0x6d, 0x4a, 0xcc, 0xc7, 0xda, 0xd8 );")
cpp_quote("EXTERN_GUID(MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_CLSID, 0xba491364, 0xbe50, 0x451e, 0x95, 0xab, 0x6d, 0x4a, 0xcc, 0xc7, 0xda, 0xd8 );")
cpp_quote("EXTERN_GUID(MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_ACTIVATE, 0xba491365, 0xbe50, 0x451e, 0x95, 0xab, 0x6d, 0x4a, 0xcc, 0xc7, 0xda, 0xd8 );")
cpp_quote("EXTERN_GUID(MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_FLAGS, 0xba491366, 0xbe50, 0x451e, 0x95, 0xab, 0x6d, 0x4a, 0xcc, 0xc7, 0xda, 0xd8 );")

cpp_quote("EXTERN_GUID(MF_AUDIO_RENDERER_ATTRIBUTE_SESSION_ID, 0xede4b5e3, 0xf805, 0x4d6c, 0x99, 0xb3, 0xdb, 0x01, 0xbf, 0x95, 0xdf, 0xab);")
cpp_quote("EXTERN_GUID(MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID, 0xb10aaec3, 0xef71, 0x4cc3, 0xb8, 0x73, 0x5, 0xa9, 0xa0, 0x8b, 0x9f, 0x8e);")
cpp_quote("EXTERN_GUID(MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ROLE, 0x6ba644ff, 0x27c5, 0x4d02, 0x98, 0x87, 0xc2, 0x86, 0x19, 0xfd, 0xb9, 0x1b);")
cpp_quote("EXTERN_GUID(MF_AUDIO_RENDERER_ATTRIBUTE_STREAM_CATEGORY, 0xa9770471, 0x92ec, 0x4df4, 0x94, 0xfe, 0x81, 0xc3, 0x6f, 0xc, 0x3a, 0x7a);")

cpp_quote("EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME, 0x60d0e559,0x52f8,0x4fa2,0xbb,0xce,0xac,0xdb,0x34,0xa8,0xec,0x1);")
cpp_quote("EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_MEDIA_TYPE, 0x56a819ca,0xc78,0x4de4,0xa0,0xa7,0x3d,0xda,0xba,0xf,0x24,0xd4);")
cpp_quote("EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_GUID, 0x14dd9a1c, 0x7cff, 0x41be, 0xb1, 0xb9, 0xba, 0x1a, 0xc6, 0xec, 0xb5, 0x71);")
cpp_quote("EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID, 0x30da9258,0xfeb9,0x47a7,0xa4,0x53,0x76,0x3a,0x7a,0x8e,0x1c,0x5f);")
cpp_quote("EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE, 0xbc9d118e,0x8c67,0x4a18,0x85,0xd4,0x12,0xd3,0x0,0x40,0x5,0x52);")
cpp_quote("EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY, 0x77f0ae69,0xc3bd,0x4509,0x94,0x1d,0x46,0x7e,0x4d,0x24,0x89,0x9e);")
cpp_quote("EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_HW_SOURCE, 0xde7046ba,0x54d6,0x4487,0xa2,0xa4,0xec,0x7c,0xd,0x1b,0xd1,0x63);")
cpp_quote("EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_MAX_BUFFERS, 0x7dd9b730,0x4f2d,0x41d5,0x8f,0x95,0xc,0xc9,0xa9,0x12,0xba,0x26);")
cpp_quote("EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK, 0x58f0aad8,0x22bf,0x4f8a,0xbb,0x3d,0xd2,0xc4,0x97,0x8c,0x6e,0x2f);")
cpp_quote("EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE, 0xc60ac5fe,0x252a,0x478f,0xa0,0xef,0xbc,0x8f,0xa5,0xf7,0xca,0xd3);")
cpp_quote("EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID, 0x8ac3587a,0x4ae7,0x42d8,0x99,0xe0,0x0a,0x60,0x13,0xee,0xf9,0x0f);")
cpp_quote("EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_SYMBOLIC_LINK, 0x98d24b5e, 0x5930, 0x4614, 0xb5, 0xa1, 0xf6, 0x0, 0xf9, 0x35, 0x5a, 0x78);")
cpp_quote("EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_PROVIDER_DEVICE_ID, 0x36689d42, 0xa06c, 0x40ae, 0x84, 0xcf, 0xf5, 0xa0, 0x34, 0x6, 0x7c, 0xc4);")
cpp_quote("EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_XADDRESS, 0xbca0be52, 0xc327, 0x44c7, 0x9b, 0x7d, 0x7f, 0xa8, 0xd9, 0xb5, 0xbc, 0xda);")
cpp_quote("EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_STREAM_URL, 0x9d7b40d2, 0x3617, 0x4043, 0x93, 0xe3, 0x8d, 0x6d, 0xa9, 0xbb, 0x34, 0x92);")
cpp_quote("EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_USERNAME,0x5d01add, 0x949f, 0x46eb, 0xbc, 0x8e, 0x8b, 0xd, 0x2b, 0x32, 0xd7, 0x9d);")
cpp_quote("EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_PASSWORD, 0xa0fd7e16, 0x42d9, 0x49df, 0x84, 0xc0, 0xe8, 0x2c, 0x5e, 0xab, 0x88, 0x74);")

cpp_quote("EXTERN_GUID(MF_METADATA_PROVIDER_SERVICE, 0xdb214084, 0x58a4, 0x4d2e, 0xb8, 0x4f, 0x6f, 0x75, 0x5b, 0x2f, 0x7a, 0xd);")
cpp_quote("EXTERN_GUID(MF_PROPERTY_HANDLER_SERVICE, 0xa3face02, 0x32b8, 0x41dd, 0x90, 0xe7, 0x5f, 0xef, 0x7c, 0x89, 0x91, 0xb5);")
cpp_quote("EXTERN_GUID(MF_RATE_CONTROL_SERVICE, 0x866fa297, 0xb802, 0x4bf8, 0x9d, 0xc9, 0x5e, 0x3b, 0x6a, 0x9f, 0x53, 0xc9);")
cpp_quote("EXTERN_GUID(MF_SAMPLEGRABBERSINK_IGNORE_CLOCK, 0x0efda2c0, 0x2b69, 0x4e2e, 0xab, 0x8d, 0x46, 0xdc, 0xbf, 0xf7, 0xd2, 0x5d);")

cpp_quote("EXTERN_GUID(MF_SD_LANGUAGE, 0xaf2180, 0xbdc2, 0x423c, 0xab, 0xca, 0xf5, 0x3, 0x59, 0x3b, 0xc1, 0x21);")
cpp_quote("EXTERN_GUID(MF_SD_PROTECTED, 0xaf2181, 0xbdc2, 0x423c, 0xab, 0xca, 0xf5, 0x3, 0x59, 0x3b, 0xc1, 0x21);")
cpp_quote("EXTERN_GUID(MF_SD_STREAM_NAME, 0x4f1b099d, 0xd314, 0x41e5, 0xa7, 0x81, 0x7f, 0xef, 0xaa, 0x4c, 0x50, 0x1f);")
cpp_quote("EXTERN_GUID(MF_SD_MUTUALLY_EXCLUSIVE, 0x23ef79c, 0x388d, 0x487f, 0xac, 0x17, 0x69, 0x6c, 0xd6, 0xe3, 0xc6, 0xf5);")

cpp_quote("EXTERN_GUID(MF_TOPONODE_DRAIN, 0x494bbce9, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_D3DAWARE, 0x494bbced, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);")
cpp_quote("EXTERN_GUID(MF_TOPOLOGY_RESOLUTION_STATUS, 0x494bbcde, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_ERRORCODE, 0x494bbcee, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_CONNECT_METHOD, 0x494bbcf1, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_LOCKED, 0x494bbcf7, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_WORKQUEUE_ID, 0x494bbcf8, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_WORKQUEUE_MMCSS_CLASS, 0x494bbcf9, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_DECRYPTOR, 0x494bbcfa, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_DISCARDABLE, 0x494bbcfb, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_ERROR_MAJORTYPE, 0x494bbcfd, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_ERROR_SUBTYPE, 0x494bbcfe, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_WORKQUEUE_MMCSS_TASKID, 0x494bbcff, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_WORKQUEUE_MMCSS_PRIORITY, 0x5001f840, 0x2816, 0x48f4, 0x93, 0x64, 0xad, 0x1e, 0xf6, 0x61, 0xa1, 0x23);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_WORKQUEUE_ITEM_PRIORITY, 0xa1ff99be, 0x5e97, 0x4a53, 0xb4, 0x94, 0x56, 0x8c, 0x64, 0x2c, 0x0f, 0xf3);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_MARKIN_HERE, 0x494bbd00, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_MARKOUT_HERE, 0x494bbd01, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_DECODER, 0x494bbd02, 0xb031, 0x4e38, 0x97, 0xc4, 0xd5, 0x42, 0x2d, 0xd6, 0x18, 0xdc);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_MEDIASTART, 0x835c58ea, 0xe075, 0x4bc7, 0xbc, 0xba, 0x4d, 0xe0, 0x00, 0xdf, 0x9a, 0xe6);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_MEDIASTOP, 0x835c58eb, 0xe075, 0x4bc7, 0xbc, 0xba, 0x4d, 0xe0, 0x00, 0xdf, 0x9a, 0xe6);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_SOURCE, 0x835c58ec, 0xe075, 0x4bc7, 0xbc, 0xba, 0x4d, 0xe0, 0x00, 0xdf, 0x9a, 0xe6);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_PRESENTATION_DESCRIPTOR, 0x835c58ed, 0xe075, 0x4bc7, 0xbc, 0xba, 0x4d, 0xe0, 0x00, 0xdf, 0x9a, 0xe6);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_STREAM_DESCRIPTOR, 0x835c58ee, 0xe075, 0x4bc7, 0xbc, 0xba, 0x4d, 0xe0, 0x00, 0xdf, 0x9a, 0xe6);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_SEQUENCE_ELEMENTID, 0x835c58ef, 0xe075, 0x4bc7, 0xbc, 0xba, 0x4d, 0xe0, 0x00, 0xdf, 0x9a, 0xe6);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_TRANSFORM_OBJECTID, 0x88dcc0c9, 0x293e, 0x4e8b, 0x9a, 0xeb, 0xa, 0xd6, 0x4c, 0xc0, 0x16, 0xb0);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_STREAMID, 0x14932f9b, 0x9087, 0x4bb4, 0x84, 0x12, 0x51, 0x67, 0x14, 0x5c, 0xbe, 0x04);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_NOSHUTDOWN_ON_REMOVE, 0x14932f9c, 0x9087, 0x4bb4, 0x84, 0x12, 0x51, 0x67, 0x14, 0x5c, 0xbe, 0x04);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_RATELESS, 0x14932f9d, 0x9087, 0x4bb4, 0x84, 0x12, 0x51, 0x67, 0x14, 0x5c, 0xbe, 0x04);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_DISABLE_PREROLL, 0x14932f9e, 0x9087, 0x4bb4, 0x84, 0x12, 0x51, 0x67, 0x14, 0x5c, 0xbe, 0x04);")
cpp_quote("EXTERN_GUID(MF_TOPONODE_PRIMARYOUTPUT, 0x6304ef99, 0x16b2, 0x4ebe, 0x9d, 0x67, 0xe4, 0xc5, 0x39, 0xb3, 0xa2, 0x59);")

cpp_quote("EXTERN_GUID(MF_TRANSCODE_SKIP_METADATA_TRANSFER, 0x4e4469ef, 0xb571, 0x4959, 0x8f, 0x83, 0x3d, 0xcf, 0xba, 0x33, 0xa3, 0x93);")
cpp_quote("EXTERN_GUID(MF_TRANSCODE_TOPOLOGYMODE, 0x3e3df610, 0x394a, 0x40b2, 0x9d, 0xea, 0x3b, 0xab, 0x65, 0xb, 0xeb, 0xf2);")
cpp_quote("EXTERN_GUID(MF_TRANSCODE_ADJUST_PROFILE, 0x9c37c21b, 0x60f, 0x487c, 0xa6, 0x90, 0x80, 0xd7, 0xf5, 0xd, 0x1c, 0x72);")
cpp_quote("EXTERN_GUID(MF_TRANSCODE_ENCODINGPROFILE, 0x6947787c, 0xf508, 0x4ea9, 0xb1, 0xe9, 0xa1, 0xfe, 0x3a, 0x49, 0xfb, 0xc9);")
cpp_quote("EXTERN_GUID(MF_TRANSCODE_QUALITYVSSPEED, 0x98332df8, 0x03cd, 0x476b, 0x89, 0xfa, 0x3f, 0x9e, 0x44, 0x2d, 0xec, 0x9f);")
cpp_quote("EXTERN_GUID(MF_TRANSCODE_DONOT_INSERT_ENCODER, 0xf45aa7ce, 0xab24, 0x4012, 0xa1, 0x1b, 0xdc, 0x82, 0x20, 0x20, 0x14, 0x10);")

cpp_quote("EXTERN_GUID(MR_AUDIO_POLICY_SERVICE, 0x911fd737, 0x6775, 0x4ab0, 0xa6, 0x14, 0x29, 0x78, 0x62, 0xfd, 0xac, 0x88);")
cpp_quote("EXTERN_GUID(MR_CAPTURE_POLICY_VOLUME_SERVICE, 0x24030acd, 0x107a, 0x4265, 0x97, 0x5c, 0x41, 0x4e, 0x33, 0xe6, 0x5f, 0x2a);")
cpp_quote("EXTERN_GUID(MR_POLICY_VOLUME_SERVICE, 0x1abaa2ac, 0x9d3b, 0x47c6, 0xab, 0x48, 0xc5, 0x95, 0x6, 0xde, 0x78, 0x4d);")
cpp_quote("EXTERN_GUID(MR_STREAM_VOLUME_SERVICE, 0xf8b5fa2f, 0x32ef, 0x46f5, 0xb1, 0x72, 0x13, 0x21, 0x21, 0x2f, 0xb2, 0xc4);")
