/**
 * 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("  enum _MFT_DRAIN_TYPE {")
cpp_quote("    MFT_DRAIN_PRODUCE_TAILS   = 0x00000000,")
cpp_quote("    MFT_DRAIN_NO_TAILS        = 0x00000001 ")
cpp_quote("  };")
cpp_quote("")
cpp_quote("  enum _MFT_INPUT_STATUS_FLAGS {")
cpp_quote("    MFT_INPUT_STATUS_ACCEPT_DATA   = 0x00000001 ")
cpp_quote("  };")
cpp_quote("")
cpp_quote("  enum _MFT_INPUT_DATA_BUFFER_FLAGS {")
cpp_quote("    MFT_INPUT_DATA_BUFFER_PLACEHOLDER   = 0xFFFFFFFF ")
cpp_quote("  };")
cpp_quote("")
cpp_quote("  enum _MFT_OUTPUT_STREAM_INFO_FLAGS {")
cpp_quote("    MFT_OUTPUT_STREAM_WHOLE_SAMPLES              = 0x00000001,")
cpp_quote("    MFT_OUTPUT_STREAM_SINGLE_SAMPLE_PER_BUFFER   = 0x00000002,")
cpp_quote("    MFT_OUTPUT_STREAM_FIXED_SAMPLE_SIZE          = 0x00000004,")
cpp_quote("    MFT_OUTPUT_STREAM_DISCARDABLE                = 0x00000008,")
cpp_quote("    MFT_OUTPUT_STREAM_OPTIONAL                   = 0x00000010,")
cpp_quote("    MFT_OUTPUT_STREAM_PROVIDES_SAMPLES           = 0x00000100,")
cpp_quote("    MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES        = 0x00000200,")
cpp_quote("    MFT_OUTPUT_STREAM_LAZY_READ                  = 0x00000400,")
cpp_quote("    MFT_OUTPUT_STREAM_REMOVABLE                  = 0x00000800 ")
cpp_quote("  };")
cpp_quote("")
cpp_quote("  enum _MFT_OUTPUT_STATUS_FLAGS {")
cpp_quote("    MFT_OUTPUT_STATUS_SAMPLE_READY   = 0x00000001 ")
cpp_quote("  };")
cpp_quote("")
cpp_quote("  enum _MFT_OUTPUT_DATA_BUFFER_FLAGS {")
cpp_quote("    MFT_OUTPUT_DATA_BUFFER_INCOMPLETE      = 0x01000000,")
cpp_quote("    MFT_OUTPUT_DATA_BUFFER_FORMAT_CHANGE   = 0x00000100,")
cpp_quote("    MFT_OUTPUT_DATA_BUFFER_STREAM_END      = 0x00000200,")
cpp_quote("    MFT_OUTPUT_DATA_BUFFER_NO_SAMPLE       = 0x00000300 ")
cpp_quote("  };")
cpp_quote("")
cpp_quote("  enum _MFT_INPUT_STREAM_INFO_FLAGS {")
cpp_quote("    MFT_INPUT_STREAM_WHOLE_SAMPLES              = 0x00000001,")
cpp_quote("    MFT_INPUT_STREAM_SINGLE_SAMPLE_PER_BUFFER   = 0x00000002,")
cpp_quote("    MFT_INPUT_STREAM_FIXED_SAMPLE_SIZE          = 0x00000004,")
cpp_quote("    MFT_INPUT_STREAM_HOLDS_BUFFERS              = 0x00000008,")
cpp_quote("    MFT_INPUT_STREAM_DOES_NOT_ADDREF            = 0x00000100,")
cpp_quote("    MFT_INPUT_STREAM_REMOVABLE                  = 0x00000200,")
cpp_quote("    MFT_INPUT_STREAM_OPTIONAL                   = 0x00000400,")
cpp_quote("    MFT_INPUT_STREAM_PROCESSES_IN_PLACE         = 0x00000800 ")
cpp_quote("  };")
cpp_quote("")
cpp_quote("  typedef enum _VSS_HARDWARE_OPTIONS {")
cpp_quote("    VSS_BREAKEX_FLAG_MASK_LUNS                      = 0x00000001,")
cpp_quote("    VSS_BREAKEX_FLAG_MAKE_READ_WRITE                = 0x00000002,")
cpp_quote("    VSS_BREAKEX_FLAG_REVERT_IDENTITY_ALL            = 0x00000004,")
cpp_quote("    VSS_BREAKEX_FLAG_REVERT_IDENTITY_NONE           = 0x00000008,")
cpp_quote("    VSS_ONLUNSTATECHANGE_NOTIFY_READ_WRITE          = 0x00000100,")
cpp_quote("    VSS_ONLUNSTATECHANGE_NOTIFY_LUN_PRE_RECOVERY    = 0x00000200,")
cpp_quote("    VSS_ONLUNSTATECHANGE_NOTIFY_LUN_POST_RECOVERY   = 0x00000400,")
cpp_quote("    VSS_ONLUNSTATECHANGE_DO_MASK_LUNS               = 0x00000800 ")
cpp_quote("  } VSS_HARDWARE_OPTIONS, *PVSS_HARDWARE_OPTIONS;")

enum _MFT_SET_TYPE_FLAGS {
    MFT_SET_TYPE_TEST_ONLY   = 0x00000001
};

enum _MFT_PROCESS_OUTPUT_STATUS {
    MFT_PROCESS_OUTPUT_STATUS_NEW_STREAMS   = 0x00000100
};

enum _MFT_PROCESS_OUTPUT_FLAGS {
    MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER   = 0x00000001
};

typedef enum _MFT_MESSAGE_TYPE {
    MFT_MESSAGE_COMMAND_FLUSH            = 0x00000000,
    MFT_MESSAGE_COMMAND_DRAIN            = 0x00000001,
    MFT_MESSAGE_SET_D3D_MANAGER          = 0x00000002,
    MFT_MESSAGE_NOTIFY_BEGIN_STREAMING   = 0x10000000,
    MFT_MESSAGE_NOTIFY_END_STREAMING     = 0x10000001,
    MFT_MESSAGE_NOTIFY_END_OF_STREAM     = 0x10000002,
    MFT_MESSAGE_NOTIFY_START_OF_STREAM   = 0x10000003,
    MFT_MESSAGE_COMMAND_MARKER           = 0x20000000
} MFT_MESSAGE_TYPE;

typedef struct _MFT_INPUT_STREAM_INFO {
    LONGLONG hnsMaxLatency;
    DWORD    dwFlags;
    DWORD    cbSize;
    DWORD    cbMaxLookahead;
    DWORD    cbAlignment;
} MFT_INPUT_STREAM_INFO;

typedef struct _MFT_OUTPUT_STREAM_INFO {
    DWORD dwFlags;
    DWORD cbSize;
    DWORD cbAlignment;
} MFT_OUTPUT_STREAM_INFO;

typedef struct _MFT_OUTPUT_DATA_BUFFER {
    DWORD         dwStreamID;
    IMFSample     *pSample;
    DWORD         dwStatus;
    IMFCollection *pEvents;
} MFT_OUTPUT_DATA_BUFFER;

[
    object,
    uuid(bf94c121-5b05-4e6f-8000-ba598961414d)
]
interface IMFTransform : IUnknown
{
    HRESULT GetStreamLimits([out] DWORD *pdwInputMinimum, [out] DWORD *pdwInputMaximum,
            [out] DWORD *pdwOutputMinimum, [out] DWORD *pdwOutputMaximum);
    HRESULT GetStreamCount([out] DWORD *pcInputStreams, [out] DWORD *pcOutputStreams);
    HRESULT GetStreamIDs(DWORD dwInputIDArraySize, [out,size_is(dwInputIDArraySize)] DWORD *pdwInputIDs,
            DWORD dwOutputIDArraySize, [out,size_is(dwOutputIDArraySize)] DWORD *pdwOutputIDs);
    HRESULT GetInputStreamInfo(DWORD dwInputStreamID, [out] MFT_INPUT_STREAM_INFO *pStreamInfo);
    HRESULT GetOutputStreamInfo(DWORD dwOutputStreamID, [out] MFT_OUTPUT_STREAM_INFO *pStreamInfo);
    HRESULT GetAttributes([out] IMFAttributes **pAttributes);
    HRESULT GetInputStreamAttributes(DWORD dwInputStreamID, [out] IMFAttributes **pAttributes);
    HRESULT GetOutputStreamAttributes(DWORD dwOutputStreamID, [out] IMFAttributes **pAttributes);
    HRESULT DeleteInputStream(DWORD dwStreamID);
    HRESULT AddInputStreams(DWORD cStreams, [in] DWORD *adwStreamIDs);
    HRESULT GetInputAvailableType(DWORD dwInputStreamID, DWORD dwTypeIndex, [out] IMFMediaType **ppType);
    HRESULT GetOutputAvailableType(DWORD dwOutputStreamID, DWORD dwTypeIndex, [out] IMFMediaType **ppType);
    HRESULT SetInputType(DWORD dwInputStreamID, [in]  IMFMediaType *pType, DWORD dwFlags);
    HRESULT SetOutputType(DWORD dwOutputStreamID, [in] IMFMediaType *pType, DWORD dwFlags);
    HRESULT GetInputCurrentType(DWORD dwInputStreamID, [out] IMFMediaType **ppType);
    HRESULT GetOutputCurrentType(DWORD dwOutputStreamID, [out] IMFMediaType **ppType);
    HRESULT GetInputStatus(DWORD dwInputStreamID, [out] DWORD *pdwFlags);
    HRESULT GetOutputStatus([out] DWORD *pdwFlags);
    HRESULT SetOutputBounds(LONGLONG hnsLowerBound, LONGLONG hnsUpperBound);
    HRESULT ProcessEvent(DWORD dwInputStreamID, [in] IMFMediaEvent *pEvent);
    HRESULT ProcessMessage(MFT_MESSAGE_TYPE eMessage, ULONG_PTR ulParam);
    [local] HRESULT ProcessInput(DWORD dwInputStreamID, IMFSample *pSample, DWORD dwFlags);
    [local] HRESULT ProcessOutput(DWORD dwFlags, DWORD cOutputBufferCount,
                                  [in,out,size_is(cOutputBufferCount)] MFT_OUTPUT_DATA_BUFFER *pOutputSamples,
                                  [out] DWORD *pdwStatus);
}

/* In gcc, declaring something 'extern' and then initializing it
   generates a warning.  */
