/*** Autogenerated by WIDL 1.5.19 from include/mfobjects.idl - Do not edit ***/

#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif

#include <rpc.h>
#include <rpcndr.h>

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __mfobjects_h__
#define __mfobjects_h__

/* Forward declarations */

#ifndef __IMFAttributes_FWD_DEFINED__
#define __IMFAttributes_FWD_DEFINED__
typedef interface IMFAttributes IMFAttributes;
#endif

#ifndef __IMFMediaBuffer_FWD_DEFINED__
#define __IMFMediaBuffer_FWD_DEFINED__
typedef interface IMFMediaBuffer IMFMediaBuffer;
#endif

#ifndef __IMFSample_FWD_DEFINED__
#define __IMFSample_FWD_DEFINED__
typedef interface IMFSample IMFSample;
#endif

#ifndef __IMF2DBuffer_FWD_DEFINED__
#define __IMF2DBuffer_FWD_DEFINED__
typedef interface IMF2DBuffer IMF2DBuffer;
#endif

#ifndef __IMFMediaType_FWD_DEFINED__
#define __IMFMediaType_FWD_DEFINED__
typedef interface IMFMediaType IMFMediaType;
#endif

#ifndef __IMFAudioMediaType_FWD_DEFINED__
#define __IMFAudioMediaType_FWD_DEFINED__
typedef interface IMFAudioMediaType IMFAudioMediaType;
#endif

#ifndef __IMFVideoMediaType_FWD_DEFINED__
#define __IMFVideoMediaType_FWD_DEFINED__
typedef interface IMFVideoMediaType IMFVideoMediaType;
#endif

#ifndef __IMFAsyncResult_FWD_DEFINED__
#define __IMFAsyncResult_FWD_DEFINED__
typedef interface IMFAsyncResult IMFAsyncResult;
#endif

#ifndef __IMFAsyncCallback_FWD_DEFINED__
#define __IMFAsyncCallback_FWD_DEFINED__
typedef interface IMFAsyncCallback IMFAsyncCallback;
#endif

#ifndef __IMFRemoteAsyncCallback_FWD_DEFINED__
#define __IMFRemoteAsyncCallback_FWD_DEFINED__
typedef interface IMFRemoteAsyncCallback IMFRemoteAsyncCallback;
#endif

#ifndef __IMFMediaEvent_FWD_DEFINED__
#define __IMFMediaEvent_FWD_DEFINED__
typedef interface IMFMediaEvent IMFMediaEvent;
#endif

#ifndef __IMFMediaEventGenerator_FWD_DEFINED__
#define __IMFMediaEventGenerator_FWD_DEFINED__
typedef interface IMFMediaEventGenerator IMFMediaEventGenerator;
#endif

#ifndef __IMFByteStream_FWD_DEFINED__
#define __IMFByteStream_FWD_DEFINED__
typedef interface IMFByteStream IMFByteStream;
#endif

#ifndef __IMFCollection_FWD_DEFINED__
#define __IMFCollection_FWD_DEFINED__
typedef interface IMFCollection IMFCollection;
#endif

/* Headers for imported files */

#include <unknwn.h>
#include <propsys.h>
#include <mediaobj.h>

#ifdef __cplusplus
extern "C" {
#endif

#include <mmreg.h>
#if 0
typedef struct tWAVEFORMATEX {
    WORD wFormatTag;
    WORD nChannels;
    DWORD nSamplesPerSec;
    DWORD nAvgBytesPerSec;
    WORD nBlockAlign;
    WORD wBitsPerSample;
    WORD cbSize;
    BYTE pExtraBytes[1];
} WAVEFORMATEX;
typedef struct tWAVEFORMATEX *PWAVEFORMATEX;
typedef struct tWAVEFORMATEX *NPWAVEFORMATEX;
typedef struct tWAVEFORMATEX *LPWAVEFORMATEX;
typedef struct __WIDL_mmreg_h_generated_name_00000000 {
    WORD wFormatTag;
    WORD nChannels;
    DWORD nSamplesPerSec;
    DWORD nAvgBytesPerSec;
    WORD nBlockAlign;
    WORD wBitsPerSample;
    WORD cbSize;
    WORD wValidBitsPerSample;
    DWORD dwChannelMask;
    GUID SubFormat;
} WAVEFORMATEXTENSIBLE;
typedef struct __WIDL_mmreg_h_generated_name_00000000 *PWAVEFORMATEXTENSIBLE;
#endif
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;
/*****************************************************************************
 * IMFAttributes interface
 */
#ifndef __IMFAttributes_INTERFACE_DEFINED__
#define __IMFAttributes_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFAttributes, 0x2cd2d921, 0xc447, 0x44a7, 0xa1,0x3c, 0x4a,0xda,0xbf,0xc2,0x47,0xe3);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd2d921-c447-44a7-a13c-4adabfc247e3")
IMFAttributes : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetItem(
        REFGUID guidKey,
        PROPVARIANT *pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetItemType(
        REFGUID guidKey,
        MF_ATTRIBUTE_TYPE *pType) = 0;

    virtual HRESULT STDMETHODCALLTYPE CompareItem(
        REFGUID guidKey,
        REFPROPVARIANT Value,
        WINBOOL *pbResult) = 0;

    virtual HRESULT STDMETHODCALLTYPE Compare(
        IMFAttributes *pTheirs,
        MF_ATTRIBUTES_MATCH_TYPE MatchType,
        WINBOOL *pbResult) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetUINT32(
        REFGUID guidKey,
        UINT32 *punValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetUINT64(
        REFGUID guidKey,
        UINT64 *punValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDouble(
        REFGUID guidKey,
        double *pfValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetGUID(
        REFGUID guidKey,
        GUID *pguidValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStringLength(
        REFGUID guidKey,
        UINT32 *pcchLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetString(
        REFGUID guidKey,
        LPWSTR pwszValue,
        UINT32 cchBufSize,
        UINT32 *pcchLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAllocatedString(
        REFGUID guidKey,
        LPWSTR *ppwszValue,
        UINT32 *pcchLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBlobSize(
        REFGUID guidKey,
        UINT32 *pcbBlobSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBlob(
        REFGUID guidKey,
        UINT8 *pBuf,
        UINT32 cbBufSize,
        UINT32 *pcbBlobSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAllocatedBlob(
        REFGUID guidKey,
        UINT8 **ppBuf,
        UINT32 *pcbSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetUnknown(
        REFGUID guidKey,
        REFIID riid,
        LPVOID *ppv) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetItem(
        REFGUID guidKey,
        REFPROPVARIANT Value) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteItem(
        REFGUID guidKey) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteAllItems(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetUINT32(
        REFGUID guidKey,
        UINT32 unValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetUINT64(
        REFGUID guidKey,
        UINT64 unValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDouble(
        REFGUID guidKey,
        double fValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetGUID(
        REFGUID guidKey,
        REFGUID guidValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetString(
        REFGUID guidKey,
        LPCWSTR wszValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetBlob(
        REFGUID guidKey,
        const UINT8 *pBuf,
        UINT32 cbBufSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetUnknown(
        REFGUID guidKey,
        IUnknown *pUnknown) = 0;

    virtual HRESULT STDMETHODCALLTYPE LockStore(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnlockStore(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCount(
        UINT32 *pcItems) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetItemByIndex(
        UINT32 unIndex,
        GUID *pguidKey,
        PROPVARIANT *pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE CopyAllItems(
        IMFAttributes *pDest) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFAttributes, 0x2cd2d921, 0xc447, 0x44a7, 0xa1,0x3c, 0x4a,0xda,0xbf,0xc2,0x47,0xe3)
#endif
#else
typedef struct IMFAttributesVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMFAttributes* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMFAttributes* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMFAttributes* This);

    /*** IMFAttributes methods ***/
    HRESULT (STDMETHODCALLTYPE *GetItem)(
        IMFAttributes* This,
        REFGUID guidKey,
        PROPVARIANT *pValue);

    HRESULT (STDMETHODCALLTYPE *GetItemType)(
        IMFAttributes* This,
        REFGUID guidKey,
        MF_ATTRIBUTE_TYPE *pType);

    HRESULT (STDMETHODCALLTYPE *CompareItem)(
        IMFAttributes* This,
        REFGUID guidKey,
        REFPROPVARIANT Value,
        WINBOOL *pbResult);

    HRESULT (STDMETHODCALLTYPE *Compare)(
        IMFAttributes* This,
        IMFAttributes *pTheirs,
        MF_ATTRIBUTES_MATCH_TYPE MatchType,
        WINBOOL *pbResult);

    HRESULT (STDMETHODCALLTYPE *GetUINT32)(
        IMFAttributes* This,
        REFGUID guidKey,
        UINT32 *punValue);

    HRESULT (STDMETHODCALLTYPE *GetUINT64)(
        IMFAttributes* This,
        REFGUID guidKey,
        UINT64 *punValue);

    HRESULT (STDMETHODCALLTYPE *GetDouble)(
        IMFAttributes* This,
        REFGUID guidKey,
        double *pfValue);

    HRESULT (STDMETHODCALLTYPE *GetGUID)(
        IMFAttributes* This,
        REFGUID guidKey,
        GUID *pguidValue);

    HRESULT (STDMETHODCALLTYPE *GetStringLength)(
        IMFAttributes* This,
        REFGUID guidKey,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetString)(
        IMFAttributes* This,
        REFGUID guidKey,
        LPWSTR pwszValue,
        UINT32 cchBufSize,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetAllocatedString)(
        IMFAttributes* This,
        REFGUID guidKey,
        LPWSTR *ppwszValue,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetBlobSize)(
        IMFAttributes* This,
        REFGUID guidKey,
        UINT32 *pcbBlobSize);

    HRESULT (STDMETHODCALLTYPE *GetBlob)(
        IMFAttributes* This,
        REFGUID guidKey,
        UINT8 *pBuf,
        UINT32 cbBufSize,
        UINT32 *pcbBlobSize);

    HRESULT (STDMETHODCALLTYPE *GetAllocatedBlob)(
        IMFAttributes* This,
        REFGUID guidKey,
        UINT8 **ppBuf,
        UINT32 *pcbSize);

    HRESULT (STDMETHODCALLTYPE *GetUnknown)(
        IMFAttributes* This,
        REFGUID guidKey,
        REFIID riid,
        LPVOID *ppv);

    HRESULT (STDMETHODCALLTYPE *SetItem)(
        IMFAttributes* This,
        REFGUID guidKey,
        REFPROPVARIANT Value);

    HRESULT (STDMETHODCALLTYPE *DeleteItem)(
        IMFAttributes* This,
        REFGUID guidKey);

    HRESULT (STDMETHODCALLTYPE *DeleteAllItems)(
        IMFAttributes* This);

    HRESULT (STDMETHODCALLTYPE *SetUINT32)(
        IMFAttributes* This,
        REFGUID guidKey,
        UINT32 unValue);

    HRESULT (STDMETHODCALLTYPE *SetUINT64)(
        IMFAttributes* This,
        REFGUID guidKey,
        UINT64 unValue);

    HRESULT (STDMETHODCALLTYPE *SetDouble)(
        IMFAttributes* This,
        REFGUID guidKey,
        double fValue);

    HRESULT (STDMETHODCALLTYPE *SetGUID)(
        IMFAttributes* This,
        REFGUID guidKey,
        REFGUID guidValue);

    HRESULT (STDMETHODCALLTYPE *SetString)(
        IMFAttributes* This,
        REFGUID guidKey,
        LPCWSTR wszValue);

    HRESULT (STDMETHODCALLTYPE *SetBlob)(
        IMFAttributes* This,
        REFGUID guidKey,
        const UINT8 *pBuf,
        UINT32 cbBufSize);

    HRESULT (STDMETHODCALLTYPE *SetUnknown)(
        IMFAttributes* This,
        REFGUID guidKey,
        IUnknown *pUnknown);

    HRESULT (STDMETHODCALLTYPE *LockStore)(
        IMFAttributes* This);

    HRESULT (STDMETHODCALLTYPE *UnlockStore)(
        IMFAttributes* This);

    HRESULT (STDMETHODCALLTYPE *GetCount)(
        IMFAttributes* This,
        UINT32 *pcItems);

    HRESULT (STDMETHODCALLTYPE *GetItemByIndex)(
        IMFAttributes* This,
        UINT32 unIndex,
        GUID *pguidKey,
        PROPVARIANT *pValue);

    HRESULT (STDMETHODCALLTYPE *CopyAllItems)(
        IMFAttributes* This,
        IMFAttributes *pDest);

    END_INTERFACE
} IMFAttributesVtbl;
interface IMFAttributes {
    CONST_VTBL IMFAttributesVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFAttributes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFAttributes_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFAttributes_Release(This) (This)->lpVtbl->Release(This)
/*** IMFAttributes methods ***/
#define IMFAttributes_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
#define IMFAttributes_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
#define IMFAttributes_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
#define IMFAttributes_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
#define IMFAttributes_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
#define IMFAttributes_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
#define IMFAttributes_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
#define IMFAttributes_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
#define IMFAttributes_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
#define IMFAttributes_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
#define IMFAttributes_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
#define IMFAttributes_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
#define IMFAttributes_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
#define IMFAttributes_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
#define IMFAttributes_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
#define IMFAttributes_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
#define IMFAttributes_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
#define IMFAttributes_DeleteAllItems(This) (This)->lpVtbl->DeleteAllItems(This)
#define IMFAttributes_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
#define IMFAttributes_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
#define IMFAttributes_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
#define IMFAttributes_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
#define IMFAttributes_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
#define IMFAttributes_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
#define IMFAttributes_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
#define IMFAttributes_LockStore(This) (This)->lpVtbl->LockStore(This)
#define IMFAttributes_UnlockStore(This) (This)->lpVtbl->UnlockStore(This)
#define IMFAttributes_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
#define IMFAttributes_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
#define IMFAttributes_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFAttributes_QueryInterface(IMFAttributes* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFAttributes_AddRef(IMFAttributes* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFAttributes_Release(IMFAttributes* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFAttributes methods ***/
static FORCEINLINE HRESULT IMFAttributes_GetItem(IMFAttributes* This,REFGUID guidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItem(This,guidKey,pValue);
}
static FORCEINLINE HRESULT IMFAttributes_GetItemType(IMFAttributes* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
    return This->lpVtbl->GetItemType(This,guidKey,pType);
}
static FORCEINLINE HRESULT IMFAttributes_CompareItem(IMFAttributes* This,REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) {
    return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
}
static FORCEINLINE HRESULT IMFAttributes_Compare(IMFAttributes* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) {
    return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
}
static FORCEINLINE HRESULT IMFAttributes_GetUINT32(IMFAttributes* This,REFGUID guidKey,UINT32 *punValue) {
    return This->lpVtbl->GetUINT32(This,guidKey,punValue);
}
static FORCEINLINE HRESULT IMFAttributes_GetUINT64(IMFAttributes* This,REFGUID guidKey,UINT64 *punValue) {
    return This->lpVtbl->GetUINT64(This,guidKey,punValue);
}
static FORCEINLINE HRESULT IMFAttributes_GetDouble(IMFAttributes* This,REFGUID guidKey,double *pfValue) {
    return This->lpVtbl->GetDouble(This,guidKey,pfValue);
}
static FORCEINLINE HRESULT IMFAttributes_GetGUID(IMFAttributes* This,REFGUID guidKey,GUID *pguidValue) {
    return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
}
static FORCEINLINE HRESULT IMFAttributes_GetStringLength(IMFAttributes* This,REFGUID guidKey,UINT32 *pcchLength) {
    return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
}
static FORCEINLINE HRESULT IMFAttributes_GetString(IMFAttributes* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
    return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
}
static FORCEINLINE HRESULT IMFAttributes_GetAllocatedString(IMFAttributes* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
    return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
}
static FORCEINLINE HRESULT IMFAttributes_GetBlobSize(IMFAttributes* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
}
static FORCEINLINE HRESULT IMFAttributes_GetBlob(IMFAttributes* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
}
static FORCEINLINE HRESULT IMFAttributes_GetAllocatedBlob(IMFAttributes* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
    return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
}
static FORCEINLINE HRESULT IMFAttributes_GetUnknown(IMFAttributes* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
    return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
}
static FORCEINLINE HRESULT IMFAttributes_SetItem(IMFAttributes* This,REFGUID guidKey,REFPROPVARIANT Value) {
    return This->lpVtbl->SetItem(This,guidKey,Value);
}
static FORCEINLINE HRESULT IMFAttributes_DeleteItem(IMFAttributes* This,REFGUID guidKey) {
    return This->lpVtbl->DeleteItem(This,guidKey);
}
static FORCEINLINE HRESULT IMFAttributes_DeleteAllItems(IMFAttributes* This) {
    return This->lpVtbl->DeleteAllItems(This);
}
static FORCEINLINE HRESULT IMFAttributes_SetUINT32(IMFAttributes* This,REFGUID guidKey,UINT32 unValue) {
    return This->lpVtbl->SetUINT32(This,guidKey,unValue);
}
static FORCEINLINE HRESULT IMFAttributes_SetUINT64(IMFAttributes* This,REFGUID guidKey,UINT64 unValue) {
    return This->lpVtbl->SetUINT64(This,guidKey,unValue);
}
static FORCEINLINE HRESULT IMFAttributes_SetDouble(IMFAttributes* This,REFGUID guidKey,double fValue) {
    return This->lpVtbl->SetDouble(This,guidKey,fValue);
}
static FORCEINLINE HRESULT IMFAttributes_SetGUID(IMFAttributes* This,REFGUID guidKey,REFGUID guidValue) {
    return This->lpVtbl->SetGUID(This,guidKey,guidValue);
}
static FORCEINLINE HRESULT IMFAttributes_SetString(IMFAttributes* This,REFGUID guidKey,LPCWSTR wszValue) {
    return This->lpVtbl->SetString(This,guidKey,wszValue);
}
static FORCEINLINE HRESULT IMFAttributes_SetBlob(IMFAttributes* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
    return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
}
static FORCEINLINE HRESULT IMFAttributes_SetUnknown(IMFAttributes* This,REFGUID guidKey,IUnknown *pUnknown) {
    return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
}
static FORCEINLINE HRESULT IMFAttributes_LockStore(IMFAttributes* This) {
    return This->lpVtbl->LockStore(This);
}
static FORCEINLINE HRESULT IMFAttributes_UnlockStore(IMFAttributes* This) {
    return This->lpVtbl->UnlockStore(This);
}
static FORCEINLINE HRESULT IMFAttributes_GetCount(IMFAttributes* This,UINT32 *pcItems) {
    return This->lpVtbl->GetCount(This,pcItems);
}
static FORCEINLINE HRESULT IMFAttributes_GetItemByIndex(IMFAttributes* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
}
static FORCEINLINE HRESULT IMFAttributes_CopyAllItems(IMFAttributes* This,IMFAttributes *pDest) {
    return This->lpVtbl->CopyAllItems(This,pDest);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMFAttributes_GetItem_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    PROPVARIANT *pValue);
void __RPC_STUB IMFAttributes_GetItem_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_GetItemType_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    MF_ATTRIBUTE_TYPE *pType);
void __RPC_STUB IMFAttributes_GetItemType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_CompareItem_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    REFPROPVARIANT Value,
    WINBOOL *pbResult);
void __RPC_STUB IMFAttributes_CompareItem_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_Compare_Proxy(
    IMFAttributes* This,
    IMFAttributes *pTheirs,
    MF_ATTRIBUTES_MATCH_TYPE MatchType,
    WINBOOL *pbResult);
void __RPC_STUB IMFAttributes_Compare_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_GetUINT32_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    UINT32 *punValue);
void __RPC_STUB IMFAttributes_GetUINT32_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_GetUINT64_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    UINT64 *punValue);
void __RPC_STUB IMFAttributes_GetUINT64_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_GetDouble_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    double *pfValue);
void __RPC_STUB IMFAttributes_GetDouble_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_GetGUID_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    GUID *pguidValue);
void __RPC_STUB IMFAttributes_GetGUID_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_GetStringLength_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    UINT32 *pcchLength);
void __RPC_STUB IMFAttributes_GetStringLength_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_GetString_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    LPWSTR pwszValue,
    UINT32 cchBufSize,
    UINT32 *pcchLength);
void __RPC_STUB IMFAttributes_GetString_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_GetAllocatedString_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    LPWSTR *ppwszValue,
    UINT32 *pcchLength);
void __RPC_STUB IMFAttributes_GetAllocatedString_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_GetBlobSize_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    UINT32 *pcbBlobSize);
void __RPC_STUB IMFAttributes_GetBlobSize_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_GetBlob_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    UINT8 *pBuf,
    UINT32 cbBufSize,
    UINT32 *pcbBlobSize);
void __RPC_STUB IMFAttributes_GetBlob_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_GetAllocatedBlob_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    UINT8 **ppBuf,
    UINT32 *pcbSize);
void __RPC_STUB IMFAttributes_GetAllocatedBlob_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_GetUnknown_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    REFIID riid,
    LPVOID *ppv);
void __RPC_STUB IMFAttributes_GetUnknown_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_SetItem_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    REFPROPVARIANT Value);
void __RPC_STUB IMFAttributes_SetItem_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_DeleteItem_Proxy(
    IMFAttributes* This,
    REFGUID guidKey);
void __RPC_STUB IMFAttributes_DeleteItem_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_DeleteAllItems_Proxy(
    IMFAttributes* This);
void __RPC_STUB IMFAttributes_DeleteAllItems_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_SetUINT32_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    UINT32 unValue);
void __RPC_STUB IMFAttributes_SetUINT32_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_SetUINT64_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    UINT64 unValue);
void __RPC_STUB IMFAttributes_SetUINT64_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_SetDouble_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    double fValue);
void __RPC_STUB IMFAttributes_SetDouble_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_SetGUID_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    REFGUID guidValue);
void __RPC_STUB IMFAttributes_SetGUID_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_SetString_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    LPCWSTR wszValue);
void __RPC_STUB IMFAttributes_SetString_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_SetBlob_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    const UINT8 *pBuf,
    UINT32 cbBufSize);
