/**
 * 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
} MFSESSION_GETFULLTOPOLOGY_FLAGS;

typedef enum MFPMPSESSION_CREATION_FLAGS {
    MFPMPSESSION_UNPROTECTED_PROCESS = 0x1
} 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);
}

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

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);")

cpp_quote("typedef DWORD MFSequencerElementId; /*Unknown type*/")
cpp_quote("")
cpp_quote("typedef enum MFCLOCK_CHARACTERISTICS_FLAGS {")
cpp_quote("  MFCLOCK_CHARACTERISTICS_FLAG_FREQUENCY_10MHZ   = 0x2,")
cpp_quote("  MFCLOCK_CHARACTERISTICS_FLAG_ALWAYS_RUNNING    = 0x4,")
cpp_quote("  MFCLOCK_CHARACTERISTICS_FLAG_IS_SYSTEM_CLOCK   = 0x8")
cpp_quote("} MFCLOCK_CHARACTERISTICS_FLAGS;")
cpp_quote("")
cpp_quote("#if (WINVER >= 0x0601)")
cpp_quote("")
cpp_quote("typedef enum _MF_QUALITY_ADVISE_FLAGS {")
cpp_quote("  MF_QUALITY_CANNOT_KEEP_UP   = 0x1")
cpp_quote("} MF_QUALITY_ADVISE_FLAGS;")
cpp_quote("")
cpp_quote("#endif /*(WINVER >= 0x0601)*/")
cpp_quote("")
cpp_quote("typedef enum _MF_QUALITY_DROP_MODE {")
cpp_quote("  MF_DROP_MODE_NONE   = 0x0,")
cpp_quote("  MF_DROP_MODE_1      = 0x1,")
cpp_quote("  MF_DROP_MODE_2      = 0x2,")
cpp_quote("  MF_DROP_MODE_3      = 0x3,")
cpp_quote("  MF_DROP_MODE_4      = 0x4,")
cpp_quote("  MF_DROP_MODE_5      = 0x5,")
cpp_quote("  MF_NUM_DROP_MODES   = 0x6")
cpp_quote("} MF_QUALITY_DROP_MODE;")
cpp_quote("")
cpp_quote("typedef enum _MF_QUALITY_LEVEL {")
cpp_quote("  MF_QUALITY_NORMAL           = 0x0,")
cpp_quote("  MF_QUALITY_NORMAL_MINUS_1   = 0x1,")
cpp_quote("  MF_QUALITY_NORMAL_MINUS_2   = 0x2,")
cpp_quote("  MF_QUALITY_NORMAL_MINUS_3   = 0x3,")
cpp_quote("  MF_QUALITY_NORMAL_MINUS_4   = 0x4,")
cpp_quote("  MF_QUALITY_NORMAL_MINUS_5   = 0x5,")
cpp_quote("  MF_NUM_QUALITY_LEVELS       = 0x6")
cpp_quote("} MF_QUALITY_LEVEL;")
cpp_quote("")
cpp_quote("typedef enum MF_SOURCE_READER_CONTROL_FLAG {")
cpp_quote("  MF_SOURCE_READER_CONTROLF_DRAIN   = 0x00000001")
cpp_quote("} MF_SOURCE_READER_CONTROL_FLAG;")
cpp_quote("")
cpp_quote("typedef enum _MF_TOPOLOGY_RESOLUTION_STATUS_FLAGS {")
cpp_quote("  MF_TOPOLOGY_RESOLUTION_SUCCEEDED              = 0x00000000,")
cpp_quote("  MF_OPTIONAL_NODE_REJECTED_MEDIA_TYPE          = 0x00000001,")
cpp_quote("  MF_OPTIONAL_NODE_REJECTED_PROTECTED_PROCESS   = 0x00000002")
cpp_quote("} MF_TOPOLOGY_RESOLUTION_STATUS_FLAGS;")
cpp_quote("")
cpp_quote("typedef enum _MF_TOPONODE_DRAIN_MODE {")
cpp_quote("  MF_TOPONODE_DRAIN_DEFAULT,")
cpp_quote("  MF_TOPONODE_DRAIN_ALWAYS,")
cpp_quote("  MF_TOPONODE_DRAIN_NEVER")
cpp_quote("} MF_TOPONODE_DRAIN_MODE;")
cpp_quote("")
cpp_quote("typedef enum _MF_TOPONODE_FLUSH_MODE {")
cpp_quote("  MF_TOPONODE_FLUSH_ALWAYS,")
cpp_quote("  MF_TOPONODE_FLUSH_SEEK,")
cpp_quote("  MF_TOPONODE_FLUSH_NEVER")
cpp_quote("} MF_TOPONODE_FLUSH_MODE;")
cpp_quote("")
cpp_quote("#if (WINVER >= 0x0601)")
cpp_quote("")
cpp_quote("typedef enum _MF_TRANSCODE_TOPOLOGY_MODE_FLAGS {")
cpp_quote("  MF_TRANSCODE_TOPOLOGYMODE_SOFTWARE_ONLY      = 0,")
cpp_quote("  MF_TRANSCODE_TOPOLOGYMODE_HARDWARE_ALLOWED   = 1")
cpp_quote("} MF_TRANSCODE_TOPOLOGYMODE_FLAGS;")
cpp_quote("")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("typedef enum  {")
cpp_quote("  MF_LICENSE_URL_UNTRUSTED,")
cpp_quote("  MF_LICENSE_URL_TRUSTED,")
cpp_quote("  MF_LICENSE_URL_TAMPERED")
cpp_quote("} MF_URL_TRUST_STATUS;")
cpp_quote("")
cpp_quote("typedef enum MFASF_INDEXERFLAGS {")
cpp_quote("  MFASF_INDEXER_WRITE_NEW_INDEX            = 0x00000001,")
cpp_quote("  MFASF_INDEXER_READ_FOR_REVERSEPLAYBACK   = 0x00000004,")
cpp_quote("  MFASF_INDEXER_WRITE_FOR_LIVEREAD         = 0x00000008")
cpp_quote("} MFASF_INDEXERFLAGS;")
cpp_quote("")
cpp_quote("typedef enum _MFCLOCK_RELATIONAL_FLAGS {")
cpp_quote("  MFCLOCK_RELATIONAL_FLAG_JITTER_NEVER_AHEAD   = 0x1")
cpp_quote("} MFCLOCK_RELATIONAL_FLAGS;")
cpp_quote("")
cpp_quote("typedef enum _MFMEDIASOURCE_CHARACTERISTICS {")
cpp_quote("  MFMEDIASOURCE_IS_LIVE                      = 0x1,")
cpp_quote("  MFMEDIASOURCE_CAN_SEEK                     = 0x2,")
cpp_quote("  MFMEDIASOURCE_CAN_PAUSE                    = 0x4,")
cpp_quote("  MFMEDIASOURCE_HAS_SLOW_SEEK                = 0x8,")
cpp_quote("  MFMEDIASOURCE_HAS_MULTIPLE_PRESENTATIONS   = 0x10,")
cpp_quote("  MFMEDIASOURCE_CAN_SKIPFORWARD              = 0x20,")
cpp_quote("  MFMEDIASOURCE_CAN_SKIPBACKWARD             = 0x40")
cpp_quote("} MFMEDIASOURCE_CHARACTERISTICS;")
cpp_quote("")
cpp_quote("typedef enum _MFNET_PROXYSETTINGS {")
cpp_quote("  MFNET_PROXYSETTING_NONE      = 0,")
cpp_quote("  MFNET_PROXYSETTING_MANUAL    = 1,")
cpp_quote("  MFNET_PROXYSETTING_AUTO      = 2,")
cpp_quote("  MFNET_PROXYSETTING_BROWSER   = 3")
cpp_quote("} MFNET_PROXYSETTINGS;")
cpp_quote("")
cpp_quote("typedef enum _MFNetAuthenticationFlags {")
cpp_quote("  MFNET_AUTHENTICATION_PROXY            = 0x00000001,")
cpp_quote("  MFNET_AUTHENTICATION_CLEAR_TEXT       = 0x00000002,")
cpp_quote("  MFNET_AUTHENTICATION_LOGGED_ON_USER")
cpp_quote("} MFNetAuthenticationFlags;")
cpp_quote("")
cpp_quote("typedef enum _MFNetCredentialOptions {")
cpp_quote("  MFNET_CREDENTIAL_SAVE               = 0x00000001,")
cpp_quote("  MFNET_CREDENTIAL_DONT_CACHE         = 0x00000002,")
cpp_quote("  MFNET_CREDENTIAL_ALLOW_CLEAR_TEXT   = 0x00000004")
cpp_quote("} MFNetCredentialOptions;")
cpp_quote("")
cpp_quote("typedef enum _MFNetCredentialRequirements {")
cpp_quote("  REQUIRE_PROMPT          = 0x00000001,")
cpp_quote("  REQUIRE_SAVE_SELECTED   = 0x00000002")
cpp_quote("} MFNetCredentialRequirements;")
cpp_quote("")
cpp_quote("typedef enum _MFNETSOURCE_CACHE_STATE {")
cpp_quote("  MFNETSOURCE_CACHE_UNAVAILABLE,")
cpp_quote("  MFNETSOURCE_CACHE_ACTIVE_WRITING,")
cpp_quote("  MFNETSOURCE_CACHE_ACTIVE_COMPLETE")
cpp_quote("} MFNETSOURCE_CACHE_STATE;")
cpp_quote("")
cpp_quote("typedef enum _MFNETSOURCE_PROTOCOL_TYPE {")
cpp_quote("  MFNETSOURCE_UNDEFINED   = 0x0,")
cpp_quote("  MFNETSOURCE_HTTP        = 0x1,")
cpp_quote("  MFNETSOURCE_RTSP        = 0x2,")
cpp_quote("  MFNETSOURCE_FILE        = 0x3,")
cpp_quote("  MFNETSOURCE_MULTICAST   = 0x4")
cpp_quote("} MFNETSOURCE_PROTOCOL_TYPE;")
cpp_quote("")
cpp_quote("typedef enum _MFNETSOURCE_STATISTICS_IDS {")
cpp_quote("  MFNETSOURCE_RECVPACKETS_ID                = 0,")
cpp_quote("  MFNETSOURCE_LOSTPACKETS_ID,")
cpp_quote("  MFNETSOURCE_RESENDSREQUESTED_ID,")
cpp_quote("  MFNETSOURCE_RESENDSRECEIVED_ID,")
cpp_quote("  MFNETSOURCE_RECOVEREDBYECCPACKETS_ID,")
cpp_quote("  MFNETSOURCE_RECOVEREDBYRTXPACKETS_ID,")
cpp_quote("  MFNETSOURCE_OUTPACKETS_ID,")
cpp_quote("  MFNETSOURCE_RECVRATE_ID,")
cpp_quote("  MFNETSOURCE_AVGBANDWIDTHBPS_ID,")
cpp_quote("  MFNETSOURCE_BYTESRECEIVED_ID,")
cpp_quote("  MFNETSOURCE_PROTOCOL_ID,")
cpp_quote("  MFNETSOURCE_TRANSPORT_ID,")
cpp_quote("  MFNETSOURCE_CACHE_STATE_ID,")
cpp_quote("  MFNETSOURCE_LINKBANDWIDTH_ID,")
cpp_quote("  MFNETSOURCE_CONTENTBITRATE_ID,")
cpp_quote("  MFNETSOURCE_SPEEDFACTOR_ID,")
cpp_quote("  MFNETSOURCE_BUFFERSIZE_ID,")
cpp_quote("  MFNETSOURCE_BUFFERPROGRESS_ID,")
cpp_quote("  MFNETSOURCE_LASTBWSWITCHTS_ID,")
cpp_quote("  MFNETSOURCE_SEEKRANGESTART_ID,")
cpp_quote("  MFNETSOURCE_SEEKRANGEEND_ID,")
cpp_quote("  MFNETSOURCE_BUFFERINGCOUNT_ID,")
cpp_quote("  MFNETSOURCE_INCORRECTLYSIGNEDPACKETS_ID,")
cpp_quote("  MFNETSOURCE_SIGNEDSESSION_ID,")
cpp_quote("  MFNETSOURCE_MAXBITRATE_ID,")
cpp_quote("  MFNETSOURCE_RECEPTION_QUALITY_ID,")
cpp_quote("  MFNETSOURCE_RECOVEREDPACKETS_ID,")
cpp_quote("  MFNETSOURCE_VBR_ID,")
cpp_quote("  MFNETSOURCE_DOWNLOADPROGRESS_ID")
cpp_quote("} MFNETSOURCE_STATISTICS_IDS;")
cpp_quote("")
cpp_quote("typedef enum _MFNETSOURCE_TRANSPORT_TYPE {")
cpp_quote("  MFNETSOURCE_UDP,")
cpp_quote("  MFNETSOURCE_TCP")
cpp_quote("} MFNETSOURCE_TRANSPORT_TYPE;")
cpp_quote("")
cpp_quote("typedef enum MF_OBJECT_TYPE {")
cpp_quote("  MF_OBJECT_MEDIASOURCE,")
cpp_quote("  MF_OBJECT_BYTESTREAM,")
cpp_quote("  MF_OBJECT_INVALID")
cpp_quote("} MF_OBJECT_TYPE;")
cpp_quote("")
cpp_quote("typedef enum _MFPOLICYMANAGER_ACTION {")
cpp_quote("  PEACTION_NO          = 0,")
cpp_quote("  PEACTION_PLAY        = 1,")
cpp_quote("  PEACTION_COPY        = 2,")
cpp_quote("  PEACTION_EXPORT      = 3,")
cpp_quote("  PEACTION_EXTRACT     = 4,")
cpp_quote("  PEACTION_RESERVED1   = 5,")
cpp_quote("  PEACTION_RESERVED2   = 6,")
cpp_quote("  PEACTION_RESERVED3   = 7,")
cpp_quote("  PEACTION_LAST        = 7")
cpp_quote("} MFPOLICYMANAGER_ACTION;")
cpp_quote("")
cpp_quote("typedef enum _MFRATE_DIRECTION {")
cpp_quote("  MFRATE_FORWARD,")
cpp_quote("  MFRATE_REVERSE")
cpp_quote("} MFRATE_DIRECTION;")
cpp_quote("")
cpp_quote("typedef enum _MFSequencerTopologyFlags {")
cpp_quote("  SequencerTopologyFlags_Last   = 0x00000001")
cpp_quote("} MFSequencerTopologyFlags;")
cpp_quote("")
cpp_quote("typedef enum _MFSHUTDOWN_STATUS {")
cpp_quote("  MFSHUTDOWN_INITIATED,")
cpp_quote("  MFSHUTDOWN_COMPLETED")
cpp_quote("} MFSHUTDOWN_STATUS;")
cpp_quote("")
cpp_quote("typedef enum _MFSINK_WMDRMACTION {")
cpp_quote("  MFSINK_WMDRMACTION_UNDEFINED    = 0,")
cpp_quote("  MFSINK_WMDRMACTION_ENCODE       = 1,")
cpp_quote("  MFSINK_WMDRMACTION_TRANSCODE    = 2,")
cpp_quote("  MFSINK_WMDRMACTION_TRANSCRYPT   = 3,")
cpp_quote("  MFSINK_WMDRMACTION_LAST         = 3")
cpp_quote("} MFSINK_WMDRMACTION;")
cpp_quote("")
cpp_quote("typedef enum MFSTREAMSINK_MARKER_TYPE {")
cpp_quote("  MFSTREAMSINK_MARKER_DEFAULT,")
cpp_quote("  MFSTREAMSINK_MARKER_ENDOFSEGMENT,")
cpp_quote("  MFSTREAMSINK_MARKER_TICK,")
cpp_quote("  MFSTREAMSINK_MARKER_EVENT")
cpp_quote("} MFSTREAMSINK_MARKER_TYPE;")
cpp_quote("")
cpp_quote("typedef enum MFTIMER_FLAGS {")
cpp_quote("  MFTIMER_RELATIVE   = 0x00000001")
cpp_quote("} MFTIMER_FLAGS;")
cpp_quote("")
cpp_quote("#if (WINVER >= 0x0601)")
cpp_quote("")
cpp_quote("typedef enum MFTOPLOGY_DXVA_MODE {")
cpp_quote("  MFTOPOLOGY_DXVA_DEFAULT   = 0,")
cpp_quote("  MFTOPOLOGY_DXVA_NONE      = 1,")
cpp_quote("  MFTOPOLOGY_DXVA_FULL      = 2")
cpp_quote("} MFTOPOLOGY_DXVA_MODE;")
cpp_quote("")
cpp_quote("typedef enum MFTOPOLOGY_HARDWARE_MODE {")
cpp_quote("  MFTOPOLOGY_HWMODE_SOFTWARE_ONLY   = 0,")
cpp_quote("  MFTOPOLOGY_HWMODE_USE_HARDWARE    = 1")
cpp_quote("} MFTOPOLOGY_HARDWARE_MODE;")
cpp_quote("")
cpp_quote("typedef struct _MFT_REGISTRATION_INFO {")
cpp_quote("  CLSID                  clsid;")
cpp_quote("  GUID                   guidCategory;")
cpp_quote("  UINT32                 uiFlags;")
cpp_quote("  LPCWSTR                pszName;")
cpp_quote("  DWORD                  cInTypes;")
cpp_quote("  MFT_REGISTER_TYPE_INFO *pInTypes;")
cpp_quote("  DWORD                  cOutTypes;")
cpp_quote("  MFT_REGISTER_TYPE_INFO *pOutTypes;")
cpp_quote("} MFT_REGISTRATION_INFO;")
cpp_quote("")
cpp_quote("#endif /*(WINVER >= 0x0601)*/")
cpp_quote("")
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;")
cpp_quote("")
cpp_quote("typedef enum SAMPLE_PROTECTION_VERSION {")
cpp_quote("  SAMPLE_PROTECTION_VERSION_NO           = 0,")
cpp_quote("  SAMPLE_PROTECTION_VERSION_BASIC_LOKI   = 1,")
cpp_quote("  SAMPLE_PROTECTION_VERSION_SCATTER      = 2,")
cpp_quote("  SAMPLE_PROTECTION_VERSION_RC4          = 3")
cpp_quote("} SAMPLE_PROTECTION_VERSION;")
cpp_quote("")
cpp_quote("typedef struct _MFINPUTTRUSTAUTHORITY_ACTION {")
cpp_quote("  MFPOLICYMANAGER_ACTION Action;")
cpp_quote("  BYTE                   *pbTicket;")
cpp_quote("  DWORD                  cbTicket;")
cpp_quote("} MFINPUTTRUSTAUTHORITY_ACCESS_ACTION;")
cpp_quote("")
cpp_quote("typedef struct _MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS {")
cpp_quote("  DWORD                               dwSize;")
cpp_quote("  DWORD                               dwVer;")
cpp_quote("  DWORD                               cbSignatureOffset;")
cpp_quote("  DWORD                               cbSignatureSize;")
cpp_quote("  DWORD                               cbExtensionOffset;")
cpp_quote("  DWORD                               cbExtensionSize;")
cpp_quote("  DWORD                               cActions;")
cpp_quote("  MFINPUTTRUSTAUTHORITY_ACCESS_ACTION rgOutputActions[1];")
cpp_quote("} MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS;")
cpp_quote("")
cpp_quote("typedef struct _MFNetCredentialManagerGetParam {")
cpp_quote("  HRESULT hrOp;")
cpp_quote("  WINBOOL    fAllowLoggedOnUser;")
cpp_quote("  WINBOOL    fClearTextPackage;")
cpp_quote("  LPCWSTR pszUrl;")
cpp_quote("  LPCWSTR pszSite;")
cpp_quote("  LPCWSTR pszRealm;")
cpp_quote("  LPCWSTR pszPackage;")
cpp_quote("  LONG    nRetries;")
cpp_quote("} MFNetCredentialManagerGetParam;")
cpp_quote("")
cpp_quote("#define MF_1_BYTE_ALIGNMENT     0x00000000")
cpp_quote("#define MF_2_BYTE_ALIGNMENT     0x00000001")
cpp_quote("#define MF_4_BYTE_ALIGNMENT     0x00000003")
cpp_quote("#define MF_8_BYTE_ALIGNMENT     0x00000007")
cpp_quote("#define MF_16_BYTE_ALIGNMENT    0x0000000F")
cpp_quote("#define MF_32_BYTE_ALIGNMENT    0x0000001F")
cpp_quote("#define MF_64_BYTE_ALIGNMENT    0x0000003F")
cpp_quote("#define MF_128_BYTE_ALIGNMENT   0x0000007F")
cpp_quote("#define MF_256_BYTE_ALIGNMENT   0x000000FF")
cpp_quote("#define MF_512_BYTE_ALIGNMENT   0x000001FF")
cpp_quote("")
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")
cpp_quote("")
cpp_quote("#define MF_RESOLUTION_MEDIASOURCE                                           0x00000001")
cpp_quote("#define MF_RESOLUTION_BYTESTREAM                                            0x00000002")
cpp_quote("#define MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE 0x00000010")
cpp_quote("#define MF_RESOLUTION_KEEP_BYTE_STREAM_ALIVE_ON_FAIL                        0x00000020")
cpp_quote("#define MF_RESOLUTION_READ                                                  0x00010000")
cpp_quote("#define MF_RESOLUTION_WRITE                                                 0x00020000")

/* FIXME: Properly declare followinf interfaces: */
interface IMFMediaSink;
interface IMFASFContentInfo;
interface IMFASFIndexer;
interface IMFASFMultiplexer;
interface IMFASFProfile;
interface IMFASFSplitter;
interface IMFPMPServer;
interface IMFPresentationClock;
interface IMFNetProxyLocator;
interface IMFRemoteDesktopPlugin;
interface IMFTransform;
interface IMFSampleGrabberSinkCallback;
interface IMFSequencerSource;
interface IMFQualityManager;
interface IMFSourceResolver;
interface IMFPresentationTimeSource;
interface IMFTopoLoader;
interface IMFTranscodeProfile;

cpp_quote("HRESULT MFCreate3GPMediaSink(IMFByteStream *pIByteStream,IMFMediaType *pVideoMediaType,IMFMediaType *pAudioMediaType,IMFMediaSink **ppIMediaSink);")
cpp_quote("HRESULT 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 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(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_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_VIDCAP_GUID, 0xc60ac5fe,0x252a,0x478f,0xa0,0xef,0xbc,0x8f,0xa5,0xf7,0xca,0xd3);")