cpp_quote("#if defined(__GNUC__) && !defined(__cplusplus)")
cpp_quote("#undef EXTERN_C")
cpp_quote("#define EXTERN_C")
cpp_quote("#endif")
cpp_quote("")

cpp_quote("EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY MFPKEY_CLSID = {{0xc57a84c0,0x1a80,0x40a3,{0x97,0xb5,0x92,0x72,0xa4,0x3,0xc8,0xae}}, 0x01};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY MFPKEY_CATEGORY = {{0xc57a84c0,0x1a80,0x40a3,{0x97,0xb5,0x92,0x72,0xa4,0x3,0xc8,0xae}}, 0x02 };")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY MFPKEY_EXATTRIBUTE_SUPPORTED = {{0x456fe843,0x3c87,0x40c0,{0x94,0x9d,0x14,0x9,0xc9,0x7d,0xab,0x2c}}, 0x01};")
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY MFPKEY_MULTICHANNEL_CHANNEL_MASK  = {{0x58bdaf8c,0x3224,0x4692,{0x86,0xd0,0x44,0xd6,0x5c,0x5b,0xf8,0x2b}}, 0x01};")

cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MF_SA_D3D_AWARE = {0xeaa35c29,0x775e,0x488e,{0x9b,0x61,0xb3,0x28,0x3e,0x49,0x58,0x3b}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MF_SA_REQUIRED_SAMPLE_COUNT = {0x18802c61,0x324b,0x4952,{0xab,0xd0,0x17,0x6f,0xf5,0xc6,0x96,0xff}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MF_TRANSFORM_ASYNC = {0xf81a699a,0x649a,0x497d,{0x8c,0x73,0x29,0xf8,0xfe,0xd6,0xad,0x7a}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MF_TRANSFORM_ASYNC_UNLOCK = {0xe5666d6b,0x3422,0x4eb6,{0xa4,0x21,0xda,0x7d,0xb1,0xf8,0xe2,0x7}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MF_TRANSFORM_FLAGS_Attribute = {0x9359bb7e,0x6275,0x46c4,{0xa0,0x25,0x1c,0x1,0xe4,0x5f,0x1a,0x86}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MF_TRANSFORM_CATEGORY_Attribute = {0xceabba49,0x506d,0x4757,{0xa6,0xff,0x66,0xc1,0x84,0x98,0x7e,0x4e}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MFT_TRANSFORM_CLSID_Attribute = {0x6821c42b,0x65a4,0x4e82,{0x99,0xbc,0x9a,0x88,0x20,0x5e,0xcd,0xc}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MFT_INPUT_TYPES_Attributes = {0x4276c9b1,0x759d,0x4bf3, {0x9c,0xd0,0xd,0x72,0x3d,0x13,0x8f,0x96}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MFT_OUTPUT_TYPES_Attributes = {0x8eae8cf3,0xa44f,0x4306,{0xba,0x5c,0xbf,0x5d,0xda,0x24,0x28,0x18}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MFT_ENUM_HARDWARE_URL_Attribute = {0x2fb866ac,0xb078,0x4942,{0xab,0x6c,0x0,0x3d,0x5,0xcd,0xa6,0x74}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MFT_FRIENDLY_NAME_Attribute = {0x314ffbae,0x5b41,0x4c95,{0x9c,0x19,0x4e,0x7d,0x58,0x6f,0xac,0xe3}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MFT_CONNECTED_STREAM_ATTRIBUTE  = {0x71eeb820,0xa59f,0x4de2,{0xbc,0xec,0x38,0xdb,0x1d,0xd6,0x11,0xa4}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MFT_CONNECTED_TO_HW_STREAM = {0x34e6e728,0x6d6,0x4491,{0xa5,0x53,0x47,0x95,0x65,0xd,0xb9,0x12}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MFT_PREFERRED_OUTPUTTYPE_Attribute = {0x7e700499,0x396a,0x49ee,{0xb1,0xb4,0xf6,0x28,0x2,0x1e,0x8c,0x9d}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MFT_PROCESS_LOCAL_Attribute = {0x543186e4,0x4649,0x4e65,{0xb5,0x88,0x4a,0xa3,0x52,0xaf,0xf3,0x79}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MFT_PREFERRED_ENCODER_PROFILE = {0x53004909,0x1ef5,0x46d7,{0xa1,0x8e,0x5a,0x75,0xf8,0xb5,0x90,0x5f}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MFT_HW_TIMESTAMP_WITH_QPC_Attribute = {0x8d030fb8,0xcc43,0x4258,{0xa2,0x2e,0x92,0x10,0xbe,0xf8,0x9b,0xe4}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MFT_FIELDOFUSE_UNLOCK_Attribute = {0x8ec2e9fd,0x9148,0x410d,{0x83,0x1e,0x70,0x24,0x39,0x46,0x1a,0x8e}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MFT_CODEC_MERIT_Attribute = {0x88a7cb15,0x7b07,0x4a34,{0x91,0x28,0xe6,0x4c,0x67,0x3,0xc4,0xd3}};")
cpp_quote("EXTERN_C const DECLSPEC_SELECTANY GUID MFT_ENUM_TRANSCODE_ONLY_ATTRIBUTE = {0x111ea8cd,0xb62a,0x4bdb,{0x89,0xf6,0x67,0xff,0xcd,0xc2,0x45,0x8b}};")


cpp_quote("#if (WINVER >= 0x0601)")
cpp_quote("HRESULT WINAPI MFCreateTransformActivate(IMFActivate **ppActivate);")
cpp_quote("#endif /*(WINVER >= 0x0601)*/")