void __RPC_STUB IMFAttributes_SetBlob_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_SetUnknown_Proxy(
    IMFAttributes* This,
    REFGUID guidKey,
    IUnknown *pUnknown);
void __RPC_STUB IMFAttributes_SetUnknown_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_LockStore_Proxy(
    IMFAttributes* This);
void __RPC_STUB IMFAttributes_LockStore_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_UnlockStore_Proxy(
    IMFAttributes* This);
void __RPC_STUB IMFAttributes_UnlockStore_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_GetCount_Proxy(
    IMFAttributes* This,
    UINT32 *pcItems);
void __RPC_STUB IMFAttributes_GetCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_GetItemByIndex_Proxy(
    IMFAttributes* This,
    UINT32 unIndex,
    GUID *pguidKey,
    PROPVARIANT *pValue);
void __RPC_STUB IMFAttributes_GetItemByIndex_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAttributes_CopyAllItems_Proxy(
    IMFAttributes* This,
    IMFAttributes *pDest);
void __RPC_STUB IMFAttributes_CopyAllItems_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMFAttributes_INTERFACE_DEFINED__ */

enum MF_ATTRIBUTE_SERIALIZE_OPTIONS {
    MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF = 0x1
};

/*****************************************************************************
 * IMFMediaBuffer interface
 */
