

/* this ALWAYS GENERATED file contains the definitions for the interfaces */


 /* File created by MIDL compiler version 7.00.0498 */
/* Compiler settings for mfobjects.idl:
    Oicf, W1, Zp8, env=Win32 (32b run)
    protocol : dce , ms_ext, c_ext, robust
    error checks: allocation ref bounds_check enum stub_data 
    VC __declspec() decoration level: 
         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
         DECLSPEC_UUID(), MIDL_INTERFACE()
*/
//@@MIDL_FILE_HEADING(  )

#pragma warning( disable: 4049 )  /* more than 64k source lines */


/* verify that the <rpcndr.h> version is high enough to compile this file*/
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 500
#endif

/* verify that the <rpcsal.h> version is high enough to compile this file*/
#ifndef __REQUIRED_RPCSAL_H_VERSION__
#define __REQUIRED_RPCSAL_H_VERSION__ 100
#endif

#include "rpc.h"
#include "rpcndr.h"

#ifndef __RPCNDR_H_VERSION__
#error this stub requires an updated version of <rpcndr.h>
#endif // __RPCNDR_H_VERSION__

#ifndef COM_NO_WINDOWS_H
#include "windows.h"
#include "ole2.h"
#endif /*COM_NO_WINDOWS_H*/

#ifndef __mfobjects_h__
#define __mfobjects_h__

#if defined(_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif

/* Forward Declarations */ 

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


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


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


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


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


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


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


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


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


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


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


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


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


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


#ifndef __IMFMediaEventQueue_FWD_DEFINED__
#define __IMFMediaEventQueue_FWD_DEFINED__
typedef interface IMFMediaEventQueue IMFMediaEventQueue;
#endif 	/* __IMFMediaEventQueue_FWD_DEFINED__ */


/* header files for imported files */
#include "unknwn.h"
#include "propsys.h"
#include "mediaobj.h"

