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

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