#ifndef __IMFMediaBuffer_INTERFACE_DEFINED__
#define __IMFMediaBuffer_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFMediaBuffer, 0x045fa593, 0x8799, 0x42b8, 0xbc,0x8d, 0x89,0x68,0xc6,0x45,0x35,0x07);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("045fa593-8799-42b8-bc8d-8968c6453507")
IMFMediaBuffer : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Lock(
        BYTE **ppbBuffer,
        DWORD *pcbMaxLength,
        DWORD *pcbCurrentLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE Unlock(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentLength(
        DWORD *pcbCurrentLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetCurrentLength(
        DWORD cbCurrentLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMaxLength(
        DWORD *pcbMaxLength) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFMediaBuffer, 0x045fa593, 0x8799, 0x42b8, 0xbc,0x8d, 0x89,0x68,0xc6,0x45,0x35,0x07)
#endif
#else
typedef struct IMFMediaBufferVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMFMediaBuffer* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMFMediaBuffer* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMFMediaBuffer* This);

    /*** IMFMediaBuffer methods ***/
    HRESULT (STDMETHODCALLTYPE *Lock)(
        IMFMediaBuffer* This,
        BYTE **ppbBuffer,
        DWORD *pcbMaxLength,
        DWORD *pcbCurrentLength);

    HRESULT (STDMETHODCALLTYPE *Unlock)(
        IMFMediaBuffer* This);

    HRESULT (STDMETHODCALLTYPE *GetCurrentLength)(
        IMFMediaBuffer* This,
        DWORD *pcbCurrentLength);

    HRESULT (STDMETHODCALLTYPE *SetCurrentLength)(
        IMFMediaBuffer* This,
        DWORD cbCurrentLength);

    HRESULT (STDMETHODCALLTYPE *GetMaxLength)(
        IMFMediaBuffer* This,
        DWORD *pcbMaxLength);

    END_INTERFACE
} IMFMediaBufferVtbl;
interface IMFMediaBuffer {
    CONST_VTBL IMFMediaBufferVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFMediaBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFMediaBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFMediaBuffer_Release(This) (This)->lpVtbl->Release(This)
/*** IMFMediaBuffer methods ***/
#define IMFMediaBuffer_Lock(This,ppbBuffer,pcbMaxLength,pcbCurrentLength) (This)->lpVtbl->Lock(This,ppbBuffer,pcbMaxLength,pcbCurrentLength)
#define IMFMediaBuffer_Unlock(This) (This)->lpVtbl->Unlock(This)
#define IMFMediaBuffer_GetCurrentLength(This,pcbCurrentLength) (This)->lpVtbl->GetCurrentLength(This,pcbCurrentLength)
#define IMFMediaBuffer_SetCurrentLength(This,cbCurrentLength) (This)->lpVtbl->SetCurrentLength(This,cbCurrentLength)
#define IMFMediaBuffer_GetMaxLength(This,pcbMaxLength) (This)->lpVtbl->GetMaxLength(This,pcbMaxLength)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFMediaBuffer_QueryInterface(IMFMediaBuffer* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFMediaBuffer_AddRef(IMFMediaBuffer* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFMediaBuffer_Release(IMFMediaBuffer* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFMediaBuffer methods ***/
static FORCEINLINE HRESULT IMFMediaBuffer_Lock(IMFMediaBuffer* This,BYTE **ppbBuffer,DWORD *pcbMaxLength,DWORD *pcbCurrentLength) {
    return This->lpVtbl->Lock(This,ppbBuffer,pcbMaxLength,pcbCurrentLength);
}
static FORCEINLINE HRESULT IMFMediaBuffer_Unlock(IMFMediaBuffer* This) {
    return This->lpVtbl->Unlock(This);
}
static FORCEINLINE HRESULT IMFMediaBuffer_GetCurrentLength(IMFMediaBuffer* This,DWORD *pcbCurrentLength) {
    return This->lpVtbl->GetCurrentLength(This,pcbCurrentLength);
}
static FORCEINLINE HRESULT IMFMediaBuffer_SetCurrentLength(IMFMediaBuffer* This,DWORD cbCurrentLength) {
    return This->lpVtbl->SetCurrentLength(This,cbCurrentLength);
}
static FORCEINLINE HRESULT IMFMediaBuffer_GetMaxLength(IMFMediaBuffer* This,DWORD *pcbMaxLength) {
    return This->lpVtbl->GetMaxLength(This,pcbMaxLength);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMFMediaBuffer_Lock_Proxy(
    IMFMediaBuffer* This,
    BYTE **ppbBuffer,
    DWORD *pcbMaxLength,
    DWORD *pcbCurrentLength);
void __RPC_STUB IMFMediaBuffer_Lock_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFMediaBuffer_Unlock_Proxy(
    IMFMediaBuffer* This);
void __RPC_STUB IMFMediaBuffer_Unlock_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFMediaBuffer_GetCurrentLength_Proxy(
    IMFMediaBuffer* This,
    DWORD *pcbCurrentLength);
void __RPC_STUB IMFMediaBuffer_GetCurrentLength_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFMediaBuffer_SetCurrentLength_Proxy(
    IMFMediaBuffer* This,
    DWORD cbCurrentLength);
void __RPC_STUB IMFMediaBuffer_SetCurrentLength_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFMediaBuffer_GetMaxLength_Proxy(
    IMFMediaBuffer* This,
    DWORD *pcbMaxLength);
void __RPC_STUB IMFMediaBuffer_GetMaxLength_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMFMediaBuffer_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFSample interface
 */
#ifndef __IMFSample_INTERFACE_DEFINED__
#define __IMFSample_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFSample, 0xc40a00f2, 0xb93a, 0x4d80, 0xae,0x8c, 0x5a,0x1c,0x63,0x4f,0x58,0xe4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c40a00f2-b93a-4d80-ae8c-5a1c634f58e4")
IMFSample : public IMFAttributes
{
    virtual HRESULT STDMETHODCALLTYPE GetSampleFlags(
        DWORD *pdwSampleFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSampleFlags(
        DWORD dwSampleFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSampleTime(
        LONGLONG *phnsSampleTime) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSampleTime(
        LONGLONG hnsSampleTime) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSampleDuration(
        LONGLONG *phnsSampleDuration) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSampleDuration(
        LONGLONG hnsSampleDuration) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBufferCount(
        DWORD *pdwBufferCount) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBufferByIndex(
        DWORD dwIndex,
        IMFMediaBuffer **ppBuffer) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConvertToContiguousBuffer(
        IMFMediaBuffer **ppBuffer) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddBuffer(
        IMFMediaBuffer *pBuffer) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveBufferByIndex(
        DWORD dwIndex) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveAllBuffers(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTotalLength(
        DWORD *pcbTotalLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE CopyToBuffer(
        IMFMediaBuffer *pBuffer) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFSample, 0xc40a00f2, 0xb93a, 0x4d80, 0xae,0x8c, 0x5a,0x1c,0x63,0x4f,0x58,0xe4)
#endif
#else
typedef struct IMFSampleVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMFSample* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMFSample* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMFSample* This);

    /*** IMFAttributes methods ***/
    HRESULT (STDMETHODCALLTYPE *GetItem)(
        IMFSample* This,
        REFGUID guidKey,
        PROPVARIANT *pValue);

    HRESULT (STDMETHODCALLTYPE *GetItemType)(
        IMFSample* This,
        REFGUID guidKey,
        MF_ATTRIBUTE_TYPE *pType);

    HRESULT (STDMETHODCALLTYPE *CompareItem)(
        IMFSample* This,
        REFGUID guidKey,
        REFPROPVARIANT Value,
        WINBOOL *pbResult);

    HRESULT (STDMETHODCALLTYPE *Compare)(
        IMFSample* This,
        IMFAttributes *pTheirs,
        MF_ATTRIBUTES_MATCH_TYPE MatchType,
        WINBOOL *pbResult);

    HRESULT (STDMETHODCALLTYPE *GetUINT32)(
        IMFSample* This,
        REFGUID guidKey,
        UINT32 *punValue);

    HRESULT (STDMETHODCALLTYPE *GetUINT64)(
        IMFSample* This,
        REFGUID guidKey,
        UINT64 *punValue);

    HRESULT (STDMETHODCALLTYPE *GetDouble)(
        IMFSample* This,
        REFGUID guidKey,
        double *pfValue);

    HRESULT (STDMETHODCALLTYPE *GetGUID)(
        IMFSample* This,
        REFGUID guidKey,
        GUID *pguidValue);

    HRESULT (STDMETHODCALLTYPE *GetStringLength)(
        IMFSample* This,
        REFGUID guidKey,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetString)(
        IMFSample* This,
        REFGUID guidKey,
        LPWSTR pwszValue,
        UINT32 cchBufSize,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetAllocatedString)(
        IMFSample* This,
        REFGUID guidKey,
        LPWSTR *ppwszValue,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetBlobSize)(
        IMFSample* This,
        REFGUID guidKey,
        UINT32 *pcbBlobSize);

    HRESULT (STDMETHODCALLTYPE *GetBlob)(
        IMFSample* This,
        REFGUID guidKey,
        UINT8 *pBuf,
        UINT32 cbBufSize,
        UINT32 *pcbBlobSize);

    HRESULT (STDMETHODCALLTYPE *GetAllocatedBlob)(
        IMFSample* This,
        REFGUID guidKey,
        UINT8 **ppBuf,
        UINT32 *pcbSize);

    HRESULT (STDMETHODCALLTYPE *GetUnknown)(
        IMFSample* This,
        REFGUID guidKey,
        REFIID riid,
        LPVOID *ppv);

    HRESULT (STDMETHODCALLTYPE *SetItem)(
        IMFSample* This,
        REFGUID guidKey,
        REFPROPVARIANT Value);

    HRESULT (STDMETHODCALLTYPE *DeleteItem)(
        IMFSample* This,
        REFGUID guidKey);

    HRESULT (STDMETHODCALLTYPE *DeleteAllItems)(
        IMFSample* This);

    HRESULT (STDMETHODCALLTYPE *SetUINT32)(
        IMFSample* This,
        REFGUID guidKey,
        UINT32 unValue);

    HRESULT (STDMETHODCALLTYPE *SetUINT64)(
        IMFSample* This,
        REFGUID guidKey,
        UINT64 unValue);

    HRESULT (STDMETHODCALLTYPE *SetDouble)(
        IMFSample* This,
        REFGUID guidKey,
        double fValue);

    HRESULT (STDMETHODCALLTYPE *SetGUID)(
        IMFSample* This,
        REFGUID guidKey,
        REFGUID guidValue);

    HRESULT (STDMETHODCALLTYPE *SetString)(
        IMFSample* This,
        REFGUID guidKey,
        LPCWSTR wszValue);

    HRESULT (STDMETHODCALLTYPE *SetBlob)(
        IMFSample* This,
        REFGUID guidKey,
        const UINT8 *pBuf,
        UINT32 cbBufSize);

    HRESULT (STDMETHODCALLTYPE *SetUnknown)(
        IMFSample* This,
        REFGUID guidKey,
        IUnknown *pUnknown);

    HRESULT (STDMETHODCALLTYPE *LockStore)(
        IMFSample* This);

    HRESULT (STDMETHODCALLTYPE *UnlockStore)(
        IMFSample* This);

    HRESULT (STDMETHODCALLTYPE *GetCount)(
        IMFSample* This,
        UINT32 *pcItems);

    HRESULT (STDMETHODCALLTYPE *GetItemByIndex)(
        IMFSample* This,
        UINT32 unIndex,
        GUID *pguidKey,
        PROPVARIANT *pValue);

    HRESULT (STDMETHODCALLTYPE *CopyAllItems)(
        IMFSample* This,
        IMFAttributes *pDest);

    /*** IMFSample methods ***/
    HRESULT (STDMETHODCALLTYPE *GetSampleFlags)(
        IMFSample* This,
        DWORD *pdwSampleFlags);

    HRESULT (STDMETHODCALLTYPE *SetSampleFlags)(
        IMFSample* This,
        DWORD dwSampleFlags);

    HRESULT (STDMETHODCALLTYPE *GetSampleTime)(
        IMFSample* This,
        LONGLONG *phnsSampleTime);

    HRESULT (STDMETHODCALLTYPE *SetSampleTime)(
        IMFSample* This,
        LONGLONG hnsSampleTime);

    HRESULT (STDMETHODCALLTYPE *GetSampleDuration)(
        IMFSample* This,
        LONGLONG *phnsSampleDuration);

    HRESULT (STDMETHODCALLTYPE *SetSampleDuration)(
        IMFSample* This,
        LONGLONG hnsSampleDuration);

    HRESULT (STDMETHODCALLTYPE *GetBufferCount)(
        IMFSample* This,
        DWORD *pdwBufferCount);

    HRESULT (STDMETHODCALLTYPE *GetBufferByIndex)(
        IMFSample* This,
        DWORD dwIndex,
        IMFMediaBuffer **ppBuffer);

    HRESULT (STDMETHODCALLTYPE *ConvertToContiguousBuffer)(
        IMFSample* This,
        IMFMediaBuffer **ppBuffer);

    HRESULT (STDMETHODCALLTYPE *AddBuffer)(
        IMFSample* This,
        IMFMediaBuffer *pBuffer);

    HRESULT (STDMETHODCALLTYPE *RemoveBufferByIndex)(
        IMFSample* This,
        DWORD dwIndex);

    HRESULT (STDMETHODCALLTYPE *RemoveAllBuffers)(
        IMFSample* This);

    HRESULT (STDMETHODCALLTYPE *GetTotalLength)(
        IMFSample* This,
        DWORD *pcbTotalLength);

    HRESULT (STDMETHODCALLTYPE *CopyToBuffer)(
        IMFSample* This,
        IMFMediaBuffer *pBuffer);

    END_INTERFACE
} IMFSampleVtbl;
interface IMFSample {
    CONST_VTBL IMFSampleVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFSample_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFSample_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFSample_Release(This) (This)->lpVtbl->Release(This)
/*** IMFAttributes methods ***/
#define IMFSample_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
#define IMFSample_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
#define IMFSample_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
#define IMFSample_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
#define IMFSample_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
#define IMFSample_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
#define IMFSample_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
#define IMFSample_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
#define IMFSample_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
#define IMFSample_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
#define IMFSample_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
#define IMFSample_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
#define IMFSample_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
#define IMFSample_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
#define IMFSample_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
#define IMFSample_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
#define IMFSample_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
#define IMFSample_DeleteAllItems(This) (This)->lpVtbl->DeleteAllItems(This)
#define IMFSample_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
#define IMFSample_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
#define IMFSample_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
#define IMFSample_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
#define IMFSample_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
#define IMFSample_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
#define IMFSample_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
#define IMFSample_LockStore(This) (This)->lpVtbl->LockStore(This)
#define IMFSample_UnlockStore(This) (This)->lpVtbl->UnlockStore(This)
#define IMFSample_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
#define IMFSample_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
#define IMFSample_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
/*** IMFSample methods ***/
#define IMFSample_GetSampleFlags(This,pdwSampleFlags) (This)->lpVtbl->GetSampleFlags(This,pdwSampleFlags)
#define IMFSample_SetSampleFlags(This,dwSampleFlags) (This)->lpVtbl->SetSampleFlags(This,dwSampleFlags)
#define IMFSample_GetSampleTime(This,phnsSampleTime) (This)->lpVtbl->GetSampleTime(This,phnsSampleTime)
#define IMFSample_SetSampleTime(This,hnsSampleTime) (This)->lpVtbl->SetSampleTime(This,hnsSampleTime)
#define IMFSample_GetSampleDuration(This,phnsSampleDuration) (This)->lpVtbl->GetSampleDuration(This,phnsSampleDuration)
#define IMFSample_SetSampleDuration(This,hnsSampleDuration) (This)->lpVtbl->SetSampleDuration(This,hnsSampleDuration)
#define IMFSample_GetBufferCount(This,pdwBufferCount) (This)->lpVtbl->GetBufferCount(This,pdwBufferCount)
#define IMFSample_GetBufferByIndex(This,dwIndex,ppBuffer) (This)->lpVtbl->GetBufferByIndex(This,dwIndex,ppBuffer)
#define IMFSample_ConvertToContiguousBuffer(This,ppBuffer) (This)->lpVtbl->ConvertToContiguousBuffer(This,ppBuffer)
#define IMFSample_AddBuffer(This,pBuffer) (This)->lpVtbl->AddBuffer(This,pBuffer)
#define IMFSample_RemoveBufferByIndex(This,dwIndex) (This)->lpVtbl->RemoveBufferByIndex(This,dwIndex)
#define IMFSample_RemoveAllBuffers(This) (This)->lpVtbl->RemoveAllBuffers(This)
#define IMFSample_GetTotalLength(This,pcbTotalLength) (This)->lpVtbl->GetTotalLength(This,pcbTotalLength)
#define IMFSample_CopyToBuffer(This,pBuffer) (This)->lpVtbl->CopyToBuffer(This,pBuffer)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFSample_QueryInterface(IMFSample* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFSample_AddRef(IMFSample* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFSample_Release(IMFSample* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFAttributes methods ***/
static FORCEINLINE HRESULT IMFSample_GetItem(IMFSample* This,REFGUID guidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItem(This,guidKey,pValue);
}
static FORCEINLINE HRESULT IMFSample_GetItemType(IMFSample* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
    return This->lpVtbl->GetItemType(This,guidKey,pType);
}
static FORCEINLINE HRESULT IMFSample_CompareItem(IMFSample* This,REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) {
    return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
}
static FORCEINLINE HRESULT IMFSample_Compare(IMFSample* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) {
    return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
}
static FORCEINLINE HRESULT IMFSample_GetUINT32(IMFSample* This,REFGUID guidKey,UINT32 *punValue) {
    return This->lpVtbl->GetUINT32(This,guidKey,punValue);
}
static FORCEINLINE HRESULT IMFSample_GetUINT64(IMFSample* This,REFGUID guidKey,UINT64 *punValue) {
    return This->lpVtbl->GetUINT64(This,guidKey,punValue);
}
static FORCEINLINE HRESULT IMFSample_GetDouble(IMFSample* This,REFGUID guidKey,double *pfValue) {
    return This->lpVtbl->GetDouble(This,guidKey,pfValue);
}
static FORCEINLINE HRESULT IMFSample_GetGUID(IMFSample* This,REFGUID guidKey,GUID *pguidValue) {
    return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
}
static FORCEINLINE HRESULT IMFSample_GetStringLength(IMFSample* This,REFGUID guidKey,UINT32 *pcchLength) {
    return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
}
static FORCEINLINE HRESULT IMFSample_GetString(IMFSample* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
    return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
}
static FORCEINLINE HRESULT IMFSample_GetAllocatedString(IMFSample* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
    return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
}
static FORCEINLINE HRESULT IMFSample_GetBlobSize(IMFSample* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
}
static FORCEINLINE HRESULT IMFSample_GetBlob(IMFSample* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
}
static FORCEINLINE HRESULT IMFSample_GetAllocatedBlob(IMFSample* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
    return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
}
static FORCEINLINE HRESULT IMFSample_GetUnknown(IMFSample* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
    return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
}
static FORCEINLINE HRESULT IMFSample_SetItem(IMFSample* This,REFGUID guidKey,REFPROPVARIANT Value) {
    return This->lpVtbl->SetItem(This,guidKey,Value);
}
static FORCEINLINE HRESULT IMFSample_DeleteItem(IMFSample* This,REFGUID guidKey) {
    return This->lpVtbl->DeleteItem(This,guidKey);
}
static FORCEINLINE HRESULT IMFSample_DeleteAllItems(IMFSample* This) {
    return This->lpVtbl->DeleteAllItems(This);
}
static FORCEINLINE HRESULT IMFSample_SetUINT32(IMFSample* This,REFGUID guidKey,UINT32 unValue) {
    return This->lpVtbl->SetUINT32(This,guidKey,unValue);
}
static FORCEINLINE HRESULT IMFSample_SetUINT64(IMFSample* This,REFGUID guidKey,UINT64 unValue) {
    return This->lpVtbl->SetUINT64(This,guidKey,unValue);
}
static FORCEINLINE HRESULT IMFSample_SetDouble(IMFSample* This,REFGUID guidKey,double fValue) {
    return This->lpVtbl->SetDouble(This,guidKey,fValue);
}
static FORCEINLINE HRESULT IMFSample_SetGUID(IMFSample* This,REFGUID guidKey,REFGUID guidValue) {
    return This->lpVtbl->SetGUID(This,guidKey,guidValue);
}
static FORCEINLINE HRESULT IMFSample_SetString(IMFSample* This,REFGUID guidKey,LPCWSTR wszValue) {
    return This->lpVtbl->SetString(This,guidKey,wszValue);
}
static FORCEINLINE HRESULT IMFSample_SetBlob(IMFSample* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
    return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
}
static FORCEINLINE HRESULT IMFSample_SetUnknown(IMFSample* This,REFGUID guidKey,IUnknown *pUnknown) {
    return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
}
static FORCEINLINE HRESULT IMFSample_LockStore(IMFSample* This) {
    return This->lpVtbl->LockStore(This);
}
static FORCEINLINE HRESULT IMFSample_UnlockStore(IMFSample* This) {
    return This->lpVtbl->UnlockStore(This);
}
static FORCEINLINE HRESULT IMFSample_GetCount(IMFSample* This,UINT32 *pcItems) {
    return This->lpVtbl->GetCount(This,pcItems);
}
static FORCEINLINE HRESULT IMFSample_GetItemByIndex(IMFSample* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
}
static FORCEINLINE HRESULT IMFSample_CopyAllItems(IMFSample* This,IMFAttributes *pDest) {
    return This->lpVtbl->CopyAllItems(This,pDest);
}
/*** IMFSample methods ***/
static FORCEINLINE HRESULT IMFSample_GetSampleFlags(IMFSample* This,DWORD *pdwSampleFlags) {
    return This->lpVtbl->GetSampleFlags(This,pdwSampleFlags);
}
static FORCEINLINE HRESULT IMFSample_SetSampleFlags(IMFSample* This,DWORD dwSampleFlags) {
    return This->lpVtbl->SetSampleFlags(This,dwSampleFlags);
}
static FORCEINLINE HRESULT IMFSample_GetSampleTime(IMFSample* This,LONGLONG *phnsSampleTime) {
    return This->lpVtbl->GetSampleTime(This,phnsSampleTime);
}
static FORCEINLINE HRESULT IMFSample_SetSampleTime(IMFSample* This,LONGLONG hnsSampleTime) {
    return This->lpVtbl->SetSampleTime(This,hnsSampleTime);
}
static FORCEINLINE HRESULT IMFSample_GetSampleDuration(IMFSample* This,LONGLONG *phnsSampleDuration) {
    return This->lpVtbl->GetSampleDuration(This,phnsSampleDuration);
}
static FORCEINLINE HRESULT IMFSample_SetSampleDuration(IMFSample* This,LONGLONG hnsSampleDuration) {
    return This->lpVtbl->SetSampleDuration(This,hnsSampleDuration);
}
static FORCEINLINE HRESULT IMFSample_GetBufferCount(IMFSample* This,DWORD *pdwBufferCount) {
    return This->lpVtbl->GetBufferCount(This,pdwBufferCount);
}
static FORCEINLINE HRESULT IMFSample_GetBufferByIndex(IMFSample* This,DWORD dwIndex,IMFMediaBuffer **ppBuffer) {
    return This->lpVtbl->GetBufferByIndex(This,dwIndex,ppBuffer);
}
static FORCEINLINE HRESULT IMFSample_ConvertToContiguousBuffer(IMFSample* This,IMFMediaBuffer **ppBuffer) {
    return This->lpVtbl->ConvertToContiguousBuffer(This,ppBuffer);
}
static FORCEINLINE HRESULT IMFSample_AddBuffer(IMFSample* This,IMFMediaBuffer *pBuffer) {
    return This->lpVtbl->AddBuffer(This,pBuffer);
}
static FORCEINLINE HRESULT IMFSample_RemoveBufferByIndex(IMFSample* This,DWORD dwIndex) {
    return This->lpVtbl->RemoveBufferByIndex(This,dwIndex);
}
static FORCEINLINE HRESULT IMFSample_RemoveAllBuffers(IMFSample* This) {
    return This->lpVtbl->RemoveAllBuffers(This);
}
static FORCEINLINE HRESULT IMFSample_GetTotalLength(IMFSample* This,DWORD *pcbTotalLength) {
    return This->lpVtbl->GetTotalLength(This,pcbTotalLength);
}
static FORCEINLINE HRESULT IMFSample_CopyToBuffer(IMFSample* This,IMFMediaBuffer *pBuffer) {
    return This->lpVtbl->CopyToBuffer(This,pBuffer);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMFSample_GetSampleFlags_Proxy(
    IMFSample* This,
    DWORD *pdwSampleFlags);
void __RPC_STUB IMFSample_GetSampleFlags_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFSample_SetSampleFlags_Proxy(
    IMFSample* This,
    DWORD dwSampleFlags);
void __RPC_STUB IMFSample_SetSampleFlags_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFSample_GetSampleTime_Proxy(
    IMFSample* This,
    LONGLONG *phnsSampleTime);
void __RPC_STUB IMFSample_GetSampleTime_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFSample_SetSampleTime_Proxy(
    IMFSample* This,
    LONGLONG hnsSampleTime);
void __RPC_STUB IMFSample_SetSampleTime_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFSample_GetSampleDuration_Proxy(
    IMFSample* This,
    LONGLONG *phnsSampleDuration);
void __RPC_STUB IMFSample_GetSampleDuration_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFSample_SetSampleDuration_Proxy(
    IMFSample* This,
    LONGLONG hnsSampleDuration);
void __RPC_STUB IMFSample_SetSampleDuration_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFSample_GetBufferCount_Proxy(
    IMFSample* This,
    DWORD *pdwBufferCount);
void __RPC_STUB IMFSample_GetBufferCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFSample_GetBufferByIndex_Proxy(
    IMFSample* This,
    DWORD dwIndex,
    IMFMediaBuffer **ppBuffer);
void __RPC_STUB IMFSample_GetBufferByIndex_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFSample_ConvertToContiguousBuffer_Proxy(
    IMFSample* This,
    IMFMediaBuffer **ppBuffer);
void __RPC_STUB IMFSample_ConvertToContiguousBuffer_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFSample_AddBuffer_Proxy(
    IMFSample* This,
    IMFMediaBuffer *pBuffer);
void __RPC_STUB IMFSample_AddBuffer_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFSample_RemoveBufferByIndex_Proxy(
    IMFSample* This,
    DWORD dwIndex);
void __RPC_STUB IMFSample_RemoveBufferByIndex_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFSample_RemoveAllBuffers_Proxy(
    IMFSample* This);
void __RPC_STUB IMFSample_RemoveAllBuffers_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFSample_GetTotalLength_Proxy(
    IMFSample* This,
    DWORD *pcbTotalLength);
void __RPC_STUB IMFSample_GetTotalLength_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFSample_CopyToBuffer_Proxy(
    IMFSample* This,
    IMFMediaBuffer *pBuffer);
void __RPC_STUB IMFSample_CopyToBuffer_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMFSample_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMF2DBuffer interface
 */
#ifndef __IMF2DBuffer_INTERFACE_DEFINED__
#define __IMF2DBuffer_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMF2DBuffer, 0x7dc9d5f9, 0x9ed9, 0x44ec, 0x9b,0xbf, 0x06,0x00,0xbb,0x58,0x9f,0xbb);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("7dc9d5f9-9ed9-44ec-9bbf-0600bb589fbb")
IMF2DBuffer : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Lock2D(
        BYTE **pbScanline0,
        LONG *plPitch) = 0;

    virtual HRESULT STDMETHODCALLTYPE Unlock2D(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetScanline0AndPitch(
        BYTE **pbScanline0,
        LONG *plPitch) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsContiguousFormat(
        WINBOOL *pfIsContiguous) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetContiguousLength(
        DWORD *pcbLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE ContiguousCopyTo(
        BYTE *pbDestBuffer,
        DWORD cbDestBuffer) = 0;

    virtual HRESULT STDMETHODCALLTYPE ContiguousCopyFrom(
        const BYTE *pbSrcBuffer,
        DWORD cbSrcBuffer) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMF2DBuffer, 0x7dc9d5f9, 0x9ed9, 0x44ec, 0x9b,0xbf, 0x06,0x00,0xbb,0x58,0x9f,0xbb)
#endif
#else
typedef struct IMF2DBufferVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMF2DBuffer* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMF2DBuffer* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMF2DBuffer* This);

    /*** IMF2DBuffer methods ***/
    HRESULT (STDMETHODCALLTYPE *Lock2D)(
        IMF2DBuffer* This,
        BYTE **pbScanline0,
        LONG *plPitch);

    HRESULT (STDMETHODCALLTYPE *Unlock2D)(
        IMF2DBuffer* This);

    HRESULT (STDMETHODCALLTYPE *GetScanline0AndPitch)(
        IMF2DBuffer* This,
        BYTE **pbScanline0,
        LONG *plPitch);

    HRESULT (STDMETHODCALLTYPE *IsContiguousFormat)(
        IMF2DBuffer* This,
        WINBOOL *pfIsContiguous);

    HRESULT (STDMETHODCALLTYPE *GetContiguousLength)(
        IMF2DBuffer* This,
        DWORD *pcbLength);

    HRESULT (STDMETHODCALLTYPE *ContiguousCopyTo)(
        IMF2DBuffer* This,
        BYTE *pbDestBuffer,
        DWORD cbDestBuffer);

    HRESULT (STDMETHODCALLTYPE *ContiguousCopyFrom)(
        IMF2DBuffer* This,
        const BYTE *pbSrcBuffer,
        DWORD cbSrcBuffer);

    END_INTERFACE
} IMF2DBufferVtbl;
interface IMF2DBuffer {
    CONST_VTBL IMF2DBufferVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMF2DBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMF2DBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMF2DBuffer_Release(This) (This)->lpVtbl->Release(This)
/*** IMF2DBuffer methods ***/
#define IMF2DBuffer_Lock2D(This,pbScanline0,plPitch) (This)->lpVtbl->Lock2D(This,pbScanline0,plPitch)
#define IMF2DBuffer_Unlock2D(This) (This)->lpVtbl->Unlock2D(This)
#define IMF2DBuffer_GetScanline0AndPitch(This,pbScanline0,plPitch) (This)->lpVtbl->GetScanline0AndPitch(This,pbScanline0,plPitch)
#define IMF2DBuffer_IsContiguousFormat(This,pfIsContiguous) (This)->lpVtbl->IsContiguousFormat(This,pfIsContiguous)
#define IMF2DBuffer_GetContiguousLength(This,pcbLength) (This)->lpVtbl->GetContiguousLength(This,pcbLength)
#define IMF2DBuffer_ContiguousCopyTo(This,pbDestBuffer,cbDestBuffer) (This)->lpVtbl->ContiguousCopyTo(This,pbDestBuffer,cbDestBuffer)
#define IMF2DBuffer_ContiguousCopyFrom(This,pbSrcBuffer,cbSrcBuffer) (This)->lpVtbl->ContiguousCopyFrom(This,pbSrcBuffer,cbSrcBuffer)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMF2DBuffer_QueryInterface(IMF2DBuffer* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMF2DBuffer_AddRef(IMF2DBuffer* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMF2DBuffer_Release(IMF2DBuffer* This) {
    return This->lpVtbl->Release(This);
}
/*** IMF2DBuffer methods ***/
static FORCEINLINE HRESULT IMF2DBuffer_Lock2D(IMF2DBuffer* This,BYTE **pbScanline0,LONG *plPitch) {
    return This->lpVtbl->Lock2D(This,pbScanline0,plPitch);
}
static FORCEINLINE HRESULT IMF2DBuffer_Unlock2D(IMF2DBuffer* This) {
    return This->lpVtbl->Unlock2D(This);
}
static FORCEINLINE HRESULT IMF2DBuffer_GetScanline0AndPitch(IMF2DBuffer* This,BYTE **pbScanline0,LONG *plPitch) {
    return This->lpVtbl->GetScanline0AndPitch(This,pbScanline0,plPitch);
}
static FORCEINLINE HRESULT IMF2DBuffer_IsContiguousFormat(IMF2DBuffer* This,WINBOOL *pfIsContiguous) {
    return This->lpVtbl->IsContiguousFormat(This,pfIsContiguous);
}
static FORCEINLINE HRESULT IMF2DBuffer_GetContiguousLength(IMF2DBuffer* This,DWORD *pcbLength) {
    return This->lpVtbl->GetContiguousLength(This,pcbLength);
}
static FORCEINLINE HRESULT IMF2DBuffer_ContiguousCopyTo(IMF2DBuffer* This,BYTE *pbDestBuffer,DWORD cbDestBuffer) {
    return This->lpVtbl->ContiguousCopyTo(This,pbDestBuffer,cbDestBuffer);
}
static FORCEINLINE HRESULT IMF2DBuffer_ContiguousCopyFrom(IMF2DBuffer* This,const BYTE *pbSrcBuffer,DWORD cbSrcBuffer) {
    return This->lpVtbl->ContiguousCopyFrom(This,pbSrcBuffer,cbSrcBuffer);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMF2DBuffer_Lock2D_Proxy(
    IMF2DBuffer* This,
    BYTE **pbScanline0,
    LONG *plPitch);
void __RPC_STUB IMF2DBuffer_Lock2D_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMF2DBuffer_Unlock2D_Proxy(
    IMF2DBuffer* This);
void __RPC_STUB IMF2DBuffer_Unlock2D_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMF2DBuffer_GetScanline0AndPitch_Proxy(
    IMF2DBuffer* This,
    BYTE **pbScanline0,
    LONG *plPitch);
void __RPC_STUB IMF2DBuffer_GetScanline0AndPitch_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMF2DBuffer_IsContiguousFormat_Proxy(
    IMF2DBuffer* This,
    WINBOOL *pfIsContiguous);
void __RPC_STUB IMF2DBuffer_IsContiguousFormat_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMF2DBuffer_GetContiguousLength_Proxy(
    IMF2DBuffer* This,
    DWORD *pcbLength);
void __RPC_STUB IMF2DBuffer_GetContiguousLength_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMF2DBuffer_ContiguousCopyTo_Proxy(
    IMF2DBuffer* This,
    BYTE *pbDestBuffer,
    DWORD cbDestBuffer);
void __RPC_STUB IMF2DBuffer_ContiguousCopyTo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMF2DBuffer_ContiguousCopyFrom_Proxy(
    IMF2DBuffer* This,
    const BYTE *pbSrcBuffer,
    DWORD cbSrcBuffer);
void __RPC_STUB IMF2DBuffer_ContiguousCopyFrom_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMF2DBuffer_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFMediaType interface
 */
#ifndef __IMFMediaType_INTERFACE_DEFINED__
#define __IMFMediaType_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFMediaType, 0x44ae0fa8, 0xea31, 0x4109, 0x8d,0x2e, 0x4c,0xae,0x49,0x97,0xc5,0x55);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("44ae0fa8-ea31-4109-8d2e-4cae4997c555")
IMFMediaType : public IMFAttributes
{
    virtual HRESULT STDMETHODCALLTYPE GetMajorType(
        GUID *pguidMajorType) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsCompressedFormat(
        WINBOOL *pfCompressed) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsEqual(
        IMFMediaType *pIMediaType,
        DWORD *pdwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRepresentation(
        GUID guidRepresentation,
        LPVOID *ppvRepresentation) = 0;

    virtual HRESULT STDMETHODCALLTYPE FreeRepresentation(
        GUID guidRepresentation,
        LPVOID pvRepresentation) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFMediaType, 0x44ae0fa8, 0xea31, 0x4109, 0x8d,0x2e, 0x4c,0xae,0x49,0x97,0xc5,0x55)
#endif
#else
typedef struct IMFMediaTypeVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMFMediaType* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMFMediaType* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMFMediaType* This);

    /*** IMFAttributes methods ***/
    HRESULT (STDMETHODCALLTYPE *GetItem)(
        IMFMediaType* This,
        REFGUID guidKey,
        PROPVARIANT *pValue);

    HRESULT (STDMETHODCALLTYPE *GetItemType)(
        IMFMediaType* This,
        REFGUID guidKey,
        MF_ATTRIBUTE_TYPE *pType);

    HRESULT (STDMETHODCALLTYPE *CompareItem)(
        IMFMediaType* This,
        REFGUID guidKey,
        REFPROPVARIANT Value,
        WINBOOL *pbResult);

    HRESULT (STDMETHODCALLTYPE *Compare)(
        IMFMediaType* This,
        IMFAttributes *pTheirs,
        MF_ATTRIBUTES_MATCH_TYPE MatchType,
        WINBOOL *pbResult);

    HRESULT (STDMETHODCALLTYPE *GetUINT32)(
        IMFMediaType* This,
        REFGUID guidKey,
        UINT32 *punValue);

    HRESULT (STDMETHODCALLTYPE *GetUINT64)(
        IMFMediaType* This,
        REFGUID guidKey,
        UINT64 *punValue);

    HRESULT (STDMETHODCALLTYPE *GetDouble)(
        IMFMediaType* This,
        REFGUID guidKey,
        double *pfValue);

    HRESULT (STDMETHODCALLTYPE *GetGUID)(
        IMFMediaType* This,
        REFGUID guidKey,
        GUID *pguidValue);

    HRESULT (STDMETHODCALLTYPE *GetStringLength)(
        IMFMediaType* This,
        REFGUID guidKey,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetString)(
        IMFMediaType* This,
        REFGUID guidKey,
        LPWSTR pwszValue,
        UINT32 cchBufSize,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetAllocatedString)(
        IMFMediaType* This,
        REFGUID guidKey,
        LPWSTR *ppwszValue,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetBlobSize)(
        IMFMediaType* This,
        REFGUID guidKey,
        UINT32 *pcbBlobSize);

    HRESULT (STDMETHODCALLTYPE *GetBlob)(
        IMFMediaType* This,
        REFGUID guidKey,
        UINT8 *pBuf,
        UINT32 cbBufSize,
        UINT32 *pcbBlobSize);

    HRESULT (STDMETHODCALLTYPE *GetAllocatedBlob)(
        IMFMediaType* This,
        REFGUID guidKey,
        UINT8 **ppBuf,
        UINT32 *pcbSize);

    HRESULT (STDMETHODCALLTYPE *GetUnknown)(
        IMFMediaType* This,
        REFGUID guidKey,
        REFIID riid,
        LPVOID *ppv);

    HRESULT (STDMETHODCALLTYPE *SetItem)(
        IMFMediaType* This,
        REFGUID guidKey,
        REFPROPVARIANT Value);

    HRESULT (STDMETHODCALLTYPE *DeleteItem)(
        IMFMediaType* This,
        REFGUID guidKey);

    HRESULT (STDMETHODCALLTYPE *DeleteAllItems)(
        IMFMediaType* This);

    HRESULT (STDMETHODCALLTYPE *SetUINT32)(
        IMFMediaType* This,
        REFGUID guidKey,
        UINT32 unValue);

    HRESULT (STDMETHODCALLTYPE *SetUINT64)(
        IMFMediaType* This,
        REFGUID guidKey,
        UINT64 unValue);

    HRESULT (STDMETHODCALLTYPE *SetDouble)(
        IMFMediaType* This,
        REFGUID guidKey,
        double fValue);

    HRESULT (STDMETHODCALLTYPE *SetGUID)(
        IMFMediaType* This,
        REFGUID guidKey,
        REFGUID guidValue);

    HRESULT (STDMETHODCALLTYPE *SetString)(
        IMFMediaType* This,
        REFGUID guidKey,
        LPCWSTR wszValue);

    HRESULT (STDMETHODCALLTYPE *SetBlob)(
        IMFMediaType* This,
        REFGUID guidKey,
        const UINT8 *pBuf,
        UINT32 cbBufSize);

    HRESULT (STDMETHODCALLTYPE *SetUnknown)(
        IMFMediaType* This,
        REFGUID guidKey,
        IUnknown *pUnknown);

    HRESULT (STDMETHODCALLTYPE *LockStore)(
        IMFMediaType* This);

    HRESULT (STDMETHODCALLTYPE *UnlockStore)(
        IMFMediaType* This);

    HRESULT (STDMETHODCALLTYPE *GetCount)(
        IMFMediaType* This,
        UINT32 *pcItems);

    HRESULT (STDMETHODCALLTYPE *GetItemByIndex)(
        IMFMediaType* This,
        UINT32 unIndex,
        GUID *pguidKey,
        PROPVARIANT *pValue);

    HRESULT (STDMETHODCALLTYPE *CopyAllItems)(
        IMFMediaType* This,
        IMFAttributes *pDest);

    /*** IMFMediaType methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMajorType)(
        IMFMediaType* This,
        GUID *pguidMajorType);

    HRESULT (STDMETHODCALLTYPE *IsCompressedFormat)(
        IMFMediaType* This,
        WINBOOL *pfCompressed);

    HRESULT (STDMETHODCALLTYPE *IsEqual)(
        IMFMediaType* This,
        IMFMediaType *pIMediaType,
        DWORD *pdwFlags);

    HRESULT (STDMETHODCALLTYPE *GetRepresentation)(
        IMFMediaType* This,
        GUID guidRepresentation,
        LPVOID *ppvRepresentation);

    HRESULT (STDMETHODCALLTYPE *FreeRepresentation)(
        IMFMediaType* This,
        GUID guidRepresentation,
        LPVOID pvRepresentation);

    END_INTERFACE
} IMFMediaTypeVtbl;
interface IMFMediaType {
    CONST_VTBL IMFMediaTypeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFMediaType_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFMediaType_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFMediaType_Release(This) (This)->lpVtbl->Release(This)
/*** IMFAttributes methods ***/
#define IMFMediaType_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
#define IMFMediaType_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
#define IMFMediaType_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
#define IMFMediaType_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
#define IMFMediaType_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
#define IMFMediaType_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
#define IMFMediaType_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
#define IMFMediaType_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
#define IMFMediaType_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
#define IMFMediaType_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
#define IMFMediaType_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
#define IMFMediaType_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
#define IMFMediaType_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
#define IMFMediaType_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
#define IMFMediaType_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
#define IMFMediaType_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
#define IMFMediaType_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
#define IMFMediaType_DeleteAllItems(This) (This)->lpVtbl->DeleteAllItems(This)
#define IMFMediaType_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
#define IMFMediaType_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
#define IMFMediaType_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
#define IMFMediaType_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
#define IMFMediaType_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
#define IMFMediaType_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
#define IMFMediaType_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
#define IMFMediaType_LockStore(This) (This)->lpVtbl->LockStore(This)
#define IMFMediaType_UnlockStore(This) (This)->lpVtbl->UnlockStore(This)
#define IMFMediaType_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
#define IMFMediaType_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
#define IMFMediaType_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
/*** IMFMediaType methods ***/
#define IMFMediaType_GetMajorType(This,pguidMajorType) (This)->lpVtbl->GetMajorType(This,pguidMajorType)
#define IMFMediaType_IsCompressedFormat(This,pfCompressed) (This)->lpVtbl->IsCompressedFormat(This,pfCompressed)
#define IMFMediaType_IsEqual(This,pIMediaType,pdwFlags) (This)->lpVtbl->IsEqual(This,pIMediaType,pdwFlags)
#define IMFMediaType_GetRepresentation(This,guidRepresentation,ppvRepresentation) (This)->lpVtbl->GetRepresentation(This,guidRepresentation,ppvRepresentation)
#define IMFMediaType_FreeRepresentation(This,guidRepresentation,pvRepresentation) (This)->lpVtbl->FreeRepresentation(This,guidRepresentation,pvRepresentation)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFMediaType_QueryInterface(IMFMediaType* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFMediaType_AddRef(IMFMediaType* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFMediaType_Release(IMFMediaType* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFAttributes methods ***/
static FORCEINLINE HRESULT IMFMediaType_GetItem(IMFMediaType* This,REFGUID guidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItem(This,guidKey,pValue);
}
static FORCEINLINE HRESULT IMFMediaType_GetItemType(IMFMediaType* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
    return This->lpVtbl->GetItemType(This,guidKey,pType);
}
static FORCEINLINE HRESULT IMFMediaType_CompareItem(IMFMediaType* This,REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) {
    return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
}
static FORCEINLINE HRESULT IMFMediaType_Compare(IMFMediaType* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) {
    return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
}
static FORCEINLINE HRESULT IMFMediaType_GetUINT32(IMFMediaType* This,REFGUID guidKey,UINT32 *punValue) {
    return This->lpVtbl->GetUINT32(This,guidKey,punValue);
}
static FORCEINLINE HRESULT IMFMediaType_GetUINT64(IMFMediaType* This,REFGUID guidKey,UINT64 *punValue) {
    return This->lpVtbl->GetUINT64(This,guidKey,punValue);
}
static FORCEINLINE HRESULT IMFMediaType_GetDouble(IMFMediaType* This,REFGUID guidKey,double *pfValue) {
    return This->lpVtbl->GetDouble(This,guidKey,pfValue);
}
static FORCEINLINE HRESULT IMFMediaType_GetGUID(IMFMediaType* This,REFGUID guidKey,GUID *pguidValue) {
    return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
}
static FORCEINLINE HRESULT IMFMediaType_GetStringLength(IMFMediaType* This,REFGUID guidKey,UINT32 *pcchLength) {
    return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
}
static FORCEINLINE HRESULT IMFMediaType_GetString(IMFMediaType* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
    return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
}
static FORCEINLINE HRESULT IMFMediaType_GetAllocatedString(IMFMediaType* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
    return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
}
static FORCEINLINE HRESULT IMFMediaType_GetBlobSize(IMFMediaType* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
}
static FORCEINLINE HRESULT IMFMediaType_GetBlob(IMFMediaType* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
}
static FORCEINLINE HRESULT IMFMediaType_GetAllocatedBlob(IMFMediaType* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
    return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
}
static FORCEINLINE HRESULT IMFMediaType_GetUnknown(IMFMediaType* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
    return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
}
static FORCEINLINE HRESULT IMFMediaType_SetItem(IMFMediaType* This,REFGUID guidKey,REFPROPVARIANT Value) {
    return This->lpVtbl->SetItem(This,guidKey,Value);
}
static FORCEINLINE HRESULT IMFMediaType_DeleteItem(IMFMediaType* This,REFGUID guidKey) {
    return This->lpVtbl->DeleteItem(This,guidKey);
}
static FORCEINLINE HRESULT IMFMediaType_DeleteAllItems(IMFMediaType* This) {
    return This->lpVtbl->DeleteAllItems(This);
}
static FORCEINLINE HRESULT IMFMediaType_SetUINT32(IMFMediaType* This,REFGUID guidKey,UINT32 unValue) {
    return This->lpVtbl->SetUINT32(This,guidKey,unValue);
}
static FORCEINLINE HRESULT IMFMediaType_SetUINT64(IMFMediaType* This,REFGUID guidKey,UINT64 unValue) {
    return This->lpVtbl->SetUINT64(This,guidKey,unValue);
}
static FORCEINLINE HRESULT IMFMediaType_SetDouble(IMFMediaType* This,REFGUID guidKey,double fValue) {
    return This->lpVtbl->SetDouble(This,guidKey,fValue);
}
static FORCEINLINE HRESULT IMFMediaType_SetGUID(IMFMediaType* This,REFGUID guidKey,REFGUID guidValue) {
    return This->lpVtbl->SetGUID(This,guidKey,guidValue);
}
static FORCEINLINE HRESULT IMFMediaType_SetString(IMFMediaType* This,REFGUID guidKey,LPCWSTR wszValue) {
    return This->lpVtbl->SetString(This,guidKey,wszValue);
}
static FORCEINLINE HRESULT IMFMediaType_SetBlob(IMFMediaType* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
    return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
}
static FORCEINLINE HRESULT IMFMediaType_SetUnknown(IMFMediaType* This,REFGUID guidKey,IUnknown *pUnknown) {
    return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
}
static FORCEINLINE HRESULT IMFMediaType_LockStore(IMFMediaType* This) {
    return This->lpVtbl->LockStore(This);
}
static FORCEINLINE HRESULT IMFMediaType_UnlockStore(IMFMediaType* This) {
    return This->lpVtbl->UnlockStore(This);
}
static FORCEINLINE HRESULT IMFMediaType_GetCount(IMFMediaType* This,UINT32 *pcItems) {
    return This->lpVtbl->GetCount(This,pcItems);
}
static FORCEINLINE HRESULT IMFMediaType_GetItemByIndex(IMFMediaType* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
}
static FORCEINLINE HRESULT IMFMediaType_CopyAllItems(IMFMediaType* This,IMFAttributes *pDest) {
    return This->lpVtbl->CopyAllItems(This,pDest);
}
/*** IMFMediaType methods ***/
static FORCEINLINE HRESULT IMFMediaType_GetMajorType(IMFMediaType* This,GUID *pguidMajorType) {
    return This->lpVtbl->GetMajorType(This,pguidMajorType);
}
static FORCEINLINE HRESULT IMFMediaType_IsCompressedFormat(IMFMediaType* This,WINBOOL *pfCompressed) {
    return This->lpVtbl->IsCompressedFormat(This,pfCompressed);
}
static FORCEINLINE HRESULT IMFMediaType_IsEqual(IMFMediaType* This,IMFMediaType *pIMediaType,DWORD *pdwFlags) {
    return This->lpVtbl->IsEqual(This,pIMediaType,pdwFlags);
}
static FORCEINLINE HRESULT IMFMediaType_GetRepresentation(IMFMediaType* This,GUID guidRepresentation,LPVOID *ppvRepresentation) {
    return This->lpVtbl->GetRepresentation(This,guidRepresentation,ppvRepresentation);
}
static FORCEINLINE HRESULT IMFMediaType_FreeRepresentation(IMFMediaType* This,GUID guidRepresentation,LPVOID pvRepresentation) {
    return This->lpVtbl->FreeRepresentation(This,guidRepresentation,pvRepresentation);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMFMediaType_GetMajorType_Proxy(
    IMFMediaType* This,
    GUID *pguidMajorType);
void __RPC_STUB IMFMediaType_GetMajorType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFMediaType_IsCompressedFormat_Proxy(
    IMFMediaType* This,
    WINBOOL *pfCompressed);
void __RPC_STUB IMFMediaType_IsCompressedFormat_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFMediaType_IsEqual_Proxy(
    IMFMediaType* This,
    IMFMediaType *pIMediaType,
    DWORD *pdwFlags);
void __RPC_STUB IMFMediaType_IsEqual_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFMediaType_GetRepresentation_Proxy(
    IMFMediaType* This,
    GUID guidRepresentation,
    LPVOID *ppvRepresentation);
void __RPC_STUB IMFMediaType_GetRepresentation_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFMediaType_FreeRepresentation_Proxy(
    IMFMediaType* This,
    GUID guidRepresentation,
    LPVOID pvRepresentation);
void __RPC_STUB IMFMediaType_FreeRepresentation_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMFMediaType_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFAudioMediaType interface
 */
#ifndef __IMFAudioMediaType_INTERFACE_DEFINED__
#define __IMFAudioMediaType_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFAudioMediaType, 0x26a0adc3, 0xce26, 0x4672, 0x93,0x04, 0x69,0x55,0x2e,0xdd,0x3f,0xaf);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("26a0adc3-ce26-4672-9304-69552edd3faf")
IMFAudioMediaType : public IMFMediaType
{
    virtual const WAVEFORMATEX * STDMETHODCALLTYPE GetAudioFormat(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFAudioMediaType, 0x26a0adc3, 0xce26, 0x4672, 0x93,0x04, 0x69,0x55,0x2e,0xdd,0x3f,0xaf)
#endif
#else
typedef struct IMFAudioMediaTypeVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMFAudioMediaType* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMFAudioMediaType* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMFAudioMediaType* This);

    /*** IMFAttributes methods ***/
    HRESULT (STDMETHODCALLTYPE *GetItem)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        PROPVARIANT *pValue);

    HRESULT (STDMETHODCALLTYPE *GetItemType)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        MF_ATTRIBUTE_TYPE *pType);

    HRESULT (STDMETHODCALLTYPE *CompareItem)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        REFPROPVARIANT Value,
        WINBOOL *pbResult);

    HRESULT (STDMETHODCALLTYPE *Compare)(
        IMFAudioMediaType* This,
        IMFAttributes *pTheirs,
        MF_ATTRIBUTES_MATCH_TYPE MatchType,
        WINBOOL *pbResult);

    HRESULT (STDMETHODCALLTYPE *GetUINT32)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        UINT32 *punValue);

    HRESULT (STDMETHODCALLTYPE *GetUINT64)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        UINT64 *punValue);

    HRESULT (STDMETHODCALLTYPE *GetDouble)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        double *pfValue);

    HRESULT (STDMETHODCALLTYPE *GetGUID)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        GUID *pguidValue);

    HRESULT (STDMETHODCALLTYPE *GetStringLength)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetString)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        LPWSTR pwszValue,
        UINT32 cchBufSize,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetAllocatedString)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        LPWSTR *ppwszValue,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetBlobSize)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        UINT32 *pcbBlobSize);

    HRESULT (STDMETHODCALLTYPE *GetBlob)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        UINT8 *pBuf,
        UINT32 cbBufSize,
        UINT32 *pcbBlobSize);

    HRESULT (STDMETHODCALLTYPE *GetAllocatedBlob)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        UINT8 **ppBuf,
        UINT32 *pcbSize);

    HRESULT (STDMETHODCALLTYPE *GetUnknown)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        REFIID riid,
        LPVOID *ppv);

    HRESULT (STDMETHODCALLTYPE *SetItem)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        REFPROPVARIANT Value);

    HRESULT (STDMETHODCALLTYPE *DeleteItem)(
        IMFAudioMediaType* This,
        REFGUID guidKey);

    HRESULT (STDMETHODCALLTYPE *DeleteAllItems)(
        IMFAudioMediaType* This);

    HRESULT (STDMETHODCALLTYPE *SetUINT32)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        UINT32 unValue);

    HRESULT (STDMETHODCALLTYPE *SetUINT64)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        UINT64 unValue);

    HRESULT (STDMETHODCALLTYPE *SetDouble)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        double fValue);

    HRESULT (STDMETHODCALLTYPE *SetGUID)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        REFGUID guidValue);

    HRESULT (STDMETHODCALLTYPE *SetString)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        LPCWSTR wszValue);

    HRESULT (STDMETHODCALLTYPE *SetBlob)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        const UINT8 *pBuf,
        UINT32 cbBufSize);

    HRESULT (STDMETHODCALLTYPE *SetUnknown)(
        IMFAudioMediaType* This,
        REFGUID guidKey,
        IUnknown *pUnknown);

    HRESULT (STDMETHODCALLTYPE *LockStore)(
        IMFAudioMediaType* This);

    HRESULT (STDMETHODCALLTYPE *UnlockStore)(
        IMFAudioMediaType* This);

    HRESULT (STDMETHODCALLTYPE *GetCount)(
        IMFAudioMediaType* This,
        UINT32 *pcItems);

    HRESULT (STDMETHODCALLTYPE *GetItemByIndex)(
        IMFAudioMediaType* This,
        UINT32 unIndex,
        GUID *pguidKey,
        PROPVARIANT *pValue);

    HRESULT (STDMETHODCALLTYPE *CopyAllItems)(
        IMFAudioMediaType* This,
        IMFAttributes *pDest);

    /*** IMFMediaType methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMajorType)(
        IMFAudioMediaType* This,
        GUID *pguidMajorType);

    HRESULT (STDMETHODCALLTYPE *IsCompressedFormat)(
        IMFAudioMediaType* This,
        WINBOOL *pfCompressed);

    HRESULT (STDMETHODCALLTYPE *IsEqual)(
        IMFAudioMediaType* This,
        IMFMediaType *pIMediaType,
        DWORD *pdwFlags);

    HRESULT (STDMETHODCALLTYPE *GetRepresentation)(
        IMFAudioMediaType* This,
        GUID guidRepresentation,
        LPVOID *ppvRepresentation);

    HRESULT (STDMETHODCALLTYPE *FreeRepresentation)(
        IMFAudioMediaType* This,
        GUID guidRepresentation,
        LPVOID pvRepresentation);

    /*** IMFAudioMediaType methods ***/
    const WAVEFORMATEX * (STDMETHODCALLTYPE *GetAudioFormat)(
        IMFAudioMediaType* This);

    END_INTERFACE
} IMFAudioMediaTypeVtbl;
interface IMFAudioMediaType {
    CONST_VTBL IMFAudioMediaTypeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFAudioMediaType_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFAudioMediaType_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFAudioMediaType_Release(This) (This)->lpVtbl->Release(This)
/*** IMFAttributes methods ***/
#define IMFAudioMediaType_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
#define IMFAudioMediaType_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
#define IMFAudioMediaType_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
#define IMFAudioMediaType_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
#define IMFAudioMediaType_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
#define IMFAudioMediaType_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
#define IMFAudioMediaType_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
#define IMFAudioMediaType_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
#define IMFAudioMediaType_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
#define IMFAudioMediaType_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
#define IMFAudioMediaType_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
#define IMFAudioMediaType_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
#define IMFAudioMediaType_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
#define IMFAudioMediaType_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
#define IMFAudioMediaType_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
#define IMFAudioMediaType_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
#define IMFAudioMediaType_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
#define IMFAudioMediaType_DeleteAllItems(This) (This)->lpVtbl->DeleteAllItems(This)
#define IMFAudioMediaType_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
#define IMFAudioMediaType_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
#define IMFAudioMediaType_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
#define IMFAudioMediaType_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
#define IMFAudioMediaType_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
#define IMFAudioMediaType_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
#define IMFAudioMediaType_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
#define IMFAudioMediaType_LockStore(This) (This)->lpVtbl->LockStore(This)
#define IMFAudioMediaType_UnlockStore(This) (This)->lpVtbl->UnlockStore(This)
#define IMFAudioMediaType_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
#define IMFAudioMediaType_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
#define IMFAudioMediaType_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
/*** IMFMediaType methods ***/
#define IMFAudioMediaType_GetMajorType(This,pguidMajorType) (This)->lpVtbl->GetMajorType(This,pguidMajorType)
#define IMFAudioMediaType_IsCompressedFormat(This,pfCompressed) (This)->lpVtbl->IsCompressedFormat(This,pfCompressed)
#define IMFAudioMediaType_IsEqual(This,pIMediaType,pdwFlags) (This)->lpVtbl->IsEqual(This,pIMediaType,pdwFlags)
#define IMFAudioMediaType_GetRepresentation(This,guidRepresentation,ppvRepresentation) (This)->lpVtbl->GetRepresentation(This,guidRepresentation,ppvRepresentation)
#define IMFAudioMediaType_FreeRepresentation(This,guidRepresentation,pvRepresentation) (This)->lpVtbl->FreeRepresentation(This,guidRepresentation,pvRepresentation)
/*** IMFAudioMediaType methods ***/
#define IMFAudioMediaType_GetAudioFormat(This) (This)->lpVtbl->GetAudioFormat(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFAudioMediaType_QueryInterface(IMFAudioMediaType* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFAudioMediaType_AddRef(IMFAudioMediaType* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFAudioMediaType_Release(IMFAudioMediaType* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFAttributes methods ***/
static FORCEINLINE HRESULT IMFAudioMediaType_GetItem(IMFAudioMediaType* This,REFGUID guidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItem(This,guidKey,pValue);
}
static FORCEINLINE HRESULT IMFAudioMediaType_GetItemType(IMFAudioMediaType* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
    return This->lpVtbl->GetItemType(This,guidKey,pType);
}
static FORCEINLINE HRESULT IMFAudioMediaType_CompareItem(IMFAudioMediaType* This,REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) {
    return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
}
static FORCEINLINE HRESULT IMFAudioMediaType_Compare(IMFAudioMediaType* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) {
    return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
}
static FORCEINLINE HRESULT IMFAudioMediaType_GetUINT32(IMFAudioMediaType* This,REFGUID guidKey,UINT32 *punValue) {
    return This->lpVtbl->GetUINT32(This,guidKey,punValue);
}
static FORCEINLINE HRESULT IMFAudioMediaType_GetUINT64(IMFAudioMediaType* This,REFGUID guidKey,UINT64 *punValue) {
    return This->lpVtbl->GetUINT64(This,guidKey,punValue);
}
static FORCEINLINE HRESULT IMFAudioMediaType_GetDouble(IMFAudioMediaType* This,REFGUID guidKey,double *pfValue) {
    return This->lpVtbl->GetDouble(This,guidKey,pfValue);
}
static FORCEINLINE HRESULT IMFAudioMediaType_GetGUID(IMFAudioMediaType* This,REFGUID guidKey,GUID *pguidValue) {
    return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
}
static FORCEINLINE HRESULT IMFAudioMediaType_GetStringLength(IMFAudioMediaType* This,REFGUID guidKey,UINT32 *pcchLength) {
    return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
}
static FORCEINLINE HRESULT IMFAudioMediaType_GetString(IMFAudioMediaType* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
    return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
}
static FORCEINLINE HRESULT IMFAudioMediaType_GetAllocatedString(IMFAudioMediaType* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
    return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
}
static FORCEINLINE HRESULT IMFAudioMediaType_GetBlobSize(IMFAudioMediaType* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
}
static FORCEINLINE HRESULT IMFAudioMediaType_GetBlob(IMFAudioMediaType* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
}
static FORCEINLINE HRESULT IMFAudioMediaType_GetAllocatedBlob(IMFAudioMediaType* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
    return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
}
static FORCEINLINE HRESULT IMFAudioMediaType_GetUnknown(IMFAudioMediaType* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
    return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
}
static FORCEINLINE HRESULT IMFAudioMediaType_SetItem(IMFAudioMediaType* This,REFGUID guidKey,REFPROPVARIANT Value) {
    return This->lpVtbl->SetItem(This,guidKey,Value);
}
static FORCEINLINE HRESULT IMFAudioMediaType_DeleteItem(IMFAudioMediaType* This,REFGUID guidKey) {
    return This->lpVtbl->DeleteItem(This,guidKey);
}
static FORCEINLINE HRESULT IMFAudioMediaType_DeleteAllItems(IMFAudioMediaType* This) {
    return This->lpVtbl->DeleteAllItems(This);
}
static FORCEINLINE HRESULT IMFAudioMediaType_SetUINT32(IMFAudioMediaType* This,REFGUID guidKey,UINT32 unValue) {
    return This->lpVtbl->SetUINT32(This,guidKey,unValue);
}
static FORCEINLINE HRESULT IMFAudioMediaType_SetUINT64(IMFAudioMediaType* This,REFGUID guidKey,UINT64 unValue) {
    return This->lpVtbl->SetUINT64(This,guidKey,unValue);
}
static FORCEINLINE HRESULT IMFAudioMediaType_SetDouble(IMFAudioMediaType* This,REFGUID guidKey,double fValue) {
    return This->lpVtbl->SetDouble(This,guidKey,fValue);
}
static FORCEINLINE HRESULT IMFAudioMediaType_SetGUID(IMFAudioMediaType* This,REFGUID guidKey,REFGUID guidValue) {
    return This->lpVtbl->SetGUID(This,guidKey,guidValue);
}
static FORCEINLINE HRESULT IMFAudioMediaType_SetString(IMFAudioMediaType* This,REFGUID guidKey,LPCWSTR wszValue) {
    return This->lpVtbl->SetString(This,guidKey,wszValue);
}
static FORCEINLINE HRESULT IMFAudioMediaType_SetBlob(IMFAudioMediaType* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
    return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
}
static FORCEINLINE HRESULT IMFAudioMediaType_SetUnknown(IMFAudioMediaType* This,REFGUID guidKey,IUnknown *pUnknown) {
    return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
}
static FORCEINLINE HRESULT IMFAudioMediaType_LockStore(IMFAudioMediaType* This) {
    return This->lpVtbl->LockStore(This);
}
static FORCEINLINE HRESULT IMFAudioMediaType_UnlockStore(IMFAudioMediaType* This) {
    return This->lpVtbl->UnlockStore(This);
}
static FORCEINLINE HRESULT IMFAudioMediaType_GetCount(IMFAudioMediaType* This,UINT32 *pcItems) {
    return This->lpVtbl->GetCount(This,pcItems);
}
static FORCEINLINE HRESULT IMFAudioMediaType_GetItemByIndex(IMFAudioMediaType* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
}
static FORCEINLINE HRESULT IMFAudioMediaType_CopyAllItems(IMFAudioMediaType* This,IMFAttributes *pDest) {
    return This->lpVtbl->CopyAllItems(This,pDest);
}
/*** IMFMediaType methods ***/
static FORCEINLINE HRESULT IMFAudioMediaType_GetMajorType(IMFAudioMediaType* This,GUID *pguidMajorType) {
    return This->lpVtbl->GetMajorType(This,pguidMajorType);
}
static FORCEINLINE HRESULT IMFAudioMediaType_IsCompressedFormat(IMFAudioMediaType* This,WINBOOL *pfCompressed) {
    return This->lpVtbl->IsCompressedFormat(This,pfCompressed);
}
static FORCEINLINE HRESULT IMFAudioMediaType_IsEqual(IMFAudioMediaType* This,IMFMediaType *pIMediaType,DWORD *pdwFlags) {
    return This->lpVtbl->IsEqual(This,pIMediaType,pdwFlags);
}
static FORCEINLINE HRESULT IMFAudioMediaType_GetRepresentation(IMFAudioMediaType* This,GUID guidRepresentation,LPVOID *ppvRepresentation) {
    return This->lpVtbl->GetRepresentation(This,guidRepresentation,ppvRepresentation);
}
static FORCEINLINE HRESULT IMFAudioMediaType_FreeRepresentation(IMFAudioMediaType* This,GUID guidRepresentation,LPVOID pvRepresentation) {
    return This->lpVtbl->FreeRepresentation(This,guidRepresentation,pvRepresentation);
}
/*** IMFAudioMediaType methods ***/
static FORCEINLINE const WAVEFORMATEX * IMFAudioMediaType_GetAudioFormat(IMFAudioMediaType* This) {
    return This->lpVtbl->GetAudioFormat(This);
}
#endif
#endif

#endif

const WAVEFORMATEX * STDMETHODCALLTYPE IMFAudioMediaType_GetAudioFormat_Proxy(
    IMFAudioMediaType* This);
void __RPC_STUB IMFAudioMediaType_GetAudioFormat_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMFAudioMediaType_INTERFACE_DEFINED__ */

typedef struct __WIDL_mmreg_h_generated_name_00000001 {
    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 = 8,
    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 = 12,
    MFVideoTransFunc_ForceDWORD = 0x7fffffff
} MFVideoTransferFunction;
typedef enum _MFVideoTransferMatrix {
    MFVideoTransferMatrix_Unknown = 0,
    MFVideoTransferMatrix_BT709 = 1,
    MFVideoTransferMatrix_BT601 = 2,
    MFVideoTransferMatrix_SMPTE240M = 3,
    MFVideoTransferMatrix_Last = 4,
    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 = 9,
    MFVideoPrimaries_ForceDWORD = 0x7fffffff
} MFVideoPrimaries;
typedef enum _MFVideoLighting {
    MFVideoLighting_Unknown = 0,
    MFVideoLighting_bright = 1,
    MFVideoLighting_office = 2,
    MFVideoLighting_dim = 3,
    MFVideoLighting_dark = 4,
    MFVideoLighting_Last = 5,
    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;
    UINT64 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[1];
} MFVideoSurfaceInfo;
typedef struct _MFVIDEOFORMAT {
    DWORD dwSize;
    MFVideoInfo videoInfo;
    GUID guidFormat;
    MFVideoCompressedInfo compressedInfo;
    MFVideoSurfaceInfo surfaceInfo;
} MFVIDEOFORMAT;
/*****************************************************************************
 * IMFVideoMediaType interface
 */
#ifndef __IMFVideoMediaType_INTERFACE_DEFINED__
#define __IMFVideoMediaType_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFVideoMediaType, 0xb99f381f, 0xa8f9, 0x47a2, 0xa5,0xaf, 0xca,0x3a,0x22,0x5a,0x38,0x90);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b99f381f-a8f9-47a2-a5af-ca3a225a3890")
IMFVideoMediaType : public IMFMediaType
{
    virtual const MFVIDEOFORMAT * STDMETHODCALLTYPE GetVideoFormat(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVideoRepresentation(
        GUID guidRepresentation,
        LPVOID *ppvRepresentation,
        LONG lStride) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFVideoMediaType, 0xb99f381f, 0xa8f9, 0x47a2, 0xa5,0xaf, 0xca,0x3a,0x22,0x5a,0x38,0x90)
#endif
#else
typedef struct IMFVideoMediaTypeVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMFVideoMediaType* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMFVideoMediaType* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMFVideoMediaType* This);

