/**
 * 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 "unknwn.idl";
import "propsys.idl";
import "mediaobj.idl";

cpp_quote("#include <mmreg.h>")
#include <mmreg.h>

typedef ULONGLONG QWORD;

typedef enum _MF_ATTRIBUTE_TYPE {
    MF_ATTRIBUTE_UINT32     = VT_UI4,
    MF_ATTRIBUTE_UINT64     = VT_UI8,
    MF_ATTRIBUTE_DOUBLE     = VT_R8,
    MF_ATTRIBUTE_GUID       = VT_CLSID,
    MF_ATTRIBUTE_STRING     = VT_LPWSTR,
    MF_ATTRIBUTE_BLOB       = VT_VECTOR | VT_UI1,
    MF_ATTRIBUTE_IUNKNOWN   = VT_UNKNOWN
} MF_ATTRIBUTE_TYPE;

typedef enum _MF_ATTRIBUTES_MATCH_TYPE {
    MF_ATTRIBUTES_MATCH_OUR_ITEMS      = 0,
    MF_ATTRIBUTES_MATCH_THEIR_ITEMS    = 1,
    MF_ATTRIBUTES_MATCH_ALL_ITEMS      = 2,
    MF_ATTRIBUTES_MATCH_INTERSECTION   = 3,
    MF_ATTRIBUTES_MATCH_SMALLER        = 4 
} MF_ATTRIBUTES_MATCH_TYPE;

[
    object,
    uuid(2cd2d921-c447-44a7-a13c-4adabfc247e3)
]
interface IMFAttributes : IUnknown
{
    HRESULT GetItem(REFGUID guidKey, [in, out, ptr] PROPVARIANT *pValue);
    HRESULT GetItemType(REFGUID guidKey, [out] MF_ATTRIBUTE_TYPE *pType);
    HRESULT CompareItem(REFGUID guidKey, REFPROPVARIANT Value, [out] BOOL *pbResult);
    HRESULT Compare(IMFAttributes *pTheirs, MF_ATTRIBUTES_MATCH_TYPE MatchType, [out] BOOL *pbResult);
    HRESULT GetUINT32(REFGUID guidKey, [out] UINT32 *punValue);
    HRESULT GetUINT64(REFGUID guidKey, [out] UINT64 *punValue);
    HRESULT GetDouble(REFGUID guidKey, [out] double *pfValue);
    HRESULT GetGUID(REFGUID guidKey, [out] GUID *pguidValue);
    HRESULT GetStringLength(REFGUID guidKey, [out] UINT32 *pcchLength);
    HRESULT GetString(REFGUID guidKey, [out, size_is(cchBufSize)] LPWSTR pwszValue, UINT32 cchBufSize,
            [in, out, ptr] UINT32 *pcchLength);
    HRESULT GetAllocatedString(REFGUID guidKey, [out, size_is(,*pcchLength+1)] LPWSTR *ppwszValue,
            [out] UINT32 *pcchLength);
    HRESULT GetBlobSize(REFGUID guidKey, [out] UINT32 *pcbBlobSize);
    HRESULT GetBlob(REFGUID guidKey, [out, size_is(cbBufSize)] UINT8 *pBuf, UINT32 cbBufSize,
            [in, out, ptr] UINT32 *pcbBlobSize);
    HRESULT GetAllocatedBlob(REFGUID guidKey, [out, size_is(,*pcbSize)] UINT8 **ppBuf, [out] UINT32 *pcbSize);
    HRESULT GetUnknown(REFGUID guidKey, REFIID riid, [out, iid_is(riid)] LPVOID *ppv);
    HRESULT SetItem(REFGUID guidKey, REFPROPVARIANT Value);
    HRESULT DeleteItem(REFGUID guidKey);
    HRESULT DeleteAllItems();
    HRESULT SetUINT32(REFGUID guidKey, UINT32  unValue);
    HRESULT SetUINT64(REFGUID guidKey, UINT64  unValue);
    HRESULT SetDouble(REFGUID guidKey, double fValue);
    HRESULT SetGUID(REFGUID guidKey, REFGUID guidValue);
    HRESULT SetString(REFGUID guidKey, [in, string] LPCWSTR wszValue);
    HRESULT SetBlob(REFGUID guidKey, [in, size_is(cbBufSize)] const UINT8* pBuf, UINT32 cbBufSize);
    HRESULT SetUnknown(REFGUID guidKey, [in] IUnknown *pUnknown);
    HRESULT LockStore();
    HRESULT UnlockStore();
    HRESULT GetCount([out] UINT32 *pcItems);
    HRESULT GetItemByIndex(UINT32 unIndex, [out] GUID *pguidKey, [in, out, ptr] PROPVARIANT *pValue);
    HRESULT CopyAllItems([in] IMFAttributes *pDest);
}

enum MF_ATTRIBUTE_SERIALIZE_OPTIONS {
    MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF = 0x00000001
};

[
    object,
    uuid(045fa593-8799-42b8-bc8d-8968c6453507),
    local
]
interface IMFMediaBuffer : IUnknown
{
    HRESULT Lock([out] BYTE **ppbBuffer, [out] DWORD *pcbMaxLength, [out] DWORD *pcbCurrentLength);
    HRESULT Unlock();
    HRESULT GetCurrentLength([out] DWORD *pcbCurrentLength);
    HRESULT SetCurrentLength([in] DWORD cbCurrentLength);
    HRESULT GetMaxLength([out] DWORD *pcbMaxLength);
}

[
    object,
    uuid(c40a00f2-b93a-4d80-ae8c-5a1c634f58e4),
    local
]
interface IMFSample : IMFAttributes
{
    HRESULT GetSampleFlags([out] DWORD *pdwSampleFlags);
    HRESULT SetSampleFlags([in] DWORD dwSampleFlags);
    HRESULT GetSampleTime([out] LONGLONG *phnsSampleTime);
    HRESULT SetSampleTime([in] LONGLONG hnsSampleTime);
    HRESULT GetSampleDuration([out] LONGLONG *phnsSampleDuration);
    HRESULT SetSampleDuration([in] LONGLONG hnsSampleDuration);
    HRESULT GetBufferCount([out] DWORD *pdwBufferCount);
    HRESULT GetBufferByIndex([in] DWORD dwIndex, [out] IMFMediaBuffer **ppBuffer);
    HRESULT ConvertToContiguousBuffer([out] IMFMediaBuffer **ppBuffer);
    HRESULT AddBuffer([in] IMFMediaBuffer *pBuffer);
    HRESULT RemoveBufferByIndex([in] DWORD dwIndex);
    HRESULT RemoveAllBuffers();
    HRESULT GetTotalLength([out] DWORD *pcbTotalLength);
    HRESULT CopyToBuffer([in] IMFMediaBuffer *pBuffer);
}

[
    object,
    uuid(7dc9d5f9-9ed9-44ec-9bbf-0600bb589fbb),
    local
]
interface IMF2DBuffer : IUnknown
{
    HRESULT Lock2D([out] BYTE **pbScanline0, [out] LONG *plPitch);
    HRESULT Unlock2D();
    HRESULT GetScanline0AndPitch([out] BYTE **pbScanline0, [out] LONG *plPitch);
    HRESULT IsContiguousFormat([out] BOOL *pfIsContiguous);
    HRESULT GetContiguousLength([out] DWORD *pcbLength);
    HRESULT ContiguousCopyTo([out, size_is(cbDestBuffer)] BYTE *pbDestBuffer, [in] DWORD cbDestBuffer);
    HRESULT ContiguousCopyFrom([in, size_is(cbSrcBuffer)] const BYTE *pbSrcBuffer, [in] DWORD cbSrcBuffer);
}

[
    object,
    uuid(44ae0fa8-ea31-4109-8d2e-4cae4997c555),
    local
]
interface IMFMediaType : IMFAttributes
{
    HRESULT GetMajorType([out] GUID *pguidMajorType);
    HRESULT IsCompressedFormat([out] BOOL *pfCompressed);
    HRESULT IsEqual([in] IMFMediaType *pIMediaType, [out] DWORD *pdwFlags);
    HRESULT GetRepresentation([in] GUID guidRepresentation, [out] LPVOID *ppvRepresentation);
    HRESULT FreeRepresentation([in] GUID guidRepresentation, [in] LPVOID pvRepresentation);
}

[
    object,
    uuid(26a0adc3-ce26-4672-9304-69552edd3faf),
    local
]
interface IMFAudioMediaType : IMFMediaType
{
    const WAVEFORMATEX *GetAudioFormat();
}

typedef struct {
    GUID guidMajorType;
    GUID guidSubtype;
} MFT_REGISTER_TYPE_INFO;

typedef struct _MFRatio {
    DWORD Numerator;
    DWORD Denominator;
} MFRatio;

typedef struct _MFOffset {
    WORD  fract;
    short value;
} MFOffset;

typedef struct _MFVideoArea {
    MFOffset OffsetX;
    MFOffset OffsetY;
    SIZE     Area;
} MFVideoArea;

typedef enum _MFVideoChromaSubsampling {
    MFVideoChromaSubsampling_Unknown                        = 0,
    MFVideoChromaSubsampling_ProgressiveChroma              = 0x8,
    MFVideoChromaSubsampling_Horizontally_Cosited           = 0x4,
    MFVideoChromaSubsampling_Vertically_Cosited             = 0x2,
    MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes = 0x1,
    MFVideoChromaSubsampling_MPEG2
        = MFVideoChromaSubsampling_Horizontally_Cosited
        | MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes,
    MFVideoChromaSubsampling_MPEG1
        = MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes,
    MFVideoChromaSubsampling_DV_PAL
        = MFVideoChromaSubsampling_Horizontally_Cosited
        | MFVideoChromaSubsampling_Vertically_Cosited,
    MFVideoChromaSubsampling_Cosited
        = MFVideoChromaSubsampling_Horizontally_Cosited
        | MFVideoChromaSubsampling_Vertically_Cosited
        | MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes,
    MFVideoChromaSubsampling_Last        = MFVideoChromaSubsampling_Cosited + 1,
    MFVideoChromaSubsampling_ForceDWORD  = 0x7fffffff
} MFVideoChromaSubsampling;

typedef enum _MFVideoInterlaceMode {
    MFVideoInterlace_Unknown                     = 0,
    MFVideoInterlace_Progressive                 = 2,
    MFVideoInterlace_FieldInterleavedUpperFirst  = 3,
    MFVideoInterlace_FieldInterleavedLowerFirst  = 4,
    MFVideoInterlace_FieldSingleUpper            = 5,
    MFVideoInterlace_FieldSingleLower            = 6,
    MFVideoInterlace_MixedInterlaceOrProgressive = 7,
    MFVideoInterlace_Last,
    MFVideoInterlace_ForceDWORD                  = 0x7fffffff
} MFVideoInterlaceMode;

typedef enum _MFVideoTransferFunction {
    MFVideoTransFunc_Unknown      = 0,
    MFVideoTransFunc_10           = 1,
    MFVideoTransFunc_18           = 2,
    MFVideoTransFunc_20           = 3,
    MFVideoTransFunc_22           = 4,
    MFVideoTransFunc_709          = 5,
    MFVideoTransFunc_240M         = 6,
    MFVideoTransFunc_sRGB         = 7,
    MFVideoTransFunc_28           = 8,
    MFVideoTransFunc_Log_100      = 9,
    MFVideoTransFunc_Log_316      = 10,
    MFVideoTransFunc_709_sym      = 11,
    MFVideoTransFunc_Last,
    MFVideoTransFunc_ForceDWORD   = 0x7FFFFFFF
} MFVideoTransferFunction;

typedef enum _MFVideoTransferMatrix {
    MFVideoTransferMatrix_Unknown      = 0,
    MFVideoTransferMatrix_BT709        = 1,
    MFVideoTransferMatrix_BT601        = 2,
    MFVideoTransferMatrix_SMPTE240M    = 3,
    MFVideoTransferMatrix_Last,
    MFVideoTransferMatrix_ForceDWORD   = 0x7FFFFFFF
} MFVideoTransferMatrix;

typedef enum _MFVideoPrimaries {
    MFVideoPrimaries_Unknown         = 0,
    MFVideoPrimaries_reserved        = 1,
    MFVideoPrimaries_BT709           = 2,
    MFVideoPrimaries_BT470_2_SysM    = 3,
    MFVideoPrimaries_BT470_2_SysBG   = 4,
    MFVideoPrimaries_SMPTE170M       = 5,
    MFVideoPrimaries_SMPTE240M       = 6,
    MFVideoPrimaries_EBU3213         = 7,
    MFVideoPrimaries_SMPTE_C         = 8,
    MFVideoPrimaries_Last,
    MFVideoPrimaries_ForceDWORD      = 0x7FFFFFFF
} MFVideoPrimaries;

typedef enum _MFVideoLighting {
  MFVideoLighting_Unknown      = 0,
  MFVideoLighting_bright       = 1,
  MFVideoLighting_office       = 2,
  MFVideoLighting_dim          = 3,
  MFVideoLighting_dark         = 4,
  MFVideoLighting_Last,
  MFVideoLighting_ForceDWORD   = 0x7FFFFFFF
} MFVideoLighting;

typedef enum _MFNominalRange {
    MFNominalRange_Unknown   = 0,
    MFNominalRange_Normal    = 1,
    MFNominalRange_Wide      = 2,
    MFNominalRange_0_255     = 1,
    MFNominalRange_16_235    = 2,
    MFNominalRange_48_208    = 3,
    MFNominalRange_64_127    = 4
} MFNominalRange;

typedef struct _MFVideoInfo {
    DWORD                    dwWidth;
    DWORD                    dwHeight;
    MFRatio                  PixelAspectRatio;
    MFVideoChromaSubsampling SourceChromaSubsampling;
    MFVideoInterlaceMode     InterlaceMode;
    MFVideoTransferFunction  TransferFunction;
    MFVideoPrimaries         ColorPrimaries;
    MFVideoTransferMatrix    TransferMatrix;
    MFVideoLighting          SourceLighting;
    MFRatio                  FramesPerSecond;
    MFNominalRange           NominalRange;
    MFVideoArea              GeometricAperture;
    MFVideoArea              MinimumDisplayAperture;
    MFVideoArea              PanScanAperture;
    unsigned __int64         VideoFlags;
} MFVideoInfo;

typedef struct _MFVideoCompressedInfo {
    LONGLONG AvgBitrate;
    LONGLONG AvgBitErrorRate;
    DWORD    MaxKeyFrameSpacing;
} MFVideoCompressedInfo;

typedef struct _MFARGB {
    BYTE rgbBlue;
    BYTE rgbGreen;
    BYTE rgbRed;
    BYTE rgbAlpha;
} MFARGB;

typedef struct __MFAYUVSample {
    BYTE bCrValue;
    BYTE bCbValue;
    BYTE bYValue;
    BYTE bSampleAlpha8;
} MFAYUVSample;

typedef union _MFPaletteEntry {
    MFARGB       ARGB;
    MFAYUVSample AYCbCr;
} MFPaletteEntry;

typedef struct _MFVideoSurfaceInfo {
    DWORD          Format;
    DWORD          PaletteEntries;
    MFPaletteEntry Palette[];
} MFVideoSurfaceInfo;

typedef struct _MFVIDEOFORMAT {
    DWORD                 dwSize;
    MFVideoInfo           videoInfo;
    GUID                  guidFormat;
    MFVideoCompressedInfo compressedInfo;
    MFVideoSurfaceInfo    surfaceInfo;
} MFVIDEOFORMAT;

[
    object,
    uuid(b99f381f-a8f9-47a2-a5af-ca3a225a3890),
    local
]
interface IMFVideoMediaType : IMFMediaType
{
    const MFVIDEOFORMAT *GetVideoFormat();

    HRESULT GetVideoRepresentation([in] GUID guidRepresentation, [out] LPVOID *ppvRepresentation,
            [in] LONG lStride);
}

[
    object,
    uuid(ac6b7889-0740-4d51-8619-905994a55cc6)
]
interface IMFAsyncResult : IUnknown
{
    HRESULT GetState([out] IUnknown **ppunkState);
    HRESULT GetStatus();
    HRESULT SetStatus([in] HRESULT hrStatus);
    HRESULT GetObject([out] IUnknown **ppObject);
    [local] IUnknown *GetStateNoAddRef();
}

[
    object,
    uuid(a27003cf-2354-4f2a-8d6a-ab7cff15437e),
]
interface IMFAsyncCallback : IUnknown
{
    HRESULT GetParameters([out] DWORD *pdwFlags, [out] DWORD *pdwQueue);
    HRESULT Invoke([in] IMFAsyncResult *pAsyncResult);
}

[
    object,
    uuid(a27003d0-2354-4f2a-8d6a-ab7cff15437e),
]
interface IMFRemoteAsyncCallback : IUnknown
{
    HRESULT Invoke([in] HRESULT hr, [in] IUnknown *pRemoteResult);
}

cpp_quote("#define MFASYNC_FAST_IO_PROCESSING_CALLBACK  0x0001")
cpp_quote("#define MFASYNC_SIGNAL_CALLBACK              0x0002" )

cpp_quote("#define MFASYNC_CALLBACK_QUEUE_UNDEFINED      0x00000000")
cpp_quote("#define MFASYNC_CALLBACK_QUEUE_STANDARD       0x00000001")
cpp_quote("#define MFASYNC_CALLBACK_QUEUE_RT             0x00000002")
cpp_quote("#define MFASYNC_CALLBACK_QUEUE_IO             0x00000003")
cpp_quote("#define MFASYNC_CALLBACK_QUEUE_TIMER          0x00000004")
cpp_quote("#define MFASYNC_CALLBACK_QUEUE_LONG_FUNCTION  0x00000007")
cpp_quote("#define MFASYNC_CALLBACK_QUEUE_PRIVATE_MASK   0xffff0000")
cpp_quote("#define MFASYNC_CALLBACK_QUEUE_ALL            0xffffffff")

typedef DWORD MediaEventType;

[
    object,
    uuid(df598932-f10c-4e39-bba2-c308f101daa3)
]
interface IMFMediaEvent : IMFAttributes
{
    HRESULT GetType([out] MediaEventType *pmet);
    HRESULT GetExtendedType([out] GUID *pguidExtendedType);
    HRESULT GetStatus([out] HRESULT *phrStatus);
    HRESULT GetValue([out] PROPVARIANT *pvValue);
}

[
    object,
    uuid(2cd0bd52-bcd5-4b89-b62c-eadc0c031e7d)
]
interface IMFMediaEventGenerator : IUnknown
{
    HRESULT GetEvent([in] DWORD dwFlags, [out] IMFMediaEvent **ppEvent);

    [local] HRESULT BeginGetEvent([in] IMFAsyncCallback *pCallback, [in] IUnknown *punkState);
    [call_as(BeginGetEvent)] HRESULT RemoteBeginGetEvent([in] IMFRemoteAsyncCallback *pCallback);

    [local] HRESULT EndGetEvent([in] IMFAsyncResult *pResult, [out] IMFMediaEvent **ppEvent);
    [call_as(EndGetEvent)] HRESULT RemoteEndGetEvent([in] IUnknown *pResult, [out] DWORD *pcbEvent,
                                   [out, size_is(,*pcbEvent)] BYTE **ppbEvent);

    HRESULT QueueEvent([in] MediaEventType met, [in] REFGUID guidExtendedType, [in] HRESULT hrStatus,
            [in, unique] const PROPVARIANT *pvValue);
}

typedef enum _MFBYTESTREAM_SEEK_ORIGIN {
    msoBegin,
    msoCurrent
} MFBYTESTREAM_SEEK_ORIGIN;

[
    object,
    uuid(ad4c1b00-4bf7-422f-9175-756693d9130d),
]
interface IMFByteStream : IUnknown
{
    HRESULT GetCapabilities([out] DWORD *pdwCapabilities);
    HRESULT GetLength([out] QWORD *pqwLength);
    HRESULT SetLength([in] QWORD qwLength);
    HRESULT GetCurrentPosition([out] QWORD *pqwPosition);
    HRESULT SetCurrentPosition([in] QWORD qwPosition);
    HRESULT IsEndOfStream([out] BOOL *pfEndOfStream);

    [local] HRESULT Read([in] BYTE* pb, [in] ULONG cb, [out] ULONG *pcbRead);
    [local] HRESULT BeginRead([in] BYTE *pb, [in] ULONG cb, [in] IMFAsyncCallback *pCallback, [in] IUnknown *punkState);
    [local] HRESULT EndRead([in] IMFAsyncResult *pResult, [out] ULONG *pcbRead);
    [local] HRESULT Write([in] const BYTE *pb, [in] ULONG cb, [out] ULONG *pcbWritten);
    [local] HRESULT BeginWrite([in] const BYTE *pb, [in] ULONG cb, [in] IMFAsyncCallback *pCallback, [in] IUnknown *punkState);
    [local] HRESULT EndWrite([in] IMFAsyncResult *pResult, [out] ULONG *pcbWritten);
    [local] HRESULT Seek([in] MFBYTESTREAM_SEEK_ORIGIN SeekOrigin, [in] LONGLONG llSeekOffset, [in] DWORD dwSeekFlags,
                    [out] QWORD *pqwCurrentPosition);

    HRESULT Flush();
    HRESULT Close();
}

[
    object,
    uuid(5bc8a76b-869a-46a3-9b03-fa218a66aebe)
]
interface IMFCollection : IUnknown
{
    HRESULT GetElementCount([out] DWORD *pcElements);
    HRESULT GetElement([in] DWORD dwElementIndex, [out] IUnknown **ppUnkElement);
    HRESULT AddElement([in] IUnknown *pUnkElement);
    HRESULT RemoveElement([in] DWORD dwElementIndex, [out] IUnknown **ppUnkElement);
    HRESULT InsertElementAt([in] DWORD dwIndex, [in] IUnknown *pUnknown);
    HRESULT RemoveAllElements();
}

cpp_quote("typedef enum _MF_CONNECT_METHOD {")
cpp_quote("  MF_CONNECT_DIRECT                            = 0x00000000,")
cpp_quote("  MF_CONNECT_ALLOW_CONVERTER                   = 0x00000001,")
cpp_quote("  MF_CONNECT_ALLOW_DECODER                     = 0x00000003,")
cpp_quote("  MF_CONNECT_RESOLVE_INDEPENDENT_OUTPUTTYPES   = 0x00000004,")
cpp_quote("  MF_CONNECT_AS_OPTIONAL                       = 0x00010000,")
cpp_quote("  MF_CONNECT_AS_OPTIONAL_BRANCH                = 0x00020000 ")
cpp_quote("} MF_CONNECT_METHOD;")
cpp_quote("")
cpp_quote("typedef enum MF_FILE_ACCESSMODE {")
cpp_quote("  MF_ACCESSMODE_READ        = 1,")
cpp_quote("  MF_ACCESSMODE_WRITE       = 2,")
cpp_quote("  MF_ACCESSMODE_READWRITE   = 3 ")
cpp_quote("} MF_FILE_ACCESSMODE;")
cpp_quote("")
cpp_quote("typedef enum  {")
cpp_quote("  MF_FILEFLAGS_NONE                  = 0x00000000,")
cpp_quote("  MF_FILEFLAGS_NOBUFFERING           = 0x00000001,")
cpp_quote("  MF_FILEFLAGS_ALLOW_WRITE_SHARING   = 0x00000002 ")
cpp_quote("} MF_FILE_FLAGS;")
cpp_quote("")
cpp_quote("typedef enum  {")
cpp_quote("  MF_OPENMODE_FAIL_IF_NOT_EXIST   = 0,")
cpp_quote("  MF_OPENMODE_FAIL_IF_EXIST       = 1,")
cpp_quote("  MF_OPENMODE_RESET_IF_EXIST      = 2,")
cpp_quote("  MF_OPENMODE_APPEND_IF_EXIST     = 3,")
cpp_quote("  MF_OPENMODE_DELETE_IF_EXIST     = 4 ")
cpp_quote("} MF_FILE_OPENMODE;")
cpp_quote("")
cpp_quote("#if (_WIN32_WINNT >= 0x0601)")
cpp_quote("")
cpp_quote("typedef enum _MF_Plugin_Type {")
cpp_quote("  MF_Plugin_Type_MFT           = 0,")
cpp_quote("  MF_Plugin_Type_MediaSource   = 1 ")
cpp_quote("} MF_Plugin_Type;")
cpp_quote("")
cpp_quote("#endif /*(_WIN32_WINNT >= 0x0601)*/")
cpp_quote("")
cpp_quote("typedef enum _MFStandardVideoFormat {")
cpp_quote("  MFStdVideoFormat_reserved       = 0,")
cpp_quote("  MFStdVideoFormat_NTSC,")
cpp_quote("  MFStdVideoFormat_PAL,")
cpp_quote("  MFStdVideoFormat_DVD_NTSC,")
cpp_quote("  MFStdVideoFormat_DVD_PAL,")
cpp_quote("  MFStdVideoFormat_DV_PAL,")
cpp_quote("  MFStdVideoFormat_DV_NTSC,")
cpp_quote("  MFStdVideoFormat_ATSC_SD480i,")
cpp_quote("  MFStdVideoFormat_ATSC_HD1080i,")
cpp_quote("  MFStdVideoFormat_ATSC_HD720p ")
cpp_quote("} MFStandardVideoFormat;")
cpp_quote("")
cpp_quote("typedef enum _MFVideoFlags {")
cpp_quote("  MFVideoFlag_PAD_TO_Mask             = 0x0001 | 0x0002,")
cpp_quote("  MFVideoFlag_PAD_TO_None             = 0 * 0x0001,")
cpp_quote("  MFVideoFlag_PAD_TO_4x3              = 1 * 0x0001,")
cpp_quote("  MFVideoFlag_PAD_TO_16x9             = 2 * 0x0001,")
cpp_quote("  MFVideoFlag_SrcContentHintMask      = 0x0004 | 0x0008 | 0x0010,")
cpp_quote("  MFVideoFlag_SrcContentHintNone      = 0 * 0x0004,")
cpp_quote("  MFVideoFlag_SrcContentHint16x9      = 1 * 0x0004,")
cpp_quote("  MFVideoFlag_SrcContentHint235_1     = 2 * 0x0004,")
cpp_quote("  MFVideoFlag_AnalogProtected         = 0x0020,")
cpp_quote("  MFVideoFlag_DigitallyProtected      = 0x0040,")
cpp_quote("  MFVideoFlag_ProgressiveContent      = 0x0080,")
cpp_quote("  MFVideoFlag_FieldRepeatCountMask    = 0x0100 | 0x0200 | 0x0400,")
cpp_quote("  MFVideoFlag_FieldRepeatCountShift   = 8,")
cpp_quote("  MFVideoFlag_ProgressiveSeqReset     = 0x0800,")
cpp_quote("  MFVideoFlag_PanScanEnabled          = 0x20000,")
cpp_quote("  MFVideoFlag_LowerFieldFirst         = 0x40000,")
cpp_quote("  MFVideoFlag_BottomUpLinearRep       = 0x80000,")
cpp_quote("  MFVideoFlags_DXVASurface            = 0x100000,")
cpp_quote("  MFVideoFlags_RenderTargetSurface    = 0x400000,")
cpp_quote("  MFVideoFlags_ForceQWORD             = 0x7FFFFFFF ")
cpp_quote("} MFVideoFlags;")
cpp_quote("")
cpp_quote("#define MF_MEDIATYPE_EQUAL_MAJOR_TYPES          0x00000001")
cpp_quote("#define MF_MEDIATYPE_EQUAL_FORMAT_TYPES         0x00000002")
cpp_quote("#define MF_MEDIATYPE_EQUAL_FORMAT_DATA          0x00000004")
cpp_quote("#define MF_MEDIATYPE_EQUAL_FORMAT_USER_DATA     0x00000008")
cpp_quote("")
cpp_quote("#define MFBYTESTREAM_IS_READABLE                0x00000001")
cpp_quote("#define MFBYTESTREAM_IS_WRITABLE                0x00000002")
cpp_quote("#define MFBYTESTREAM_IS_SEEKABLE                0x00000004")
cpp_quote("#define MFBYTESTREAM_IS_REMOTE                  0x00000008")
cpp_quote("#define MFBYTESTREAM_IS_DIRECTORY               0x00000080")
cpp_quote("#define MFBYTESTREAM_HAS_SLOW_SEEK              0x00000100")
cpp_quote("#define MFBYTESTREAM_IS_PARTIALLY_DOWNLOADED    0x00000200")
cpp_quote("#define MFBYTESTREAM_SHARE_WRITE                0x00000400")
