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

cpp_quote("DEFINE_PROPERTYKEY(MFPKEY_CLSID,                     0xc57a84c0,0x1a80,0x40a3,0x97,0xb5,0x92,0x72,0xa4,0x3,0xc8,0xae,  1);")
cpp_quote("DEFINE_PROPERTYKEY(MFPKEY_CATEGORY,                  0xc57a84c0,0x1a80,0x40a3,0x97,0xb5,0x92,0x72,0xa4,0x3,0xc8,0xae,  2);")
cpp_quote("DEFINE_PROPERTYKEY(MFPKEY_EXATTRIBUTE_SUPPORTED,     0x456fe843,0x3c87,0x40c0,0x94,0x9d,0x14,0x9,0xc9,0x7d,0xab,0x2c,  1);")
cpp_quote("DEFINE_PROPERTYKEY(MFPKEY_MULTICHANNEL_CHANNEL_MASK, 0x58bdaf8c,0x3224,0x4692,0x86,0xd0,0x44,0xd6,0x5c,0x5b,0xf8,0x2b, 1);")

cpp_quote("EXTERN_GUID(MF_SA_D3D_AWARE,                         0xeaa35c29,0x775e,0x488e,0x9b,0x61,0xb3,0x28,0x3e,0x49,0x58,0x3b);")
cpp_quote("EXTERN_GUID(MF_SA_REQUIRED_SAMPLE_COUNT,             0x18802c61,0x324b,0x4952,0xab,0xd0,0x17,0x6f,0xf5,0xc6,0x96,0xff);")
cpp_quote("EXTERN_GUID(MF_TRANSFORM_ASYNC,                      0xf81a699a,0x649a,0x497d,0x8c,0x73,0x29,0xf8,0xfe,0xd6,0xad,0x7a);")
cpp_quote("EXTERN_GUID(MF_TRANSFORM_ASYNC_UNLOCK,               0xe5666d6b,0x3422,0x4eb6,0xa4,0x21,0xda,0x7d,0xb1,0xf8,0xe2,0x7);")
cpp_quote("EXTERN_GUID(MF_TRANSFORM_FLAGS_Attribute,            0x9359bb7e,0x6275,0x46c4,0xa0,0x25,0x1c,0x1,0xe4,0x5f,0x1a,0x86);")
cpp_quote("EXTERN_GUID(MF_TRANSFORM_CATEGORY_Attribute,         0xceabba49,0x506d,0x4757,0xa6,0xff,0x66,0xc1,0x84,0x98,0x7e,0x4e);")
cpp_quote("EXTERN_GUID(MFT_TRANSFORM_CLSID_Attribute,           0x6821c42b,0x65a4,0x4e82,0x99,0xbc,0x9a,0x88,0x20,0x5e,0xcd,0xc);")
cpp_quote("EXTERN_GUID(MFT_INPUT_TYPES_Attributes,              0x4276c9b1,0x759d,0x4bf3,0x9c,0xd0,0xd,0x72,0x3d,0x13,0x8f,0x96);")
cpp_quote("EXTERN_GUID(MFT_OUTPUT_TYPES_Attributes,             0x8eae8cf3,0xa44f,0x4306,0xba,0x5c,0xbf,0x5d,0xda,0x24,0x28,0x18);")
cpp_quote("EXTERN_GUID(MFT_ENUM_HARDWARE_URL_Attribute,         0x2fb866ac,0xb078,0x4942,0xab,0x6c,0x0,0x3d,0x5,0xcd,0xa6,0x74);")
cpp_quote("EXTERN_GUID(MFT_FRIENDLY_NAME_Attribute,             0x314ffbae,0x5b41,0x4c95,0x9c,0x19,0x4e,0x7d,0x58,0x6f,0xac,0xe3);")
cpp_quote("EXTERN_GUID(MFT_CONNECTED_STREAM_ATTRIBUTE,          0x71eeb820,0xa59f,0x4de2,0xbc,0xec,0x38,0xdb,0x1d,0xd6,0x11,0xa4);")
cpp_quote("EXTERN_GUID(MFT_CONNECTED_TO_HW_STREAM,              0x34e6e728,0x6d6,0x4491,0xa5,0x53,0x47,0x95,0x65,0xd,0xb9,0x12);")
cpp_quote("EXTERN_GUID(MFT_PREFERRED_OUTPUTTYPE_Attribute,      0x7e700499,0x396a,0x49ee,0xb1,0xb4,0xf6,0x28,0x2,0x1e,0x8c,0x9d);")
cpp_quote("EXTERN_GUID(MFT_PROCESS_LOCAL_Attribute,             0x543186e4,0x4649,0x4e65,0xb5,0x88,0x4a,0xa3,0x52,0xaf,0xf3,0x79);")
cpp_quote("EXTERN_GUID(MFT_PREFERRED_ENCODER_PROFILE,           0x53004909,0x1ef5,0x46d7,0xa1,0x8e,0x5a,0x75,0xf8,0xb5,0x90,0x5f);")
cpp_quote("EXTERN_GUID(MFT_HW_TIMESTAMP_WITH_QPC_Attribute,     0x8d030fb8,0xcc43,0x4258,0xa2,0x2e,0x92,0x10,0xbe,0xf8,0x9b,0xe4);")
cpp_quote("EXTERN_GUID(MFT_FIELDOFUSE_UNLOCK_Attribute,         0x8ec2e9fd,0x9148,0x410d,0x83,0x1e,0x70,0x24,0x39,0x46,0x1a,0x8e);")
cpp_quote("EXTERN_GUID(MFT_CODEC_MERIT_Attribute,               0x88a7cb15,0x7b07,0x4a34,0x91,0x28,0xe6,0x4c,0x67,0x3,0xc4,0xd3);")
cpp_quote("EXTERN_GUID(MFT_ENUM_TRANSCODE_ONLY_ATTRIBUTE,       0x111ea8cd,0xb62a,0x4bdb,0x89,0xf6,0x67,0xff,0xcd,0xc2,0x45,0x8b);")
cpp_quote("EXTERN_GUID(MF_SA_REQUIRED_SAMPLE_COUNT_PROGRESSIVE,        0xb172d58e,0xfa77,0x4e48,0x8d,0x2a,0x1d,0xf2,0xd8,0x50,0xea,0xc2);")
cpp_quote("EXTERN_GUID(MF_SA_MINIMUM_OUTPUT_SAMPLE_COUNT,              0x851745d5,0xc3d6,0x476d,0x95,0x27,0x49,0x8e,0xf2,0xd1,0xd,0x18);")
cpp_quote("EXTERN_GUID(MF_SA_MINIMUM_OUTPUT_SAMPLE_COUNT_PROGRESSIVE,  0xf5523a5,0x1cb2,0x47c5,0xa5,0x50,0x2e,0xeb,0x84,0xb4,0xd1,0x4a);")
cpp_quote("EXTERN_GUID(MF_SA_D3D11_BINDFLAGS,                          0xeacf97ad,0x065c,0x4408,0xbe,0xe3,0xfd,0xcb,0xfd,0x12,0x8b,0xe2);")
cpp_quote("EXTERN_GUID(MF_SA_D3D11_USAGE,                              0xe85fe442,0x2ca3,0x486e,0xa9,0xc7,0x10,0x9d,0xda,0x60,0x98,0x80);")
cpp_quote("EXTERN_GUID(MF_SA_D3D11_AWARE,                              0x206b4fc8,0xfcf9,0x4c51,0xaf,0xe3,0x97,0x64,0x36,0x9e,0x33,0xa0);")
cpp_quote("EXTERN_GUID(MF_SA_D3D11_SHARED,                             0x7b8f32c3,0x6d96,0x4b89,0x92,0x3,0xdd,0x38,0xb6,0x14,0x14,0xf3 );")
cpp_quote("EXTERN_GUID(MF_SA_D3D11_SHARED_WITHOUT_MUTEX,               0x39dbd44d,0x2e44,0x4931,0xa4,0xc8,0x35,0x2d,0x3d,0xc4,0x21,0x15);")
cpp_quote("EXTERN_GUID(MF_SA_D3D11_ALLOW_DYNAMIC_YUV_TEXTURE,          0xce06d49f,0x613,0x4b9d,0x86,0xa6,0xd8,0xc4,0xf9,0xc1,0x0,0x75);")
cpp_quote("EXTERN_GUID(MF_SA_D3D11_HW_PROTECTED,                       0x3a8ba9d9,0x92ca,0x4307,0xa3,0x91,0x69,0x99,0xdb,0xf3,0xb6,0xce);")


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