    /*** IMFAttributes methods ***/
    HRESULT (STDMETHODCALLTYPE *GetItem)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        PROPVARIANT *pValue);

    HRESULT (STDMETHODCALLTYPE *GetItemType)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        MF_ATTRIBUTE_TYPE *pType);

    HRESULT (STDMETHODCALLTYPE *CompareItem)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        REFPROPVARIANT Value,
        WINBOOL *pbResult);

    HRESULT (STDMETHODCALLTYPE *Compare)(
        IMFVideoMediaType* This,
        IMFAttributes *pTheirs,
        MF_ATTRIBUTES_MATCH_TYPE MatchType,
        WINBOOL *pbResult);

    HRESULT (STDMETHODCALLTYPE *GetUINT32)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        UINT32 *punValue);

    HRESULT (STDMETHODCALLTYPE *GetUINT64)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        UINT64 *punValue);

    HRESULT (STDMETHODCALLTYPE *GetDouble)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        double *pfValue);

    HRESULT (STDMETHODCALLTYPE *GetGUID)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        GUID *pguidValue);

    HRESULT (STDMETHODCALLTYPE *GetStringLength)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetString)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        LPWSTR pwszValue,
        UINT32 cchBufSize,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetAllocatedString)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        LPWSTR *ppwszValue,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetBlobSize)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        UINT32 *pcbBlobSize);

    HRESULT (STDMETHODCALLTYPE *GetBlob)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        UINT8 *pBuf,
        UINT32 cbBufSize,
        UINT32 *pcbBlobSize);

    HRESULT (STDMETHODCALLTYPE *GetAllocatedBlob)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        UINT8 **ppBuf,
        UINT32 *pcbSize);

    HRESULT (STDMETHODCALLTYPE *GetUnknown)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        REFIID riid,
        LPVOID *ppv);

    HRESULT (STDMETHODCALLTYPE *SetItem)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        REFPROPVARIANT Value);

    HRESULT (STDMETHODCALLTYPE *DeleteItem)(
        IMFVideoMediaType* This,
        REFGUID guidKey);

    HRESULT (STDMETHODCALLTYPE *DeleteAllItems)(
        IMFVideoMediaType* This);

    HRESULT (STDMETHODCALLTYPE *SetUINT32)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        UINT32 unValue);

    HRESULT (STDMETHODCALLTYPE *SetUINT64)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        UINT64 unValue);

    HRESULT (STDMETHODCALLTYPE *SetDouble)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        double fValue);

    HRESULT (STDMETHODCALLTYPE *SetGUID)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        REFGUID guidValue);

    HRESULT (STDMETHODCALLTYPE *SetString)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        LPCWSTR wszValue);

    HRESULT (STDMETHODCALLTYPE *SetBlob)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        const UINT8 *pBuf,
        UINT32 cbBufSize);

    HRESULT (STDMETHODCALLTYPE *SetUnknown)(
        IMFVideoMediaType* This,
        REFGUID guidKey,
        IUnknown *pUnknown);

    HRESULT (STDMETHODCALLTYPE *LockStore)(
        IMFVideoMediaType* This);

    HRESULT (STDMETHODCALLTYPE *UnlockStore)(
        IMFVideoMediaType* This);

    HRESULT (STDMETHODCALLTYPE *GetCount)(
        IMFVideoMediaType* This,
        UINT32 *pcItems);

    HRESULT (STDMETHODCALLTYPE *GetItemByIndex)(
        IMFVideoMediaType* This,
        UINT32 unIndex,
        GUID *pguidKey,
        PROPVARIANT *pValue);

    HRESULT (STDMETHODCALLTYPE *CopyAllItems)(
        IMFVideoMediaType* This,
        IMFAttributes *pDest);

    /*** IMFMediaType methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMajorType)(
        IMFVideoMediaType* This,
        GUID *pguidMajorType);

    HRESULT (STDMETHODCALLTYPE *IsCompressedFormat)(
        IMFVideoMediaType* This,
        WINBOOL *pfCompressed);

    HRESULT (STDMETHODCALLTYPE *IsEqual)(
        IMFVideoMediaType* This,
        IMFMediaType *pIMediaType,
        DWORD *pdwFlags);

    HRESULT (STDMETHODCALLTYPE *GetRepresentation)(
        IMFVideoMediaType* This,
        GUID guidRepresentation,
        LPVOID *ppvRepresentation);

    HRESULT (STDMETHODCALLTYPE *FreeRepresentation)(
        IMFVideoMediaType* This,
        GUID guidRepresentation,
        LPVOID pvRepresentation);

    /*** IMFVideoMediaType methods ***/
    const MFVIDEOFORMAT * (STDMETHODCALLTYPE *GetVideoFormat)(
        IMFVideoMediaType* This);

    HRESULT (STDMETHODCALLTYPE *GetVideoRepresentation)(
        IMFVideoMediaType* This,
        GUID guidRepresentation,
        LPVOID *ppvRepresentation,
        LONG lStride);

    END_INTERFACE
} IMFVideoMediaTypeVtbl;
interface IMFVideoMediaType {
    CONST_VTBL IMFVideoMediaTypeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFVideoMediaType_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFVideoMediaType_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFVideoMediaType_Release(This) (This)->lpVtbl->Release(This)
/*** IMFAttributes methods ***/
#define IMFVideoMediaType_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
#define IMFVideoMediaType_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
#define IMFVideoMediaType_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
#define IMFVideoMediaType_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
#define IMFVideoMediaType_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
#define IMFVideoMediaType_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
#define IMFVideoMediaType_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
#define IMFVideoMediaType_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
#define IMFVideoMediaType_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
#define IMFVideoMediaType_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
#define IMFVideoMediaType_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
#define IMFVideoMediaType_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
#define IMFVideoMediaType_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
#define IMFVideoMediaType_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
#define IMFVideoMediaType_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
#define IMFVideoMediaType_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
#define IMFVideoMediaType_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
#define IMFVideoMediaType_DeleteAllItems(This) (This)->lpVtbl->DeleteAllItems(This)
#define IMFVideoMediaType_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
#define IMFVideoMediaType_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
#define IMFVideoMediaType_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
#define IMFVideoMediaType_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
#define IMFVideoMediaType_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
#define IMFVideoMediaType_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
#define IMFVideoMediaType_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
#define IMFVideoMediaType_LockStore(This) (This)->lpVtbl->LockStore(This)
#define IMFVideoMediaType_UnlockStore(This) (This)->lpVtbl->UnlockStore(This)
#define IMFVideoMediaType_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
#define IMFVideoMediaType_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
#define IMFVideoMediaType_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
/*** IMFMediaType methods ***/
#define IMFVideoMediaType_GetMajorType(This,pguidMajorType) (This)->lpVtbl->GetMajorType(This,pguidMajorType)
#define IMFVideoMediaType_IsCompressedFormat(This,pfCompressed) (This)->lpVtbl->IsCompressedFormat(This,pfCompressed)
#define IMFVideoMediaType_IsEqual(This,pIMediaType,pdwFlags) (This)->lpVtbl->IsEqual(This,pIMediaType,pdwFlags)
#define IMFVideoMediaType_GetRepresentation(This,guidRepresentation,ppvRepresentation) (This)->lpVtbl->GetRepresentation(This,guidRepresentation,ppvRepresentation)
#define IMFVideoMediaType_FreeRepresentation(This,guidRepresentation,pvRepresentation) (This)->lpVtbl->FreeRepresentation(This,guidRepresentation,pvRepresentation)
/*** IMFVideoMediaType methods ***/
#define IMFVideoMediaType_GetVideoFormat(This) (This)->lpVtbl->GetVideoFormat(This)
#define IMFVideoMediaType_GetVideoRepresentation(This,guidRepresentation,ppvRepresentation,lStride) (This)->lpVtbl->GetVideoRepresentation(This,guidRepresentation,ppvRepresentation,lStride)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFVideoMediaType_QueryInterface(IMFVideoMediaType* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFVideoMediaType_AddRef(IMFVideoMediaType* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFVideoMediaType_Release(IMFVideoMediaType* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFAttributes methods ***/
static FORCEINLINE HRESULT IMFVideoMediaType_GetItem(IMFVideoMediaType* This,REFGUID guidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItem(This,guidKey,pValue);
}
static FORCEINLINE HRESULT IMFVideoMediaType_GetItemType(IMFVideoMediaType* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
    return This->lpVtbl->GetItemType(This,guidKey,pType);
}
static FORCEINLINE HRESULT IMFVideoMediaType_CompareItem(IMFVideoMediaType* This,REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) {
    return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
}
static FORCEINLINE HRESULT IMFVideoMediaType_Compare(IMFVideoMediaType* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) {
    return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
}
static FORCEINLINE HRESULT IMFVideoMediaType_GetUINT32(IMFVideoMediaType* This,REFGUID guidKey,UINT32 *punValue) {
    return This->lpVtbl->GetUINT32(This,guidKey,punValue);
}
static FORCEINLINE HRESULT IMFVideoMediaType_GetUINT64(IMFVideoMediaType* This,REFGUID guidKey,UINT64 *punValue) {
    return This->lpVtbl->GetUINT64(This,guidKey,punValue);
}
static FORCEINLINE HRESULT IMFVideoMediaType_GetDouble(IMFVideoMediaType* This,REFGUID guidKey,double *pfValue) {
    return This->lpVtbl->GetDouble(This,guidKey,pfValue);
}
static FORCEINLINE HRESULT IMFVideoMediaType_GetGUID(IMFVideoMediaType* This,REFGUID guidKey,GUID *pguidValue) {
    return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
}
static FORCEINLINE HRESULT IMFVideoMediaType_GetStringLength(IMFVideoMediaType* This,REFGUID guidKey,UINT32 *pcchLength) {
    return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
}
static FORCEINLINE HRESULT IMFVideoMediaType_GetString(IMFVideoMediaType* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
    return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
}
static FORCEINLINE HRESULT IMFVideoMediaType_GetAllocatedString(IMFVideoMediaType* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
    return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
}
static FORCEINLINE HRESULT IMFVideoMediaType_GetBlobSize(IMFVideoMediaType* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
}
static FORCEINLINE HRESULT IMFVideoMediaType_GetBlob(IMFVideoMediaType* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
}
static FORCEINLINE HRESULT IMFVideoMediaType_GetAllocatedBlob(IMFVideoMediaType* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
    return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
}
static FORCEINLINE HRESULT IMFVideoMediaType_GetUnknown(IMFVideoMediaType* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
    return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
}
static FORCEINLINE HRESULT IMFVideoMediaType_SetItem(IMFVideoMediaType* This,REFGUID guidKey,REFPROPVARIANT Value) {
    return This->lpVtbl->SetItem(This,guidKey,Value);
}
static FORCEINLINE HRESULT IMFVideoMediaType_DeleteItem(IMFVideoMediaType* This,REFGUID guidKey) {
    return This->lpVtbl->DeleteItem(This,guidKey);
}
static FORCEINLINE HRESULT IMFVideoMediaType_DeleteAllItems(IMFVideoMediaType* This) {
    return This->lpVtbl->DeleteAllItems(This);
}
static FORCEINLINE HRESULT IMFVideoMediaType_SetUINT32(IMFVideoMediaType* This,REFGUID guidKey,UINT32 unValue) {
    return This->lpVtbl->SetUINT32(This,guidKey,unValue);
}
static FORCEINLINE HRESULT IMFVideoMediaType_SetUINT64(IMFVideoMediaType* This,REFGUID guidKey,UINT64 unValue) {
    return This->lpVtbl->SetUINT64(This,guidKey,unValue);
}
static FORCEINLINE HRESULT IMFVideoMediaType_SetDouble(IMFVideoMediaType* This,REFGUID guidKey,double fValue) {
    return This->lpVtbl->SetDouble(This,guidKey,fValue);
}
static FORCEINLINE HRESULT IMFVideoMediaType_SetGUID(IMFVideoMediaType* This,REFGUID guidKey,REFGUID guidValue) {
    return This->lpVtbl->SetGUID(This,guidKey,guidValue);
}
static FORCEINLINE HRESULT IMFVideoMediaType_SetString(IMFVideoMediaType* This,REFGUID guidKey,LPCWSTR wszValue) {
    return This->lpVtbl->SetString(This,guidKey,wszValue);
}
static FORCEINLINE HRESULT IMFVideoMediaType_SetBlob(IMFVideoMediaType* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
    return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
}
static FORCEINLINE HRESULT IMFVideoMediaType_SetUnknown(IMFVideoMediaType* This,REFGUID guidKey,IUnknown *pUnknown) {
    return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
}
static FORCEINLINE HRESULT IMFVideoMediaType_LockStore(IMFVideoMediaType* This) {
    return This->lpVtbl->LockStore(This);
}
static FORCEINLINE HRESULT IMFVideoMediaType_UnlockStore(IMFVideoMediaType* This) {
    return This->lpVtbl->UnlockStore(This);
}
static FORCEINLINE HRESULT IMFVideoMediaType_GetCount(IMFVideoMediaType* This,UINT32 *pcItems) {
    return This->lpVtbl->GetCount(This,pcItems);
}
static FORCEINLINE HRESULT IMFVideoMediaType_GetItemByIndex(IMFVideoMediaType* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
}
static FORCEINLINE HRESULT IMFVideoMediaType_CopyAllItems(IMFVideoMediaType* This,IMFAttributes *pDest) {
    return This->lpVtbl->CopyAllItems(This,pDest);
}
/*** IMFMediaType methods ***/
static FORCEINLINE HRESULT IMFVideoMediaType_GetMajorType(IMFVideoMediaType* This,GUID *pguidMajorType) {
    return This->lpVtbl->GetMajorType(This,pguidMajorType);
}
static FORCEINLINE HRESULT IMFVideoMediaType_IsCompressedFormat(IMFVideoMediaType* This,WINBOOL *pfCompressed) {
    return This->lpVtbl->IsCompressedFormat(This,pfCompressed);
}
static FORCEINLINE HRESULT IMFVideoMediaType_IsEqual(IMFVideoMediaType* This,IMFMediaType *pIMediaType,DWORD *pdwFlags) {
    return This->lpVtbl->IsEqual(This,pIMediaType,pdwFlags);
}
static FORCEINLINE HRESULT IMFVideoMediaType_GetRepresentation(IMFVideoMediaType* This,GUID guidRepresentation,LPVOID *ppvRepresentation) {
    return This->lpVtbl->GetRepresentation(This,guidRepresentation,ppvRepresentation);
}
static FORCEINLINE HRESULT IMFVideoMediaType_FreeRepresentation(IMFVideoMediaType* This,GUID guidRepresentation,LPVOID pvRepresentation) {
    return This->lpVtbl->FreeRepresentation(This,guidRepresentation,pvRepresentation);
}
/*** IMFVideoMediaType methods ***/
static FORCEINLINE const MFVIDEOFORMAT * IMFVideoMediaType_GetVideoFormat(IMFVideoMediaType* This) {
    return This->lpVtbl->GetVideoFormat(This);
}
static FORCEINLINE HRESULT IMFVideoMediaType_GetVideoRepresentation(IMFVideoMediaType* This,GUID guidRepresentation,LPVOID *ppvRepresentation,LONG lStride) {
    return This->lpVtbl->GetVideoRepresentation(This,guidRepresentation,ppvRepresentation,lStride);
}
#endif
#endif

#endif

const MFVIDEOFORMAT * STDMETHODCALLTYPE IMFVideoMediaType_GetVideoFormat_Proxy(
    IMFVideoMediaType* This);
void __RPC_STUB IMFVideoMediaType_GetVideoFormat_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFVideoMediaType_GetVideoRepresentation_Proxy(
    IMFVideoMediaType* This,
    GUID guidRepresentation,
    LPVOID *ppvRepresentation,
    LONG lStride);
void __RPC_STUB IMFVideoMediaType_GetVideoRepresentation_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMFVideoMediaType_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFAsyncResult interface
 */
#ifndef __IMFAsyncResult_INTERFACE_DEFINED__
#define __IMFAsyncResult_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFAsyncResult, 0xac6b7889, 0x0740, 0x4d51, 0x86,0x19, 0x90,0x59,0x94,0xa5,0x5c,0xc6);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ac6b7889-0740-4d51-8619-905994a55cc6")
IMFAsyncResult : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetState(
        IUnknown **ppunkState) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStatus(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetStatus(
        HRESULT hrStatus) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetObject(
        IUnknown **ppObject) = 0;

    virtual IUnknown * STDMETHODCALLTYPE GetStateNoAddRef(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFAsyncResult, 0xac6b7889, 0x0740, 0x4d51, 0x86,0x19, 0x90,0x59,0x94,0xa5,0x5c,0xc6)
#endif
#else
typedef struct IMFAsyncResultVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMFAsyncResult* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMFAsyncResult* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMFAsyncResult* This);

