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

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

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 (_WIN32_WINNT >= 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 /*(_WIN32_WINNT >= 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 (_WIN32_WINNT >= 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 (_WIN32_WINNT >= 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 /*(_WIN32_WINNT >= 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;

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 (_WIN32_WINNT >= 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")