#ifdef __cplusplus
extern "C"{
#endif 


/* interface __MIDL_itf_mfobjects_0000_0000 */
/* [local] */ 

typedef ULONGLONG QWORD;

#include <mmreg.h>
#if 0

#pragma pack(push, 1)
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 /* [public] */ struct __MIDL___MIDL_itf_mfobjects_0000_0000_0001
    {
    WORD wFormatTag;
    WORD nChannels;
    DWORD nSamplesPerSec;
    DWORD nAvgBytesPerSec;
    WORD nBlockAlign;
    WORD wBitsPerSample;
    WORD cbSize;
    WORD wValidBitsPerSample;
    DWORD dwChannelMask;
    GUID SubFormat;
    } 	WAVEFORMATEXTENSIBLE;

typedef struct __MIDL___MIDL_itf_mfobjects_0000_0000_0001 *PWAVEFORMATEXTENSIBLE;


#pragma pack(pop)
#endif /* 0 */
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;



extern RPC_IF_HANDLE __MIDL_itf_mfobjects_0000_0000_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_mfobjects_0000_0000_v0_0_s_ifspec;

#ifndef __IMFAttributes_INTERFACE_DEFINED__
#define __IMFAttributes_INTERFACE_DEFINED__

/* interface IMFAttributes */
/* [uuid][object] */ 


EXTERN_C const IID IID_IMFAttributes;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("2cd2d921-c447-44a7-a13c-4adabfc247e3")
    IMFAttributes : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetItem( 
            __RPC__in REFGUID guidKey,
            /* [full][out][in] */ __RPC__inout_opt PROPVARIANT *pValue) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetItemType( 
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out MF_ATTRIBUTE_TYPE *pType) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CompareItem( 
            __RPC__in REFGUID guidKey,
            __RPC__in REFPROPVARIANT Value,
            /* [out] */ __RPC__out BOOL *pbResult) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Compare( 
            __RPC__in_opt IMFAttributes *pTheirs,
            MF_ATTRIBUTES_MATCH_TYPE MatchType,
            /* [out] */ __RPC__out BOOL *pbResult) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetUINT32( 
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out UINT32 *punValue) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetUINT64( 
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out UINT64 *punValue) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetDouble( 
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out double *pfValue) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetGUID( 
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out GUID *pguidValue) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetStringLength( 
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out UINT32 *pcchLength) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetString( 
            __RPC__in REFGUID guidKey,
            /* [size_is][out] */ __RPC__out_ecount_full(cchBufSize) LPWSTR pwszValue,
            UINT32 cchBufSize,
            /* [full][out][in] */ __RPC__inout_opt UINT32 *pcchLength) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetAllocatedString( 
            __RPC__in REFGUID guidKey,
            /* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(( *pcchLength + 1 ) ) LPWSTR *ppwszValue,
            /* [out] */ __RPC__out UINT32 *pcchLength) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetBlobSize( 
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out UINT32 *pcbBlobSize) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetBlob( 
            __RPC__in REFGUID guidKey,
            /* [size_is][out] */ __RPC__out_ecount_full(cbBufSize) UINT8 *pBuf,
            UINT32 cbBufSize,
            /* [full][out][in] */ __RPC__inout_opt UINT32 *pcbBlobSize) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetAllocatedBlob( 
            __RPC__in REFGUID guidKey,
            /* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(*pcbSize) UINT8 **ppBuf,
            /* [out] */ __RPC__out UINT32 *pcbSize) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetUnknown( 
            __RPC__in REFGUID guidKey,
            __RPC__in REFIID riid,
            /* [iid_is][out] */ __RPC__deref_out_opt LPVOID *ppv) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetItem( 
            __RPC__in REFGUID guidKey,
            __RPC__in REFPROPVARIANT Value) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE DeleteItem( 
            __RPC__in REFGUID guidKey) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE DeleteAllItems( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetUINT32( 
            __RPC__in REFGUID guidKey,
            UINT32 unValue) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetUINT64( 
            __RPC__in REFGUID guidKey,
            UINT64 unValue) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetDouble( 
            __RPC__in REFGUID guidKey,
            double fValue) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetGUID( 
            __RPC__in REFGUID guidKey,
            __RPC__in REFGUID guidValue) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetString( 
            __RPC__in REFGUID guidKey,
            /* [string][in] */ __RPC__in LPCWSTR wszValue) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetBlob( 
            __RPC__in REFGUID guidKey,
            /* [size_is][in] */ __RPC__in_ecount_full(cbBufSize) const UINT8 *pBuf,
            UINT32 cbBufSize) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetUnknown( 
            __RPC__in REFGUID guidKey,
            /* [in] */ __RPC__in_opt IUnknown *pUnknown) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE LockStore( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE UnlockStore( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetCount( 
            /* [out] */ __RPC__out UINT32 *pcItems) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetItemByIndex( 
            UINT32 unIndex,
            /* [out] */ __RPC__out GUID *pguidKey,
            /* [full][out][in] */ __RPC__inout_opt PROPVARIANT *pValue) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CopyAllItems( 
            /* [in] */ __RPC__in_opt IMFAttributes *pDest) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct IMFAttributesVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IMFAttributes * This,
            /* [in] */ __RPC__in REFIID riid,
            /* [iid_is][out] */ 
            __RPC__deref_out  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IMFAttributes * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IMFAttributes * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetItem )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            /* [full][out][in] */ __RPC__inout_opt PROPVARIANT *pValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetItemType )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out MF_ATTRIBUTE_TYPE *pType);
        
        HRESULT ( STDMETHODCALLTYPE *CompareItem )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            __RPC__in REFPROPVARIANT Value,
            /* [out] */ __RPC__out BOOL *pbResult);
        
        HRESULT ( STDMETHODCALLTYPE *Compare )( 
            IMFAttributes * This,
            __RPC__in_opt IMFAttributes *pTheirs,
            MF_ATTRIBUTES_MATCH_TYPE MatchType,
            /* [out] */ __RPC__out BOOL *pbResult);
        
        HRESULT ( STDMETHODCALLTYPE *GetUINT32 )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out UINT32 *punValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetUINT64 )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out UINT64 *punValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetDouble )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out double *pfValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetGUID )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out GUID *pguidValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetStringLength )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out UINT32 *pcchLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetString )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            /* [size_is][out] */ __RPC__out_ecount_full(cchBufSize) LPWSTR pwszValue,
            UINT32 cchBufSize,
            /* [full][out][in] */ __RPC__inout_opt UINT32 *pcchLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetAllocatedString )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            /* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(( *pcchLength + 1 ) ) LPWSTR *ppwszValue,
            /* [out] */ __RPC__out UINT32 *pcchLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetBlobSize )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out UINT32 *pcbBlobSize);
        
        HRESULT ( STDMETHODCALLTYPE *GetBlob )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            /* [size_is][out] */ __RPC__out_ecount_full(cbBufSize) UINT8 *pBuf,
            UINT32 cbBufSize,
            /* [full][out][in] */ __RPC__inout_opt UINT32 *pcbBlobSize);
        
        HRESULT ( STDMETHODCALLTYPE *GetAllocatedBlob )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            /* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(*pcbSize) UINT8 **ppBuf,
            /* [out] */ __RPC__out UINT32 *pcbSize);
        
        HRESULT ( STDMETHODCALLTYPE *GetUnknown )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            __RPC__in REFIID riid,
            /* [iid_is][out] */ __RPC__deref_out_opt LPVOID *ppv);
        
        HRESULT ( STDMETHODCALLTYPE *SetItem )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            __RPC__in REFPROPVARIANT Value);
        
        HRESULT ( STDMETHODCALLTYPE *DeleteItem )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey);
        
        HRESULT ( STDMETHODCALLTYPE *DeleteAllItems )( 
            IMFAttributes * This);
        
        HRESULT ( STDMETHODCALLTYPE *SetUINT32 )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            UINT32 unValue);
        
        HRESULT ( STDMETHODCALLTYPE *SetUINT64 )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            UINT64 unValue);
        
        HRESULT ( STDMETHODCALLTYPE *SetDouble )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            double fValue);
        
        HRESULT ( STDMETHODCALLTYPE *SetGUID )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            __RPC__in REFGUID guidValue);
        
        HRESULT ( STDMETHODCALLTYPE *SetString )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            /* [string][in] */ __RPC__in LPCWSTR wszValue);
        
        HRESULT ( STDMETHODCALLTYPE *SetBlob )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            /* [size_is][in] */ __RPC__in_ecount_full(cbBufSize) const UINT8 *pBuf,
            UINT32 cbBufSize);
        
        HRESULT ( STDMETHODCALLTYPE *SetUnknown )( 
            IMFAttributes * This,
            __RPC__in REFGUID guidKey,
            /* [in] */ __RPC__in_opt IUnknown *pUnknown);
        
        HRESULT ( STDMETHODCALLTYPE *LockStore )( 
            IMFAttributes * This);
        
        HRESULT ( STDMETHODCALLTYPE *UnlockStore )( 
            IMFAttributes * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
            IMFAttributes * This,
            /* [out] */ __RPC__out UINT32 *pcItems);
        
        HRESULT ( STDMETHODCALLTYPE *GetItemByIndex )( 
            IMFAttributes * This,
            UINT32 unIndex,
            /* [out] */ __RPC__out GUID *pguidKey,
            /* [full][out][in] */ __RPC__inout_opt PROPVARIANT *pValue);
        
        HRESULT ( STDMETHODCALLTYPE *CopyAllItems )( 
            IMFAttributes * This,
            /* [in] */ __RPC__in_opt IMFAttributes *pDest);
        
        END_INTERFACE
    } IMFAttributesVtbl;

    interface IMFAttributes
    {
        CONST_VTBL struct IMFAttributesVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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


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

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IMFAttributes_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_mfobjects_0000_0001 */
/* [local] */ 


enum MF_ATTRIBUTE_SERIALIZE_OPTIONS
    {	MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF	= 0x1
    } ;
STDAPI MFSerializeAttributesToStream(
  IMFAttributes * pAttr, 
  DWORD dwOptions, 
  IStream * pStm);
STDAPI MFDeserializeAttributesFromStream(
  IMFAttributes * pAttr, 
  DWORD dwOptions, 
  IStream * pStm);


extern RPC_IF_HANDLE __MIDL_itf_mfobjects_0000_0001_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_mfobjects_0000_0001_v0_0_s_ifspec;

#ifndef __IMFMediaBuffer_INTERFACE_DEFINED__
#define __IMFMediaBuffer_INTERFACE_DEFINED__

/* interface IMFMediaBuffer */
/* [local][uuid][object] */ 


EXTERN_C const IID IID_IMFMediaBuffer;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("045FA593-8799-42b8-BC8D-8968C6453507")
    IMFMediaBuffer : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE Lock( 
            /* [out] */ 
            __deref_out_bcount_part(*pcbMaxLength, *pcbCurrentLength)  BYTE **ppbBuffer,
            /* [out] */ 
            __out_opt  DWORD *pcbMaxLength,
            /* [out] */ 
            __out_opt  DWORD *pcbCurrentLength) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Unlock( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetCurrentLength( 
            /* [out] */ 
            __out  DWORD *pcbCurrentLength) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetCurrentLength( 
            /* [in] */ DWORD cbCurrentLength) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetMaxLength( 
            /* [out] */ 
            __out  DWORD *pcbMaxLength) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct IMFMediaBufferVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IMFMediaBuffer * This,
            /* [in] */ REFIID riid,
            /* [iid_is][out] */ 
            __RPC__deref_out  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IMFMediaBuffer * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IMFMediaBuffer * This);
        
        HRESULT ( STDMETHODCALLTYPE *Lock )( 
            IMFMediaBuffer * This,
            /* [out] */ 
            __deref_out_bcount_part(*pcbMaxLength, *pcbCurrentLength)  BYTE **ppbBuffer,
            /* [out] */ 
            __out_opt  DWORD *pcbMaxLength,
            /* [out] */ 
            __out_opt  DWORD *pcbCurrentLength);
        
        HRESULT ( STDMETHODCALLTYPE *Unlock )( 
            IMFMediaBuffer * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetCurrentLength )( 
            IMFMediaBuffer * This,
            /* [out] */ 
            __out  DWORD *pcbCurrentLength);
        
        HRESULT ( STDMETHODCALLTYPE *SetCurrentLength )( 
            IMFMediaBuffer * This,
            /* [in] */ DWORD cbCurrentLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetMaxLength )( 
            IMFMediaBuffer * This,
            /* [out] */ 
            __out  DWORD *pcbMaxLength);
        
        END_INTERFACE
    } IMFMediaBufferVtbl;

    interface IMFMediaBuffer
    {
        CONST_VTBL struct IMFMediaBufferVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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


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

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IMFMediaBuffer_INTERFACE_DEFINED__ */


#ifndef __IMFSample_INTERFACE_DEFINED__
#define __IMFSample_INTERFACE_DEFINED__

/* interface IMFSample */
/* [local][uuid][object] */ 


EXTERN_C const IID IID_IMFSample;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("c40a00f2-b93a-4d80-ae8c-5a1c634f58e4")
    IMFSample : public IMFAttributes
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetSampleFlags( 
            /* [out] */ 
            __out  DWORD *pdwSampleFlags) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetSampleFlags( 
            /* [in] */ DWORD dwSampleFlags) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetSampleTime( 
            /* [out] */ 
            __out  LONGLONG *phnsSampleTime) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetSampleTime( 
            /* [in] */ LONGLONG hnsSampleTime) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetSampleDuration( 
            /* [out] */ 
            __out  LONGLONG *phnsSampleDuration) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetSampleDuration( 
            /* [in] */ LONGLONG hnsSampleDuration) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetBufferCount( 
            /* [out] */ 
            __out  DWORD *pdwBufferCount) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetBufferByIndex( 
            /* [in] */ DWORD dwIndex,
            /* [out] */ 
            __out  IMFMediaBuffer **ppBuffer) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ConvertToContiguousBuffer( 
            /* [out] */ 
            __out  IMFMediaBuffer **ppBuffer) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE AddBuffer( 
            /* [in] */ IMFMediaBuffer *pBuffer) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RemoveBufferByIndex( 
            /* [in] */ DWORD dwIndex) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RemoveAllBuffers( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetTotalLength( 
            /* [out] */ 
            __out  DWORD *pcbTotalLength) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CopyToBuffer( 
            /* [in] */ IMFMediaBuffer *pBuffer) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct IMFSampleVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IMFSample * This,
            /* [in] */ REFIID riid,
            /* [iid_is][out] */ 
            __RPC__deref_out  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IMFSample * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IMFSample * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetItem )( 
            IMFSample * This,
            REFGUID guidKey,
            /* [full][out][in] */ PROPVARIANT *pValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetItemType )( 
            IMFSample * This,
            REFGUID guidKey,
            /* [out] */ MF_ATTRIBUTE_TYPE *pType);
        
        HRESULT ( STDMETHODCALLTYPE *CompareItem )( 
            IMFSample * This,
            REFGUID guidKey,
            REFPROPVARIANT Value,
            /* [out] */ BOOL *pbResult);
        
        HRESULT ( STDMETHODCALLTYPE *Compare )( 
            IMFSample * This,
            IMFAttributes *pTheirs,
            MF_ATTRIBUTES_MATCH_TYPE MatchType,
            /* [out] */ BOOL *pbResult);
        
        HRESULT ( STDMETHODCALLTYPE *GetUINT32 )( 
            IMFSample * This,
            REFGUID guidKey,
            /* [out] */ UINT32 *punValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetUINT64 )( 
            IMFSample * This,
            REFGUID guidKey,
            /* [out] */ UINT64 *punValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetDouble )( 
            IMFSample * This,
            REFGUID guidKey,
            /* [out] */ double *pfValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetGUID )( 
            IMFSample * This,
            REFGUID guidKey,
            /* [out] */ GUID *pguidValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetStringLength )( 
            IMFSample * This,
            REFGUID guidKey,
            /* [out] */ UINT32 *pcchLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetString )( 
            IMFSample * This,
            REFGUID guidKey,
            /* [size_is][out] */ LPWSTR pwszValue,
            UINT32 cchBufSize,
            /* [full][out][in] */ UINT32 *pcchLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetAllocatedString )( 
            IMFSample * This,
            REFGUID guidKey,
            /* [size_is][size_is][out] */ LPWSTR *ppwszValue,
            /* [out] */ UINT32 *pcchLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetBlobSize )( 
            IMFSample * This,
            REFGUID guidKey,
            /* [out] */ UINT32 *pcbBlobSize);
        
        HRESULT ( STDMETHODCALLTYPE *GetBlob )( 
            IMFSample * This,
            REFGUID guidKey,
            /* [size_is][out] */ UINT8 *pBuf,
            UINT32 cbBufSize,
            /* [full][out][in] */ UINT32 *pcbBlobSize);
        
        HRESULT ( STDMETHODCALLTYPE *GetAllocatedBlob )( 
            IMFSample * This,
            REFGUID guidKey,
            /* [size_is][size_is][out] */ UINT8 **ppBuf,
            /* [out] */ UINT32 *pcbSize);
        
        HRESULT ( STDMETHODCALLTYPE *GetUnknown )( 
            IMFSample * This,
            REFGUID guidKey,
            REFIID riid,
            /* [iid_is][out] */ 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,
            /* [string][in] */ LPCWSTR wszValue);
        
        HRESULT ( STDMETHODCALLTYPE *SetBlob )( 
            IMFSample * This,
            REFGUID guidKey,
            /* [size_is][in] */ const UINT8 *pBuf,
            UINT32 cbBufSize);
        
        HRESULT ( STDMETHODCALLTYPE *SetUnknown )( 
            IMFSample * This,
            REFGUID guidKey,
            /* [in] */ IUnknown *pUnknown);
        
        HRESULT ( STDMETHODCALLTYPE *LockStore )( 
            IMFSample * This);
        
        HRESULT ( STDMETHODCALLTYPE *UnlockStore )( 
            IMFSample * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
            IMFSample * This,
            /* [out] */ UINT32 *pcItems);
        
        HRESULT ( STDMETHODCALLTYPE *GetItemByIndex )( 
            IMFSample * This,
            UINT32 unIndex,
            /* [out] */ GUID *pguidKey,
            /* [full][out][in] */ PROPVARIANT *pValue);
        
        HRESULT ( STDMETHODCALLTYPE *CopyAllItems )( 
            IMFSample * This,
            /* [in] */ IMFAttributes *pDest);
        
        HRESULT ( STDMETHODCALLTYPE *GetSampleFlags )( 
            IMFSample * This,
            /* [out] */ 
            __out  DWORD *pdwSampleFlags);
        
        HRESULT ( STDMETHODCALLTYPE *SetSampleFlags )( 
            IMFSample * This,
            /* [in] */ DWORD dwSampleFlags);
        
        HRESULT ( STDMETHODCALLTYPE *GetSampleTime )( 
            IMFSample * This,
            /* [out] */ 
            __out  LONGLONG *phnsSampleTime);
        
        HRESULT ( STDMETHODCALLTYPE *SetSampleTime )( 
            IMFSample * This,
            /* [in] */ LONGLONG hnsSampleTime);
        
        HRESULT ( STDMETHODCALLTYPE *GetSampleDuration )( 
            IMFSample * This,
            /* [out] */ 
            __out  LONGLONG *phnsSampleDuration);
        
        HRESULT ( STDMETHODCALLTYPE *SetSampleDuration )( 
            IMFSample * This,
            /* [in] */ LONGLONG hnsSampleDuration);
        
        HRESULT ( STDMETHODCALLTYPE *GetBufferCount )( 
            IMFSample * This,
            /* [out] */ 
            __out  DWORD *pdwBufferCount);
        
        HRESULT ( STDMETHODCALLTYPE *GetBufferByIndex )( 
            IMFSample * This,
            /* [in] */ DWORD dwIndex,
            /* [out] */ 
            __out  IMFMediaBuffer **ppBuffer);
        
        HRESULT ( STDMETHODCALLTYPE *ConvertToContiguousBuffer )( 
            IMFSample * This,
            /* [out] */ 
            __out  IMFMediaBuffer **ppBuffer);
        
        HRESULT ( STDMETHODCALLTYPE *AddBuffer )( 
            IMFSample * This,
            /* [in] */ IMFMediaBuffer *pBuffer);
        
        HRESULT ( STDMETHODCALLTYPE *RemoveBufferByIndex )( 
            IMFSample * This,
            /* [in] */ DWORD dwIndex);
        
        HRESULT ( STDMETHODCALLTYPE *RemoveAllBuffers )( 
            IMFSample * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetTotalLength )( 
            IMFSample * This,
            /* [out] */ 
            __out  DWORD *pcbTotalLength);
        
        HRESULT ( STDMETHODCALLTYPE *CopyToBuffer )( 
            IMFSample * This,
            /* [in] */ IMFMediaBuffer *pBuffer);
        
        END_INTERFACE
    } IMFSampleVtbl;

    interface IMFSample
    {
        CONST_VTBL struct IMFSampleVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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


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


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

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IMFSample_INTERFACE_DEFINED__ */


#ifndef __IMF2DBuffer_INTERFACE_DEFINED__
#define __IMF2DBuffer_INTERFACE_DEFINED__

/* interface IMF2DBuffer */
/* [local][uuid][object] */ 


EXTERN_C const IID IID_IMF2DBuffer;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("7DC9D5F9-9ED9-44ec-9BBF-0600BB589FBB")
    IMF2DBuffer : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE Lock2D( 
            /* [out] */ 
            __out  BYTE **pbScanline0,
            /* [out] */ LONG *plPitch) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Unlock2D( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetScanline0AndPitch( 
            /* [out] */ 
            __out  BYTE **pbScanline0,
            /* [out] */ 
            __out  LONG *plPitch) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE IsContiguousFormat( 
            /* [out] */ 
            __out  BOOL *pfIsContiguous) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetContiguousLength( 
            /* [out] */ 
            __out  DWORD *pcbLength) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ContiguousCopyTo( 
            /* [size_is][out] */ 
            __out_bcount(cbDestBuffer)  BYTE *pbDestBuffer,
            /* [in] */ DWORD cbDestBuffer) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ContiguousCopyFrom( 
            /* [size_is][in] */ 
            __in_bcount(cbSrcBuffer)  const BYTE *pbSrcBuffer,
            /* [in] */ DWORD cbSrcBuffer) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct IMF2DBufferVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IMF2DBuffer * This,
            /* [in] */ REFIID riid,
            /* [iid_is][out] */ 
            __RPC__deref_out  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IMF2DBuffer * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IMF2DBuffer * This);
        
        HRESULT ( STDMETHODCALLTYPE *Lock2D )( 
            IMF2DBuffer * This,
            /* [out] */ 
            __out  BYTE **pbScanline0,
            /* [out] */ LONG *plPitch);
        
        HRESULT ( STDMETHODCALLTYPE *Unlock2D )( 
            IMF2DBuffer * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetScanline0AndPitch )( 
            IMF2DBuffer * This,
            /* [out] */ 
            __out  BYTE **pbScanline0,
            /* [out] */ 
            __out  LONG *plPitch);
        
        HRESULT ( STDMETHODCALLTYPE *IsContiguousFormat )( 
            IMF2DBuffer * This,
            /* [out] */ 
            __out  BOOL *pfIsContiguous);
        
        HRESULT ( STDMETHODCALLTYPE *GetContiguousLength )( 
            IMF2DBuffer * This,
            /* [out] */ 
            __out  DWORD *pcbLength);
        
        HRESULT ( STDMETHODCALLTYPE *ContiguousCopyTo )( 
            IMF2DBuffer * This,
            /* [size_is][out] */ 
            __out_bcount(cbDestBuffer)  BYTE *pbDestBuffer,
            /* [in] */ DWORD cbDestBuffer);
        
        HRESULT ( STDMETHODCALLTYPE *ContiguousCopyFrom )( 
            IMF2DBuffer * This,
            /* [size_is][in] */ 
            __in_bcount(cbSrcBuffer)  const BYTE *pbSrcBuffer,
            /* [in] */ DWORD cbSrcBuffer);
        
        END_INTERFACE
    } IMF2DBufferVtbl;

    interface IMF2DBuffer
    {
        CONST_VTBL struct IMF2DBufferVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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


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

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IMF2DBuffer_INTERFACE_DEFINED__ */


#ifndef __IMFMediaType_INTERFACE_DEFINED__
#define __IMFMediaType_INTERFACE_DEFINED__

/* interface IMFMediaType */
/* [local][uuid][object] */ 


EXTERN_C const IID IID_IMFMediaType;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("44ae0fa8-ea31-4109-8d2e-4cae4997c555")
    IMFMediaType : public IMFAttributes
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetMajorType( 
            /* [out] */ 
            __out  GUID *pguidMajorType) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE IsCompressedFormat( 
            /* [out] */ 
            __out  BOOL *pfCompressed) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE IsEqual( 
            /* [in] */ IMFMediaType *pIMediaType,
            /* [out] */ 
            __out  DWORD *pdwFlags) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetRepresentation( 
            /* [in] */ GUID guidRepresentation,
            /* [out] */ 
            __out  LPVOID *ppvRepresentation) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE FreeRepresentation( 
            /* [in] */ GUID guidRepresentation,
            /* [in] */ LPVOID pvRepresentation) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct IMFMediaTypeVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IMFMediaType * This,
            /* [in] */ REFIID riid,
            /* [iid_is][out] */ 
            __RPC__deref_out  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IMFMediaType * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IMFMediaType * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetItem )( 
            IMFMediaType * This,
            REFGUID guidKey,
            /* [full][out][in] */ PROPVARIANT *pValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetItemType )( 
            IMFMediaType * This,
            REFGUID guidKey,
            /* [out] */ MF_ATTRIBUTE_TYPE *pType);
        
        HRESULT ( STDMETHODCALLTYPE *CompareItem )( 
            IMFMediaType * This,
            REFGUID guidKey,
            REFPROPVARIANT Value,
            /* [out] */ BOOL *pbResult);
        
        HRESULT ( STDMETHODCALLTYPE *Compare )( 
            IMFMediaType * This,
            IMFAttributes *pTheirs,
            MF_ATTRIBUTES_MATCH_TYPE MatchType,
            /* [out] */ BOOL *pbResult);
        
        HRESULT ( STDMETHODCALLTYPE *GetUINT32 )( 
            IMFMediaType * This,
            REFGUID guidKey,
            /* [out] */ UINT32 *punValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetUINT64 )( 
            IMFMediaType * This,
            REFGUID guidKey,
            /* [out] */ UINT64 *punValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetDouble )( 
            IMFMediaType * This,
            REFGUID guidKey,
            /* [out] */ double *pfValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetGUID )( 
            IMFMediaType * This,
            REFGUID guidKey,
            /* [out] */ GUID *pguidValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetStringLength )( 
            IMFMediaType * This,
            REFGUID guidKey,
            /* [out] */ UINT32 *pcchLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetString )( 
            IMFMediaType * This,
            REFGUID guidKey,
            /* [size_is][out] */ LPWSTR pwszValue,
            UINT32 cchBufSize,
            /* [full][out][in] */ UINT32 *pcchLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetAllocatedString )( 
            IMFMediaType * This,
            REFGUID guidKey,
            /* [size_is][size_is][out] */ LPWSTR *ppwszValue,
            /* [out] */ UINT32 *pcchLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetBlobSize )( 
            IMFMediaType * This,
            REFGUID guidKey,
            /* [out] */ UINT32 *pcbBlobSize);
        
        HRESULT ( STDMETHODCALLTYPE *GetBlob )( 
            IMFMediaType * This,
            REFGUID guidKey,
            /* [size_is][out] */ UINT8 *pBuf,
            UINT32 cbBufSize,
            /* [full][out][in] */ UINT32 *pcbBlobSize);
        
        HRESULT ( STDMETHODCALLTYPE *GetAllocatedBlob )( 
            IMFMediaType * This,
            REFGUID guidKey,
            /* [size_is][size_is][out] */ UINT8 **ppBuf,
            /* [out] */ UINT32 *pcbSize);
        
        HRESULT ( STDMETHODCALLTYPE *GetUnknown )( 
            IMFMediaType * This,
            REFGUID guidKey,
            REFIID riid,
            /* [iid_is][out] */ 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,
            /* [string][in] */ LPCWSTR wszValue);
        
        HRESULT ( STDMETHODCALLTYPE *SetBlob )( 
            IMFMediaType * This,
            REFGUID guidKey,
            /* [size_is][in] */ const UINT8 *pBuf,
            UINT32 cbBufSize);
        
        HRESULT ( STDMETHODCALLTYPE *SetUnknown )( 
            IMFMediaType * This,
            REFGUID guidKey,
            /* [in] */ IUnknown *pUnknown);
        
        HRESULT ( STDMETHODCALLTYPE *LockStore )( 
            IMFMediaType * This);
        
        HRESULT ( STDMETHODCALLTYPE *UnlockStore )( 
            IMFMediaType * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
            IMFMediaType * This,
            /* [out] */ UINT32 *pcItems);
        
        HRESULT ( STDMETHODCALLTYPE *GetItemByIndex )( 
            IMFMediaType * This,
            UINT32 unIndex,
            /* [out] */ GUID *pguidKey,
            /* [full][out][in] */ PROPVARIANT *pValue);
        
        HRESULT ( STDMETHODCALLTYPE *CopyAllItems )( 
            IMFMediaType * This,
            /* [in] */ IMFAttributes *pDest);
        
        HRESULT ( STDMETHODCALLTYPE *GetMajorType )( 
            IMFMediaType * This,
            /* [out] */ 
            __out  GUID *pguidMajorType);
        
        HRESULT ( STDMETHODCALLTYPE *IsCompressedFormat )( 
            IMFMediaType * This,
            /* [out] */ 
            __out  BOOL *pfCompressed);
        
        HRESULT ( STDMETHODCALLTYPE *IsEqual )( 
            IMFMediaType * This,
            /* [in] */ IMFMediaType *pIMediaType,
            /* [out] */ 
            __out  DWORD *pdwFlags);
        
        HRESULT ( STDMETHODCALLTYPE *GetRepresentation )( 
            IMFMediaType * This,
            /* [in] */ GUID guidRepresentation,
            /* [out] */ 
            __out  LPVOID *ppvRepresentation);
        
        HRESULT ( STDMETHODCALLTYPE *FreeRepresentation )( 
            IMFMediaType * This,
            /* [in] */ GUID guidRepresentation,
            /* [in] */ LPVOID pvRepresentation);
        
        END_INTERFACE
    } IMFMediaTypeVtbl;

    interface IMFMediaType
    {
        CONST_VTBL struct IMFMediaTypeVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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


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


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

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IMFMediaType_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_mfobjects_0000_0005 */
/* [local] */ 

#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



extern RPC_IF_HANDLE __MIDL_itf_mfobjects_0000_0005_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_mfobjects_0000_0005_v0_0_s_ifspec;

#ifndef __IMFAudioMediaType_INTERFACE_DEFINED__
#define __IMFAudioMediaType_INTERFACE_DEFINED__

/* interface IMFAudioMediaType */
/* [local][uuid][object] */ 


EXTERN_C const IID IID_IMFAudioMediaType;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("26a0adc3-ce26-4672-9304-69552edd3faf")
    IMFAudioMediaType : public IMFMediaType
    {
    public:
        virtual const WAVEFORMATEX *STDMETHODCALLTYPE GetAudioFormat( void) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct IMFAudioMediaTypeVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IMFAudioMediaType * This,
            /* [in] */ REFIID riid,
            /* [iid_is][out] */ 
            __RPC__deref_out  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IMFAudioMediaType * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IMFAudioMediaType * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetItem )( 
            IMFAudioMediaType * This,
            REFGUID guidKey,
            /* [full][out][in] */ PROPVARIANT *pValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetItemType )( 
            IMFAudioMediaType * This,
            REFGUID guidKey,
            /* [out] */ MF_ATTRIBUTE_TYPE *pType);
        
        HRESULT ( STDMETHODCALLTYPE *CompareItem )( 
            IMFAudioMediaType * This,
            REFGUID guidKey,
            REFPROPVARIANT Value,
            /* [out] */ BOOL *pbResult);
        
        HRESULT ( STDMETHODCALLTYPE *Compare )( 
            IMFAudioMediaType * This,
            IMFAttributes *pTheirs,
            MF_ATTRIBUTES_MATCH_TYPE MatchType,
            /* [out] */ BOOL *pbResult);
        
        HRESULT ( STDMETHODCALLTYPE *GetUINT32 )( 
            IMFAudioMediaType * This,
            REFGUID guidKey,
            /* [out] */ UINT32 *punValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetUINT64 )( 
            IMFAudioMediaType * This,
            REFGUID guidKey,
            /* [out] */ UINT64 *punValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetDouble )( 
            IMFAudioMediaType * This,
            REFGUID guidKey,
            /* [out] */ double *pfValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetGUID )( 
            IMFAudioMediaType * This,
            REFGUID guidKey,
            /* [out] */ GUID *pguidValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetStringLength )( 
            IMFAudioMediaType * This,
            REFGUID guidKey,
            /* [out] */ UINT32 *pcchLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetString )( 
            IMFAudioMediaType * This,
            REFGUID guidKey,
            /* [size_is][out] */ LPWSTR pwszValue,
            UINT32 cchBufSize,
            /* [full][out][in] */ UINT32 *pcchLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetAllocatedString )( 
            IMFAudioMediaType * This,
            REFGUID guidKey,
            /* [size_is][size_is][out] */ LPWSTR *ppwszValue,
            /* [out] */ UINT32 *pcchLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetBlobSize )( 
            IMFAudioMediaType * This,
            REFGUID guidKey,
            /* [out] */ UINT32 *pcbBlobSize);
        
        HRESULT ( STDMETHODCALLTYPE *GetBlob )( 
            IMFAudioMediaType * This,
            REFGUID guidKey,
            /* [size_is][out] */ UINT8 *pBuf,
            UINT32 cbBufSize,
            /* [full][out][in] */ UINT32 *pcbBlobSize);
        
        HRESULT ( STDMETHODCALLTYPE *GetAllocatedBlob )( 
            IMFAudioMediaType * This,
            REFGUID guidKey,
            /* [size_is][size_is][out] */ UINT8 **ppBuf,
            /* [out] */ UINT32 *pcbSize);
        
        HRESULT ( STDMETHODCALLTYPE *GetUnknown )( 
            IMFAudioMediaType * This,
            REFGUID guidKey,
            REFIID riid,
            /* [iid_is][out] */ 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,
            /* [string][in] */ LPCWSTR wszValue);
        
        HRESULT ( STDMETHODCALLTYPE *SetBlob )( 
            IMFAudioMediaType * This,
            REFGUID guidKey,
            /* [size_is][in] */ const UINT8 *pBuf,
            UINT32 cbBufSize);
        
        HRESULT ( STDMETHODCALLTYPE *SetUnknown )( 
            IMFAudioMediaType * This,
            REFGUID guidKey,
            /* [in] */ IUnknown *pUnknown);
        
        HRESULT ( STDMETHODCALLTYPE *LockStore )( 
            IMFAudioMediaType * This);
        
        HRESULT ( STDMETHODCALLTYPE *UnlockStore )( 
            IMFAudioMediaType * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
            IMFAudioMediaType * This,
            /* [out] */ UINT32 *pcItems);
        
        HRESULT ( STDMETHODCALLTYPE *GetItemByIndex )( 
            IMFAudioMediaType * This,
            UINT32 unIndex,
            /* [out] */ GUID *pguidKey,
            /* [full][out][in] */ PROPVARIANT *pValue);
        
        HRESULT ( STDMETHODCALLTYPE *CopyAllItems )( 
            IMFAudioMediaType * This,
            /* [in] */ IMFAttributes *pDest);
        
        HRESULT ( STDMETHODCALLTYPE *GetMajorType )( 
            IMFAudioMediaType * This,
            /* [out] */ 
            __out  GUID *pguidMajorType);
        
        HRESULT ( STDMETHODCALLTYPE *IsCompressedFormat )( 
            IMFAudioMediaType * This,
            /* [out] */ 
            __out  BOOL *pfCompressed);
        
        HRESULT ( STDMETHODCALLTYPE *IsEqual )( 
            IMFAudioMediaType * This,
            /* [in] */ IMFMediaType *pIMediaType,
            /* [out] */ 
            __out  DWORD *pdwFlags);
        
        HRESULT ( STDMETHODCALLTYPE *GetRepresentation )( 
            IMFAudioMediaType * This,
            /* [in] */ GUID guidRepresentation,
            /* [out] */ 
            __out  LPVOID *ppvRepresentation);
        
        HRESULT ( STDMETHODCALLTYPE *FreeRepresentation )( 
            IMFAudioMediaType * This,
            /* [in] */ GUID guidRepresentation,
            /* [in] */ LPVOID pvRepresentation);
        
        const WAVEFORMATEX *( STDMETHODCALLTYPE *GetAudioFormat )( 
            IMFAudioMediaType * This);
        
        END_INTERFACE
    } IMFAudioMediaTypeVtbl;

    interface IMFAudioMediaType
    {
        CONST_VTBL struct IMFAudioMediaTypeVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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


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


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


#define IMFAudioMediaType_GetAudioFormat(This)	\
    ( (This)->lpVtbl -> GetAudioFormat(This) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IMFAudioMediaType_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_mfobjects_0000_0006 */
/* [local] */ 

#ifndef _WINGDI_
typedef DWORD RGBQUAD;

typedef /* [public][public] */ struct __MIDL___MIDL_itf_mfobjects_0000_0006_0001
    {
    DWORD biSize;
    LONG biWidth;
    LONG biHeight;
    WORD biPlanes;
    WORD biBitCount;
    DWORD biCompression;
    DWORD biSizeImage;
    LONG biXPelsPerMeter;
    LONG biYPelsPerMeter;
    DWORD biClrUsed;
    DWORD biClrImportant;
    } 	BITMAPINFOHEADER;

typedef /* [public] */ struct __MIDL___MIDL_itf_mfobjects_0000_0006_0002
    {
    BITMAPINFOHEADER bmiHeader;
    RGBQUAD bmiColors[ 1 ];
    } 	BITMAPINFO;

#endif

#if !defined( _MFVIDEOFORMAT_ )
#define _MFVIDEOFORMAT_
typedef 
enum _MFVideoInterlaceMode
    {	MFVideoInterlace_Unknown	= 0,
	MFVideoInterlace_Progressive	= 2,
	MFVideoInterlace_FieldInterleavedUpperFirst	= 3,
	MFVideoInterlace_FieldInterleavedLowerFirst	= 4,
	MFVideoInterlace_FieldSingleUpper	= 5,
	MFVideoInterlace_FieldSingleLower	= 6,
	MFVideoInterlace_MixedInterlaceOrProgressive	= 7,
	MFVideoInterlace_Last	= ( MFVideoInterlace_MixedInterlaceOrProgressive + 1 ) ,
	MFVideoInterlace_ForceDWORD	= 0x7fffffff
    } 	MFVideoInterlaceMode;

#define MFVideoInterlace_FieldSingleUpperFirst MFVideoInterlace_FieldSingleUpper
#define MFVideoInterlace_FieldSingleLowerFirst MFVideoInterlace_FieldSingleLower
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_Last	= ( MFVideoTransFunc_28 + 1 ) ,
	MFVideoTransFunc_ForceDWORD	= 0x7fffffff
    } 	MFVideoTransferFunction;

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

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

typedef 
enum _MFVideoTransferMatrix
    {	MFVideoTransferMatrix_Unknown	= 0,
	MFVideoTransferMatrix_BT709	= 1,
	MFVideoTransferMatrix_BT601	= 2,
	MFVideoTransferMatrix_SMPTE240M	= 3,
	MFVideoTransferMatrix_Last	= ( MFVideoTransferMatrix_SMPTE240M + 1 ) ,
	MFVideoTransferMatrix_ForceDWORD	= 0x7fffffff
    } 	MFVideoTransferMatrix;

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 _MFNominalRange
    {	MFNominalRange_Unknown	= 0,
	MFNominalRange_Normal	= 1,
	MFNominalRange_Wide	= 2,
	MFNominalRange_0_255	= 1,
	MFNominalRange_16_235	= 2,
	MFNominalRange_48_208	= 3,
	MFNominalRange_Last	= ( MFNominalRange_48_208 + 1 ) ,
	MFNominalRange_ForceDWORD	= 0x7fffffff
    } 	MFNominalRange;

typedef 
enum _MFVideoFlags
    {	MFVideoFlag_PAD_TO_Mask	= ( 0x1 | 0x2 ) ,
	MFVideoFlag_PAD_TO_None	= ( 0 * 0x1 ) ,
	MFVideoFlag_PAD_TO_4x3	= ( 1 * 0x1 ) ,
	MFVideoFlag_PAD_TO_16x9	= ( 2 * 0x1 ) ,
	MFVideoFlag_SrcContentHintMask	= ( ( 0x4 | 0x8 )  | 0x10 ) ,
	MFVideoFlag_SrcContentHintNone	= ( 0 * 0x4 ) ,
	MFVideoFlag_SrcContentHint16x9	= ( 1 * 0x4 ) ,
	MFVideoFlag_SrcContentHint235_1	= ( 2 * 0x4 ) ,
	MFVideoFlag_AnalogProtected	= 0x20,
	MFVideoFlag_DigitallyProtected	= 0x40,
	MFVideoFlag_ProgressiveContent	= 0x80,
	MFVideoFlag_FieldRepeatCountMask	= ( ( 0x100 | 0x200 )  | 0x400 ) ,
	MFVideoFlag_FieldRepeatCountShift	= 8,
	MFVideoFlag_ProgressiveSeqReset	= 0x800,
	MFVideoFlag_PanScanEnabled	= 0x20000,
	MFVideoFlag_LowerFieldFirst	= 0x40000,
	MFVideoFlag_BottomUpLinearRep	= 0x80000,
	MFVideoFlags_DXVASurface	= 0x100000,
	MFVideoFlags_RenderTargetSurface	= 0x400000,
	MFVideoFlags_ForceQWORD	= 0x7fffffff
    } 	MFVideoFlags;

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 struct _MFVideoInfo
    {
    DWORD dwWidth;
    DWORD dwHeight;
    MFRatio PixelAspectRatio;
    MFVideoChromaSubsampling SourceChromaSubsampling;
    MFVideoInterlaceMode InterlaceMode;
    MFVideoTransferFunction TransferFunction;
    MFVideoPrimaries ColorPrimaries;
    MFVideoTransferMatrix TransferMatrix;
    MFVideoLighting SourceLighting;
    MFRatio FramesPerSecond;
    MFNominalRange NominalRange;
    MFVideoArea GeometricAperture;
    MFVideoArea MinimumDisplayAperture;
    MFVideoArea PanScanAperture;
    unsigned __int64 VideoFlags;
    } 	MFVideoInfo;

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

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

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

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

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

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

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

#endif



extern RPC_IF_HANDLE __MIDL_itf_mfobjects_0000_0006_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_mfobjects_0000_0006_v0_0_s_ifspec;

#ifndef __IMFVideoMediaType_INTERFACE_DEFINED__
#define __IMFVideoMediaType_INTERFACE_DEFINED__

/* interface IMFVideoMediaType */
/* [local][uuid][object] */ 


EXTERN_C const IID IID_IMFVideoMediaType;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("b99f381f-a8f9-47a2-a5af-ca3a225a3890")
    IMFVideoMediaType : public IMFMediaType
    {
    public:
        virtual const MFVIDEOFORMAT *STDMETHODCALLTYPE GetVideoFormat( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetVideoRepresentation( 
            /* [in] */ GUID guidRepresentation,
            /* [out] */ 
            __out  LPVOID *ppvRepresentation,
            /* [in] */ LONG lStride) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct IMFVideoMediaTypeVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IMFVideoMediaType * This,
            /* [in] */ REFIID riid,
            /* [iid_is][out] */ 
            __RPC__deref_out  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IMFVideoMediaType * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IMFVideoMediaType * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetItem )( 
            IMFVideoMediaType * This,
            REFGUID guidKey,
            /* [full][out][in] */ PROPVARIANT *pValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetItemType )( 
            IMFVideoMediaType * This,
            REFGUID guidKey,
            /* [out] */ MF_ATTRIBUTE_TYPE *pType);
        
        HRESULT ( STDMETHODCALLTYPE *CompareItem )( 
            IMFVideoMediaType * This,
            REFGUID guidKey,
            REFPROPVARIANT Value,
            /* [out] */ BOOL *pbResult);
        
        HRESULT ( STDMETHODCALLTYPE *Compare )( 
            IMFVideoMediaType * This,
            IMFAttributes *pTheirs,
            MF_ATTRIBUTES_MATCH_TYPE MatchType,
            /* [out] */ BOOL *pbResult);
        
        HRESULT ( STDMETHODCALLTYPE *GetUINT32 )( 
            IMFVideoMediaType * This,
            REFGUID guidKey,
            /* [out] */ UINT32 *punValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetUINT64 )( 
            IMFVideoMediaType * This,
            REFGUID guidKey,
            /* [out] */ UINT64 *punValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetDouble )( 
            IMFVideoMediaType * This,
            REFGUID guidKey,
            /* [out] */ double *pfValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetGUID )( 
            IMFVideoMediaType * This,
            REFGUID guidKey,
            /* [out] */ GUID *pguidValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetStringLength )( 
            IMFVideoMediaType * This,
            REFGUID guidKey,
            /* [out] */ UINT32 *pcchLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetString )( 
            IMFVideoMediaType * This,
            REFGUID guidKey,
            /* [size_is][out] */ LPWSTR pwszValue,
            UINT32 cchBufSize,
            /* [full][out][in] */ UINT32 *pcchLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetAllocatedString )( 
            IMFVideoMediaType * This,
            REFGUID guidKey,
            /* [size_is][size_is][out] */ LPWSTR *ppwszValue,
            /* [out] */ UINT32 *pcchLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetBlobSize )( 
            IMFVideoMediaType * This,
            REFGUID guidKey,
            /* [out] */ UINT32 *pcbBlobSize);
        
        HRESULT ( STDMETHODCALLTYPE *GetBlob )( 
            IMFVideoMediaType * This,
            REFGUID guidKey,
            /* [size_is][out] */ UINT8 *pBuf,
            UINT32 cbBufSize,
            /* [full][out][in] */ UINT32 *pcbBlobSize);
        
        HRESULT ( STDMETHODCALLTYPE *GetAllocatedBlob )( 
            IMFVideoMediaType * This,
            REFGUID guidKey,
            /* [size_is][size_is][out] */ UINT8 **ppBuf,
            /* [out] */ UINT32 *pcbSize);
        
        HRESULT ( STDMETHODCALLTYPE *GetUnknown )( 
            IMFVideoMediaType * This,
            REFGUID guidKey,
            REFIID riid,
            /* [iid_is][out] */ 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,
            /* [string][in] */ LPCWSTR wszValue);
        
        HRESULT ( STDMETHODCALLTYPE *SetBlob )( 
            IMFVideoMediaType * This,
            REFGUID guidKey,
            /* [size_is][in] */ const UINT8 *pBuf,
            UINT32 cbBufSize);
        
        HRESULT ( STDMETHODCALLTYPE *SetUnknown )( 
            IMFVideoMediaType * This,
            REFGUID guidKey,
            /* [in] */ IUnknown *pUnknown);
        
        HRESULT ( STDMETHODCALLTYPE *LockStore )( 
            IMFVideoMediaType * This);
        
        HRESULT ( STDMETHODCALLTYPE *UnlockStore )( 
            IMFVideoMediaType * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
            IMFVideoMediaType * This,
            /* [out] */ UINT32 *pcItems);
        
        HRESULT ( STDMETHODCALLTYPE *GetItemByIndex )( 
            IMFVideoMediaType * This,
            UINT32 unIndex,
            /* [out] */ GUID *pguidKey,
            /* [full][out][in] */ PROPVARIANT *pValue);
        
        HRESULT ( STDMETHODCALLTYPE *CopyAllItems )( 
            IMFVideoMediaType * This,
            /* [in] */ IMFAttributes *pDest);
        
        HRESULT ( STDMETHODCALLTYPE *GetMajorType )( 
            IMFVideoMediaType * This,
            /* [out] */ 
            __out  GUID *pguidMajorType);
        
        HRESULT ( STDMETHODCALLTYPE *IsCompressedFormat )( 
            IMFVideoMediaType * This,
            /* [out] */ 
            __out  BOOL *pfCompressed);
        
        HRESULT ( STDMETHODCALLTYPE *IsEqual )( 
            IMFVideoMediaType * This,
            /* [in] */ IMFMediaType *pIMediaType,
            /* [out] */ 
            __out  DWORD *pdwFlags);
        
        HRESULT ( STDMETHODCALLTYPE *GetRepresentation )( 
            IMFVideoMediaType * This,
            /* [in] */ GUID guidRepresentation,
            /* [out] */ 
            __out  LPVOID *ppvRepresentation);
        
        HRESULT ( STDMETHODCALLTYPE *FreeRepresentation )( 
            IMFVideoMediaType * This,
            /* [in] */ GUID guidRepresentation,
            /* [in] */ LPVOID pvRepresentation);
        
        const MFVIDEOFORMAT *( STDMETHODCALLTYPE *GetVideoFormat )( 
            IMFVideoMediaType * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetVideoRepresentation )( 
            IMFVideoMediaType * This,
            /* [in] */ GUID guidRepresentation,
            /* [out] */ 
            __out  LPVOID *ppvRepresentation,
            /* [in] */ LONG lStride);
        
        END_INTERFACE
    } IMFVideoMediaTypeVtbl;

    interface IMFVideoMediaType
    {
        CONST_VTBL struct IMFVideoMediaTypeVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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


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


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


#define IMFVideoMediaType_GetVideoFormat(This)	\
    ( (This)->lpVtbl -> GetVideoFormat(This) ) 

#define IMFVideoMediaType_GetVideoRepresentation(This,guidRepresentation,ppvRepresentation,lStride)	\
    ( (This)->lpVtbl -> GetVideoRepresentation(This,guidRepresentation,ppvRepresentation,lStride) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IMFVideoMediaType_INTERFACE_DEFINED__ */


#ifndef __IMFAsyncResult_INTERFACE_DEFINED__
#define __IMFAsyncResult_INTERFACE_DEFINED__

/* interface IMFAsyncResult */
/* [uuid][object] */ 


EXTERN_C const IID IID_IMFAsyncResult;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("ac6b7889-0740-4d51-8619-905994a55cc6")
    IMFAsyncResult : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetState( 
            /* [out] */ __RPC__deref_out_opt IUnknown **ppunkState) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetStatus( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetStatus( 
            /* [in] */ HRESULT hrStatus) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetObject( 
            /* [out] */ __RPC__deref_out_opt IUnknown **ppObject) = 0;
        
        virtual /* [local] */ IUnknown *STDMETHODCALLTYPE GetStateNoAddRef( void) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct IMFAsyncResultVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IMFAsyncResult * This,
            /* [in] */ __RPC__in REFIID riid,
            /* [iid_is][out] */ 
            __RPC__deref_out  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IMFAsyncResult * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IMFAsyncResult * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetState )( 
            IMFAsyncResult * This,
            /* [out] */ __RPC__deref_out_opt IUnknown **ppunkState);
        
        HRESULT ( STDMETHODCALLTYPE *GetStatus )( 
            IMFAsyncResult * This);
        
        HRESULT ( STDMETHODCALLTYPE *SetStatus )( 
            IMFAsyncResult * This,
            /* [in] */ HRESULT hrStatus);
        
        HRESULT ( STDMETHODCALLTYPE *GetObject )( 
            IMFAsyncResult * This,
            /* [out] */ __RPC__deref_out_opt IUnknown **ppObject);
        
        /* [local] */ IUnknown *( STDMETHODCALLTYPE *GetStateNoAddRef )( 
            IMFAsyncResult * This);
        
        END_INTERFACE
    } IMFAsyncResultVtbl;

    interface IMFAsyncResult
    {
        CONST_VTBL struct IMFAsyncResultVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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


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

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IMFAsyncResult_INTERFACE_DEFINED__ */


#ifndef __IMFAsyncCallback_INTERFACE_DEFINED__
#define __IMFAsyncCallback_INTERFACE_DEFINED__

/* interface IMFAsyncCallback */
/* [uuid][object] */ 


EXTERN_C const IID IID_IMFAsyncCallback;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("a27003cf-2354-4f2a-8d6a-ab7cff15437e")
    IMFAsyncCallback : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetParameters( 
            /* [out] */ __RPC__out DWORD *pdwFlags,
            /* [out] */ __RPC__out DWORD *pdwQueue) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Invoke( 
            /* [in] */ __RPC__in_opt IMFAsyncResult *pAsyncResult) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct IMFAsyncCallbackVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IMFAsyncCallback * This,
            /* [in] */ __RPC__in REFIID riid,
            /* [iid_is][out] */ 
            __RPC__deref_out  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IMFAsyncCallback * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IMFAsyncCallback * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetParameters )( 
            IMFAsyncCallback * This,
            /* [out] */ __RPC__out DWORD *pdwFlags,
            /* [out] */ __RPC__out DWORD *pdwQueue);
        
        HRESULT ( STDMETHODCALLTYPE *Invoke )( 
            IMFAsyncCallback * This,
            /* [in] */ __RPC__in_opt IMFAsyncResult *pAsyncResult);
        
        END_INTERFACE
    } IMFAsyncCallbackVtbl;

    interface IMFAsyncCallback
    {
        CONST_VTBL struct IMFAsyncCallbackVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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


#define IMFAsyncCallback_GetParameters(This,pdwFlags,pdwQueue)	\
    ( (This)->lpVtbl -> GetParameters(This,pdwFlags,pdwQueue) ) 

#define IMFAsyncCallback_Invoke(This,pAsyncResult)	\
    ( (This)->lpVtbl -> Invoke(This,pAsyncResult) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IMFAsyncCallback_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_mfobjects_0000_0009 */
/* [local] */ 

#define MFASYNC_FAST_IO_PROCESSING_CALLBACK 0x00000001
#define MFASYNC_SIGNAL_CALLBACK 0x00000002
#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

enum __MIDL___MIDL_itf_mfobjects_0000_0009_0001
    {	MEUnknown	= 0,
	MEError	= ( MEUnknown + 1 ) ,
	MEExtendedType	= ( MEError + 1 ) ,
	MESessionUnknown	= 100,
	MESessionTopologySet	= ( MESessionUnknown + 1 ) ,
	MESessionTopologiesCleared	= ( MESessionTopologySet + 1 ) ,
	MESessionStarted	= ( MESessionTopologiesCleared + 1 ) ,
	MESessionPaused	= ( MESessionStarted + 1 ) ,
	MESessionStopped	= ( MESessionPaused + 1 ) ,
	MESessionClosed	= ( MESessionStopped + 1 ) ,
	MESessionEnded	= ( MESessionClosed + 1 ) ,
	MESessionRateChanged	= ( MESessionEnded + 1 ) ,
	MESessionScrubSampleComplete	= ( MESessionRateChanged + 1 ) ,
	MESessionCapabilitiesChanged	= ( MESessionScrubSampleComplete + 1 ) ,
	MESessionTopologyStatus	= ( MESessionCapabilitiesChanged + 1 ) ,
	MESessionNotifyPresentationTime	= ( MESessionTopologyStatus + 1 ) ,
	MENewPresentation	= ( MESessionNotifyPresentationTime + 1 ) ,
	MELicenseAcquisitionStart	= ( MENewPresentation + 1 ) ,
	MELicenseAcquisitionCompleted	= ( MELicenseAcquisitionStart + 1 ) ,
	MEIndividualizationStart	= ( MELicenseAcquisitionCompleted + 1 ) ,
	MEIndividualizationCompleted	= ( MEIndividualizationStart + 1 ) ,
	MEEnablerProgress	= ( MEIndividualizationCompleted + 1 ) ,
	MEEnablerCompleted	= ( MEEnablerProgress + 1 ) ,
	MEPolicyError	= ( MEEnablerCompleted + 1 ) ,
	MEPolicyReport	= ( MEPolicyError + 1 ) ,
	MEBufferingStarted	= ( MEPolicyReport + 1 ) ,
	MEBufferingStopped	= ( MEBufferingStarted + 1 ) ,
	MEConnectStart	= ( MEBufferingStopped + 1 ) ,
	MEConnectEnd	= ( MEConnectStart + 1 ) ,
	MEReconnectStart	= ( MEConnectEnd + 1 ) ,
	MEReconnectEnd	= ( MEReconnectStart + 1 ) ,
	MERendererEvent	= ( MEReconnectEnd + 1 ) ,
	MESourceUnknown	= 200,
	MESourceStarted	= ( MESourceUnknown + 1 ) ,
	MEStreamStarted	= ( MESourceStarted + 1 ) ,
	MESourceSeeked	= ( MEStreamStarted + 1 ) ,
	MEStreamSeeked	= ( MESourceSeeked + 1 ) ,
	MENewStream	= ( MEStreamSeeked + 1 ) ,
	MEUpdatedStream	= ( MENewStream + 1 ) ,
	MESourceStopped	= ( MEUpdatedStream + 1 ) ,
	MEStreamStopped	= ( MESourceStopped + 1 ) ,
	MESourcePaused	= ( MEStreamStopped + 1 ) ,
	MEStreamPaused	= ( MESourcePaused + 1 ) ,
	MEEndOfPresentation	= ( MEStreamPaused + 1 ) ,
	MEEndOfStream	= ( MEEndOfPresentation + 1 ) ,
	MEMediaSample	= ( MEEndOfStream + 1 ) ,
	MEStreamTick	= ( MEMediaSample + 1 ) ,
	MEStreamThinMode	= ( MEStreamTick + 1 ) ,
	MEStreamFormatChanged	= ( MEStreamThinMode + 1 ) ,
	MESourceRateChanged	= ( MEStreamFormatChanged + 1 ) ,
	MEEndOfPresentationSegment	= ( MESourceRateChanged + 1 ) ,
	MESourceCharacteristicsChanged	= ( MEEndOfPresentationSegment + 1 ) ,
	MESourceRateChangeRequested	= ( MESourceCharacteristicsChanged + 1 ) ,
	MESourceMetadataChanged	= ( MESourceRateChangeRequested + 1 ) ,
	MESinkUnknown	= 300,
	MEStreamSinkStarted	= ( MESinkUnknown + 1 ) ,
	MEStreamSinkStopped	= ( MEStreamSinkStarted + 1 ) ,
	MEStreamSinkPaused	= ( MEStreamSinkStopped + 1 ) ,
	MEStreamSinkRateChanged	= ( MEStreamSinkPaused + 1 ) ,
	MEStreamSinkRequestSample	= ( MEStreamSinkRateChanged + 1 ) ,
	MEStreamSinkMarker	= ( MEStreamSinkRequestSample + 1 ) ,
	MEStreamSinkPrerolled	= ( MEStreamSinkMarker + 1 ) ,
	MEStreamSinkScrubSampleComplete	= ( MEStreamSinkPrerolled + 1 ) ,
	MEStreamSinkFormatChanged	= ( MEStreamSinkScrubSampleComplete + 1 ) ,
	MEStreamSinkDeviceChanged	= ( MEStreamSinkFormatChanged + 1 ) ,
	MEQualityNotify	= ( MEStreamSinkDeviceChanged + 1 ) ,
	MESinkInvalidated	= ( MEQualityNotify + 1 ) ,
	MEAudioSessionNameChanged	= ( MESinkInvalidated + 1 ) ,
	MEAudioSessionVolumeChanged	= ( MEAudioSessionNameChanged + 1 ) ,
	MEAudioSessionDeviceRemoved	= ( MEAudioSessionVolumeChanged + 1 ) ,
	MEAudioSessionServerShutdown	= ( MEAudioSessionDeviceRemoved + 1 ) ,
	MEAudioSessionGroupingParamChanged	= ( MEAudioSessionServerShutdown + 1 ) ,
	MEAudioSessionIconChanged	= ( MEAudioSessionGroupingParamChanged + 1 ) ,
	MEAudioSessionFormatChanged	= ( MEAudioSessionIconChanged + 1 ) ,
	MEAudioSessionDisconnected	= ( MEAudioSessionFormatChanged + 1 ) ,
	MEAudioSessionExclusiveModeOverride	= ( MEAudioSessionDisconnected + 1 ) ,
	METrustUnknown	= 400,
	MEPolicyChanged	= ( METrustUnknown + 1 ) ,
	MEContentProtectionMessage	= ( MEPolicyChanged + 1 ) ,
	MEPolicySet	= ( MEContentProtectionMessage + 1 ) ,
	MEWMDRMLicenseBackupCompleted	= 500,
	MEWMDRMLicenseBackupProgress	= 501,
	MEWMDRMLicenseRestoreCompleted	= 502,
	MEWMDRMLicenseRestoreProgress	= 503,
	MEWMDRMLicenseAcquisitionCompleted	= 506,
	MEWMDRMIndividualizationCompleted	= 508,
	MEWMDRMIndividualizationProgress	= 513,
	MEWMDRMProximityCompleted	= 514,
	MEWMDRMLicenseStoreCleaned	= 515,
	MEWMDRMRevocationDownloadCompleted	= 516,
	MEReservedMax	= 10000
    } ;
typedef DWORD MediaEventType;



extern RPC_IF_HANDLE __MIDL_itf_mfobjects_0000_0009_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_mfobjects_0000_0009_v0_0_s_ifspec;

#ifndef __IMFMediaEvent_INTERFACE_DEFINED__
#define __IMFMediaEvent_INTERFACE_DEFINED__

/* interface IMFMediaEvent */
/* [uuid][object] */ 


EXTERN_C const IID IID_IMFMediaEvent;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("DF598932-F10C-4E39-BBA2-C308F101DAA3")
    IMFMediaEvent : public IMFAttributes
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetType( 
            /* [out] */ __RPC__out MediaEventType *pmet) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetExtendedType( 
            /* [out] */ __RPC__out GUID *pguidExtendedType) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetStatus( 
            /* [out] */ __RPC__out HRESULT *phrStatus) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetValue( 
            /* [out] */ __RPC__out PROPVARIANT *pvValue) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct IMFMediaEventVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IMFMediaEvent * This,
            /* [in] */ __RPC__in REFIID riid,
            /* [iid_is][out] */ 
            __RPC__deref_out  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IMFMediaEvent * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IMFMediaEvent * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetItem )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            /* [full][out][in] */ __RPC__inout_opt PROPVARIANT *pValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetItemType )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out MF_ATTRIBUTE_TYPE *pType);
        
        HRESULT ( STDMETHODCALLTYPE *CompareItem )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            __RPC__in REFPROPVARIANT Value,
            /* [out] */ __RPC__out BOOL *pbResult);
        
        HRESULT ( STDMETHODCALLTYPE *Compare )( 
            IMFMediaEvent * This,
            __RPC__in_opt IMFAttributes *pTheirs,
            MF_ATTRIBUTES_MATCH_TYPE MatchType,
            /* [out] */ __RPC__out BOOL *pbResult);
        
        HRESULT ( STDMETHODCALLTYPE *GetUINT32 )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out UINT32 *punValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetUINT64 )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out UINT64 *punValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetDouble )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out double *pfValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetGUID )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out GUID *pguidValue);
        
        HRESULT ( STDMETHODCALLTYPE *GetStringLength )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out UINT32 *pcchLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetString )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            /* [size_is][out] */ __RPC__out_ecount_full(cchBufSize) LPWSTR pwszValue,
            UINT32 cchBufSize,
            /* [full][out][in] */ __RPC__inout_opt UINT32 *pcchLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetAllocatedString )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            /* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(( *pcchLength + 1 ) ) LPWSTR *ppwszValue,
            /* [out] */ __RPC__out UINT32 *pcchLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetBlobSize )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            /* [out] */ __RPC__out UINT32 *pcbBlobSize);
        
        HRESULT ( STDMETHODCALLTYPE *GetBlob )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            /* [size_is][out] */ __RPC__out_ecount_full(cbBufSize) UINT8 *pBuf,
            UINT32 cbBufSize,
            /* [full][out][in] */ __RPC__inout_opt UINT32 *pcbBlobSize);
        
        HRESULT ( STDMETHODCALLTYPE *GetAllocatedBlob )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            /* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(*pcbSize) UINT8 **ppBuf,
            /* [out] */ __RPC__out UINT32 *pcbSize);
        
        HRESULT ( STDMETHODCALLTYPE *GetUnknown )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            __RPC__in REFIID riid,
            /* [iid_is][out] */ __RPC__deref_out_opt LPVOID *ppv);
        
        HRESULT ( STDMETHODCALLTYPE *SetItem )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            __RPC__in REFPROPVARIANT Value);
        
        HRESULT ( STDMETHODCALLTYPE *DeleteItem )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey);
        
        HRESULT ( STDMETHODCALLTYPE *DeleteAllItems )( 
            IMFMediaEvent * This);
        
        HRESULT ( STDMETHODCALLTYPE *SetUINT32 )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            UINT32 unValue);
        
        HRESULT ( STDMETHODCALLTYPE *SetUINT64 )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            UINT64 unValue);
        
        HRESULT ( STDMETHODCALLTYPE *SetDouble )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            double fValue);
        
        HRESULT ( STDMETHODCALLTYPE *SetGUID )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            __RPC__in REFGUID guidValue);
        
        HRESULT ( STDMETHODCALLTYPE *SetString )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            /* [string][in] */ __RPC__in LPCWSTR wszValue);
        
        HRESULT ( STDMETHODCALLTYPE *SetBlob )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            /* [size_is][in] */ __RPC__in_ecount_full(cbBufSize) const UINT8 *pBuf,
            UINT32 cbBufSize);
        
        HRESULT ( STDMETHODCALLTYPE *SetUnknown )( 
            IMFMediaEvent * This,
            __RPC__in REFGUID guidKey,
            /* [in] */ __RPC__in_opt IUnknown *pUnknown);
        
        HRESULT ( STDMETHODCALLTYPE *LockStore )( 
            IMFMediaEvent * This);
        
        HRESULT ( STDMETHODCALLTYPE *UnlockStore )( 
            IMFMediaEvent * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
            IMFMediaEvent * This,
            /* [out] */ __RPC__out UINT32 *pcItems);
        
        HRESULT ( STDMETHODCALLTYPE *GetItemByIndex )( 
            IMFMediaEvent * This,
            UINT32 unIndex,
            /* [out] */ __RPC__out GUID *pguidKey,
            /* [full][out][in] */ __RPC__inout_opt PROPVARIANT *pValue);
        
        HRESULT ( STDMETHODCALLTYPE *CopyAllItems )( 
            IMFMediaEvent * This,
            /* [in] */ __RPC__in_opt IMFAttributes *pDest);
        
        HRESULT ( STDMETHODCALLTYPE *GetType )( 
            IMFMediaEvent * This,
            /* [out] */ __RPC__out MediaEventType *pmet);
        
        HRESULT ( STDMETHODCALLTYPE *GetExtendedType )( 
            IMFMediaEvent * This,
            /* [out] */ __RPC__out GUID *pguidExtendedType);
        
        HRESULT ( STDMETHODCALLTYPE *GetStatus )( 
            IMFMediaEvent * This,
            /* [out] */ __RPC__out HRESULT *phrStatus);
        
        HRESULT ( STDMETHODCALLTYPE *GetValue )( 
            IMFMediaEvent * This,
            /* [out] */ __RPC__out PROPVARIANT *pvValue);
        
        END_INTERFACE
    } IMFMediaEventVtbl;

    interface IMFMediaEvent
    {
        CONST_VTBL struct IMFMediaEventVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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


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


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

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IMFMediaEvent_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_mfobjects_0000_0010 */
/* [local] */ 

#define MF_EVENT_FLAG_NO_WAIT 0x00000001



extern RPC_IF_HANDLE __MIDL_itf_mfobjects_0000_0010_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_mfobjects_0000_0010_v0_0_s_ifspec;

#ifndef __IMFMediaEventGenerator_INTERFACE_DEFINED__
#define __IMFMediaEventGenerator_INTERFACE_DEFINED__

/* interface IMFMediaEventGenerator */
/* [uuid][object] */ 


EXTERN_C const IID IID_IMFMediaEventGenerator;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("2CD0BD52-BCD5-4B89-B62C-EADC0C031E7D")
    IMFMediaEventGenerator : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetEvent( 
            /* [in] */ DWORD dwFlags,
            /* [out] */ __RPC__deref_out_opt IMFMediaEvent **ppEvent) = 0;
        
        virtual /* [local] */ HRESULT STDMETHODCALLTYPE BeginGetEvent( 
            /* [in] */ IMFAsyncCallback *pCallback,
            /* [in] */ IUnknown *punkState) = 0;
        
        virtual /* [local] */ HRESULT STDMETHODCALLTYPE EndGetEvent( 
            /* [in] */ IMFAsyncResult *pResult,
            /* [out] */ 
            __out  IMFMediaEvent **ppEvent) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE QueueEvent( 
            /* [in] */ MediaEventType met,
            /* [in] */ __RPC__in REFGUID guidExtendedType,
            /* [in] */ HRESULT hrStatus,
            /* [unique][in] */ __RPC__in_opt const PROPVARIANT *pvValue) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct IMFMediaEventGeneratorVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IMFMediaEventGenerator * This,
            /* [in] */ __RPC__in REFIID riid,
            /* [iid_is][out] */ 
            __RPC__deref_out  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IMFMediaEventGenerator * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IMFMediaEventGenerator * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetEvent )( 
            IMFMediaEventGenerator * This,
            /* [in] */ DWORD dwFlags,
            /* [out] */ __RPC__deref_out_opt IMFMediaEvent **ppEvent);
        
        /* [local] */ HRESULT ( STDMETHODCALLTYPE *BeginGetEvent )( 
            IMFMediaEventGenerator * This,
            /* [in] */ IMFAsyncCallback *pCallback,
            /* [in] */ IUnknown *punkState);
        
        /* [local] */ HRESULT ( STDMETHODCALLTYPE *EndGetEvent )( 
            IMFMediaEventGenerator * This,
            /* [in] */ IMFAsyncResult *pResult,
            /* [out] */ 
            __out  IMFMediaEvent **ppEvent);
        
        HRESULT ( STDMETHODCALLTYPE *QueueEvent )( 
            IMFMediaEventGenerator * This,
            /* [in] */ MediaEventType met,
            /* [in] */ __RPC__in REFGUID guidExtendedType,
            /* [in] */ HRESULT hrStatus,
            /* [unique][in] */ __RPC__in_opt const PROPVARIANT *pvValue);
        
        END_INTERFACE
    } IMFMediaEventGeneratorVtbl;

    interface IMFMediaEventGenerator
    {
        CONST_VTBL struct IMFMediaEventGeneratorVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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


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

#endif /* COBJMACROS */


#endif 	/* C style interface */



/* [call_as] */ HRESULT STDMETHODCALLTYPE IMFMediaEventGenerator_RemoteBeginGetEvent_Proxy( 
    IMFMediaEventGenerator * This,
    /* [in] */ __RPC__in_opt IMFRemoteAsyncCallback *pCallback);


void __RPC_STUB IMFMediaEventGenerator_RemoteBeginGetEvent_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);