    /*** IMFAsyncResult methods ***/
    HRESULT (STDMETHODCALLTYPE *GetState)(
        IMFAsyncResult* This,
        IUnknown **ppunkState);

    HRESULT (STDMETHODCALLTYPE *GetStatus)(
        IMFAsyncResult* This);

    HRESULT (STDMETHODCALLTYPE *SetStatus)(
        IMFAsyncResult* This,
        HRESULT hrStatus);

    HRESULT (STDMETHODCALLTYPE *GetObject)(
        IMFAsyncResult* This,
        IUnknown **ppObject);

    IUnknown * (STDMETHODCALLTYPE *GetStateNoAddRef)(
        IMFAsyncResult* This);

    END_INTERFACE
} IMFAsyncResultVtbl;
interface IMFAsyncResult {
    CONST_VTBL IMFAsyncResultVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFAsyncResult_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFAsyncResult_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFAsyncResult_Release(This) (This)->lpVtbl->Release(This)
/*** IMFAsyncResult methods ***/
#define IMFAsyncResult_GetState(This,ppunkState) (This)->lpVtbl->GetState(This,ppunkState)
#define IMFAsyncResult_GetStatus(This) (This)->lpVtbl->GetStatus(This)
#define IMFAsyncResult_SetStatus(This,hrStatus) (This)->lpVtbl->SetStatus(This,hrStatus)
#define IMFAsyncResult_GetObject(This,ppObject) (This)->lpVtbl->GetObject(This,ppObject)
#define IMFAsyncResult_GetStateNoAddRef(This) (This)->lpVtbl->GetStateNoAddRef(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFAsyncResult_QueryInterface(IMFAsyncResult* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFAsyncResult_AddRef(IMFAsyncResult* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFAsyncResult_Release(IMFAsyncResult* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFAsyncResult methods ***/
static FORCEINLINE HRESULT IMFAsyncResult_GetState(IMFAsyncResult* This,IUnknown **ppunkState) {
    return This->lpVtbl->GetState(This,ppunkState);
}
static FORCEINLINE HRESULT IMFAsyncResult_GetStatus(IMFAsyncResult* This) {
    return This->lpVtbl->GetStatus(This);
}
static FORCEINLINE HRESULT IMFAsyncResult_SetStatus(IMFAsyncResult* This,HRESULT hrStatus) {
    return This->lpVtbl->SetStatus(This,hrStatus);
}
static FORCEINLINE HRESULT IMFAsyncResult_GetObject(IMFAsyncResult* This,IUnknown **ppObject) {
    return This->lpVtbl->GetObject(This,ppObject);
}
static FORCEINLINE IUnknown * IMFAsyncResult_GetStateNoAddRef(IMFAsyncResult* This) {
    return This->lpVtbl->GetStateNoAddRef(This);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMFAsyncResult_GetState_Proxy(
    IMFAsyncResult* This,
    IUnknown **ppunkState);
void __RPC_STUB IMFAsyncResult_GetState_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAsyncResult_GetStatus_Proxy(
    IMFAsyncResult* This);
void __RPC_STUB IMFAsyncResult_GetStatus_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAsyncResult_SetStatus_Proxy(
    IMFAsyncResult* This,
    HRESULT hrStatus);
void __RPC_STUB IMFAsyncResult_SetStatus_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAsyncResult_GetObject_Proxy(
    IMFAsyncResult* This,
    IUnknown **ppObject);
void __RPC_STUB IMFAsyncResult_GetObject_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMFAsyncResult_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFAsyncCallback interface
 */
#ifndef __IMFAsyncCallback_INTERFACE_DEFINED__
#define __IMFAsyncCallback_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFAsyncCallback, 0xa27003cf, 0x2354, 0x4f2a, 0x8d,0x6a, 0xab,0x7c,0xff,0x15,0x43,0x7e);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a27003cf-2354-4f2a-8d6a-ab7cff15437e")
IMFAsyncCallback : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetParameters(
        DWORD *pdwFlags,
        DWORD *pdwQueue) = 0;

    virtual HRESULT STDMETHODCALLTYPE Invoke(
        IMFAsyncResult *pAsyncResult) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFAsyncCallback, 0xa27003cf, 0x2354, 0x4f2a, 0x8d,0x6a, 0xab,0x7c,0xff,0x15,0x43,0x7e)
#endif
#else
typedef struct IMFAsyncCallbackVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMFAsyncCallback* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMFAsyncCallback* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMFAsyncCallback* This);

    /*** IMFAsyncCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *GetParameters)(
        IMFAsyncCallback* This,
        DWORD *pdwFlags,
        DWORD *pdwQueue);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        IMFAsyncCallback* This,
        IMFAsyncResult *pAsyncResult);

    END_INTERFACE
} IMFAsyncCallbackVtbl;
interface IMFAsyncCallback {
    CONST_VTBL IMFAsyncCallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFAsyncCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFAsyncCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFAsyncCallback_Release(This) (This)->lpVtbl->Release(This)
/*** IMFAsyncCallback methods ***/
#define IMFAsyncCallback_GetParameters(This,pdwFlags,pdwQueue) (This)->lpVtbl->GetParameters(This,pdwFlags,pdwQueue)
#define IMFAsyncCallback_Invoke(This,pAsyncResult) (This)->lpVtbl->Invoke(This,pAsyncResult)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFAsyncCallback_QueryInterface(IMFAsyncCallback* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFAsyncCallback_AddRef(IMFAsyncCallback* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFAsyncCallback_Release(IMFAsyncCallback* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFAsyncCallback methods ***/
static FORCEINLINE HRESULT IMFAsyncCallback_GetParameters(IMFAsyncCallback* This,DWORD *pdwFlags,DWORD *pdwQueue) {
    return This->lpVtbl->GetParameters(This,pdwFlags,pdwQueue);
}
static FORCEINLINE HRESULT IMFAsyncCallback_Invoke(IMFAsyncCallback* This,IMFAsyncResult *pAsyncResult) {
    return This->lpVtbl->Invoke(This,pAsyncResult);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMFAsyncCallback_GetParameters_Proxy(
    IMFAsyncCallback* This,
    DWORD *pdwFlags,
    DWORD *pdwQueue);
void __RPC_STUB IMFAsyncCallback_GetParameters_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFAsyncCallback_Invoke_Proxy(
    IMFAsyncCallback* This,
    IMFAsyncResult *pAsyncResult);
void __RPC_STUB IMFAsyncCallback_Invoke_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMFAsyncCallback_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFRemoteAsyncCallback interface
 */
#ifndef __IMFRemoteAsyncCallback_INTERFACE_DEFINED__
#define __IMFRemoteAsyncCallback_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFRemoteAsyncCallback, 0xa27003d0, 0x2354, 0x4f2a, 0x8d,0x6a, 0xab,0x7c,0xff,0x15,0x43,0x7e);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a27003d0-2354-4f2a-8d6a-ab7cff15437e")
IMFRemoteAsyncCallback : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Invoke(
        HRESULT hr,
        IUnknown *pRemoteResult) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFRemoteAsyncCallback, 0xa27003d0, 0x2354, 0x4f2a, 0x8d,0x6a, 0xab,0x7c,0xff,0x15,0x43,0x7e)
