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

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

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

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

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