/* [call_as] */ HRESULT STDMETHODCALLTYPE IMFMediaEventGenerator_RemoteEndGetEvent_Proxy( 
    IMFMediaEventGenerator * This,
    /* [in] */ __RPC__in_opt IUnknown *pResult,
    /* [out] */ __RPC__out DWORD *pcbEvent,
    /* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(*pcbEvent) BYTE **ppbEvent);


void __RPC_STUB IMFMediaEventGenerator_RemoteEndGetEvent_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);



#endif 	/* __IMFMediaEventGenerator_INTERFACE_DEFINED__ */


#ifndef __IMFRemoteAsyncCallback_INTERFACE_DEFINED__
#define __IMFRemoteAsyncCallback_INTERFACE_DEFINED__

/* interface IMFRemoteAsyncCallback */
/* [uuid][object] */ 


EXTERN_C const IID IID_IMFRemoteAsyncCallback;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("a27003d0-2354-4f2a-8d6a-ab7cff15437e")
    IMFRemoteAsyncCallback : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE Invoke( 
            /* [in] */ HRESULT hr,
            /* [in] */ __RPC__in_opt IUnknown *pRemoteResult) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct IMFRemoteAsyncCallbackVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IMFRemoteAsyncCallback * This,
            /* [in] */ __RPC__in REFIID riid,
            /* [iid_is][out] */ 
            __RPC__deref_out  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IMFRemoteAsyncCallback * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IMFRemoteAsyncCallback * This);
        
        HRESULT ( STDMETHODCALLTYPE *Invoke )( 
            IMFRemoteAsyncCallback * This,
            /* [in] */ HRESULT hr,
            /* [in] */ __RPC__in_opt IUnknown *pRemoteResult);
        
        END_INTERFACE
    } IMFRemoteAsyncCallbackVtbl;

    interface IMFRemoteAsyncCallback
    {
        CONST_VTBL struct IMFRemoteAsyncCallbackVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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


#define IMFRemoteAsyncCallback_Invoke(This,hr,pRemoteResult)	\
    ( (This)->lpVtbl -> Invoke(This,hr,pRemoteResult) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IMFRemoteAsyncCallback_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_mfobjects_0000_0012 */
/* [local] */ 

typedef 
enum _MFBYTESTREAM_SEEK_ORIGIN
    {	msoBegin	= 0,
	msoCurrent	= ( msoBegin + 1 ) 
    } 	MFBYTESTREAM_SEEK_ORIGIN;



extern RPC_IF_HANDLE __MIDL_itf_mfobjects_0000_0012_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_mfobjects_0000_0012_v0_0_s_ifspec;

#ifndef __IMFByteStream_INTERFACE_DEFINED__
#define __IMFByteStream_INTERFACE_DEFINED__

/* interface IMFByteStream */
/* [uuid][object] */ 


EXTERN_C const IID IID_IMFByteStream;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("ad4c1b00-4bf7-422f-9175-756693d9130d")
    IMFByteStream : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetCapabilities( 
            /* [out] */ __RPC__out DWORD *pdwCapabilities) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetLength( 
            /* [out] */ __RPC__out QWORD *pqwLength) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetLength( 
            /* [in] */ QWORD qwLength) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetCurrentPosition( 
            /* [out] */ __RPC__out QWORD *pqwPosition) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetCurrentPosition( 
            /* [in] */ QWORD qwPosition) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE IsEndOfStream( 
            /* [out] */ __RPC__out BOOL *pfEndOfStream) = 0;
        
        virtual /* [local] */ HRESULT STDMETHODCALLTYPE Read( 
            /* [in] */ 
            __out_bcount_part(cb, *pcbRead)  BYTE *pb,
            /* [in] */ ULONG cb,
            /* [out] */ 
            __out  ULONG *pcbRead) = 0;
        
        virtual /* [local] */ HRESULT STDMETHODCALLTYPE BeginRead( 
            /* [in] */ 
            __out_bcount(cb)  BYTE *pb,
            /* [in] */ ULONG cb,
            /* [in] */ IMFAsyncCallback *pCallback,
            /* [in] */ IUnknown *punkState) = 0;
        
        virtual /* [local] */ HRESULT STDMETHODCALLTYPE EndRead( 
            /* [in] */ IMFAsyncResult *pResult,
            /* [out] */ 
            __out  ULONG *pcbRead) = 0;
        
        virtual /* [local] */ HRESULT STDMETHODCALLTYPE Write( 
            /* [in] */ 
            __in_bcount(cb)  const BYTE *pb,
            /* [in] */ ULONG cb,
            /* [out] */ 
            __out __deref_out_range(<=, cb)  ULONG *pcbWritten) = 0;
        
        virtual /* [local] */ HRESULT STDMETHODCALLTYPE BeginWrite( 
            /* [in] */ 
            __in_bcount(cb)  const BYTE *pb,
            /* [in] */ ULONG cb,
            /* [in] */ IMFAsyncCallback *pCallback,
            /* [in] */ IUnknown *punkState) = 0;
        
        virtual /* [local] */ HRESULT STDMETHODCALLTYPE EndWrite( 
            /* [in] */ IMFAsyncResult *pResult,
            /* [out] */ 
            __out  ULONG *pcbWritten) = 0;
        
        virtual /* [local] */ HRESULT STDMETHODCALLTYPE Seek( 
            /* [in] */ MFBYTESTREAM_SEEK_ORIGIN SeekOrigin,
            /* [in] */ LONGLONG llSeekOffset,
            /* [in] */ DWORD dwSeekFlags,
            /* [out] */ 
            __out_opt  QWORD *pqwCurrentPosition) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Flush( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Close( void) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct IMFByteStreamVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IMFByteStream * This,
            /* [in] */ __RPC__in REFIID riid,
            /* [iid_is][out] */ 
            __RPC__deref_out  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IMFByteStream * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IMFByteStream * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetCapabilities )( 
            IMFByteStream * This,
            /* [out] */ __RPC__out DWORD *pdwCapabilities);
        
        HRESULT ( STDMETHODCALLTYPE *GetLength )( 
            IMFByteStream * This,
            /* [out] */ __RPC__out QWORD *pqwLength);
        
        HRESULT ( STDMETHODCALLTYPE *SetLength )( 
            IMFByteStream * This,
            /* [in] */ QWORD qwLength);
        
        HRESULT ( STDMETHODCALLTYPE *GetCurrentPosition )( 
            IMFByteStream * This,
            /* [out] */ __RPC__out QWORD *pqwPosition);
        
        HRESULT ( STDMETHODCALLTYPE *SetCurrentPosition )( 
            IMFByteStream * This,
            /* [in] */ QWORD qwPosition);
        
        HRESULT ( STDMETHODCALLTYPE *IsEndOfStream )( 
            IMFByteStream * This,
            /* [out] */ __RPC__out BOOL *pfEndOfStream);
        
        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Read )( 
            IMFByteStream * This,
            /* [in] */ 
            __out_bcount_part(cb, *pcbRead)  BYTE *pb,
            /* [in] */ ULONG cb,
            /* [out] */ 
            __out  ULONG *pcbRead);
        
        /* [local] */ HRESULT ( STDMETHODCALLTYPE *BeginRead )( 
            IMFByteStream * This,
            /* [in] */ 
            __out_bcount(cb)  BYTE *pb,
            /* [in] */ ULONG cb,
            /* [in] */ IMFAsyncCallback *pCallback,
            /* [in] */ IUnknown *punkState);
        
        /* [local] */ HRESULT ( STDMETHODCALLTYPE *EndRead )( 
            IMFByteStream * This,
            /* [in] */ IMFAsyncResult *pResult,
            /* [out] */ 
            __out  ULONG *pcbRead);
        
        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Write )( 
            IMFByteStream * This,
            /* [in] */ 
            __in_bcount(cb)  const BYTE *pb,
            /* [in] */ ULONG cb,
            /* [out] */ 
            __out __deref_out_range(<=, cb)  ULONG *pcbWritten);
        
        /* [local] */ HRESULT ( STDMETHODCALLTYPE *BeginWrite )( 
            IMFByteStream * This,
            /* [in] */ 
            __in_bcount(cb)  const BYTE *pb,
            /* [in] */ ULONG cb,
            /* [in] */ IMFAsyncCallback *pCallback,
            /* [in] */ IUnknown *punkState);
        
        /* [local] */ HRESULT ( STDMETHODCALLTYPE *EndWrite )( 
            IMFByteStream * This,
            /* [in] */ IMFAsyncResult *pResult,
            /* [out] */ 
            __out  ULONG *pcbWritten);
        
        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Seek )( 
            IMFByteStream * This,
            /* [in] */ MFBYTESTREAM_SEEK_ORIGIN SeekOrigin,
            /* [in] */ LONGLONG llSeekOffset,
            /* [in] */ DWORD dwSeekFlags,
            /* [out] */ 
            __out_opt  QWORD *pqwCurrentPosition);
        
        HRESULT ( STDMETHODCALLTYPE *Flush )( 
            IMFByteStream * This);
        
        HRESULT ( STDMETHODCALLTYPE *Close )( 
            IMFByteStream * This);
        
        END_INTERFACE
    } IMFByteStreamVtbl;

    interface IMFByteStream
    {
        CONST_VTBL struct IMFByteStreamVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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


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

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IMFByteStream_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_mfobjects_0000_0013 */
/* [local] */ 

#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_SEEK_FLAG_CANCEL_PENDING_IO 0x00000001
EXTERN_GUID( MF_BYTESTREAM_ORIGIN_NAME, 0xfc358288, 0x3cb6, 0x460c, 0xa4, 0x24, 0xb6, 0x68, 0x12, 0x60, 0x37, 0x5a);
EXTERN_GUID( MF_BYTESTREAM_CONTENT_TYPE, 0xfc358289, 0x3cb6, 0x460c, 0xa4, 0x24, 0xb6, 0x68, 0x12, 0x60, 0x37, 0x5a);
EXTERN_GUID( MF_BYTESTREAM_DURATION, 0xfc35828a, 0x3cb6, 0x460c, 0xa4, 0x24, 0xb6, 0x68, 0x12, 0x60, 0x37, 0x5a);
EXTERN_GUID( MF_BYTESTREAM_LAST_MODIFIED_TIME, 0xfc35828b, 0x3cb6, 0x460c, 0xa4, 0x24, 0xb6, 0x68, 0x12, 0x60, 0x37, 0x5a);
typedef /* [public] */ 
enum __MIDL___MIDL_itf_mfobjects_0000_0013_0001
    {	MF_ACCESSMODE_READ	= 1,
	MF_ACCESSMODE_WRITE	= 2,
	MF_ACCESSMODE_READWRITE	= 3
    } 	MF_FILE_ACCESSMODE;

typedef /* [public] */ 
enum __MIDL___MIDL_itf_mfobjects_0000_0013_0002
    {	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;

typedef /* [public] */ 
enum __MIDL___MIDL_itf_mfobjects_0000_0013_0003
    {	MF_FILEFLAGS_NONE	= 0,
	MF_FILEFLAGS_NOBUFFERING	= 0x1
    } 	MF_FILE_FLAGS;



extern RPC_IF_HANDLE __MIDL_itf_mfobjects_0000_0013_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_mfobjects_0000_0013_v0_0_s_ifspec;

#ifndef __IMFCollection_INTERFACE_DEFINED__
#define __IMFCollection_INTERFACE_DEFINED__

/* interface IMFCollection */
/* [uuid][object] */ 


EXTERN_C const IID IID_IMFCollection;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("5BC8A76B-869A-46a3-9B03-FA218A66AEBE")
    IMFCollection : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetElementCount( 
            /* [out] */ __RPC__out DWORD *pcElements) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetElement( 
            /* [in] */ DWORD dwElementIndex,
            /* [out] */ __RPC__deref_out_opt IUnknown **ppUnkElement) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE AddElement( 
            /* [in] */ __RPC__in_opt IUnknown *pUnkElement) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RemoveElement( 
            /* [in] */ DWORD dwElementIndex,
            /* [out] */ __RPC__deref_out_opt IUnknown **ppUnkElement) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE InsertElementAt( 
            /* [in] */ DWORD dwIndex,
            /* [in] */ __RPC__in_opt IUnknown *pUnknown) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RemoveAllElements( void) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct IMFCollectionVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IMFCollection * This,
            /* [in] */ __RPC__in REFIID riid,
            /* [iid_is][out] */ 
            __RPC__deref_out  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IMFCollection * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IMFCollection * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetElementCount )( 
            IMFCollection * This,
            /* [out] */ __RPC__out DWORD *pcElements);
        
        HRESULT ( STDMETHODCALLTYPE *GetElement )( 
            IMFCollection * This,
            /* [in] */ DWORD dwElementIndex,
            /* [out] */ __RPC__deref_out_opt IUnknown **ppUnkElement);
        
        HRESULT ( STDMETHODCALLTYPE *AddElement )( 
            IMFCollection * This,
            /* [in] */ __RPC__in_opt IUnknown *pUnkElement);
        
        HRESULT ( STDMETHODCALLTYPE *RemoveElement )( 
            IMFCollection * This,
            /* [in] */ DWORD dwElementIndex,
            /* [out] */ __RPC__deref_out_opt IUnknown **ppUnkElement);
        
        HRESULT ( STDMETHODCALLTYPE *InsertElementAt )( 
            IMFCollection * This,
            /* [in] */ DWORD dwIndex,
            /* [in] */ __RPC__in_opt IUnknown *pUnknown);
        
        HRESULT ( STDMETHODCALLTYPE *RemoveAllElements )( 
            IMFCollection * This);
        
        END_INTERFACE
    } IMFCollectionVtbl;

    interface IMFCollection
    {
        CONST_VTBL struct IMFCollectionVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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


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

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IMFCollection_INTERFACE_DEFINED__ */


#ifndef __IMFMediaEventQueue_INTERFACE_DEFINED__
#define __IMFMediaEventQueue_INTERFACE_DEFINED__

/* interface IMFMediaEventQueue */
/* [local][uuid][object] */ 


EXTERN_C const IID IID_IMFMediaEventQueue;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("36f846fc-2256-48b6-b58e-e2b638316581")
    IMFMediaEventQueue : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetEvent( 
            /* [in] */ DWORD dwFlags,
            /* [out] */ 
            __out  IMFMediaEvent **ppEvent) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE BeginGetEvent( 
            /* [in] */ IMFAsyncCallback *pCallback,
            /* [in] */ IUnknown *punkState) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE EndGetEvent( 
            /* [in] */ IMFAsyncResult *pResult,
            /* [out] */ 
            __out  IMFMediaEvent **ppEvent) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE QueueEvent( 
            /* [in] */ IMFMediaEvent *pEvent) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE QueueEventParamVar( 
            /* [in] */ MediaEventType met,
            /* [in] */ REFGUID guidExtendedType,
            /* [in] */ HRESULT hrStatus,
            /* [unique][in] */ const PROPVARIANT *pvValue) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE QueueEventParamUnk( 
            /* [in] */ MediaEventType met,
            /* [in] */ REFGUID guidExtendedType,
            /* [in] */ HRESULT hrStatus,
            /* [unique][in] */ IUnknown *pUnk) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Shutdown( void) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct IMFMediaEventQueueVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IMFMediaEventQueue * This,
            /* [in] */ REFIID riid,
            /* [iid_is][out] */ 
            __RPC__deref_out  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IMFMediaEventQueue * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IMFMediaEventQueue * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetEvent )( 
            IMFMediaEventQueue * This,
            /* [in] */ DWORD dwFlags,
            /* [out] */ 
            __out  IMFMediaEvent **ppEvent);
        
        HRESULT ( STDMETHODCALLTYPE *BeginGetEvent )( 
            IMFMediaEventQueue * This,
            /* [in] */ IMFAsyncCallback *pCallback,
            /* [in] */ IUnknown *punkState);
        
        HRESULT ( STDMETHODCALLTYPE *EndGetEvent )( 
            IMFMediaEventQueue * This,
            /* [in] */ IMFAsyncResult *pResult,
            /* [out] */ 
            __out  IMFMediaEvent **ppEvent);
        
        HRESULT ( STDMETHODCALLTYPE *QueueEvent )( 
            IMFMediaEventQueue * This,
            /* [in] */ IMFMediaEvent *pEvent);
        
        HRESULT ( STDMETHODCALLTYPE *QueueEventParamVar )( 
            IMFMediaEventQueue * This,
            /* [in] */ MediaEventType met,
            /* [in] */ REFGUID guidExtendedType,
            /* [in] */ HRESULT hrStatus,
            /* [unique][in] */ const PROPVARIANT *pvValue);
        
        HRESULT ( STDMETHODCALLTYPE *QueueEventParamUnk )( 
            IMFMediaEventQueue * This,
            /* [in] */ MediaEventType met,
            /* [in] */ REFGUID guidExtendedType,
            /* [in] */ HRESULT hrStatus,
            /* [unique][in] */ IUnknown *pUnk);
        
        HRESULT ( STDMETHODCALLTYPE *Shutdown )( 
            IMFMediaEventQueue * This);
        
        END_INTERFACE
    } IMFMediaEventQueueVtbl;

    interface IMFMediaEventQueue
    {
        CONST_VTBL struct IMFMediaEventQueueVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define IMFMediaEventQueue_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define IMFMediaEventQueue_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define IMFMediaEventQueue_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define IMFMediaEventQueue_GetEvent(This,dwFlags,ppEvent)	\
    ( (This)->lpVtbl -> GetEvent(This,dwFlags,ppEvent) ) 

#define IMFMediaEventQueue_BeginGetEvent(This,pCallback,punkState)	\
    ( (This)->lpVtbl -> BeginGetEvent(This,pCallback,punkState) ) 

#define IMFMediaEventQueue_EndGetEvent(This,pResult,ppEvent)	\
    ( (This)->lpVtbl -> EndGetEvent(This,pResult,ppEvent) ) 

#define IMFMediaEventQueue_QueueEvent(This,pEvent)	\
    ( (This)->lpVtbl -> QueueEvent(This,pEvent) ) 

#define IMFMediaEventQueue_QueueEventParamVar(This,met,guidExtendedType,hrStatus,pvValue)	\
    ( (This)->lpVtbl -> QueueEventParamVar(This,met,guidExtendedType,hrStatus,pvValue) ) 

#define IMFMediaEventQueue_QueueEventParamUnk(This,met,guidExtendedType,hrStatus,pUnk)	\
    ( (This)->lpVtbl -> QueueEventParamUnk(This,met,guidExtendedType,hrStatus,pUnk) ) 

#define IMFMediaEventQueue_Shutdown(This)	\
    ( (This)->lpVtbl -> Shutdown(This) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IMFMediaEventQueue_INTERFACE_DEFINED__ */


/* Additional Prototypes for ALL interfaces */

unsigned long             __RPC_USER  BSTR_UserSize(     unsigned long *, unsigned long            , BSTR * ); 
unsigned char * __RPC_USER  BSTR_UserMarshal(  unsigned long *, unsigned char *, BSTR * ); 
unsigned char * __RPC_USER  BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); 
void                      __RPC_USER  BSTR_UserFree(     unsigned long *, BSTR * ); 

unsigned long             __RPC_USER  LPSAFEARRAY_UserSize(     unsigned long *, unsigned long            , LPSAFEARRAY * ); 
unsigned char * __RPC_USER  LPSAFEARRAY_UserMarshal(  unsigned long *, unsigned char *, LPSAFEARRAY * ); 
unsigned char * __RPC_USER  LPSAFEARRAY_UserUnmarshal(unsigned long *, unsigned char *, LPSAFEARRAY * ); 
void                      __RPC_USER  LPSAFEARRAY_UserFree(     unsigned long *, LPSAFEARRAY * ); 

unsigned long             __RPC_USER  BSTR_UserSize64(     unsigned long *, unsigned long            , BSTR * ); 
unsigned char * __RPC_USER  BSTR_UserMarshal64(  unsigned long *, unsigned char *, BSTR * ); 
unsigned char * __RPC_USER  BSTR_UserUnmarshal64(unsigned long *, unsigned char *, BSTR * ); 
void                      __RPC_USER  BSTR_UserFree64(     unsigned long *, BSTR * ); 

unsigned long             __RPC_USER  LPSAFEARRAY_UserSize64(     unsigned long *, unsigned long            , LPSAFEARRAY * ); 
unsigned char * __RPC_USER  LPSAFEARRAY_UserMarshal64(  unsigned long *, unsigned char *, LPSAFEARRAY * ); 
unsigned char * __RPC_USER  LPSAFEARRAY_UserUnmarshal64(unsigned long *, unsigned char *, LPSAFEARRAY * ); 
void                      __RPC_USER  LPSAFEARRAY_UserFree64(     unsigned long *, LPSAFEARRAY * ); 

/* [local] */ HRESULT STDMETHODCALLTYPE IMFMediaEventGenerator_BeginGetEvent_Proxy( 
    IMFMediaEventGenerator * This,
    /* [in] */ IMFAsyncCallback *pCallback,
    /* [in] */ IUnknown *punkState);


/* [call_as] */ HRESULT STDMETHODCALLTYPE IMFMediaEventGenerator_BeginGetEvent_Stub( 
    IMFMediaEventGenerator * This,
    /* [in] */ __RPC__in_opt IMFRemoteAsyncCallback *pCallback);

/* [local] */ HRESULT STDMETHODCALLTYPE IMFMediaEventGenerator_EndGetEvent_Proxy( 
    IMFMediaEventGenerator * This,
    /* [in] */ IMFAsyncResult *pResult,
    /* [out] */ 
    __out  IMFMediaEvent **ppEvent);


/* [call_as] */ HRESULT STDMETHODCALLTYPE IMFMediaEventGenerator_EndGetEvent_Stub( 
    IMFMediaEventGenerator * This,
    /* [in] */ __RPC__in_opt IUnknown *pResult,
    /* [out] */ __RPC__out DWORD *pcbEvent,
    /* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(*pcbEvent) BYTE **ppbEvent);



/* end of Additional Prototypes */

#ifdef __cplusplus
}
#endif

#endif