#endif
#else
typedef struct IMFRemoteAsyncCallbackVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMFRemoteAsyncCallback* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMFRemoteAsyncCallback* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMFRemoteAsyncCallback* This);

    /*** IMFRemoteAsyncCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *Invoke)(
        IMFRemoteAsyncCallback* This,
        HRESULT hr,
        IUnknown *pRemoteResult);

    END_INTERFACE
} IMFRemoteAsyncCallbackVtbl;
interface IMFRemoteAsyncCallback {
    CONST_VTBL IMFRemoteAsyncCallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFRemoteAsyncCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFRemoteAsyncCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFRemoteAsyncCallback_Release(This) (This)->lpVtbl->Release(This)
/*** IMFRemoteAsyncCallback methods ***/
#define IMFRemoteAsyncCallback_Invoke(This,hr,pRemoteResult) (This)->lpVtbl->Invoke(This,hr,pRemoteResult)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFRemoteAsyncCallback_QueryInterface(IMFRemoteAsyncCallback* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFRemoteAsyncCallback_AddRef(IMFRemoteAsyncCallback* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFRemoteAsyncCallback_Release(IMFRemoteAsyncCallback* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFRemoteAsyncCallback methods ***/
static FORCEINLINE HRESULT IMFRemoteAsyncCallback_Invoke(IMFRemoteAsyncCallback* This,HRESULT hr,IUnknown *pRemoteResult) {
    return This->lpVtbl->Invoke(This,hr,pRemoteResult);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMFRemoteAsyncCallback_Invoke_Proxy(
    IMFRemoteAsyncCallback* This,
    HRESULT hr,
    IUnknown *pRemoteResult);
void __RPC_STUB IMFRemoteAsyncCallback_Invoke_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMFRemoteAsyncCallback_INTERFACE_DEFINED__ */

#define MFASYNC_FAST_IO_PROCESSING_CALLBACK  0x0001
#define MFASYNC_SIGNAL_CALLBACK              0x0002
#define MFASYNC_CALLBACK_QUEUE_UNDEFINED      0x00000000
#define MFASYNC_CALLBACK_QUEUE_STANDARD       0x00000001
#define MFASYNC_CALLBACK_QUEUE_RT             0x00000002
#define MFASYNC_CALLBACK_QUEUE_IO             0x00000003
#define MFASYNC_CALLBACK_QUEUE_TIMER          0x00000004
#define MFASYNC_CALLBACK_QUEUE_LONG_FUNCTION  0x00000007
#define MFASYNC_CALLBACK_QUEUE_PRIVATE_MASK   0xffff0000
#define MFASYNC_CALLBACK_QUEUE_ALL            0xffffffff
typedef DWORD MediaEventType;
/*****************************************************************************
 * IMFMediaEvent interface
 */
#ifndef __IMFMediaEvent_INTERFACE_DEFINED__
#define __IMFMediaEvent_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFMediaEvent, 0xdf598932, 0xf10c, 0x4e39, 0xbb,0xa2, 0xc3,0x08,0xf1,0x01,0xda,0xa3);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("df598932-f10c-4e39-bba2-c308f101daa3")
IMFMediaEvent : public IMFAttributes
{
    virtual HRESULT STDMETHODCALLTYPE GetType(
        MediaEventType *pmet) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetExtendedType(
        GUID *pguidExtendedType) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStatus(
        HRESULT *phrStatus) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetValue(
        PROPVARIANT *pvValue) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFMediaEvent, 0xdf598932, 0xf10c, 0x4e39, 0xbb,0xa2, 0xc3,0x08,0xf1,0x01,0xda,0xa3)
#endif
#else
typedef struct IMFMediaEventVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMFMediaEvent* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMFMediaEvent* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMFMediaEvent* This);

    /*** IMFAttributes methods ***/
    HRESULT (STDMETHODCALLTYPE *GetItem)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        PROPVARIANT *pValue);

    HRESULT (STDMETHODCALLTYPE *GetItemType)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        MF_ATTRIBUTE_TYPE *pType);

    HRESULT (STDMETHODCALLTYPE *CompareItem)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        REFPROPVARIANT Value,
        WINBOOL *pbResult);

    HRESULT (STDMETHODCALLTYPE *Compare)(
        IMFMediaEvent* This,
        IMFAttributes *pTheirs,
        MF_ATTRIBUTES_MATCH_TYPE MatchType,
        WINBOOL *pbResult);

    HRESULT (STDMETHODCALLTYPE *GetUINT32)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        UINT32 *punValue);

    HRESULT (STDMETHODCALLTYPE *GetUINT64)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        UINT64 *punValue);

    HRESULT (STDMETHODCALLTYPE *GetDouble)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        double *pfValue);

    HRESULT (STDMETHODCALLTYPE *GetGUID)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        GUID *pguidValue);

    HRESULT (STDMETHODCALLTYPE *GetStringLength)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetString)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        LPWSTR pwszValue,
        UINT32 cchBufSize,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetAllocatedString)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        LPWSTR *ppwszValue,
        UINT32 *pcchLength);

    HRESULT (STDMETHODCALLTYPE *GetBlobSize)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        UINT32 *pcbBlobSize);

    HRESULT (STDMETHODCALLTYPE *GetBlob)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        UINT8 *pBuf,
        UINT32 cbBufSize,
        UINT32 *pcbBlobSize);

    HRESULT (STDMETHODCALLTYPE *GetAllocatedBlob)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        UINT8 **ppBuf,
        UINT32 *pcbSize);

    HRESULT (STDMETHODCALLTYPE *GetUnknown)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        REFIID riid,
        LPVOID *ppv);

    HRESULT (STDMETHODCALLTYPE *SetItem)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        REFPROPVARIANT Value);

    HRESULT (STDMETHODCALLTYPE *DeleteItem)(
        IMFMediaEvent* This,
        REFGUID guidKey);

    HRESULT (STDMETHODCALLTYPE *DeleteAllItems)(
        IMFMediaEvent* This);

    HRESULT (STDMETHODCALLTYPE *SetUINT32)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        UINT32 unValue);

    HRESULT (STDMETHODCALLTYPE *SetUINT64)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        UINT64 unValue);

    HRESULT (STDMETHODCALLTYPE *SetDouble)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        double fValue);

    HRESULT (STDMETHODCALLTYPE *SetGUID)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        REFGUID guidValue);

    HRESULT (STDMETHODCALLTYPE *SetString)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        LPCWSTR wszValue);

    HRESULT (STDMETHODCALLTYPE *SetBlob)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        const UINT8 *pBuf,
        UINT32 cbBufSize);

    HRESULT (STDMETHODCALLTYPE *SetUnknown)(
        IMFMediaEvent* This,
        REFGUID guidKey,
        IUnknown *pUnknown);

    HRESULT (STDMETHODCALLTYPE *LockStore)(
        IMFMediaEvent* This);

    HRESULT (STDMETHODCALLTYPE *UnlockStore)(
        IMFMediaEvent* This);

    HRESULT (STDMETHODCALLTYPE *GetCount)(
        IMFMediaEvent* This,
        UINT32 *pcItems);

    HRESULT (STDMETHODCALLTYPE *GetItemByIndex)(
        IMFMediaEvent* This,
        UINT32 unIndex,
        GUID *pguidKey,
        PROPVARIANT *pValue);

    HRESULT (STDMETHODCALLTYPE *CopyAllItems)(
        IMFMediaEvent* This,
        IMFAttributes *pDest);

    /*** IMFMediaEvent methods ***/
    HRESULT (STDMETHODCALLTYPE *GetType)(
        IMFMediaEvent* This,
        MediaEventType *pmet);

    HRESULT (STDMETHODCALLTYPE *GetExtendedType)(
        IMFMediaEvent* This,
        GUID *pguidExtendedType);

    HRESULT (STDMETHODCALLTYPE *GetStatus)(
        IMFMediaEvent* This,
        HRESULT *phrStatus);

    HRESULT (STDMETHODCALLTYPE *GetValue)(
        IMFMediaEvent* This,
        PROPVARIANT *pvValue);

    END_INTERFACE
} IMFMediaEventVtbl;
interface IMFMediaEvent {
    CONST_VTBL IMFMediaEventVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFMediaEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFMediaEvent_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFMediaEvent_Release(This) (This)->lpVtbl->Release(This)
/*** IMFAttributes methods ***/
#define IMFMediaEvent_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
#define IMFMediaEvent_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
#define IMFMediaEvent_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
#define IMFMediaEvent_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
#define IMFMediaEvent_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
#define IMFMediaEvent_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
#define IMFMediaEvent_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
#define IMFMediaEvent_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
#define IMFMediaEvent_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
#define IMFMediaEvent_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
#define IMFMediaEvent_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
#define IMFMediaEvent_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
#define IMFMediaEvent_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
#define IMFMediaEvent_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
#define IMFMediaEvent_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
#define IMFMediaEvent_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
#define IMFMediaEvent_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
#define IMFMediaEvent_DeleteAllItems(This) (This)->lpVtbl->DeleteAllItems(This)
#define IMFMediaEvent_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
#define IMFMediaEvent_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
#define IMFMediaEvent_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
#define IMFMediaEvent_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
#define IMFMediaEvent_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
#define IMFMediaEvent_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
#define IMFMediaEvent_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
#define IMFMediaEvent_LockStore(This) (This)->lpVtbl->LockStore(This)
#define IMFMediaEvent_UnlockStore(This) (This)->lpVtbl->UnlockStore(This)
#define IMFMediaEvent_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
#define IMFMediaEvent_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
#define IMFMediaEvent_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
/*** IMFMediaEvent methods ***/
#define IMFMediaEvent_GetType(This,pmet) (This)->lpVtbl->GetType(This,pmet)
#define IMFMediaEvent_GetExtendedType(This,pguidExtendedType) (This)->lpVtbl->GetExtendedType(This,pguidExtendedType)
#define IMFMediaEvent_GetStatus(This,phrStatus) (This)->lpVtbl->GetStatus(This,phrStatus)
#define IMFMediaEvent_GetValue(This,pvValue) (This)->lpVtbl->GetValue(This,pvValue)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFMediaEvent_QueryInterface(IMFMediaEvent* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFMediaEvent_AddRef(IMFMediaEvent* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFMediaEvent_Release(IMFMediaEvent* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFAttributes methods ***/
static FORCEINLINE HRESULT IMFMediaEvent_GetItem(IMFMediaEvent* This,REFGUID guidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItem(This,guidKey,pValue);
}
static FORCEINLINE HRESULT IMFMediaEvent_GetItemType(IMFMediaEvent* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
    return This->lpVtbl->GetItemType(This,guidKey,pType);
}
static FORCEINLINE HRESULT IMFMediaEvent_CompareItem(IMFMediaEvent* This,REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) {
    return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
}
static FORCEINLINE HRESULT IMFMediaEvent_Compare(IMFMediaEvent* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) {
    return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
}
static FORCEINLINE HRESULT IMFMediaEvent_GetUINT32(IMFMediaEvent* This,REFGUID guidKey,UINT32 *punValue) {
    return This->lpVtbl->GetUINT32(This,guidKey,punValue);
}
static FORCEINLINE HRESULT IMFMediaEvent_GetUINT64(IMFMediaEvent* This,REFGUID guidKey,UINT64 *punValue) {
    return This->lpVtbl->GetUINT64(This,guidKey,punValue);
}
static FORCEINLINE HRESULT IMFMediaEvent_GetDouble(IMFMediaEvent* This,REFGUID guidKey,double *pfValue) {
    return This->lpVtbl->GetDouble(This,guidKey,pfValue);
}
static FORCEINLINE HRESULT IMFMediaEvent_GetGUID(IMFMediaEvent* This,REFGUID guidKey,GUID *pguidValue) {
    return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
}
static FORCEINLINE HRESULT IMFMediaEvent_GetStringLength(IMFMediaEvent* This,REFGUID guidKey,UINT32 *pcchLength) {
    return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
}
static FORCEINLINE HRESULT IMFMediaEvent_GetString(IMFMediaEvent* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
    return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
}
static FORCEINLINE HRESULT IMFMediaEvent_GetAllocatedString(IMFMediaEvent* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
    return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
}
static FORCEINLINE HRESULT IMFMediaEvent_GetBlobSize(IMFMediaEvent* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
}
static FORCEINLINE HRESULT IMFMediaEvent_GetBlob(IMFMediaEvent* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
    return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
}
static FORCEINLINE HRESULT IMFMediaEvent_GetAllocatedBlob(IMFMediaEvent* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
    return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
}
static FORCEINLINE HRESULT IMFMediaEvent_GetUnknown(IMFMediaEvent* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
    return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
}
static FORCEINLINE HRESULT IMFMediaEvent_SetItem(IMFMediaEvent* This,REFGUID guidKey,REFPROPVARIANT Value) {
    return This->lpVtbl->SetItem(This,guidKey,Value);
}
static FORCEINLINE HRESULT IMFMediaEvent_DeleteItem(IMFMediaEvent* This,REFGUID guidKey) {
    return This->lpVtbl->DeleteItem(This,guidKey);
}
static FORCEINLINE HRESULT IMFMediaEvent_DeleteAllItems(IMFMediaEvent* This) {
    return This->lpVtbl->DeleteAllItems(This);
}
static FORCEINLINE HRESULT IMFMediaEvent_SetUINT32(IMFMediaEvent* This,REFGUID guidKey,UINT32 unValue) {
    return This->lpVtbl->SetUINT32(This,guidKey,unValue);
}
static FORCEINLINE HRESULT IMFMediaEvent_SetUINT64(IMFMediaEvent* This,REFGUID guidKey,UINT64 unValue) {
    return This->lpVtbl->SetUINT64(This,guidKey,unValue);
}
static FORCEINLINE HRESULT IMFMediaEvent_SetDouble(IMFMediaEvent* This,REFGUID guidKey,double fValue) {
    return This->lpVtbl->SetDouble(This,guidKey,fValue);
}
static FORCEINLINE HRESULT IMFMediaEvent_SetGUID(IMFMediaEvent* This,REFGUID guidKey,REFGUID guidValue) {
    return This->lpVtbl->SetGUID(This,guidKey,guidValue);
}
static FORCEINLINE HRESULT IMFMediaEvent_SetString(IMFMediaEvent* This,REFGUID guidKey,LPCWSTR wszValue) {
    return This->lpVtbl->SetString(This,guidKey,wszValue);
}
static FORCEINLINE HRESULT IMFMediaEvent_SetBlob(IMFMediaEvent* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
    return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
}
static FORCEINLINE HRESULT IMFMediaEvent_SetUnknown(IMFMediaEvent* This,REFGUID guidKey,IUnknown *pUnknown) {
    return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
}
static FORCEINLINE HRESULT IMFMediaEvent_LockStore(IMFMediaEvent* This) {
    return This->lpVtbl->LockStore(This);
}
static FORCEINLINE HRESULT IMFMediaEvent_UnlockStore(IMFMediaEvent* This) {
    return This->lpVtbl->UnlockStore(This);
}
static FORCEINLINE HRESULT IMFMediaEvent_GetCount(IMFMediaEvent* This,UINT32 *pcItems) {
    return This->lpVtbl->GetCount(This,pcItems);
}
static FORCEINLINE HRESULT IMFMediaEvent_GetItemByIndex(IMFMediaEvent* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
    return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
}
static FORCEINLINE HRESULT IMFMediaEvent_CopyAllItems(IMFMediaEvent* This,IMFAttributes *pDest) {
    return This->lpVtbl->CopyAllItems(This,pDest);
}
/*** IMFMediaEvent methods ***/
static FORCEINLINE HRESULT IMFMediaEvent_GetType(IMFMediaEvent* This,MediaEventType *pmet) {
    return This->lpVtbl->GetType(This,pmet);
}
static FORCEINLINE HRESULT IMFMediaEvent_GetExtendedType(IMFMediaEvent* This,GUID *pguidExtendedType) {
    return This->lpVtbl->GetExtendedType(This,pguidExtendedType);
}
static FORCEINLINE HRESULT IMFMediaEvent_GetStatus(IMFMediaEvent* This,HRESULT *phrStatus) {
    return This->lpVtbl->GetStatus(This,phrStatus);
}
static FORCEINLINE HRESULT IMFMediaEvent_GetValue(IMFMediaEvent* This,PROPVARIANT *pvValue) {
    return This->lpVtbl->GetValue(This,pvValue);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMFMediaEvent_GetType_Proxy(
    IMFMediaEvent* This,
    MediaEventType *pmet);
void __RPC_STUB IMFMediaEvent_GetType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFMediaEvent_GetExtendedType_Proxy(
    IMFMediaEvent* This,
    GUID *pguidExtendedType);
void __RPC_STUB IMFMediaEvent_GetExtendedType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFMediaEvent_GetStatus_Proxy(
    IMFMediaEvent* This,
    HRESULT *phrStatus);
void __RPC_STUB IMFMediaEvent_GetStatus_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFMediaEvent_GetValue_Proxy(
    IMFMediaEvent* This,
    PROPVARIANT *pvValue);
void __RPC_STUB IMFMediaEvent_GetValue_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMFMediaEvent_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFMediaEventGenerator interface
 */
#ifndef __IMFMediaEventGenerator_INTERFACE_DEFINED__
#define __IMFMediaEventGenerator_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFMediaEventGenerator, 0x2cd0bd52, 0xbcd5, 0x4b89, 0xb6,0x2c, 0xea,0xdc,0x0c,0x03,0x1e,0x7d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd0bd52-bcd5-4b89-b62c-eadc0c031e7d")
IMFMediaEventGenerator : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetEvent(
        DWORD dwFlags,
        IMFMediaEvent **ppEvent) = 0;

    virtual HRESULT STDMETHODCALLTYPE BeginGetEvent(
        IMFAsyncCallback *pCallback,
        IUnknown *punkState) = 0;

    virtual HRESULT STDMETHODCALLTYPE EndGetEvent(
        IMFAsyncResult *pResult,
        IMFMediaEvent **ppEvent) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueueEvent(
        MediaEventType met,
        REFGUID guidExtendedType,
        HRESULT hrStatus,
        const PROPVARIANT *pvValue) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFMediaEventGenerator, 0x2cd0bd52, 0xbcd5, 0x4b89, 0xb6,0x2c, 0xea,0xdc,0x0c,0x03,0x1e,0x7d)
#endif
#else
typedef struct IMFMediaEventGeneratorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMFMediaEventGenerator* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMFMediaEventGenerator* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMFMediaEventGenerator* This);

    /*** IMFMediaEventGenerator methods ***/
    HRESULT (STDMETHODCALLTYPE *GetEvent)(
        IMFMediaEventGenerator* This,
        DWORD dwFlags,
        IMFMediaEvent **ppEvent);

    HRESULT (STDMETHODCALLTYPE *BeginGetEvent)(
        IMFMediaEventGenerator* This,
        IMFAsyncCallback *pCallback,
        IUnknown *punkState);

    HRESULT (STDMETHODCALLTYPE *EndGetEvent)(
        IMFMediaEventGenerator* This,
        IMFAsyncResult *pResult,
        IMFMediaEvent **ppEvent);

    HRESULT (STDMETHODCALLTYPE *QueueEvent)(
        IMFMediaEventGenerator* This,
        MediaEventType met,
        REFGUID guidExtendedType,
        HRESULT hrStatus,
        const PROPVARIANT *pvValue);

    END_INTERFACE
} IMFMediaEventGeneratorVtbl;
interface IMFMediaEventGenerator {
    CONST_VTBL IMFMediaEventGeneratorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFMediaEventGenerator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFMediaEventGenerator_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFMediaEventGenerator_Release(This) (This)->lpVtbl->Release(This)
/*** IMFMediaEventGenerator methods ***/
#define IMFMediaEventGenerator_GetEvent(This,dwFlags,ppEvent) (This)->lpVtbl->GetEvent(This,dwFlags,ppEvent)
#define IMFMediaEventGenerator_BeginGetEvent(This,pCallback,punkState) (This)->lpVtbl->BeginGetEvent(This,pCallback,punkState)
#define IMFMediaEventGenerator_EndGetEvent(This,pResult,ppEvent) (This)->lpVtbl->EndGetEvent(This,pResult,ppEvent)
#define IMFMediaEventGenerator_QueueEvent(This,met,guidExtendedType,hrStatus,pvValue) (This)->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFMediaEventGenerator_QueryInterface(IMFMediaEventGenerator* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFMediaEventGenerator_AddRef(IMFMediaEventGenerator* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFMediaEventGenerator_Release(IMFMediaEventGenerator* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFMediaEventGenerator methods ***/
static FORCEINLINE HRESULT IMFMediaEventGenerator_GetEvent(IMFMediaEventGenerator* This,DWORD dwFlags,IMFMediaEvent **ppEvent) {
    return This->lpVtbl->GetEvent(This,dwFlags,ppEvent);
}
static FORCEINLINE HRESULT IMFMediaEventGenerator_BeginGetEvent(IMFMediaEventGenerator* This,IMFAsyncCallback *pCallback,IUnknown *punkState) {
    return This->lpVtbl->BeginGetEvent(This,pCallback,punkState);
}
static FORCEINLINE HRESULT IMFMediaEventGenerator_EndGetEvent(IMFMediaEventGenerator* This,IMFAsyncResult *pResult,IMFMediaEvent **ppEvent) {
    return This->lpVtbl->EndGetEvent(This,pResult,ppEvent);
}
static FORCEINLINE HRESULT IMFMediaEventGenerator_QueueEvent(IMFMediaEventGenerator* This,MediaEventType met,REFGUID guidExtendedType,HRESULT hrStatus,const PROPVARIANT *pvValue) {
    return This->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMFMediaEventGenerator_GetEvent_Proxy(
    IMFMediaEventGenerator* This,
    DWORD dwFlags,
    IMFMediaEvent **ppEvent);
void __RPC_STUB IMFMediaEventGenerator_GetEvent_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFMediaEventGenerator_RemoteBeginGetEvent_Proxy(
    IMFMediaEventGenerator* This,
    IMFRemoteAsyncCallback *pCallback);
void __RPC_STUB IMFMediaEventGenerator_RemoteBeginGetEvent_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFMediaEventGenerator_RemoteEndGetEvent_Proxy(
    IMFMediaEventGenerator* This,
    IUnknown *pResult,
    DWORD *pcbEvent,
    BYTE **ppbEvent);
void __RPC_STUB IMFMediaEventGenerator_RemoteEndGetEvent_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFMediaEventGenerator_QueueEvent_Proxy(
    IMFMediaEventGenerator* This,
    MediaEventType met,
    REFGUID guidExtendedType,
    HRESULT hrStatus,
    const PROPVARIANT *pvValue);
void __RPC_STUB IMFMediaEventGenerator_QueueEvent_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMFMediaEventGenerator_BeginGetEvent_Proxy(
    IMFMediaEventGenerator* This,
    IMFAsyncCallback *pCallback,
    IUnknown *punkState);
HRESULT __RPC_STUB IMFMediaEventGenerator_BeginGetEvent_Stub(
    IMFMediaEventGenerator* This,
    IMFRemoteAsyncCallback *pCallback);
HRESULT CALLBACK IMFMediaEventGenerator_EndGetEvent_Proxy(
    IMFMediaEventGenerator* This,
    IMFAsyncResult *pResult,
    IMFMediaEvent **ppEvent);
HRESULT __RPC_STUB IMFMediaEventGenerator_EndGetEvent_Stub(
    IMFMediaEventGenerator* This,
    IUnknown *pResult,
    DWORD *pcbEvent,
    BYTE **ppbEvent);

#endif  /* __IMFMediaEventGenerator_INTERFACE_DEFINED__ */

typedef enum _MFBYTESTREAM_SEEK_ORIGIN {
    msoBegin = 0,
    msoCurrent = 1
} MFBYTESTREAM_SEEK_ORIGIN;
/*****************************************************************************
 * IMFByteStream interface
 */
#ifndef __IMFByteStream_INTERFACE_DEFINED__
#define __IMFByteStream_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFByteStream, 0xad4c1b00, 0x4bf7, 0x422f, 0x91,0x75, 0x75,0x66,0x93,0xd9,0x13,0x0d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ad4c1b00-4bf7-422f-9175-756693d9130d")
IMFByteStream : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetCapabilities(
        DWORD *pdwCapabilities) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLength(
        QWORD *pqwLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetLength(
        QWORD qwLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentPosition(
        QWORD *pqwPosition) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetCurrentPosition(
        QWORD qwPosition) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsEndOfStream(
        WINBOOL *pfEndOfStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE Read(
        BYTE *pb,
        ULONG cb,
        ULONG *pcbRead) = 0;

    virtual HRESULT STDMETHODCALLTYPE BeginRead(
        BYTE *pb,
        ULONG cb,
        IMFAsyncCallback *pCallback,
        IUnknown *punkState) = 0;

    virtual HRESULT STDMETHODCALLTYPE EndRead(
        IMFAsyncResult *pResult,
        ULONG *pcbRead) = 0;

    virtual HRESULT STDMETHODCALLTYPE Write(
        const BYTE *pb,
        ULONG cb,
        ULONG *pcbWritten) = 0;

    virtual HRESULT STDMETHODCALLTYPE BeginWrite(
        const BYTE *pb,
        ULONG cb,
        IMFAsyncCallback *pCallback,
        IUnknown *punkState) = 0;

    virtual HRESULT STDMETHODCALLTYPE EndWrite(
        IMFAsyncResult *pResult,
        ULONG *pcbWritten) = 0;

    virtual HRESULT STDMETHODCALLTYPE Seek(
        MFBYTESTREAM_SEEK_ORIGIN SeekOrigin,
        LONGLONG llSeekOffset,
        DWORD dwSeekFlags,
        QWORD *pqwCurrentPosition) = 0;

    virtual HRESULT STDMETHODCALLTYPE Flush(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Close(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFByteStream, 0xad4c1b00, 0x4bf7, 0x422f, 0x91,0x75, 0x75,0x66,0x93,0xd9,0x13,0x0d)
#endif
#else
typedef struct IMFByteStreamVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMFByteStream* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMFByteStream* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMFByteStream* This);

    /*** IMFByteStream methods ***/
    HRESULT (STDMETHODCALLTYPE *GetCapabilities)(
        IMFByteStream* This,
        DWORD *pdwCapabilities);

    HRESULT (STDMETHODCALLTYPE *GetLength)(
        IMFByteStream* This,
        QWORD *pqwLength);

    HRESULT (STDMETHODCALLTYPE *SetLength)(
        IMFByteStream* This,
        QWORD qwLength);

    HRESULT (STDMETHODCALLTYPE *GetCurrentPosition)(
        IMFByteStream* This,
        QWORD *pqwPosition);

    HRESULT (STDMETHODCALLTYPE *SetCurrentPosition)(
        IMFByteStream* This,
        QWORD qwPosition);

    HRESULT (STDMETHODCALLTYPE *IsEndOfStream)(
        IMFByteStream* This,
        WINBOOL *pfEndOfStream);

    HRESULT (STDMETHODCALLTYPE *Read)(
        IMFByteStream* This,
        BYTE *pb,
        ULONG cb,
        ULONG *pcbRead);

    HRESULT (STDMETHODCALLTYPE *BeginRead)(
        IMFByteStream* This,
        BYTE *pb,
        ULONG cb,
        IMFAsyncCallback *pCallback,
        IUnknown *punkState);

    HRESULT (STDMETHODCALLTYPE *EndRead)(
        IMFByteStream* This,
        IMFAsyncResult *pResult,
        ULONG *pcbRead);

    HRESULT (STDMETHODCALLTYPE *Write)(
        IMFByteStream* This,
        const BYTE *pb,
        ULONG cb,
        ULONG *pcbWritten);

    HRESULT (STDMETHODCALLTYPE *BeginWrite)(
        IMFByteStream* This,
        const BYTE *pb,
        ULONG cb,
        IMFAsyncCallback *pCallback,
        IUnknown *punkState);

    HRESULT (STDMETHODCALLTYPE *EndWrite)(
        IMFByteStream* This,
        IMFAsyncResult *pResult,
        ULONG *pcbWritten);

    HRESULT (STDMETHODCALLTYPE *Seek)(
        IMFByteStream* This,
        MFBYTESTREAM_SEEK_ORIGIN SeekOrigin,
        LONGLONG llSeekOffset,
        DWORD dwSeekFlags,
        QWORD *pqwCurrentPosition);

    HRESULT (STDMETHODCALLTYPE *Flush)(
        IMFByteStream* This);

    HRESULT (STDMETHODCALLTYPE *Close)(
        IMFByteStream* This);

    END_INTERFACE
} IMFByteStreamVtbl;
interface IMFByteStream {
    CONST_VTBL IMFByteStreamVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFByteStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFByteStream_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFByteStream_Release(This) (This)->lpVtbl->Release(This)
/*** IMFByteStream methods ***/
#define IMFByteStream_GetCapabilities(This,pdwCapabilities) (This)->lpVtbl->GetCapabilities(This,pdwCapabilities)
#define IMFByteStream_GetLength(This,pqwLength) (This)->lpVtbl->GetLength(This,pqwLength)
#define IMFByteStream_SetLength(This,qwLength) (This)->lpVtbl->SetLength(This,qwLength)
#define IMFByteStream_GetCurrentPosition(This,pqwPosition) (This)->lpVtbl->GetCurrentPosition(This,pqwPosition)
#define IMFByteStream_SetCurrentPosition(This,qwPosition) (This)->lpVtbl->SetCurrentPosition(This,qwPosition)
#define IMFByteStream_IsEndOfStream(This,pfEndOfStream) (This)->lpVtbl->IsEndOfStream(This,pfEndOfStream)
#define IMFByteStream_Read(This,pb,cb,pcbRead) (This)->lpVtbl->Read(This,pb,cb,pcbRead)
#define IMFByteStream_BeginRead(This,pb,cb,pCallback,punkState) (This)->lpVtbl->BeginRead(This,pb,cb,pCallback,punkState)
#define IMFByteStream_EndRead(This,pResult,pcbRead) (This)->lpVtbl->EndRead(This,pResult,pcbRead)
#define IMFByteStream_Write(This,pb,cb,pcbWritten) (This)->lpVtbl->Write(This,pb,cb,pcbWritten)
#define IMFByteStream_BeginWrite(This,pb,cb,pCallback,punkState) (This)->lpVtbl->BeginWrite(This,pb,cb,pCallback,punkState)
#define IMFByteStream_EndWrite(This,pResult,pcbWritten) (This)->lpVtbl->EndWrite(This,pResult,pcbWritten)
#define IMFByteStream_Seek(This,SeekOrigin,llSeekOffset,dwSeekFlags,pqwCurrentPosition) (This)->lpVtbl->Seek(This,SeekOrigin,llSeekOffset,dwSeekFlags,pqwCurrentPosition)
#define IMFByteStream_Flush(This) (This)->lpVtbl->Flush(This)
#define IMFByteStream_Close(This) (This)->lpVtbl->Close(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFByteStream_QueryInterface(IMFByteStream* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFByteStream_AddRef(IMFByteStream* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFByteStream_Release(IMFByteStream* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFByteStream methods ***/
static FORCEINLINE HRESULT IMFByteStream_GetCapabilities(IMFByteStream* This,DWORD *pdwCapabilities) {
    return This->lpVtbl->GetCapabilities(This,pdwCapabilities);
}
static FORCEINLINE HRESULT IMFByteStream_GetLength(IMFByteStream* This,QWORD *pqwLength) {
    return This->lpVtbl->GetLength(This,pqwLength);
}
static FORCEINLINE HRESULT IMFByteStream_SetLength(IMFByteStream* This,QWORD qwLength) {
    return This->lpVtbl->SetLength(This,qwLength);
}
static FORCEINLINE HRESULT IMFByteStream_GetCurrentPosition(IMFByteStream* This,QWORD *pqwPosition) {
    return This->lpVtbl->GetCurrentPosition(This,pqwPosition);
}
static FORCEINLINE HRESULT IMFByteStream_SetCurrentPosition(IMFByteStream* This,QWORD qwPosition) {
    return This->lpVtbl->SetCurrentPosition(This,qwPosition);
}
static FORCEINLINE HRESULT IMFByteStream_IsEndOfStream(IMFByteStream* This,WINBOOL *pfEndOfStream) {
    return This->lpVtbl->IsEndOfStream(This,pfEndOfStream);
}
static FORCEINLINE HRESULT IMFByteStream_Read(IMFByteStream* This,BYTE *pb,ULONG cb,ULONG *pcbRead) {
    return This->lpVtbl->Read(This,pb,cb,pcbRead);
}
static FORCEINLINE HRESULT IMFByteStream_BeginRead(IMFByteStream* This,BYTE *pb,ULONG cb,IMFAsyncCallback *pCallback,IUnknown *punkState) {
    return This->lpVtbl->BeginRead(This,pb,cb,pCallback,punkState);
}
static FORCEINLINE HRESULT IMFByteStream_EndRead(IMFByteStream* This,IMFAsyncResult *pResult,ULONG *pcbRead) {
    return This->lpVtbl->EndRead(This,pResult,pcbRead);
}
static FORCEINLINE HRESULT IMFByteStream_Write(IMFByteStream* This,const BYTE *pb,ULONG cb,ULONG *pcbWritten) {
    return This->lpVtbl->Write(This,pb,cb,pcbWritten);
}
static FORCEINLINE HRESULT IMFByteStream_BeginWrite(IMFByteStream* This,const BYTE *pb,ULONG cb,IMFAsyncCallback *pCallback,IUnknown *punkState) {
    return This->lpVtbl->BeginWrite(This,pb,cb,pCallback,punkState);
}
static FORCEINLINE HRESULT IMFByteStream_EndWrite(IMFByteStream* This,IMFAsyncResult *pResult,ULONG *pcbWritten) {
    return This->lpVtbl->EndWrite(This,pResult,pcbWritten);
}
static FORCEINLINE HRESULT IMFByteStream_Seek(IMFByteStream* This,MFBYTESTREAM_SEEK_ORIGIN SeekOrigin,LONGLONG llSeekOffset,DWORD dwSeekFlags,QWORD *pqwCurrentPosition) {
    return This->lpVtbl->Seek(This,SeekOrigin,llSeekOffset,dwSeekFlags,pqwCurrentPosition);
}
static FORCEINLINE HRESULT IMFByteStream_Flush(IMFByteStream* This) {
    return This->lpVtbl->Flush(This);
}
static FORCEINLINE HRESULT IMFByteStream_Close(IMFByteStream* This) {
    return This->lpVtbl->Close(This);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMFByteStream_GetCapabilities_Proxy(
    IMFByteStream* This,
    DWORD *pdwCapabilities);
void __RPC_STUB IMFByteStream_GetCapabilities_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFByteStream_GetLength_Proxy(
    IMFByteStream* This,
    QWORD *pqwLength);
void __RPC_STUB IMFByteStream_GetLength_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFByteStream_SetLength_Proxy(
    IMFByteStream* This,
    QWORD qwLength);
void __RPC_STUB IMFByteStream_SetLength_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFByteStream_GetCurrentPosition_Proxy(
    IMFByteStream* This,
    QWORD *pqwPosition);
void __RPC_STUB IMFByteStream_GetCurrentPosition_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFByteStream_SetCurrentPosition_Proxy(
    IMFByteStream* This,
    QWORD qwPosition);
void __RPC_STUB IMFByteStream_SetCurrentPosition_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFByteStream_IsEndOfStream_Proxy(
    IMFByteStream* This,
    WINBOOL *pfEndOfStream);
void __RPC_STUB IMFByteStream_IsEndOfStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFByteStream_Flush_Proxy(
    IMFByteStream* This);
void __RPC_STUB IMFByteStream_Flush_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFByteStream_Close_Proxy(
    IMFByteStream* This);
void __RPC_STUB IMFByteStream_Close_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMFByteStream_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFCollection interface
 */
#ifndef __IMFCollection_INTERFACE_DEFINED__
#define __IMFCollection_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFCollection, 0x5bc8a76b, 0x869a, 0x46a3, 0x9b,0x03, 0xfa,0x21,0x8a,0x66,0xae,0xbe);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("5bc8a76b-869a-46a3-9b03-fa218a66aebe")
IMFCollection : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetElementCount(
        DWORD *pcElements) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetElement(
        DWORD dwElementIndex,
        IUnknown **ppUnkElement) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddElement(
        IUnknown *pUnkElement) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveElement(
        DWORD dwElementIndex,
        IUnknown **ppUnkElement) = 0;

    virtual HRESULT STDMETHODCALLTYPE InsertElementAt(
        DWORD dwIndex,
        IUnknown *pUnknown) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveAllElements(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFCollection, 0x5bc8a76b, 0x869a, 0x46a3, 0x9b,0x03, 0xfa,0x21,0x8a,0x66,0xae,0xbe)
#endif
#else
typedef struct IMFCollectionVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMFCollection* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMFCollection* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMFCollection* This);

    /*** IMFCollection methods ***/
    HRESULT (STDMETHODCALLTYPE *GetElementCount)(
        IMFCollection* This,
        DWORD *pcElements);

    HRESULT (STDMETHODCALLTYPE *GetElement)(
        IMFCollection* This,
        DWORD dwElementIndex,
        IUnknown **ppUnkElement);

    HRESULT (STDMETHODCALLTYPE *AddElement)(
        IMFCollection* This,
        IUnknown *pUnkElement);

    HRESULT (STDMETHODCALLTYPE *RemoveElement)(
        IMFCollection* This,
        DWORD dwElementIndex,
        IUnknown **ppUnkElement);

    HRESULT (STDMETHODCALLTYPE *InsertElementAt)(
        IMFCollection* This,
        DWORD dwIndex,
        IUnknown *pUnknown);

    HRESULT (STDMETHODCALLTYPE *RemoveAllElements)(
        IMFCollection* This);

    END_INTERFACE
} IMFCollectionVtbl;
interface IMFCollection {
    CONST_VTBL IMFCollectionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFCollection_Release(This) (This)->lpVtbl->Release(This)
/*** IMFCollection methods ***/
#define IMFCollection_GetElementCount(This,pcElements) (This)->lpVtbl->GetElementCount(This,pcElements)
#define IMFCollection_GetElement(This,dwElementIndex,ppUnkElement) (This)->lpVtbl->GetElement(This,dwElementIndex,ppUnkElement)
#define IMFCollection_AddElement(This,pUnkElement) (This)->lpVtbl->AddElement(This,pUnkElement)
#define IMFCollection_RemoveElement(This,dwElementIndex,ppUnkElement) (This)->lpVtbl->RemoveElement(This,dwElementIndex,ppUnkElement)
#define IMFCollection_InsertElementAt(This,dwIndex,pUnknown) (This)->lpVtbl->InsertElementAt(This,dwIndex,pUnknown)
#define IMFCollection_RemoveAllElements(This) (This)->lpVtbl->RemoveAllElements(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMFCollection_QueryInterface(IMFCollection* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMFCollection_AddRef(IMFCollection* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMFCollection_Release(IMFCollection* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFCollection methods ***/
static FORCEINLINE HRESULT IMFCollection_GetElementCount(IMFCollection* This,DWORD *pcElements) {
    return This->lpVtbl->GetElementCount(This,pcElements);
}
static FORCEINLINE HRESULT IMFCollection_GetElement(IMFCollection* This,DWORD dwElementIndex,IUnknown **ppUnkElement) {
    return This->lpVtbl->GetElement(This,dwElementIndex,ppUnkElement);
}
static FORCEINLINE HRESULT IMFCollection_AddElement(IMFCollection* This,IUnknown *pUnkElement) {
    return This->lpVtbl->AddElement(This,pUnkElement);
}
static FORCEINLINE HRESULT IMFCollection_RemoveElement(IMFCollection* This,DWORD dwElementIndex,IUnknown **ppUnkElement) {
    return This->lpVtbl->RemoveElement(This,dwElementIndex,ppUnkElement);
}
static FORCEINLINE HRESULT IMFCollection_InsertElementAt(IMFCollection* This,DWORD dwIndex,IUnknown *pUnknown) {
    return This->lpVtbl->InsertElementAt(This,dwIndex,pUnknown);
}
static FORCEINLINE HRESULT IMFCollection_RemoveAllElements(IMFCollection* This) {
    return This->lpVtbl->RemoveAllElements(This);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IMFCollection_GetElementCount_Proxy(
    IMFCollection* This,
    DWORD *pcElements);
void __RPC_STUB IMFCollection_GetElementCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFCollection_GetElement_Proxy(
    IMFCollection* This,
    DWORD dwElementIndex,
    IUnknown **ppUnkElement);
void __RPC_STUB IMFCollection_GetElement_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFCollection_AddElement_Proxy(
    IMFCollection* This,
    IUnknown *pUnkElement);
void __RPC_STUB IMFCollection_AddElement_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFCollection_RemoveElement_Proxy(
    IMFCollection* This,
    DWORD dwElementIndex,
    IUnknown **ppUnkElement);
void __RPC_STUB IMFCollection_RemoveElement_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFCollection_InsertElementAt_Proxy(
    IMFCollection* This,
    DWORD dwIndex,
    IUnknown *pUnknown);
void __RPC_STUB IMFCollection_InsertElementAt_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMFCollection_RemoveAllElements_Proxy(
    IMFCollection* This);
void __RPC_STUB IMFCollection_RemoveAllElements_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMFCollection_INTERFACE_DEFINED__ */

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;

typedef enum MF_FILE_ACCESSMODE {
  MF_ACCESSMODE_READ        = 1,
  MF_ACCESSMODE_WRITE       = 2,
  MF_ACCESSMODE_READWRITE   = 3 
} MF_FILE_ACCESSMODE;

typedef enum  {
  MF_FILEFLAGS_NONE                  = 0x00000000,
  MF_FILEFLAGS_NOBUFFERING           = 0x00000001,
  MF_FILEFLAGS_ALLOW_WRITE_SHARING   = 0x00000002 
} MF_FILE_FLAGS;

typedef enum  {
  MF_OPENMODE_FAIL_IF_NOT_EXIST   = 0,
  MF_OPENMODE_FAIL_IF_EXIST       = 1,
  MF_OPENMODE_RESET_IF_EXIST      = 2,
  MF_OPENMODE_APPEND_IF_EXIST     = 3,
  MF_OPENMODE_DELETE_IF_EXIST     = 4 
} MF_FILE_OPENMODE;

#if (_WIN32_WINNT >= 0x0601)

typedef enum _MF_Plugin_Type {
  MF_Plugin_Type_MFT           = 0,
  MF_Plugin_Type_MediaSource   = 1 
} MF_Plugin_Type;

#endif /*(_WIN32_WINNT >= 0x0601)*/

typedef enum _MFStandardVideoFormat {
  MFStdVideoFormat_reserved       = 0,
  MFStdVideoFormat_NTSC,
  MFStdVideoFormat_PAL,
  MFStdVideoFormat_DVD_NTSC,
  MFStdVideoFormat_DVD_PAL,
  MFStdVideoFormat_DV_PAL,
  MFStdVideoFormat_DV_NTSC,
  MFStdVideoFormat_ATSC_SD480i,
  MFStdVideoFormat_ATSC_HD1080i,
  MFStdVideoFormat_ATSC_HD720p 
} MFStandardVideoFormat;

typedef enum _MFVideoFlags {
  MFVideoFlag_PAD_TO_Mask             = 0x0001 | 0x0002,
  MFVideoFlag_PAD_TO_None             = 0 * 0x0001,
  MFVideoFlag_PAD_TO_4x3              = 1 * 0x0001,
  MFVideoFlag_PAD_TO_16x9             = 2 * 0x0001,
  MFVideoFlag_SrcContentHintMask      = 0x0004 | 0x0008 | 0x0010,
  MFVideoFlag_SrcContentHintNone      = 0 * 0x0004,
  MFVideoFlag_SrcContentHint16x9      = 1 * 0x0004,
  MFVideoFlag_SrcContentHint235_1     = 2 * 0x0004,
  MFVideoFlag_AnalogProtected         = 0x0020,
  MFVideoFlag_DigitallyProtected      = 0x0040,
  MFVideoFlag_ProgressiveContent      = 0x0080,
  MFVideoFlag_FieldRepeatCountMask    = 0x0100 | 0x0200 | 0x0400,
  MFVideoFlag_FieldRepeatCountShift   = 8,
  MFVideoFlag_ProgressiveSeqReset     = 0x0800,
  MFVideoFlag_PanScanEnabled          = 0x20000,
  MFVideoFlag_LowerFieldFirst         = 0x40000,
  MFVideoFlag_BottomUpLinearRep       = 0x80000,
  MFVideoFlags_DXVASurface            = 0x100000,
  MFVideoFlags_RenderTargetSurface    = 0x400000,
  MFVideoFlags_ForceQWORD             = 0x7FFFFFFF 
} MFVideoFlags;

#define MF_MEDIATYPE_EQUAL_MAJOR_TYPES          0x00000001
#define MF_MEDIATYPE_EQUAL_FORMAT_TYPES         0x00000002
#define MF_MEDIATYPE_EQUAL_FORMAT_DATA          0x00000004
#define MF_MEDIATYPE_EQUAL_FORMAT_USER_DATA     0x00000008

#define MFBYTESTREAM_IS_READABLE                0x00000001
#define MFBYTESTREAM_IS_WRITABLE                0x00000002
#define MFBYTESTREAM_IS_SEEKABLE                0x00000004
#define MFBYTESTREAM_IS_REMOTE                  0x00000008
#define MFBYTESTREAM_IS_DIRECTORY               0x00000080
#define MFBYTESTREAM_HAS_SLOW_SEEK              0x00000100
#define MFBYTESTREAM_IS_PARTIALLY_DOWNLOADED    0x00000200
#define MFBYTESTREAM_SHARE_WRITE                0x00000400
/* Begin additional prototypes for all interfaces */

ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
ULONG           __RPC_USER LPSAFEARRAY_UserSize     (ULONG *, ULONG, LPSAFEARRAY *);
unsigned char * __RPC_USER LPSAFEARRAY_UserMarshal  (ULONG *, unsigned char *, LPSAFEARRAY *);
unsigned char * __RPC_USER LPSAFEARRAY_UserUnmarshal(ULONG *, unsigned char *, LPSAFEARRAY *);
void            __RPC_USER LPSAFEARRAY_UserFree     (ULONG *, LPSAFEARRAY *);

/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __mfobjects_h__ */
