Transscript wmcontainer to IDL and verify interfaces


git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/trunk@6509 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-headers/Makefile.am b/mingw-w64-headers/Makefile.am
index f5a39c1..2a74658 100644
--- a/mingw-w64-headers/Makefile.am
+++ b/mingw-w64-headers/Makefile.am
@@ -116,6 +116,7 @@
   include/wbemcli.idl \
   include/wdstptmgmt.idl \
   include/wincodec.idl \
+  include/wmcontainer.idl \
   include/wmsbuffer.idl \
   include/wmsdkidl.idl \
   include/wtypesbase.idl \
diff --git a/mingw-w64-headers/Makefile.in b/mingw-w64-headers/Makefile.in
index cfb6c10..62b4a5b 100644
--- a/mingw-w64-headers/Makefile.in
+++ b/mingw-w64-headers/Makefile.in
@@ -340,6 +340,7 @@
 @HAVE_WIDL_TRUE@  include/wbemcli.idl \
 @HAVE_WIDL_TRUE@  include/wdstptmgmt.idl \
 @HAVE_WIDL_TRUE@  include/wincodec.idl \
+@HAVE_WIDL_TRUE@  include/wmcontainer.idl \
 @HAVE_WIDL_TRUE@  include/wmsbuffer.idl \
 @HAVE_WIDL_TRUE@  include/wmsdkidl.idl \
 @HAVE_WIDL_TRUE@  include/wtypesbase.idl \
diff --git a/mingw-w64-headers/include/wmcontainer.h b/mingw-w64-headers/include/wmcontainer.h
index c50854c..8579f2c 100644
--- a/mingw-w64-headers/include/wmcontainer.h
+++ b/mingw-w64-headers/include/wmcontainer.h
@@ -1,633 +1,3425 @@
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
-#ifndef _INC_WMCONTAINER
-#define _INC_WMCONTAINER
-#include <propsys.h>
-#include <mfidl.h>
+/*** Autogenerated by WIDL 1.6 from wmcontainer.idl - Do not edit ***/
 
-#if (_WIN32_WINNT >= 0x0600)
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
 
-#ifdef __IMFASFSplitter_FWD_DEFINED__
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __wmcontainer_h__
+#define __wmcontainer_h__
+
+/* Forward declarations */
+
+#ifndef __IMFASFContentInfo_FWD_DEFINED__
+#define __IMFASFContentInfo_FWD_DEFINED__
+typedef interface IMFASFContentInfo IMFASFContentInfo;
+#endif
+
+#ifndef __IMFASFMutualExclusion_FWD_DEFINED__
+#define __IMFASFMutualExclusion_FWD_DEFINED__
+typedef interface IMFASFMutualExclusion IMFASFMutualExclusion;
+#endif
+
+#ifndef __IMFASFStreamPrioritization_FWD_DEFINED__
+#define __IMFASFStreamPrioritization_FWD_DEFINED__
+typedef interface IMFASFStreamPrioritization IMFASFStreamPrioritization;
+#endif
+
+#ifndef __IMFASFSplitter_FWD_DEFINED__
 #define __IMFASFSplitter_FWD_DEFINED__
-typedef struct IMFASFSplitter IMFASFSplitter;
+typedef interface IMFASFSplitter IMFASFSplitter;
 #endif
 
-typedef struct IMFASFContentInfo IMFASFContentInfo;
-typedef struct IMFASFProfile IMFASFProfile;
-typedef struct IMFActivate IMFActivate;
-
-#ifndef __MFTIME_DEFINED__
-#define __MFTIME_DEFINED__
-__MINGW_EXTENSION typedef LONGLONG MFTIME;
+#ifndef __IMFASFMultiplexer_FWD_DEFINED__
+#define __IMFASFMultiplexer_FWD_DEFINED__
+typedef interface IMFASFMultiplexer IMFASFMultiplexer;
 #endif
 
-typedef enum ASF_SELECTION_STATUS {
-  ASF_STATUS_NOTSELECTED       = 0,
-  ASF_STATUS_CLEANPOINTSONLY   = 1,
-  ASF_STATUS_ALLDATAUNITS      = 2 
-} ASF_SELECTION_STATUS;
-
-typedef enum ASF_STATUSFLAGS {
-  ASF_STATUSFLAGS_INCOMPLETE       = 0x00000001,
-  ASF_STATUSFLAGS_NONFATAL_ERROR   = 0x00000002 
-} ASF_STATUSFLAGS;
-
-typedef enum MFASF_MULTIPLEXERFLAGS {
-  MFASF_MULTIPLEXER_AUTOADJUST_BITRATE   = 0x00000001 
-} MFASF_MULTIPLEXERFLAGS;
-
-typedef enum MFASF_SPLITTERFLAGS {
-  MFASF_SPLITTER_REVERSE   = 0x00000001,
-  MFASF_SPLITTER_WMDRM     = 0x00000002 
-} MFASF_SPLITTERFLAGS;
-
-typedef enum MFASF_STREAMSELECTORFLAGS {
-  MFASF_STREAMSELECTOR_DISABLE_THINNING      = 0x00000001,
-  MFASF_STREAMSELECTOR_USE_AVERAGE_BITRATE   = 0x00000002 
-} MFASF_STREAMSELECTORFLAGS;
-
-typedef struct ASF_MUX_STATISTICS {
-  DWORD cFramesWritten;
-  DWORD cFramesDropped;
-} ASF_MUX_STATISTICS;
-
-typedef struct _ASF_INDEX_IDENTIFIER {
-  GUID guidIndexType;
-  WORD wStreamNumber;
-} ASF_INDEX_IDENTIFIER;
-
-typedef struct _ASF_INDEX_DESCRIPTOR {
-  ASF_INDEX_IDENTIFIER Identifier;
-  WORD                 cPerEntryBytes;
-  WCHAR                szDescription[32];
-  DWORD                dwInterval;
-} ASF_INDEX_DESCRIPTOR;
-
-#undef  INTERFACE
-#define INTERFACE IMFASFMutualExclusion
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifndef __IMFASFIndexer_FWD_DEFINED__
+#define __IMFASFIndexer_FWD_DEFINED__
+typedef interface IMFASFIndexer IMFASFIndexer;
 #endif
-DECLARE_INTERFACE_(IMFASFMutualExclusion,IUnknown)
-{
-    BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IMFASFMutualExclusion methods */
-    STDMETHOD_(HRESULT,AddRecord)(THIS_ DWORD *pdwRecordNumber) PURE;
-    STDMETHOD_(HRESULT,AddStreamForRecord)(THIS_ DWORD dwRecordNumber,WORD wStreamNumber) PURE;
-    STDMETHOD_(HRESULT,Clone)(THIS_ IMFASFMutualExclusion **ppIMutex) PURE;
-    STDMETHOD_(HRESULT,GetRecordCount)(THIS_ DWORD *pdwRecordCount) PURE;
-    STDMETHOD_(HRESULT,GetStreamsForRecord)(THIS_ DWORD dwRecordNumber,WORD *pwStreamNumArray,DWORD *pcStreams) PURE;
-    STDMETHOD_(HRESULT,GetType)(THIS_ GUID *pguidType) PURE;
-    STDMETHOD_(HRESULT,RemoveRecord)(THIS_ DWORD dwRecordNumber) PURE;
-    STDMETHOD_(HRESULT,RemoveStreamFromRecord)(THIS_ DWORD dwRecordNumber,WORD wStreamNumber) PURE;
-    STDMETHOD_(HRESULT,SetType)(THIS_ REFGUID guidType) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IMFASFMutualExclusion_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IMFASFMutualExclusion_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IMFASFMutualExclusion_Release(This) (This)->lpVtbl->Release(This)
-#define IMFASFMutualExclusion_AddRecord(This,pdwRecordNumber) (This)->lpVtbl->AddRecord(This,pdwRecordNumber)
-#define IMFASFMutualExclusion_AddStreamForRecord(This,dwRecordNumber,wStreamNumber) (This)->lpVtbl->AddStreamForRecord(This,dwRecordNumber,wStreamNumber)
-#define IMFASFMutualExclusion_Clone(This,ppIMutex) (This)->lpVtbl->Clone(This,ppIMutex)
-#define IMFASFMutualExclusion_GetRecordCount(This,pdwRecordCount) (This)->lpVtbl->GetRecordCount(This,pdwRecordCount)
-#define IMFASFMutualExclusion_GetStreamsForRecord(This,dwRecordNumber,pwStreamNumArray,pcStreams) (This)->lpVtbl->GetStreamsForRecord(This,dwRecordNumber,pwStreamNumArray,pcStreams)
-#define IMFASFMutualExclusion_GetType(This,pguidType) (This)->lpVtbl->GetType(This,pguidType)
-#define IMFASFMutualExclusion_RemoveRecord(This,dwRecordNumber) (This)->lpVtbl->RemoveRecord(This,dwRecordNumber)
-#define IMFASFMutualExclusion_RemoveStreamFromRecord(This,dwRecordNumber,wStreamNumber) (This)->lpVtbl->RemoveStreamFromRecord(This,dwRecordNumber,wStreamNumber)
-#define IMFASFMutualExclusion_SetType(This,guidType) (This)->lpVtbl->SetType(This,guidType)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IMFASFStreamPrioritization
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifndef __IMFASFStreamSelector_FWD_DEFINED__
+#define __IMFASFStreamSelector_FWD_DEFINED__
+typedef interface IMFASFStreamSelector IMFASFStreamSelector;
 #endif
-DECLARE_INTERFACE_(IMFASFStreamPrioritization,IUnknown)
-{
-    BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IMFASFStreamPrioritization methods */
-    STDMETHOD_(HRESULT,AddStream)(THIS_ WORD wStreamNumber,WORD wStreamFlags) PURE;
-    STDMETHOD_(HRESULT,Clone)(THIS_ IMFASFStreamPrioritization **ppIStreamPrioritization) PURE;
-    STDMETHOD_(HRESULT,GetStream)(THIS_ DWORD dwStreamIndex,WORD *pwStreamNumber,WORD *pwStreamFlags) PURE;
-    STDMETHOD_(HRESULT,GetStreamCount)(THIS_ DWORD dwStreamIndex) PURE;
-    STDMETHOD_(HRESULT,RemoveStream)(THIS_ DWORD dwStreamIndex) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IMFASFStreamPrioritization_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IMFASFStreamPrioritization_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IMFASFStreamPrioritization_Release(This) (This)->lpVtbl->Release(This)
-#define IMFASFStreamPrioritization_AddStream(This,wStreamNumber,wStreamFlags) (This)->lpVtbl->AddStream(This,wStreamNumber,wStreamFlags)
-#define IMFASFStreamPrioritization_Clone(This,ppIStreamPrioritization) (This)->lpVtbl->Clone(This,ppIStreamPrioritization)
-#define IMFASFStreamPrioritization_GetStream(This,dwStreamIndex,pwStreamNumber,pwStreamFlags) (This)->lpVtbl->GetStream(This,dwStreamIndex,pwStreamNumber,pwStreamFlags)
-#define IMFASFStreamPrioritization_GetStreamCount(This,dwStreamIndex) (This)->lpVtbl->GetStreamCount(This,dwStreamIndex)
-#define IMFASFStreamPrioritization_RemoveStream(This,dwStreamIndex) (This)->lpVtbl->RemoveStream(This,dwStreamIndex)
-#endif /*COBJMACROS*/
-
-
-#undef  INTERFACE
-#define INTERFACE IMFASFSplitter
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifndef __IMFDRMNetHelper_FWD_DEFINED__
+#define __IMFDRMNetHelper_FWD_DEFINED__
+typedef interface IMFDRMNetHelper IMFDRMNetHelper;
 #endif
-DECLARE_INTERFACE_(IMFASFSplitter,IUnknown)
-{
-    BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IMFASFSplitter methods */
-    STDMETHOD_(HRESULT,Flush)(THIS) PURE;
-    STDMETHOD_(HRESULT,GetFlags)(THIS_ DWORD *pdwFlags) PURE;
-    STDMETHOD_(HRESULT,GetLastSendTime)(THIS_ DWORD *pdwLastSendTime) PURE;
-    STDMETHOD_(HRESULT,GetNextSample)(THIS_ DWORD *pdwStatusFlags,WORD *pwStreamNumber,IMFSample **ppISample) PURE;
-    STDMETHOD_(HRESULT,GetSelectedStreams)(THIS_ WORD *pwStreamNumbers,WORD *pwNumStreams) PURE;
-    STDMETHOD_(HRESULT,Initialize)(THIS_ IMFASFContentInfo *pIContentInfo) PURE;
-    STDMETHOD_(HRESULT,ParseData)(THIS_ IMFMediaBuffer *pIBuffer,DWORD cbBufferOffset,DWORD cbLength) PURE;
-    STDMETHOD_(HRESULT,SelectStreams)(THIS_ WORD *pwStreamNumbers,WORD wNumStreams) PURE;
-    STDMETHOD_(HRESULT,SetFlags)(THIS_ DWORD dwFlags) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IMFASFSplitter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IMFASFSplitter_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IMFASFSplitter_Release(This) (This)->lpVtbl->Release(This)
-#define IMFASFSplitter_Flush() (This)->lpVtbl->Flush(This)
-#define IMFASFSplitter_GetFlags(This,pdwFlags) (This)->lpVtbl->GetFlags(This,pdwFlags)
-#define IMFASFSplitter_GetLastSendTime(This,pdwLastSendTime) (This)->lpVtbl->GetLastSendTime(This,pdwLastSendTime)
-#define IMFASFSplitter_GetNextSample(This,pdwStatusFlags,pwStreamNumber,ppISample) (This)->lpVtbl->GetNextSample(This,pdwStatusFlags,pwStreamNumber,ppISample)
-#define IMFASFSplitter_GetSelectedStreams(This,pwStreamNumbers,pwNumStreams) (This)->lpVtbl->GetSelectedStreams(This,pwStreamNumbers,pwNumStreams)
-#define IMFASFSplitter_Initialize(This,pIContentInfo) (This)->lpVtbl->Initialize(This,pIContentInfo)
-#define IMFASFSplitter_ParseData(This,pIBuffer,cbBufferOffset,cbLength) (This)->lpVtbl->ParseData(This,pIBuffer,cbBufferOffset,cbLength)
-#define IMFASFSplitter_SelectStreams(This,pwStreamNumbers,wNumStreams) (This)->lpVtbl->SelectStreams(This,pwStreamNumbers,wNumStreams)
-#define IMFASFSplitter_SetFlags(This,dwFlags) (This)->lpVtbl->SetFlags(This,dwFlags)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IMFASFContentInfo
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifndef __IMFASFProfile_FWD_DEFINED__
+#define __IMFASFProfile_FWD_DEFINED__
+typedef interface IMFASFProfile IMFASFProfile;
 #endif
-DECLARE_INTERFACE_(IMFASFContentInfo,IMFAttributes)
-{
-    BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IMFAttributes methods */
-    STDMETHOD_(HRESULT,Compare)(THIS_ IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,BOOL *pbResult) PURE;
-    STDMETHOD_(HRESULT,CompareItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value,BOOL *pbResult) PURE;
-    STDMETHOD_(HRESULT,CopyAllItems)(THIS_ IMFAttributes *pDest) PURE;
-    STDMETHOD_(HRESULT,DeleteAllItems)(THIS) PURE;
-    STDMETHOD_(HRESULT,DeleteItem)(THIS_ REFGUID guidKey) PURE;
-    STDMETHOD_(HRESULT,GetAllocatedBlob)(THIS_ REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) PURE;
-    STDMETHOD_(HRESULT,GetAllocatedString)(THIS_ REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) PURE;
-    STDMETHOD_(HRESULT,GetBlob)(THIS_ REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) PURE;
-    STDMETHOD_(HRESULT,GetBlobSize)(THIS_ REFGUID guidKey,UINT32 *pcbBlobSize) PURE;
-    STDMETHOD_(HRESULT,GetCount)(THIS_ UINT32 *pcItems) PURE;
-    STDMETHOD_(HRESULT,GetDouble)(THIS_ REFGUID guidKey,double *pfValue) PURE;
-    STDMETHOD_(HRESULT,GetGUID)(THIS_ REFGUID guidKey,GUID *pguidValue) PURE;
-    STDMETHOD_(HRESULT,GetItem)(THIS_ REFGUID guidKey,PROPVARIANT *pValue) PURE;
-    STDMETHOD_(HRESULT,GetItemByIndex)(THIS_ UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) PURE;
-    STDMETHOD_(HRESULT,GetItemType)(THIS_ REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) PURE;
-    STDMETHOD_(HRESULT,GetString)(THIS_ REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) PURE;
-    STDMETHOD_(HRESULT,GetStringLength)(THIS_ REFGUID guidKey,UINT32 *pcchLength) PURE;
-    STDMETHOD_(HRESULT,GetUINT32)(THIS_ REFGUID guidKey,UINT32 *punValue) PURE;
-    STDMETHOD_(HRESULT,GetUINT64)(THIS_ REFGUID guidKey,UINT64 *punValue) PURE;
-    STDMETHOD_(HRESULT,GetUnknown)(THIS_ REFGUID guidKey,REFIID riid,LPVOID *ppv) PURE;
-    STDMETHOD_(HRESULT,LockStore)(THIS) PURE;
-    STDMETHOD_(HRESULT,SetBlob)(THIS_ REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) PURE;
-    STDMETHOD_(HRESULT,SetDouble)(THIS_ REFGUID guidKey,double fValue) PURE;
-    STDMETHOD_(HRESULT,SetGUID)(THIS_ REFGUID guidKey,REFGUID guidValue) PURE;
-    STDMETHOD_(HRESULT,SetItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value) PURE;
-    STDMETHOD_(HRESULT,SetString)(THIS_ REFGUID guidKey,LPCWSTR wszValue) PURE;
-    STDMETHOD_(HRESULT,SetUINT32)(THIS_ REFGUID guidKey,UINT32 unValue) PURE;
-    STDMETHOD_(HRESULT,SetUINT64)(THIS_ REFGUID guidKey,UINT64 unValue) PURE;
-    STDMETHOD_(HRESULT,SetUnknown)(THIS_ REFGUID guidKey,IUnknown *pUnknown) PURE;
-    STDMETHOD_(HRESULT,UnlockStore)(THIS) PURE;
-
-    /* IMFASFContentInfo methods */
-    STDMETHOD_(HRESULT,GenerateHeader)(THIS_ IMFMediaBuffer *pIHeader,DWORD *pcbHeader) PURE;
-    STDMETHOD_(HRESULT,GeneratePresentationDescriptor)(THIS_ IMFPresentationDescriptor **ppIPresentationDescriptor) PURE;
-    STDMETHOD_(HRESULT,GetEncodingConfigurationPropertyStore)(THIS_ WORD wStreamNumber,IPropertyStore **ppIStore) PURE;
-    STDMETHOD_(HRESULT,GetHeaderSize)(THIS_ IMFMediaBuffer *pIStartOfContent,QWORD *cbHeaderSize) PURE;
-    STDMETHOD_(HRESULT,GetProfile)(THIS_ IMFASFProfile **ppIProfile) PURE;
-    STDMETHOD_(HRESULT,ParseHeader)(THIS_ IMFMediaBuffer *pIHeaderBuffer,QWORD cbOffsetWithinHeader) PURE;
-    STDMETHOD_(HRESULT,SetProfile)(THIS_ IMFASFProfile *pIProfile) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IMFASFContentInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IMFASFContentInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IMFASFContentInfo_Release(This) (This)->lpVtbl->Release(This)
-#define IMFASFContentInfo_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
-#define IMFASFContentInfo_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
-#define IMFASFContentInfo_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
-#define IMFASFContentInfo_DeleteAllItems() (This)->lpVtbl->DeleteAllItems(This)
-#define IMFASFContentInfo_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
-#define IMFASFContentInfo_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
-#define IMFASFContentInfo_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
-#define IMFASFContentInfo_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
-#define IMFASFContentInfo_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
-#define IMFASFContentInfo_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
-#define IMFASFContentInfo_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
-#define IMFASFContentInfo_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
-#define IMFASFContentInfo_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
-#define IMFASFContentInfo_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
-#define IMFASFContentInfo_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
-#define IMFASFContentInfo_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
-#define IMFASFContentInfo_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
-#define IMFASFContentInfo_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
-#define IMFASFContentInfo_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
-#define IMFASFContentInfo_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
-#define IMFASFContentInfo_LockStore() (This)->lpVtbl->LockStore(This)
-#define IMFASFContentInfo_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
-#define IMFASFContentInfo_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
-#define IMFASFContentInfo_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
-#define IMFASFContentInfo_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
-#define IMFASFContentInfo_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
-#define IMFASFContentInfo_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
-#define IMFASFContentInfo_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
-#define IMFASFContentInfo_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
-#define IMFASFContentInfo_UnlockStore() (This)->lpVtbl->UnlockStore(This)
-#define IMFASFContentInfo_GenerateHeader(This,pIHeader,pcbHeader) (This)->lpVtbl->GenerateHeader(This,pIHeader,pcbHeader)
-#define IMFASFContentInfo_GeneratePresentationDescriptor(This,ppIPresentationDescriptor) (This)->lpVtbl->GeneratePresentationDescriptor(This,ppIPresentationDescriptor)
-#define IMFASFContentInfo_GetEncodingConfigurationPropertyStore(This,wStreamNumber,ppIStore) (This)->lpVtbl->GetEncodingConfigurationPropertyStore(This,wStreamNumber,ppIStore)
-#define IMFASFContentInfo_GetHeaderSize(This,pIStartOfContent,cbHeaderSize) (This)->lpVtbl->GetHeaderSize(This,pIStartOfContent,cbHeaderSize)
-#define IMFASFContentInfo_GetProfile(This,ppIProfile) (This)->lpVtbl->GetProfile(This,ppIProfile)
-#define IMFASFContentInfo_ParseHeader(This,pIHeaderBuffer,cbOffsetWithinHeader) (This)->lpVtbl->ParseHeader(This,pIHeaderBuffer,cbOffsetWithinHeader)
-#define IMFASFContentInfo_SetProfile(This,pIProfile) (This)->lpVtbl->SetProfile(This,pIProfile)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IMFASFStreamConfig
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
+#ifndef __IMFASFStreamConfig_FWD_DEFINED__
+#define __IMFASFStreamConfig_FWD_DEFINED__
+typedef interface IMFASFStreamConfig IMFASFStreamConfig;
 #endif
-DECLARE_INTERFACE_(IMFASFStreamConfig,IMFAttributes)
-{
-    BEGIN_INTERFACE
 
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
+/* Headers for imported files */
 
-    /* IMFAttributes methods */
-    STDMETHOD_(HRESULT,Compare)(THIS_ IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,BOOL *pbResult) PURE;
-    STDMETHOD_(HRESULT,CompareItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value,BOOL *pbResult) PURE;
-    STDMETHOD_(HRESULT,CopyAllItems)(THIS_ IMFAttributes *pDest) PURE;
-    STDMETHOD_(HRESULT,DeleteAllItems)(THIS) PURE;
-    STDMETHOD_(HRESULT,DeleteItem)(THIS_ REFGUID guidKey) PURE;
-    STDMETHOD_(HRESULT,GetAllocatedBlob)(THIS_ REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) PURE;
-    STDMETHOD_(HRESULT,GetAllocatedString)(THIS_ REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) PURE;
-    STDMETHOD_(HRESULT,GetBlob)(THIS_ REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) PURE;
-    STDMETHOD_(HRESULT,GetBlobSize)(THIS_ REFGUID guidKey,UINT32 *pcbBlobSize) PURE;
-    STDMETHOD_(HRESULT,GetCount)(THIS_ UINT32 *pcItems) PURE;
-    STDMETHOD_(HRESULT,GetDouble)(THIS_ REFGUID guidKey,double *pfValue) PURE;
-    STDMETHOD_(HRESULT,GetGUID)(THIS_ REFGUID guidKey,GUID *pguidValue) PURE;
-    STDMETHOD_(HRESULT,GetItem)(THIS_ REFGUID guidKey,PROPVARIANT *pValue) PURE;
-    STDMETHOD_(HRESULT,GetItemByIndex)(THIS_ UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) PURE;
-    STDMETHOD_(HRESULT,GetItemType)(THIS_ REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) PURE;
-    STDMETHOD_(HRESULT,GetString)(THIS_ REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) PURE;
-    STDMETHOD_(HRESULT,GetStringLength)(THIS_ REFGUID guidKey,UINT32 *pcchLength) PURE;
-    STDMETHOD_(HRESULT,GetUINT32)(THIS_ REFGUID guidKey,UINT32 *punValue) PURE;
-    STDMETHOD_(HRESULT,GetUINT64)(THIS_ REFGUID guidKey,UINT64 *punValue) PURE;
-    STDMETHOD_(HRESULT,GetUnknown)(THIS_ REFGUID guidKey,REFIID riid,LPVOID *ppv) PURE;
-    STDMETHOD_(HRESULT,LockStore)(THIS) PURE;
-    STDMETHOD_(HRESULT,SetBlob)(THIS_ REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) PURE;
-    STDMETHOD_(HRESULT,SetDouble)(THIS_ REFGUID guidKey,double fValue) PURE;
-    STDMETHOD_(HRESULT,SetGUID)(THIS_ REFGUID guidKey,REFGUID guidValue) PURE;
-    STDMETHOD_(HRESULT,SetItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value) PURE;
-    STDMETHOD_(HRESULT,SetString)(THIS_ REFGUID guidKey,LPCWSTR wszValue) PURE;
-    STDMETHOD_(HRESULT,SetUINT32)(THIS_ REFGUID guidKey,UINT32 unValue) PURE;
-    STDMETHOD_(HRESULT,SetUINT64)(THIS_ REFGUID guidKey,UINT64 unValue) PURE;
-    STDMETHOD_(HRESULT,SetUnknown)(THIS_ REFGUID guidKey,IUnknown *pUnknown) PURE;
-    STDMETHOD_(HRESULT,UnlockStore)(THIS) PURE;
-
-    /* IMFASFStreamConfig methods */
-    STDMETHOD_(HRESULT,AddPayloadExtension)(THIS_ GUID guidExtensionSystemID,WORD cbExtensionDataSize,BYTE *pbExtensionSystemInfo,DWORD cbExtensionSystemInfo) PURE;
-    STDMETHOD_(HRESULT,Clone)(THIS_ IMFASFStreamConfig **ppIStreamConfig) PURE;
-    STDMETHOD_(HRESULT,GetMediaType)(THIS_ IMFMediaType **ppIMediaType) PURE;
-    STDMETHOD_(HRESULT,GetPayloadExtension)(THIS_ WORD wPayloadExtensionNumber,GUID *pguidExtensionSystemID,WORD *pcbExtensionDataSize,BYTE *pbExtensionSystemInfo,DWORD *pcbExtensionSystemInfo) PURE;
-    STDMETHOD_(HRESULT,GetPayloadExtensionCount)(THIS_ WORD *pcPayloadExtensions) PURE;
-    STDMETHOD_(WORD,GetStreamNumber)(THIS) PURE;
-    STDMETHOD_(HRESULT,GetStreamType)(THIS_ GUID *pguidStreamType) PURE;
-    STDMETHOD_(HRESULT,RemoveAllPayloadExtensions)(THIS) PURE;
-    STDMETHOD_(HRESULT,SetMediaType)(THIS_ IMFMediaType *pIMediaType) PURE;
-    STDMETHOD_(HRESULT,SetStreamNumber)(THIS_ WORD wStreamNum) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IMFASFStreamConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IMFASFStreamConfig_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IMFASFStreamConfig_Release(This) (This)->lpVtbl->Release(This)
-#define IMFASFStreamConfig_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
-#define IMFASFStreamConfig_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
-#define IMFASFStreamConfig_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
-#define IMFASFStreamConfig_DeleteAllItems() (This)->lpVtbl->DeleteAllItems(This)
-#define IMFASFStreamConfig_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
-#define IMFASFStreamConfig_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
-#define IMFASFStreamConfig_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
-#define IMFASFStreamConfig_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
-#define IMFASFStreamConfig_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
-#define IMFASFStreamConfig_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
-#define IMFASFStreamConfig_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
-#define IMFASFStreamConfig_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
-#define IMFASFStreamConfig_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
-#define IMFASFStreamConfig_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
-#define IMFASFStreamConfig_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
-#define IMFASFStreamConfig_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
-#define IMFASFStreamConfig_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
-#define IMFASFStreamConfig_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
-#define IMFASFStreamConfig_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
-#define IMFASFStreamConfig_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
-#define IMFASFStreamConfig_LockStore() (This)->lpVtbl->LockStore(This)
-#define IMFASFStreamConfig_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
-#define IMFASFStreamConfig_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
-#define IMFASFStreamConfig_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
-#define IMFASFStreamConfig_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
-#define IMFASFStreamConfig_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
-#define IMFASFStreamConfig_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
-#define IMFASFStreamConfig_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
-#define IMFASFStreamConfig_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
-#define IMFASFStreamConfig_UnlockStore() (This)->lpVtbl->UnlockStore(This)
-#define IMFASFStreamConfig_AddPayloadExtension(This,guidExtensionSystemID,cbExtensionDataSize,pbExtensionSystemInfo,cbExtensionSystemInfo) (This)->lpVtbl->AddPayloadExtension(This,guidExtensionSystemID,cbExtensionDataSize,pbExtensionSystemInfo,cbExtensionSystemInfo)
-#define IMFASFStreamConfig_Clone(This,ppIStreamConfig) (This)->lpVtbl->Clone(This,ppIStreamConfig)
-#define IMFASFStreamConfig_GetMediaType(This,ppIMediaType) (This)->lpVtbl->GetMediaType(This,ppIMediaType)
-#define IMFASFStreamConfig_GetPayloadExtension(This,wPayloadExtensionNumber,pguidExtensionSystemID,pcbExtensionDataSize,pbExtensionSystemInfo,pcbExtensionSystemInfo) (This)->lpVtbl->GetPayloadExtension(This,wPayloadExtensionNumber,pguidExtensionSystemID,pcbExtensionDataSize,pbExtensionSystemInfo,pcbExtensionSystemInfo)
-#define IMFASFStreamConfig_GetPayloadExtensionCount(This,pcPayloadExtensions) (This)->lpVtbl->GetPayloadExtensionCount(This,pcPayloadExtensions)
-#define IMFASFStreamConfig_GetStreamNumber() (This)->lpVtbl->GetStreamNumber(This)
-#define IMFASFStreamConfig_GetStreamType(This,pguidStreamType) (This)->lpVtbl->GetStreamType(This,pguidStreamType)
-#define IMFASFStreamConfig_RemoveAllPayloadExtensions() (This)->lpVtbl->RemoveAllPayloadExtensions(This)
-#define IMFASFStreamConfig_SetMediaType(This,pIMediaType) (This)->lpVtbl->SetMediaType(This,pIMediaType)
-#define IMFASFStreamConfig_SetStreamNumber(This,wStreamNum) (This)->lpVtbl->SetStreamNumber(This,wStreamNum)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IMFASFProfile
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
-#endif
-DECLARE_INTERFACE_(IMFASFProfile,IMFAttributes)
-{
-    BEGIN_INTERFACE
-
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IMFAttributes methods */
-    STDMETHOD_(HRESULT,Compare)(THIS_ IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,BOOL *pbResult) PURE;
-    STDMETHOD_(HRESULT,CompareItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value,BOOL *pbResult) PURE;
-    STDMETHOD_(HRESULT,CopyAllItems)(THIS_ IMFAttributes *pDest) PURE;
-    STDMETHOD_(HRESULT,DeleteAllItems)(THIS) PURE;
-    STDMETHOD_(HRESULT,DeleteItem)(THIS_ REFGUID guidKey) PURE;
-    STDMETHOD_(HRESULT,GetAllocatedBlob)(THIS_ REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) PURE;
-    STDMETHOD_(HRESULT,GetAllocatedString)(THIS_ REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) PURE;
-    STDMETHOD_(HRESULT,GetBlob)(THIS_ REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) PURE;
-    STDMETHOD_(HRESULT,GetBlobSize)(THIS_ REFGUID guidKey,UINT32 *pcbBlobSize) PURE;
-    STDMETHOD_(HRESULT,GetCount)(THIS_ UINT32 *pcItems) PURE;
-    STDMETHOD_(HRESULT,GetDouble)(THIS_ REFGUID guidKey,double *pfValue) PURE;
-    STDMETHOD_(HRESULT,GetGUID)(THIS_ REFGUID guidKey,GUID *pguidValue) PURE;
-    STDMETHOD_(HRESULT,GetItem)(THIS_ REFGUID guidKey,PROPVARIANT *pValue) PURE;
-    STDMETHOD_(HRESULT,GetItemByIndex)(THIS_ UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) PURE;
-    STDMETHOD_(HRESULT,GetItemType)(THIS_ REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) PURE;
-    STDMETHOD_(HRESULT,GetString)(THIS_ REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) PURE;
-    STDMETHOD_(HRESULT,GetStringLength)(THIS_ REFGUID guidKey,UINT32 *pcchLength) PURE;
-    STDMETHOD_(HRESULT,GetUINT32)(THIS_ REFGUID guidKey,UINT32 *punValue) PURE;
-    STDMETHOD_(HRESULT,GetUINT64)(THIS_ REFGUID guidKey,UINT64 *punValue) PURE;
-    STDMETHOD_(HRESULT,GetUnknown)(THIS_ REFGUID guidKey,REFIID riid,LPVOID *ppv) PURE;
-    STDMETHOD_(HRESULT,LockStore)(THIS) PURE;
-    STDMETHOD_(HRESULT,SetBlob)(THIS_ REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) PURE;
-    STDMETHOD_(HRESULT,SetDouble)(THIS_ REFGUID guidKey,double fValue) PURE;
-    STDMETHOD_(HRESULT,SetGUID)(THIS_ REFGUID guidKey,REFGUID guidValue) PURE;
-    STDMETHOD_(HRESULT,SetItem)(THIS_ REFGUID guidKey,REFPROPVARIANT Value) PURE;
-    STDMETHOD_(HRESULT,SetString)(THIS_ REFGUID guidKey,LPCWSTR wszValue) PURE;
-    STDMETHOD_(HRESULT,SetUINT32)(THIS_ REFGUID guidKey,UINT32 unValue) PURE;
-    STDMETHOD_(HRESULT,SetUINT64)(THIS_ REFGUID guidKey,UINT64 unValue) PURE;
-    STDMETHOD_(HRESULT,SetUnknown)(THIS_ REFGUID guidKey,IUnknown *pUnknown) PURE;
-    STDMETHOD_(HRESULT,UnlockStore)(THIS) PURE;
-
-    /* IMFASFProfile methods */
-    STDMETHOD_(HRESULT,AddMutualExclusion)(THIS_ IMFASFMutualExclusion *pIMutex) PURE;
-    STDMETHOD_(HRESULT,AddStreamPrioritization)(THIS_ IMFASFStreamPrioritization *pIStreamPrioritization) PURE;
-    STDMETHOD_(HRESULT,Clone)(THIS_ IMFASFProfile **ppIProfile) PURE;
-    STDMETHOD_(HRESULT,CreateMutualExclusion)(THIS_ IMFASFMutualExclusion **ppIMutex) PURE;
-    STDMETHOD_(HRESULT,CreateStream)(THIS_ IMFMediaType *pIMediaType,IMFASFStreamConfig **ppIStream) PURE;
-    STDMETHOD_(HRESULT,CreateStreamPrioritization)(THIS_ IMFASFStreamPrioritization **ppIStreamPrioritization) PURE;
-    STDMETHOD_(HRESULT,GetMutualExclusion)(THIS_ DWORD dwMutexIndex,IMFASFMutualExclusion **ppIMutex) PURE;
-    STDMETHOD_(HRESULT,GetMutualExclusionCount)(THIS_ DWORD *pcMutexs) PURE;
-    STDMETHOD_(HRESULT,GetStream)(THIS_ DWORD dwStreamIndex,WORD *pwStreamNumber,IMFASFStreamConfig **ppIStream) PURE;
-    STDMETHOD_(HRESULT,GetStreamByNumber)(THIS_ WORD wStreamNumber,IMFASFStreamConfig **ppIStream) PURE;
-    STDMETHOD_(HRESULT,GetStreamCount)(THIS_ DWORD *pcStreams) PURE;
-    STDMETHOD_(HRESULT,GetStreamPrioritization)(THIS_ IMFASFStreamPrioritization **ppIStreamPrioritization) PURE;
-    STDMETHOD_(HRESULT,RemoveMutualExclusion)(THIS_ DWORD dwMutexIndex) PURE;
-    STDMETHOD_(HRESULT,RemoveStream)(THIS_ WORD wStreamNumber) PURE;
-    STDMETHOD_(HRESULT,RemoveStreamPrioritization)(THIS) PURE;
-    STDMETHOD_(HRESULT,SetStream)(THIS_ IMFASFStreamConfig *pIStream) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IMFASFProfile_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IMFASFProfile_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IMFASFProfile_Release(This) (This)->lpVtbl->Release(This)
-#define IMFASFProfile_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
-#define IMFASFProfile_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
-#define IMFASFProfile_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
-#define IMFASFProfile_DeleteAllItems() (This)->lpVtbl->DeleteAllItems(This)
-#define IMFASFProfile_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
-#define IMFASFProfile_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
-#define IMFASFProfile_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
-#define IMFASFProfile_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
-#define IMFASFProfile_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
-#define IMFASFProfile_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
-#define IMFASFProfile_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
-#define IMFASFProfile_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
-#define IMFASFProfile_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
-#define IMFASFProfile_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
-#define IMFASFProfile_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
-#define IMFASFProfile_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
-#define IMFASFProfile_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
-#define IMFASFProfile_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
-#define IMFASFProfile_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
-#define IMFASFProfile_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
-#define IMFASFProfile_LockStore() (This)->lpVtbl->LockStore(This)
-#define IMFASFProfile_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
-#define IMFASFProfile_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
-#define IMFASFProfile_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
-#define IMFASFProfile_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
-#define IMFASFProfile_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
-#define IMFASFProfile_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
-#define IMFASFProfile_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
-#define IMFASFProfile_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
-#define IMFASFProfile_UnlockStore() (This)->lpVtbl->UnlockStore(This)
-#define IMFASFProfile_AddMutualExclusion(This,pIMutex) (This)->lpVtbl->AddMutualExclusion(This,pIMutex)
-#define IMFASFProfile_AddStreamPrioritization(This,pIStreamPrioritization) (This)->lpVtbl->AddStreamPrioritization(This,pIStreamPrioritization)
-#define IMFASFProfile_Clone(This,ppIProfile) (This)->lpVtbl->Clone(This,ppIProfile)
-#define IMFASFProfile_CreateMutualExclusion(This,ppIMutex) (This)->lpVtbl->CreateMutualExclusion(This,ppIMutex)
-#define IMFASFProfile_CreateStream(This,pIMediaType,ppIStream) (This)->lpVtbl->CreateStream(This,pIMediaType,ppIStream)
-#define IMFASFProfile_CreateStreamPrioritization(This,ppIStreamPrioritization) (This)->lpVtbl->CreateStreamPrioritization(This,ppIStreamPrioritization)
-#define IMFASFProfile_GetMutualExclusion(This,dwMutexIndex,ppIMutex) (This)->lpVtbl->GetMutualExclusion(This,dwMutexIndex,ppIMutex)
-#define IMFASFProfile_GetMutualExclusionCount(This,pcMutexs) (This)->lpVtbl->GetMutualExclusionCount(This,pcMutexs)
-#define IMFASFProfile_GetStream(This,dwStreamIndex,pwStreamNumber,ppIStream) (This)->lpVtbl->GetStream(This,dwStreamIndex,pwStreamNumber,ppIStream)
-#define IMFASFProfile_GetStreamByNumber(This,wStreamNumber,ppIStream) (This)->lpVtbl->GetStreamByNumber(This,wStreamNumber,ppIStream)
-#define IMFASFProfile_GetStreamCount(This,pcStreams) (This)->lpVtbl->GetStreamCount(This,pcStreams)
-#define IMFASFProfile_GetStreamPrioritization(This,ppIStreamPrioritization) (This)->lpVtbl->GetStreamPrioritization(This,ppIStreamPrioritization)
-#define IMFASFProfile_RemoveMutualExclusion(This,dwMutexIndex) (This)->lpVtbl->RemoveMutualExclusion(This,dwMutexIndex)
-#define IMFASFProfile_RemoveStream(This,wStreamNumber) (This)->lpVtbl->RemoveStream(This,wStreamNumber)
-#define IMFASFProfile_RemoveStreamPrioritization() (This)->lpVtbl->RemoveStreamPrioritization(This)
-#define IMFASFProfile_SetStream(This,pIStream) (This)->lpVtbl->SetStream(This,pIStream)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IMFASFIndexer
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
-#endif
-DECLARE_INTERFACE_(IMFASFIndexer,IUnknown)
-{
-    BEGIN_INTERFACE
-
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IMFASFIndexer methods */
-    STDMETHOD_(HRESULT,CommitIndex)(THIS_ IMFASFContentInfo *pIContentInfo) PURE;
-    STDMETHOD_(HRESULT,GenerateIndexEntries)(THIS_ IMFSample *pIASFPacketSample) PURE;
-    STDMETHOD_(HRESULT,GetCompletedIndex)(THIS_ IMFMediaBuffer *pIIndexBuffer,QWORD cbOffsetWithinIndex) PURE;
-    STDMETHOD_(HRESULT,GetFlags)(THIS_ DWORD *pdwFlags) PURE;
-    STDMETHOD_(HRESULT,GetIndexByteStreamCount)(THIS_ DWORD *pcByteStreams) PURE;
-    STDMETHOD_(HRESULT,GetIndexPosition)(THIS_ IMFASFContentInfo *pIContentInfo,QWORD *pcbIndexOffset) PURE;
-    STDMETHOD_(HRESULT,GetIndexStatus)(THIS_ ASF_INDEX_IDENTIFIER *pIndexIdentifier,WINBOOL *pfIsIndexed,BYTE *pbIndexDescriptor,DWORD *pcbIndexDescriptor) PURE;
-    STDMETHOD_(HRESULT,GetIndexWriteSpace)(THIS_ QWORD *pcbIndexWriteSpace) PURE;
-    STDMETHOD_(HRESULT,GetSeekPositionForValue)(THIS_ const PROPVARIANT *pvarValue,ASF_INDEX_IDENTIFIER *pIndexIdentifier,QWORD *pcbOffsetWithinData,MFTIME *phnsApproxTime,DWORD *pdwPayloadNumberOfStreamWithinPacket) PURE;
-    STDMETHOD_(HRESULT,Initialize)(THIS_ IMFASFContentInfo *pIContentInfo) PURE;
-    STDMETHOD_(HRESULT,SetFlags)(THIS_ DWORD dwFlags) PURE;
-    STDMETHOD_(HRESULT,SetIndexByteStreams)(THIS_ IMFByteStream **ppIByteStreams,DWORD cByteStreams) PURE;
-    STDMETHOD_(HRESULT,SetIndexStatus)(THIS_ BYTE *pIndexDescriptor,DWORD cbIndexDescriptor,WINBOOL fGenerateIndex) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IMFASFIndexer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IMFASFIndexer_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IMFASFIndexer_Release(This) (This)->lpVtbl->Release(This)
-#define IMFASFIndexer_CommitIndex(This,pIContentInfo) (This)->lpVtbl->CommitIndex(This,pIContentInfo)
-#define IMFASFIndexer_GenerateIndexEntries(This,pIASFPacketSample) (This)->lpVtbl->GenerateIndexEntries(This,pIASFPacketSample)
-#define IMFASFIndexer_GetCompletedIndex(This,pIIndexBuffer,cbOffsetWithinIndex) (This)->lpVtbl->GetCompletedIndex(This,pIIndexBuffer,cbOffsetWithinIndex)
-#define IMFASFIndexer_GetFlags(This,pdwFlags) (This)->lpVtbl->GetFlags(This,pdwFlags)
-#define IMFASFIndexer_GetIndexByteStreamCount(This,pcByteStreams) (This)->lpVtbl->GetIndexByteStreamCount(This,pcByteStreams)
-#define IMFASFIndexer_GetIndexPosition(This,pIContentInfo,pcbIndexOffset) (This)->lpVtbl->GetIndexPosition(This,pIContentInfo,pcbIndexOffset)
-#define IMFASFIndexer_GetIndexStatus(This,pIndexIdentifier,pfIsIndexed,pbIndexDescriptor,pcbIndexDescriptor) (This)->lpVtbl->GetIndexStatus(This,pIndexIdentifier,pfIsIndexed,pbIndexDescriptor,pcbIndexDescriptor)
-#define IMFASFIndexer_GetIndexWriteSpace(This,pcbIndexWriteSpace) (This)->lpVtbl->GetIndexWriteSpace(This,pcbIndexWriteSpace)
-#define IMFASFIndexer_GetSeekPositionForValue(This,pvarValue,pIndexIdentifier,pcbOffsetWithinData,phnsApproxTime,pdwPayloadNumberOfStreamWithinPacket) (This)->lpVtbl->GetSeekPositionForValue(This,pvarValue,pIndexIdentifier,pcbOffsetWithinData,phnsApproxTime,pdwPayloadNumberOfStreamWithinPacket)
-#define IMFASFIndexer_Initialize(This,pIContentInfo) (This)->lpVtbl->Initialize(This,pIContentInfo)
-#define IMFASFIndexer_SetFlags(This,dwFlags) (This)->lpVtbl->SetFlags(This,dwFlags)
-#define IMFASFIndexer_SetIndexByteStreams(This,ppIByteStreams,cByteStreams) (This)->lpVtbl->SetIndexByteStreams(This,ppIByteStreams,cByteStreams)
-#define IMFASFIndexer_SetIndexStatus(This,pIndexDescriptor,cbIndexDescriptor,fGenerateIndex) (This)->lpVtbl->SetIndexStatus(This,pIndexDescriptor,cbIndexDescriptor,fGenerateIndex)
-#endif /*COBJMACROS*/
-
-#undef  INTERFACE
-#define INTERFACE IMFASFMultiplexer
-#ifdef __GNUC__
-#warning COM interfaces layout in this header has not been verified.
-#warning COM interfaces with incorrect layout may not work at all.
-__MINGW_BROKEN_INTERFACE(INTERFACE)
-#endif
-DECLARE_INTERFACE_(IMFASFMultiplexer,IUnknown)
-{
-    BEGIN_INTERFACE
-
-    /* IUnknown methods */
-    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
-    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG, Release)(THIS) PURE;
-
-    /* IMFASFMultiplexer methods */
-    STDMETHOD_(HRESULT,End)(THIS_ IMFASFContentInfo *pIContentInfo) PURE;
-    STDMETHOD_(HRESULT,Flush)(THIS) PURE;
-    STDMETHOD_(HRESULT,GetFlags)(THIS_ DWORD *pdwFlags) PURE;
-    STDMETHOD_(HRESULT,GetNextPacket)(THIS_ DWORD *pdwStatusFlags,IMFSample **ppIPacket) PURE;
-    STDMETHOD_(HRESULT,GetStatistics)(THIS_ WORD wStreamNumber,ASF_MUX_STATISTICS *pMuxStats) PURE;
-    STDMETHOD_(HRESULT,Initialize)(THIS_ IMFASFContentInfo *pIContentInfo) PURE;
-    STDMETHOD_(HRESULT,ProcessSample)(THIS_ WORD wStreamNumber,IMFSample *pISample,LONGLONG hnsTimestampAdjust) PURE;
-    STDMETHOD_(HRESULT,SetFlags)(THIS_ DWORD dwFlags) PURE;
-    STDMETHOD_(HRESULT,SetSyncTolerance)(THIS_ DWORD msSyncTolerance) PURE;
-
-    END_INTERFACE
-};
-#ifdef COBJMACROS
-#define IMFASFMultiplexer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
-#define IMFASFMultiplexer_AddRef(This) (This)->lpVtbl->AddRef(This)
-#define IMFASFMultiplexer_Release(This) (This)->lpVtbl->Release(This)
-#define IMFASFMultiplexer_End(This,pIContentInfo) (This)->lpVtbl->End(This,pIContentInfo)
-#define IMFASFMultiplexer_Flush() (This)->lpVtbl->Flush(This)
-#define IMFASFMultiplexer_GetFlags(This,pdwFlags) (This)->lpVtbl->GetFlags(This,pdwFlags)
-#define IMFASFMultiplexer_GetNextPacket(This,pdwStatusFlags,ppIPacket) (This)->lpVtbl->GetNextPacket(This,pdwStatusFlags,ppIPacket)
-#define IMFASFMultiplexer_GetStatistics(This,wStreamNumber,pMuxStats) (This)->lpVtbl->GetStatistics(This,wStreamNumber,pMuxStats)
-#define IMFASFMultiplexer_Initialize(This,pIContentInfo) (This)->lpVtbl->Initialize(This,pIContentInfo)
-#define IMFASFMultiplexer_ProcessSample(This,wStreamNumber,pISample,hnsTimestampAdjust) (This)->lpVtbl->ProcessSample(This,wStreamNumber,pISample,hnsTimestampAdjust)
-#define IMFASFMultiplexer_SetFlags(This,dwFlags) (This)->lpVtbl->SetFlags(This,dwFlags)
-#define IMFASFMultiplexer_SetSyncTolerance(This,msSyncTolerance) (This)->lpVtbl->SetSyncTolerance(This,msSyncTolerance)
-#endif /*COBJMACROS*/
+#include <mfidl.h>
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-HRESULT WINAPI MFCreateASFSplitter(IMFASFSplitter **ppISplitter);
-HRESULT WINAPI MFCreateWMAEncoderActivate(IMFMediaType *pMediaType,IPropertyStore *pEncodingConfigurationProperties,IMFActivate **ppActivate);
-HRESULT WINAPI MFCreateWMVEncoderActivate(IMFMediaType *pMediaType,IPropertyStore *pEncodingConfigurationProperties,IMFActivate **ppActivate);
+#include <winapifamily.h>
+
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+
+EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_FILE_ID, 0x3de649b4, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);
+EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_CREATION_TIME, 0x3de649b6, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);
+EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_FLAGS, 0x3de649bb, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);
+EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_MAX_PACKET_SIZE, 0x3de649bd, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);
+EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_MAX_BITRATE, 0x3de649be, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);
+EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_MIN_PACKET_SIZE, 0x3de649bc, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);
+EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_PACKETS, 0x3de649b7, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);
+EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_PLAY_DURATION, 0x3de649b8, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);
+EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_PREROLL, 0x3de649ba, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);
+EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_SEND_DURATION, 0x3de649b9, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);
+EXTERN_GUID(CLSID_WMDRMSystemID, 0x8948BB22, 0x11BD, 0x4796, 0x93, 0xE3, 0x97, 0x4D, 0x1B, 0x57, 0x56, 0x78);
+EXTERN_GUID(MF_PD_ASF_CONTENTENCRYPTION_KEYID, 0x8520fe3e, 0x277e, 0x46ea, 0x99, 0xe4, 0xe3, 0xa, 0x86, 0xdb, 0x12, 0xbe);
+EXTERN_GUID(MF_PD_ASF_CONTENTENCRYPTION_LICENSE_URL, 0x8520fe40, 0x277e, 0x46ea, 0x99, 0xe4, 0xe3, 0xa, 0x86, 0xdb, 0x12, 0xbe);
+EXTERN_GUID(MF_PD_ASF_CONTENTENCRYPTION_SECRET_DATA, 0x8520fe3f, 0x277e, 0x46ea, 0x99, 0xe4, 0xe3, 0xa, 0x86, 0xdb, 0x12, 0xbe);
+EXTERN_GUID(MF_PD_ASF_CONTENTENCRYPTION_TYPE, 0x8520fe3d, 0x277e, 0x46ea, 0x99, 0xe4, 0xe3, 0xa, 0x86, 0xdb, 0x12, 0xbe);
+EXTERN_GUID(MF_PD_ASF_CONTENTENCRYPTIONEX_ENCRYPTION_DATA, 0x62508be5, 0xecdf, 0x4924, 0xa3, 0x59, 0x72, 0xba, 0xb3, 0x39, 0x7b, 0x9d);
+EXTERN_GUID(MF_PD_ASF_LANGLIST, 0xf23de43c, 0x9977, 0x460d, 0xa6, 0xec, 0x32, 0x93, 0x7f, 0x16, 0xf, 0x7d);
+EXTERN_GUID(MF_PD_ASF_MARKER, 0x5134330e, 0x83a6, 0x475e, 0xa9, 0xd5, 0x4f, 0xb8, 0x75, 0xfb, 0x2e, 0x31);
+EXTERN_GUID(MF_PD_ASF_SCRIPT, 0xe29cd0d7, 0xd602, 0x4923, 0xa7, 0xfe, 0x73, 0xfd, 0x97, 0xec, 0xc6, 0x50);
+EXTERN_GUID(MF_PD_ASF_CODECLIST, 0xe4bb3509, 0xc18d, 0x4df1, 0xbb, 0x99, 0x7a, 0x36, 0xb3, 0xcc, 0x41, 0x19);
+EXTERN_GUID(MF_PD_ASF_METADATA_IS_VBR, 0x5fc6947a, 0xef60, 0x445d, 0xb4, 0x49, 0x44, 0x2e, 0xcc, 0x78, 0xb4, 0xc1);
+EXTERN_GUID(MF_PD_ASF_METADATA_V8_VBRPEAK, 0x5fc6947b, 0xef60, 0x445d, 0xb4, 0x49, 0x44, 0x2e, 0xcc, 0x78, 0xb4, 0xc1);
+EXTERN_GUID(MF_PD_ASF_METADATA_V8_BUFFERAVERAGE, 0x5fc6947c, 0xef60, 0x445d, 0xb4, 0x49, 0x44, 0x2e, 0xcc, 0x78, 0xb4, 0xc1);
+EXTERN_GUID(MF_PD_ASF_METADATA_LEAKY_BUCKET_PAIRS, 0x5fc6947d, 0xef60, 0x445d, 0xb4, 0x49, 0x44, 0x2e, 0xcc, 0x78, 0xb4, 0xc1);
+EXTERN_GUID(MF_PD_ASF_DATA_START_OFFSET, 0xe7d5b3e7, 0x1f29, 0x45d3, 0x88, 0x22, 0x3e, 0x78, 0xfa, 0xe2, 0x72, 0xed);
+EXTERN_GUID(MF_PD_ASF_DATA_LENGTH, 0xe7d5b3e8, 0x1f29, 0x45d3, 0x88, 0x22, 0x3e, 0x78, 0xfa, 0xe2, 0x72, 0xed);
+EXTERN_GUID(MF_SD_ASF_EXTSTRMPROP_LANGUAGE_ID_INDEX, 0x48f8a522, 0x305d, 0x422d, 0x85, 0x24, 0x25, 0x2, 0xdd, 0xa3, 0x36, 0x80);
+EXTERN_GUID(MF_SD_ASF_EXTSTRMPROP_AVG_DATA_BITRATE, 0x48f8a523, 0x305d, 0x422d, 0x85, 0x24, 0x25, 0x2, 0xdd, 0xa3, 0x36, 0x80);
+EXTERN_GUID(MF_SD_ASF_EXTSTRMPROP_AVG_BUFFERSIZE, 0x48f8a524, 0x305d, 0x422d, 0x85, 0x24, 0x25, 0x2, 0xdd, 0xa3, 0x36, 0x80);
+EXTERN_GUID(MF_SD_ASF_EXTSTRMPROP_MAX_DATA_BITRATE, 0x48f8a525, 0x305d, 0x422d, 0x85, 0x24, 0x25, 0x2, 0xdd, 0xa3, 0x36, 0x80);
+EXTERN_GUID(MF_SD_ASF_EXTSTRMPROP_MAX_BUFFERSIZE, 0x48f8a526, 0x305d, 0x422d, 0x85, 0x24, 0x25, 0x2, 0xdd, 0xa3, 0x36, 0x80);
+EXTERN_GUID(MF_SD_ASF_STREAMBITRATES_BITRATE, 0xa8e182ed, 0xafc8, 0x43d0, 0xb0, 0xd1, 0xf6, 0x5b, 0xad, 0x9d, 0xa5, 0x58);
+EXTERN_GUID(MF_SD_ASF_METADATA_DEVICE_CONFORMANCE_TEMPLATE, 0x245e929d, 0xc44e, 0x4f7e, 0xbb, 0x3c, 0x77, 0xd4, 0xdf, 0xd2, 0x7f, 0x8a);
+EXTERN_GUID(MF_PD_ASF_INFO_HAS_AUDIO, 0x80e62295, 0x2296, 0x4a44, 0xb3, 0x1c, 0xd1, 0x3, 0xc6, 0xfe, 0xd2, 0x3c);
+EXTERN_GUID(MF_PD_ASF_INFO_HAS_VIDEO, 0x80e62296, 0x2296, 0x4a44, 0xb3, 0x1c, 0xd1, 0x3, 0xc6, 0xfe, 0xd2, 0x3c);
+EXTERN_GUID(MF_PD_ASF_INFO_HAS_NON_AUDIO_VIDEO, 0x80e62297, 0x2296, 0x4a44, 0xb3, 0x1c, 0xd1, 0x3, 0xc6, 0xfe, 0xd2, 0x3c);
+#if WINVER >= 0x0601
+EXTERN_GUID(MFASFINDEXER_TYPE_TIMECODE, 0x49815231, 0x6bad, 0x44fd, 0x81, 0xa, 0x3f, 0x60, 0x98, 0x4e, 0xc7, 0xfd);
+EXTERN_GUID(MF_PD_ASF_LANGLIST_LEGACYORDER, 0xf23de43d, 0x9977, 0x460d, 0xa6, 0xec, 0x32, 0x93, 0x7f, 0x16, 0xf, 0x7d);
+#endif
+
+EXTERN_GUID(MFASFMutexType_Bitrate, 0x72178C2C, 0xE45B, 0x11D5, 0xBC, 0x2A, 0x00, 0xB0, 0xD0, 0xF3, 0xF4, 0xAB);
+EXTERN_GUID(MFASFMutexType_Language, 0x72178C2B, 0xE45B, 0x11D5, 0xBC, 0x2A, 0x00, 0xB0, 0xD0, 0xF3, 0xF4, 0xAB);
+EXTERN_GUID(MFASFMutexType_Presentation, 0x72178C2D, 0xE45B, 0x11D5, 0xBC, 0x2A, 0x00, 0xB0, 0xD0, 0xF3, 0xF4, 0xAB);
+EXTERN_GUID(MFASFMutexType_Unknown, 0x72178C2E, 0xE45B, 0x11D5, 0xBC, 0x2A, 0x00, 0xB0, 0xD0, 0xF3, 0xF4, 0xAB);
+EXTERN_GUID(MFASFSampleExtension_ContentType, 0xd590dc20, 0x07bc, 0x436c, 0x9c, 0xf7, 0xf3, 0xbb, 0xfb, 0xf1, 0xa4, 0xdc);
+EXTERN_GUID(MFASFSampleExtension_Encryption_SampleID, 0x6698B84E, 0x0AFA, 0x4330, 0xAE, 0xB2, 0x1C, 0x0A, 0x98, 0xD7, 0xA4, 0x4D);
+EXTERN_GUID(MFASFSampleExtension_Encryption_KeyID, 0x76376591,  0x795f,  0x4da1, 0x86, 0xed, 0x9d, 0x46, 0xec, 0xa1, 0x09, 0xa9);
+EXTERN_GUID(MFASFSampleExtension_FileName, 0xe165ec0e, 0x19ed, 0x45d7, 0xb4, 0xa7, 0x25, 0xcb, 0xd1, 0xe2, 0x8e, 0x9b);
+EXTERN_GUID(MFASFSampleExtension_OutputCleanPoint, 0xf72a3c6f, 0x6eb4, 0x4ebc, 0xb1, 0x92, 0x9, 0xad, 0x97, 0x59, 0xe8, 0x28);
+EXTERN_GUID(MFASFSampleExtension_PixelAspectRatio, 0x1b1ee554, 0xf9ea, 0x4bc8, 0x82, 0x1a, 0x37, 0x6b, 0x74, 0xe4, 0xc4, 0xb8);
+EXTERN_GUID(MFASFSampleExtension_SampleDuration, 0xc6bd9450, 0x867f, 0x4907, 0x83, 0xa3, 0xc7, 0x79, 0x21, 0xb7, 0x33, 0xad);
+EXTERN_GUID(MFASFSampleExtension_SMPTE, 0x399595ec, 0x8667, 0x4e2d, 0x8f, 0xdb, 0x98, 0x81, 0x4c, 0xe7, 0x6c, 0x1e);
+EXTERN_GUID(MFASFSPLITTER_PACKET_BOUNDARY, 0xfe584a05, 0xe8d6, 0x42e3, 0xb1, 0x76, 0xf1, 0x21, 0x17, 0x5, 0xfb, 0x6f);
+EXTERN_GUID(MF_ASFPROFILE_MINPACKETSIZE, 0x22587626, 0x47de, 0x4168, 0x87, 0xf5, 0xb5, 0xaa, 0x9b, 0x12, 0xa8, 0xf0);
+EXTERN_GUID(MF_ASFPROFILE_MAXPACKETSIZE, 0x22587627, 0x47de, 0x4168, 0x87, 0xf5, 0xb5, 0xaa, 0x9b, 0x12, 0xa8, 0xf0);
+EXTERN_GUID(MF_ASFSTREAMCONFIG_LEAKYBUCKET1, 0xc69b5901, 0xea1a, 0x4c9b, 0xb6, 0x92, 0xe2, 0xa0, 0xd2, 0x9a, 0x8a, 0xdd);
+EXTERN_GUID(MF_ASFSTREAMCONFIG_LEAKYBUCKET2, 0xc69b5902, 0xea1a, 0x4c9b, 0xb6, 0x92, 0xe2, 0xa0, 0xd2, 0x9a, 0x8a, 0xdd);
+#ifndef __IMFASFProfile_FWD_DEFINED__
+#define __IMFASFProfile_FWD_DEFINED__
+typedef interface IMFASFProfile IMFASFProfile;
+#endif
+
+#ifndef __IMFASFStreamConfig_FWD_DEFINED__
+#define __IMFASFStreamConfig_FWD_DEFINED__
+typedef interface IMFASFStreamConfig IMFASFStreamConfig;
+#endif
+
+#ifndef __IMFASFMutualExclusion_FWD_DEFINED__
+#define __IMFASFMutualExclusion_FWD_DEFINED__
+typedef interface IMFASFMutualExclusion IMFASFMutualExclusion;
+#endif
+
+#ifndef __IMFASFStreamPrioritization_FWD_DEFINED__
+#define __IMFASFStreamPrioritization_FWD_DEFINED__
+typedef interface IMFASFStreamPrioritization IMFASFStreamPrioritization;
+#endif
+
+#define MFASFINDEXER_PER_ENTRY_BYTES_DYNAMIC 0xffff
+#define MFASFINDEXER_NO_FIXED_INTERVAL 0xffffffff
+#define MFASFINDEXER_READ_FOR_REVERSEPLAYBACK_OUTOFDATASEGMENT 0xffffffffffffffffll
+#define MFASFINDEXER_APPROX_SEEK_TIME_UNKNOWN 0xffffffffffffffffll
+
+#define MFASF_MIN_HEADER_BYTES (sizeof (GUID) + sizeof (QWORD))
+
+#define  MFASF_MAX_STREAM_NUMBER 127
+#define  MFASF_INVALID_STREAM_NUMBER (MFASF_MAX_STREAM_NUMBER + 1)
+#define  MFASF_PAYLOADEXTENSION_MAX_SIZE 0xff
+#define  MFASF_PAYLOADEXTENSION_VARIABLE_SIZE 0xffff
+#define  MFASF_DEFAULT_BUFFER_WINDOW_MS 3000
+
+typedef enum MFASF_SPLITTERFLAGS {
+    MFASF_SPLITTER_REVERSE = 0x1,
+    MFASF_SPLITTER_WMDRM = 0x2
+} MFASF_SPLITTERFLAGS;
+typedef enum ASF_STATUSFLAGS {
+    ASF_STATUSFLAGS_INCOMPLETE = 0x1
+} ASF_STATUSFLAGS;
+typedef enum MFASF_MULTIPLEXERFLAGS {
+    MFASF_MULTIPLEXER_AUTOADJUST_BITRATE = 0x1
+} MFASF_MULTIPLEXERFLAGS;
+typedef enum MFASF_INDEXERFLAGS {
+    MFASF_INDEXER_WRITE_NEW_INDEX = 0x1,
+    MFASF_INDEXER_READ_FOR_REVERSEPLAYBACK = 0x2,
+    MFASF_INDEXER_WRITE_FOR_LIVEREAD = 0x4
+} MFASF_INDEXER_FLAGS;
+typedef enum MFASF_STREAMSELECTORFLAGS {
+    MFASF_STREAMSELECTOR_DISABLE_THINNING = 0x1,
+    MFASF_STREAMSELECTOR_USE_AVERAGE_BITRATE = 0x2
+} MFASF_STREAMSELECTOR_FLAGS;
+typedef enum ASF_SELECTION_STATUS {
+    ASF_STATUS_NOTSELECTED = 0,
+    ASF_STATUS_CLEANPOINTSONLY = 1,
+    ASF_STATUS_ALLDATAUNITS = 2
+} ASF_SELECTION_STATUS;
+typedef enum _MFSINK_WMDRMACTION {
+    MFSINK_WMDRMACTION_UNDEFINED = 0,
+    MFSINK_WMDRMACTION_ENCODE = 1,
+    MFSINK_WMDRMACTION_TRANSCODE = 2,
+    MFSINK_WMDRMACTION_TRANSCRYPT = 3,
+    MFSINK_WMDRMACTION_LAST = 3
+} MFSINK_WMDRMACTION;
+
+typedef struct ASF_MUX_STATISTICS {
+    DWORD cFramesWritten;
+    DWORD cFramesDropped;
+} ASF_MUX_STATISTICS;
+typedef struct _ASF_INDEX_IDENTIFIER {
+    GUID guidIndexType;
+    WORD wStreamNumber;
+} ASF_INDEX_IDENTIFIER;
+typedef struct _ASF_INDEX_DESCRIPTOR {
+    ASF_INDEX_IDENTIFIER Identifier;
+    WORD cPerEntryBytes;
+    WCHAR szDescription[32];
+    DWORD dwInterval;
+} ASF_INDEX_DESCRIPTOR;
+
+/*****************************************************************************
+ * IMFASFContentInfo interface
+ */
+#ifndef __IMFASFContentInfo_INTERFACE_DEFINED__
+#define __IMFASFContentInfo_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFASFContentInfo, 0xb1dca5cd, 0xd5da, 0x4451, 0x8e,0x9e, 0xdb,0x5c,0x59,0x91,0x4e,0xad);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("b1dca5cd-d5da-4451-8e9e-db5c59914ead")
+IMFASFContentInfo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetHeaderSize(
+        IMFMediaBuffer *pIStartOfContent,
+        QWORD *cbHeaderSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ParseHeader(
+        IMFMediaBuffer *pIHeaderBuffer,
+        QWORD cbOffsetWithinHeader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GenerateHeader(
+        IMFMediaBuffer *pIHeader,
+        DWORD *pcbHeader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetProfile(
+        IMFASFProfile **ppIProfile) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetProfile(
+        IMFASFProfile *pIProfile) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GeneratePresentationDescriptor(
+        IMFPresentationDescriptor **ppIPresentationDescriptor) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetEncodingConfigurationPropertyStore(
+        WORD wStreamNumber,
+        IPropertyStore **ppIStore) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFASFContentInfo, 0xb1dca5cd, 0xd5da, 0x4451, 0x8e,0x9e, 0xdb,0x5c,0x59,0x91,0x4e,0xad)
+#endif
+#else
+typedef struct IMFASFContentInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFASFContentInfo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFASFContentInfo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFASFContentInfo* This);
+
+    /*** IMFASFContentInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetHeaderSize)(
+        IMFASFContentInfo* This,
+        IMFMediaBuffer *pIStartOfContent,
+        QWORD *cbHeaderSize);
+
+    HRESULT (STDMETHODCALLTYPE *ParseHeader)(
+        IMFASFContentInfo* This,
+        IMFMediaBuffer *pIHeaderBuffer,
+        QWORD cbOffsetWithinHeader);
+
+    HRESULT (STDMETHODCALLTYPE *GenerateHeader)(
+        IMFASFContentInfo* This,
+        IMFMediaBuffer *pIHeader,
+        DWORD *pcbHeader);
+
+    HRESULT (STDMETHODCALLTYPE *GetProfile)(
+        IMFASFContentInfo* This,
+        IMFASFProfile **ppIProfile);
+
+    HRESULT (STDMETHODCALLTYPE *SetProfile)(
+        IMFASFContentInfo* This,
+        IMFASFProfile *pIProfile);
+
+    HRESULT (STDMETHODCALLTYPE *GeneratePresentationDescriptor)(
+        IMFASFContentInfo* This,
+        IMFPresentationDescriptor **ppIPresentationDescriptor);
+
+    HRESULT (STDMETHODCALLTYPE *GetEncodingConfigurationPropertyStore)(
+        IMFASFContentInfo* This,
+        WORD wStreamNumber,
+        IPropertyStore **ppIStore);
+
+    END_INTERFACE
+} IMFASFContentInfoVtbl;
+interface IMFASFContentInfo {
+    CONST_VTBL IMFASFContentInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFASFContentInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFASFContentInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFASFContentInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFASFContentInfo methods ***/
+#define IMFASFContentInfo_GetHeaderSize(This,pIStartOfContent,cbHeaderSize) (This)->lpVtbl->GetHeaderSize(This,pIStartOfContent,cbHeaderSize)
+#define IMFASFContentInfo_ParseHeader(This,pIHeaderBuffer,cbOffsetWithinHeader) (This)->lpVtbl->ParseHeader(This,pIHeaderBuffer,cbOffsetWithinHeader)
+#define IMFASFContentInfo_GenerateHeader(This,pIHeader,pcbHeader) (This)->lpVtbl->GenerateHeader(This,pIHeader,pcbHeader)
+#define IMFASFContentInfo_GetProfile(This,ppIProfile) (This)->lpVtbl->GetProfile(This,ppIProfile)
+#define IMFASFContentInfo_SetProfile(This,pIProfile) (This)->lpVtbl->SetProfile(This,pIProfile)
+#define IMFASFContentInfo_GeneratePresentationDescriptor(This,ppIPresentationDescriptor) (This)->lpVtbl->GeneratePresentationDescriptor(This,ppIPresentationDescriptor)
+#define IMFASFContentInfo_GetEncodingConfigurationPropertyStore(This,wStreamNumber,ppIStore) (This)->lpVtbl->GetEncodingConfigurationPropertyStore(This,wStreamNumber,ppIStore)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IMFASFContentInfo_QueryInterface(IMFASFContentInfo* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IMFASFContentInfo_AddRef(IMFASFContentInfo* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IMFASFContentInfo_Release(IMFASFContentInfo* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFASFContentInfo methods ***/
+static FORCEINLINE HRESULT IMFASFContentInfo_GetHeaderSize(IMFASFContentInfo* This,IMFMediaBuffer *pIStartOfContent,QWORD *cbHeaderSize) {
+    return This->lpVtbl->GetHeaderSize(This,pIStartOfContent,cbHeaderSize);
+}
+static FORCEINLINE HRESULT IMFASFContentInfo_ParseHeader(IMFASFContentInfo* This,IMFMediaBuffer *pIHeaderBuffer,QWORD cbOffsetWithinHeader) {
+    return This->lpVtbl->ParseHeader(This,pIHeaderBuffer,cbOffsetWithinHeader);
+}
+static FORCEINLINE HRESULT IMFASFContentInfo_GenerateHeader(IMFASFContentInfo* This,IMFMediaBuffer *pIHeader,DWORD *pcbHeader) {
+    return This->lpVtbl->GenerateHeader(This,pIHeader,pcbHeader);
+}
+static FORCEINLINE HRESULT IMFASFContentInfo_GetProfile(IMFASFContentInfo* This,IMFASFProfile **ppIProfile) {
+    return This->lpVtbl->GetProfile(This,ppIProfile);
+}
+static FORCEINLINE HRESULT IMFASFContentInfo_SetProfile(IMFASFContentInfo* This,IMFASFProfile *pIProfile) {
+    return This->lpVtbl->SetProfile(This,pIProfile);
+}
+static FORCEINLINE HRESULT IMFASFContentInfo_GeneratePresentationDescriptor(IMFASFContentInfo* This,IMFPresentationDescriptor **ppIPresentationDescriptor) {
+    return This->lpVtbl->GeneratePresentationDescriptor(This,ppIPresentationDescriptor);
+}
+static FORCEINLINE HRESULT IMFASFContentInfo_GetEncodingConfigurationPropertyStore(IMFASFContentInfo* This,WORD wStreamNumber,IPropertyStore **ppIStore) {
+    return This->lpVtbl->GetEncodingConfigurationPropertyStore(This,wStreamNumber,ppIStore);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMFASFContentInfo_GetHeaderSize_Proxy(
+    IMFASFContentInfo* This,
+    IMFMediaBuffer *pIStartOfContent,
+    QWORD *cbHeaderSize);
+void __RPC_STUB IMFASFContentInfo_GetHeaderSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFContentInfo_ParseHeader_Proxy(
+    IMFASFContentInfo* This,
+    IMFMediaBuffer *pIHeaderBuffer,
+    QWORD cbOffsetWithinHeader);
+void __RPC_STUB IMFASFContentInfo_ParseHeader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFContentInfo_GenerateHeader_Proxy(
+    IMFASFContentInfo* This,
+    IMFMediaBuffer *pIHeader,
+    DWORD *pcbHeader);
+void __RPC_STUB IMFASFContentInfo_GenerateHeader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFContentInfo_GetProfile_Proxy(
+    IMFASFContentInfo* This,
+    IMFASFProfile **ppIProfile);
+void __RPC_STUB IMFASFContentInfo_GetProfile_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFContentInfo_SetProfile_Proxy(
+    IMFASFContentInfo* This,
+    IMFASFProfile *pIProfile);
+void __RPC_STUB IMFASFContentInfo_SetProfile_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFContentInfo_GeneratePresentationDescriptor_Proxy(
+    IMFASFContentInfo* This,
+    IMFPresentationDescriptor **ppIPresentationDescriptor);
+void __RPC_STUB IMFASFContentInfo_GeneratePresentationDescriptor_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFContentInfo_GetEncodingConfigurationPropertyStore_Proxy(
+    IMFASFContentInfo* This,
+    WORD wStreamNumber,
+    IPropertyStore **ppIStore);
+void __RPC_STUB IMFASFContentInfo_GetEncodingConfigurationPropertyStore_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMFASFContentInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMFASFMutualExclusion interface
+ */
+#ifndef __IMFASFMutualExclusion_INTERFACE_DEFINED__
+#define __IMFASFMutualExclusion_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFASFMutualExclusion, 0x12558291, 0xe399, 0x11d5, 0xbc,0x2a, 0x00,0xb0,0xd0,0xf3,0xf4,0xab);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("12558291-e399-11d5-bc2a-00b0d0f3f4ab")
+IMFASFMutualExclusion : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetType(
+        GUID *pguidType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetType(
+        REFGUID guidType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRecordCount(
+        DWORD *pdwRecordCount) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStreamsForRecord(
+        DWORD dwRecordNumber,
+        WORD *pwStreamNumArray,
+        DWORD *pcStreams) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddStreamForRecord(
+        DWORD dwRecordNumber,
+        WORD wStreamNumber) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveStreamFromRecord(
+        DWORD dwRecordNumber,
+        WORD wStreamNumber) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveRecord(
+        DWORD dwRecordNumber) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddRecord(
+        DWORD *pdwRecordNumber) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IMFASFMutualExclusion **ppIMutex) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFASFMutualExclusion, 0x12558291, 0xe399, 0x11d5, 0xbc,0x2a, 0x00,0xb0,0xd0,0xf3,0xf4,0xab)
+#endif
+#else
+typedef struct IMFASFMutualExclusionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFASFMutualExclusion* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFASFMutualExclusion* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFASFMutualExclusion* This);
+
+    /*** IMFASFMutualExclusion methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetType)(
+        IMFASFMutualExclusion* This,
+        GUID *pguidType);
+
+    HRESULT (STDMETHODCALLTYPE *SetType)(
+        IMFASFMutualExclusion* This,
+        REFGUID guidType);
+
+    HRESULT (STDMETHODCALLTYPE *GetRecordCount)(
+        IMFASFMutualExclusion* This,
+        DWORD *pdwRecordCount);
+
+    HRESULT (STDMETHODCALLTYPE *GetStreamsForRecord)(
+        IMFASFMutualExclusion* This,
+        DWORD dwRecordNumber,
+        WORD *pwStreamNumArray,
+        DWORD *pcStreams);
+
+    HRESULT (STDMETHODCALLTYPE *AddStreamForRecord)(
+        IMFASFMutualExclusion* This,
+        DWORD dwRecordNumber,
+        WORD wStreamNumber);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveStreamFromRecord)(
+        IMFASFMutualExclusion* This,
+        DWORD dwRecordNumber,
+        WORD wStreamNumber);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveRecord)(
+        IMFASFMutualExclusion* This,
+        DWORD dwRecordNumber);
+
+    HRESULT (STDMETHODCALLTYPE *AddRecord)(
+        IMFASFMutualExclusion* This,
+        DWORD *pdwRecordNumber);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IMFASFMutualExclusion* This,
+        IMFASFMutualExclusion **ppIMutex);
+
+    END_INTERFACE
+} IMFASFMutualExclusionVtbl;
+interface IMFASFMutualExclusion {
+    CONST_VTBL IMFASFMutualExclusionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFASFMutualExclusion_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFASFMutualExclusion_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFASFMutualExclusion_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFASFMutualExclusion methods ***/
+#define IMFASFMutualExclusion_GetType(This,pguidType) (This)->lpVtbl->GetType(This,pguidType)
+#define IMFASFMutualExclusion_SetType(This,guidType) (This)->lpVtbl->SetType(This,guidType)
+#define IMFASFMutualExclusion_GetRecordCount(This,pdwRecordCount) (This)->lpVtbl->GetRecordCount(This,pdwRecordCount)
+#define IMFASFMutualExclusion_GetStreamsForRecord(This,dwRecordNumber,pwStreamNumArray,pcStreams) (This)->lpVtbl->GetStreamsForRecord(This,dwRecordNumber,pwStreamNumArray,pcStreams)
+#define IMFASFMutualExclusion_AddStreamForRecord(This,dwRecordNumber,wStreamNumber) (This)->lpVtbl->AddStreamForRecord(This,dwRecordNumber,wStreamNumber)
+#define IMFASFMutualExclusion_RemoveStreamFromRecord(This,dwRecordNumber,wStreamNumber) (This)->lpVtbl->RemoveStreamFromRecord(This,dwRecordNumber,wStreamNumber)
+#define IMFASFMutualExclusion_RemoveRecord(This,dwRecordNumber) (This)->lpVtbl->RemoveRecord(This,dwRecordNumber)
+#define IMFASFMutualExclusion_AddRecord(This,pdwRecordNumber) (This)->lpVtbl->AddRecord(This,pdwRecordNumber)
+#define IMFASFMutualExclusion_Clone(This,ppIMutex) (This)->lpVtbl->Clone(This,ppIMutex)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IMFASFMutualExclusion_QueryInterface(IMFASFMutualExclusion* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IMFASFMutualExclusion_AddRef(IMFASFMutualExclusion* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IMFASFMutualExclusion_Release(IMFASFMutualExclusion* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFASFMutualExclusion methods ***/
+static FORCEINLINE HRESULT IMFASFMutualExclusion_GetType(IMFASFMutualExclusion* This,GUID *pguidType) {
+    return This->lpVtbl->GetType(This,pguidType);
+}
+static FORCEINLINE HRESULT IMFASFMutualExclusion_SetType(IMFASFMutualExclusion* This,REFGUID guidType) {
+    return This->lpVtbl->SetType(This,guidType);
+}
+static FORCEINLINE HRESULT IMFASFMutualExclusion_GetRecordCount(IMFASFMutualExclusion* This,DWORD *pdwRecordCount) {
+    return This->lpVtbl->GetRecordCount(This,pdwRecordCount);
+}
+static FORCEINLINE HRESULT IMFASFMutualExclusion_GetStreamsForRecord(IMFASFMutualExclusion* This,DWORD dwRecordNumber,WORD *pwStreamNumArray,DWORD *pcStreams) {
+    return This->lpVtbl->GetStreamsForRecord(This,dwRecordNumber,pwStreamNumArray,pcStreams);
+}
+static FORCEINLINE HRESULT IMFASFMutualExclusion_AddStreamForRecord(IMFASFMutualExclusion* This,DWORD dwRecordNumber,WORD wStreamNumber) {
+    return This->lpVtbl->AddStreamForRecord(This,dwRecordNumber,wStreamNumber);
+}
+static FORCEINLINE HRESULT IMFASFMutualExclusion_RemoveStreamFromRecord(IMFASFMutualExclusion* This,DWORD dwRecordNumber,WORD wStreamNumber) {
+    return This->lpVtbl->RemoveStreamFromRecord(This,dwRecordNumber,wStreamNumber);
+}
+static FORCEINLINE HRESULT IMFASFMutualExclusion_RemoveRecord(IMFASFMutualExclusion* This,DWORD dwRecordNumber) {
+    return This->lpVtbl->RemoveRecord(This,dwRecordNumber);
+}
+static FORCEINLINE HRESULT IMFASFMutualExclusion_AddRecord(IMFASFMutualExclusion* This,DWORD *pdwRecordNumber) {
+    return This->lpVtbl->AddRecord(This,pdwRecordNumber);
+}
+static FORCEINLINE HRESULT IMFASFMutualExclusion_Clone(IMFASFMutualExclusion* This,IMFASFMutualExclusion **ppIMutex) {
+    return This->lpVtbl->Clone(This,ppIMutex);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMFASFMutualExclusion_GetType_Proxy(
+    IMFASFMutualExclusion* This,
+    GUID *pguidType);
+void __RPC_STUB IMFASFMutualExclusion_GetType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFMutualExclusion_SetType_Proxy(
+    IMFASFMutualExclusion* This,
+    REFGUID guidType);
+void __RPC_STUB IMFASFMutualExclusion_SetType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFMutualExclusion_GetRecordCount_Proxy(
+    IMFASFMutualExclusion* This,
+    DWORD *pdwRecordCount);
+void __RPC_STUB IMFASFMutualExclusion_GetRecordCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFMutualExclusion_GetStreamsForRecord_Proxy(
+    IMFASFMutualExclusion* This,
+    DWORD dwRecordNumber,
+    WORD *pwStreamNumArray,
+    DWORD *pcStreams);
+void __RPC_STUB IMFASFMutualExclusion_GetStreamsForRecord_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFMutualExclusion_AddStreamForRecord_Proxy(
+    IMFASFMutualExclusion* This,
+    DWORD dwRecordNumber,
+    WORD wStreamNumber);
+void __RPC_STUB IMFASFMutualExclusion_AddStreamForRecord_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFMutualExclusion_RemoveStreamFromRecord_Proxy(
+    IMFASFMutualExclusion* This,
+    DWORD dwRecordNumber,
+    WORD wStreamNumber);
+void __RPC_STUB IMFASFMutualExclusion_RemoveStreamFromRecord_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFMutualExclusion_RemoveRecord_Proxy(
+    IMFASFMutualExclusion* This,
+    DWORD dwRecordNumber);
+void __RPC_STUB IMFASFMutualExclusion_RemoveRecord_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFMutualExclusion_AddRecord_Proxy(
+    IMFASFMutualExclusion* This,
+    DWORD *pdwRecordNumber);
+void __RPC_STUB IMFASFMutualExclusion_AddRecord_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFMutualExclusion_Clone_Proxy(
+    IMFASFMutualExclusion* This,
+    IMFASFMutualExclusion **ppIMutex);
+void __RPC_STUB IMFASFMutualExclusion_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMFASFMutualExclusion_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMFASFStreamPrioritization interface
+ */
+#ifndef __IMFASFStreamPrioritization_INTERFACE_DEFINED__
+#define __IMFASFStreamPrioritization_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFASFStreamPrioritization, 0x699bdc27, 0xbbaf, 0x49ff, 0x8e,0x38, 0x9c,0x39,0xc9,0xb5,0xe0,0x88);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("699bdc27-bbaf-49ff-8e38-9c39c9b5e088")
+IMFASFStreamPrioritization : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetStreamCount(
+        DWORD *pdwStreamCount) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStream(
+        DWORD dwStreamIndex,
+        WORD *pwStreamNumber,
+        WORD *pwStreamFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddStream(
+        WORD wStreamNumber,
+        WORD wStreamFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveStream(
+        DWORD dwStreamIndex) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IMFASFStreamPrioritization **ppIStreamPrioritization) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFASFStreamPrioritization, 0x699bdc27, 0xbbaf, 0x49ff, 0x8e,0x38, 0x9c,0x39,0xc9,0xb5,0xe0,0x88)
+#endif
+#else
+typedef struct IMFASFStreamPrioritizationVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFASFStreamPrioritization* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFASFStreamPrioritization* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFASFStreamPrioritization* This);
+
+    /*** IMFASFStreamPrioritization methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetStreamCount)(
+        IMFASFStreamPrioritization* This,
+        DWORD *pdwStreamCount);
+
+    HRESULT (STDMETHODCALLTYPE *GetStream)(
+        IMFASFStreamPrioritization* This,
+        DWORD dwStreamIndex,
+        WORD *pwStreamNumber,
+        WORD *pwStreamFlags);
+
+    HRESULT (STDMETHODCALLTYPE *AddStream)(
+        IMFASFStreamPrioritization* This,
+        WORD wStreamNumber,
+        WORD wStreamFlags);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveStream)(
+        IMFASFStreamPrioritization* This,
+        DWORD dwStreamIndex);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IMFASFStreamPrioritization* This,
+        IMFASFStreamPrioritization **ppIStreamPrioritization);
+
+    END_INTERFACE
+} IMFASFStreamPrioritizationVtbl;
+interface IMFASFStreamPrioritization {
+    CONST_VTBL IMFASFStreamPrioritizationVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFASFStreamPrioritization_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFASFStreamPrioritization_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFASFStreamPrioritization_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFASFStreamPrioritization methods ***/
+#define IMFASFStreamPrioritization_GetStreamCount(This,pdwStreamCount) (This)->lpVtbl->GetStreamCount(This,pdwStreamCount)
+#define IMFASFStreamPrioritization_GetStream(This,dwStreamIndex,pwStreamNumber,pwStreamFlags) (This)->lpVtbl->GetStream(This,dwStreamIndex,pwStreamNumber,pwStreamFlags)
+#define IMFASFStreamPrioritization_AddStream(This,wStreamNumber,wStreamFlags) (This)->lpVtbl->AddStream(This,wStreamNumber,wStreamFlags)
+#define IMFASFStreamPrioritization_RemoveStream(This,dwStreamIndex) (This)->lpVtbl->RemoveStream(This,dwStreamIndex)
+#define IMFASFStreamPrioritization_Clone(This,ppIStreamPrioritization) (This)->lpVtbl->Clone(This,ppIStreamPrioritization)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IMFASFStreamPrioritization_QueryInterface(IMFASFStreamPrioritization* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IMFASFStreamPrioritization_AddRef(IMFASFStreamPrioritization* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IMFASFStreamPrioritization_Release(IMFASFStreamPrioritization* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFASFStreamPrioritization methods ***/
+static FORCEINLINE HRESULT IMFASFStreamPrioritization_GetStreamCount(IMFASFStreamPrioritization* This,DWORD *pdwStreamCount) {
+    return This->lpVtbl->GetStreamCount(This,pdwStreamCount);
+}
+static FORCEINLINE HRESULT IMFASFStreamPrioritization_GetStream(IMFASFStreamPrioritization* This,DWORD dwStreamIndex,WORD *pwStreamNumber,WORD *pwStreamFlags) {
+    return This->lpVtbl->GetStream(This,dwStreamIndex,pwStreamNumber,pwStreamFlags);
+}
+static FORCEINLINE HRESULT IMFASFStreamPrioritization_AddStream(IMFASFStreamPrioritization* This,WORD wStreamNumber,WORD wStreamFlags) {
+    return This->lpVtbl->AddStream(This,wStreamNumber,wStreamFlags);
+}
+static FORCEINLINE HRESULT IMFASFStreamPrioritization_RemoveStream(IMFASFStreamPrioritization* This,DWORD dwStreamIndex) {
+    return This->lpVtbl->RemoveStream(This,dwStreamIndex);
+}
+static FORCEINLINE HRESULT IMFASFStreamPrioritization_Clone(IMFASFStreamPrioritization* This,IMFASFStreamPrioritization **ppIStreamPrioritization) {
+    return This->lpVtbl->Clone(This,ppIStreamPrioritization);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMFASFStreamPrioritization_GetStreamCount_Proxy(
+    IMFASFStreamPrioritization* This,
+    DWORD *pdwStreamCount);
+void __RPC_STUB IMFASFStreamPrioritization_GetStreamCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamPrioritization_GetStream_Proxy(
+    IMFASFStreamPrioritization* This,
+    DWORD dwStreamIndex,
+    WORD *pwStreamNumber,
+    WORD *pwStreamFlags);
+void __RPC_STUB IMFASFStreamPrioritization_GetStream_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamPrioritization_AddStream_Proxy(
+    IMFASFStreamPrioritization* This,
+    WORD wStreamNumber,
+    WORD wStreamFlags);
+void __RPC_STUB IMFASFStreamPrioritization_AddStream_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamPrioritization_RemoveStream_Proxy(
+    IMFASFStreamPrioritization* This,
+    DWORD dwStreamIndex);
+void __RPC_STUB IMFASFStreamPrioritization_RemoveStream_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamPrioritization_Clone_Proxy(
+    IMFASFStreamPrioritization* This,
+    IMFASFStreamPrioritization **ppIStreamPrioritization);
+void __RPC_STUB IMFASFStreamPrioritization_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMFASFStreamPrioritization_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMFASFSplitter interface
+ */
+#ifndef __IMFASFSplitter_INTERFACE_DEFINED__
+#define __IMFASFSplitter_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFASFSplitter, 0x12558295, 0xe399, 0x11d5, 0xbc,0x2a, 0x00,0xb0,0xd0,0xf3,0xf4,0xab);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("12558295-e399-11d5-bc2a-00b0d0f3f4ab")
+IMFASFSplitter : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Initialize(
+        IMFASFContentInfo *pIContentInfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFlags(
+        DWORD dwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFlags(
+        DWORD *pdwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SelectStreams(
+        WORD *pwStreamNumbers,
+        WORD wNumStreams) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSelectedStreams(
+        WORD *pwStreamNumbers,
+        WORD *pwNumStreams) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ParseData(
+        IMFMediaBuffer *pIBuffer,
+        DWORD cbBufferOffset,
+        DWORD cbLength) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetNextSample(
+        DWORD *pdwStatusFlags,
+        WORD *pwStreamNumber,
+        IMFSample **ppISample) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Flush(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLastSendTime(
+        DWORD *pdwLastSendTime) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFASFSplitter, 0x12558295, 0xe399, 0x11d5, 0xbc,0x2a, 0x00,0xb0,0xd0,0xf3,0xf4,0xab)
+#endif
+#else
+typedef struct IMFASFSplitterVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFASFSplitter* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFASFSplitter* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFASFSplitter* This);
+
+    /*** IMFASFSplitter methods ***/
+    HRESULT (STDMETHODCALLTYPE *Initialize)(
+        IMFASFSplitter* This,
+        IMFASFContentInfo *pIContentInfo);
+
+    HRESULT (STDMETHODCALLTYPE *SetFlags)(
+        IMFASFSplitter* This,
+        DWORD dwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *GetFlags)(
+        IMFASFSplitter* This,
+        DWORD *pdwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *SelectStreams)(
+        IMFASFSplitter* This,
+        WORD *pwStreamNumbers,
+        WORD wNumStreams);
+
+    HRESULT (STDMETHODCALLTYPE *GetSelectedStreams)(
+        IMFASFSplitter* This,
+        WORD *pwStreamNumbers,
+        WORD *pwNumStreams);
+
+    HRESULT (STDMETHODCALLTYPE *ParseData)(
+        IMFASFSplitter* This,
+        IMFMediaBuffer *pIBuffer,
+        DWORD cbBufferOffset,
+        DWORD cbLength);
+
+    HRESULT (STDMETHODCALLTYPE *GetNextSample)(
+        IMFASFSplitter* This,
+        DWORD *pdwStatusFlags,
+        WORD *pwStreamNumber,
+        IMFSample **ppISample);
+
+    HRESULT (STDMETHODCALLTYPE *Flush)(
+        IMFASFSplitter* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetLastSendTime)(
+        IMFASFSplitter* This,
+        DWORD *pdwLastSendTime);
+
+    END_INTERFACE
+} IMFASFSplitterVtbl;
+interface IMFASFSplitter {
+    CONST_VTBL IMFASFSplitterVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFASFSplitter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFASFSplitter_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFASFSplitter_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFASFSplitter methods ***/
+#define IMFASFSplitter_Initialize(This,pIContentInfo) (This)->lpVtbl->Initialize(This,pIContentInfo)
+#define IMFASFSplitter_SetFlags(This,dwFlags) (This)->lpVtbl->SetFlags(This,dwFlags)
+#define IMFASFSplitter_GetFlags(This,pdwFlags) (This)->lpVtbl->GetFlags(This,pdwFlags)
+#define IMFASFSplitter_SelectStreams(This,pwStreamNumbers,wNumStreams) (This)->lpVtbl->SelectStreams(This,pwStreamNumbers,wNumStreams)
+#define IMFASFSplitter_GetSelectedStreams(This,pwStreamNumbers,pwNumStreams) (This)->lpVtbl->GetSelectedStreams(This,pwStreamNumbers,pwNumStreams)
+#define IMFASFSplitter_ParseData(This,pIBuffer,cbBufferOffset,cbLength) (This)->lpVtbl->ParseData(This,pIBuffer,cbBufferOffset,cbLength)
+#define IMFASFSplitter_GetNextSample(This,pdwStatusFlags,pwStreamNumber,ppISample) (This)->lpVtbl->GetNextSample(This,pdwStatusFlags,pwStreamNumber,ppISample)
+#define IMFASFSplitter_Flush(This) (This)->lpVtbl->Flush(This)
+#define IMFASFSplitter_GetLastSendTime(This,pdwLastSendTime) (This)->lpVtbl->GetLastSendTime(This,pdwLastSendTime)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IMFASFSplitter_QueryInterface(IMFASFSplitter* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IMFASFSplitter_AddRef(IMFASFSplitter* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IMFASFSplitter_Release(IMFASFSplitter* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFASFSplitter methods ***/
+static FORCEINLINE HRESULT IMFASFSplitter_Initialize(IMFASFSplitter* This,IMFASFContentInfo *pIContentInfo) {
+    return This->lpVtbl->Initialize(This,pIContentInfo);
+}
+static FORCEINLINE HRESULT IMFASFSplitter_SetFlags(IMFASFSplitter* This,DWORD dwFlags) {
+    return This->lpVtbl->SetFlags(This,dwFlags);
+}
+static FORCEINLINE HRESULT IMFASFSplitter_GetFlags(IMFASFSplitter* This,DWORD *pdwFlags) {
+    return This->lpVtbl->GetFlags(This,pdwFlags);
+}
+static FORCEINLINE HRESULT IMFASFSplitter_SelectStreams(IMFASFSplitter* This,WORD *pwStreamNumbers,WORD wNumStreams) {
+    return This->lpVtbl->SelectStreams(This,pwStreamNumbers,wNumStreams);
+}
+static FORCEINLINE HRESULT IMFASFSplitter_GetSelectedStreams(IMFASFSplitter* This,WORD *pwStreamNumbers,WORD *pwNumStreams) {
+    return This->lpVtbl->GetSelectedStreams(This,pwStreamNumbers,pwNumStreams);
+}
+static FORCEINLINE HRESULT IMFASFSplitter_ParseData(IMFASFSplitter* This,IMFMediaBuffer *pIBuffer,DWORD cbBufferOffset,DWORD cbLength) {
+    return This->lpVtbl->ParseData(This,pIBuffer,cbBufferOffset,cbLength);
+}
+static FORCEINLINE HRESULT IMFASFSplitter_GetNextSample(IMFASFSplitter* This,DWORD *pdwStatusFlags,WORD *pwStreamNumber,IMFSample **ppISample) {
+    return This->lpVtbl->GetNextSample(This,pdwStatusFlags,pwStreamNumber,ppISample);
+}
+static FORCEINLINE HRESULT IMFASFSplitter_Flush(IMFASFSplitter* This) {
+    return This->lpVtbl->Flush(This);
+}
+static FORCEINLINE HRESULT IMFASFSplitter_GetLastSendTime(IMFASFSplitter* This,DWORD *pdwLastSendTime) {
+    return This->lpVtbl->GetLastSendTime(This,pdwLastSendTime);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMFASFSplitter_Initialize_Proxy(
+    IMFASFSplitter* This,
+    IMFASFContentInfo *pIContentInfo);
+void __RPC_STUB IMFASFSplitter_Initialize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFSplitter_SetFlags_Proxy(
+    IMFASFSplitter* This,
+    DWORD dwFlags);
+void __RPC_STUB IMFASFSplitter_SetFlags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFSplitter_GetFlags_Proxy(
+    IMFASFSplitter* This,
+    DWORD *pdwFlags);
+void __RPC_STUB IMFASFSplitter_GetFlags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFSplitter_SelectStreams_Proxy(
+    IMFASFSplitter* This,
+    WORD *pwStreamNumbers,
+    WORD wNumStreams);
+void __RPC_STUB IMFASFSplitter_SelectStreams_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFSplitter_GetSelectedStreams_Proxy(
+    IMFASFSplitter* This,
+    WORD *pwStreamNumbers,
+    WORD *pwNumStreams);
+void __RPC_STUB IMFASFSplitter_GetSelectedStreams_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFSplitter_ParseData_Proxy(
+    IMFASFSplitter* This,
+    IMFMediaBuffer *pIBuffer,
+    DWORD cbBufferOffset,
+    DWORD cbLength);
+void __RPC_STUB IMFASFSplitter_ParseData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFSplitter_GetNextSample_Proxy(
+    IMFASFSplitter* This,
+    DWORD *pdwStatusFlags,
+    WORD *pwStreamNumber,
+    IMFSample **ppISample);
+void __RPC_STUB IMFASFSplitter_GetNextSample_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFSplitter_Flush_Proxy(
+    IMFASFSplitter* This);
+void __RPC_STUB IMFASFSplitter_Flush_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFSplitter_GetLastSendTime_Proxy(
+    IMFASFSplitter* This,
+    DWORD *pdwLastSendTime);
+void __RPC_STUB IMFASFSplitter_GetLastSendTime_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMFASFSplitter_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMFASFMultiplexer interface
+ */
+#ifndef __IMFASFMultiplexer_INTERFACE_DEFINED__
+#define __IMFASFMultiplexer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFASFMultiplexer, 0x57bdd80a, 0x9b38, 0x4838, 0xb7,0x37, 0xc5,0x8f,0x67,0x0d,0x7d,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("57bdd80a-9b38-4838-b737-c58f670d7d4f")
+IMFASFMultiplexer : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Initialize(
+        IMFASFContentInfo *pIContentInfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFlags(
+        DWORD dwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFlags(
+        DWORD *pdwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ProcessSample(
+        WORD wStreamNumber,
+        IMFSample *pISample,
+        LONGLONG hnsTimestampAdjust) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetNextPacket(
+        DWORD *pdwStatusFlags,
+        IMFSample **ppIPacket) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Flush(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE End(
+        IMFASFContentInfo *pIContentInfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStatistics(
+        WORD wStreamNumber,
+        ASF_MUX_STATISTICS *pMuxStats) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSyncTolerance(
+        DWORD msSyncTolerance) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFASFMultiplexer, 0x57bdd80a, 0x9b38, 0x4838, 0xb7,0x37, 0xc5,0x8f,0x67,0x0d,0x7d,0x4f)
+#endif
+#else
+typedef struct IMFASFMultiplexerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFASFMultiplexer* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFASFMultiplexer* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFASFMultiplexer* This);
+
+    /*** IMFASFMultiplexer methods ***/
+    HRESULT (STDMETHODCALLTYPE *Initialize)(
+        IMFASFMultiplexer* This,
+        IMFASFContentInfo *pIContentInfo);
+
+    HRESULT (STDMETHODCALLTYPE *SetFlags)(
+        IMFASFMultiplexer* This,
+        DWORD dwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *GetFlags)(
+        IMFASFMultiplexer* This,
+        DWORD *pdwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *ProcessSample)(
+        IMFASFMultiplexer* This,
+        WORD wStreamNumber,
+        IMFSample *pISample,
+        LONGLONG hnsTimestampAdjust);
+
+    HRESULT (STDMETHODCALLTYPE *GetNextPacket)(
+        IMFASFMultiplexer* This,
+        DWORD *pdwStatusFlags,
+        IMFSample **ppIPacket);
+
+    HRESULT (STDMETHODCALLTYPE *Flush)(
+        IMFASFMultiplexer* This);
+
+    HRESULT (STDMETHODCALLTYPE *End)(
+        IMFASFMultiplexer* This,
+        IMFASFContentInfo *pIContentInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetStatistics)(
+        IMFASFMultiplexer* This,
+        WORD wStreamNumber,
+        ASF_MUX_STATISTICS *pMuxStats);
+
+    HRESULT (STDMETHODCALLTYPE *SetSyncTolerance)(
+        IMFASFMultiplexer* This,
+        DWORD msSyncTolerance);
+
+    END_INTERFACE
+} IMFASFMultiplexerVtbl;
+interface IMFASFMultiplexer {
+    CONST_VTBL IMFASFMultiplexerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFASFMultiplexer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFASFMultiplexer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFASFMultiplexer_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFASFMultiplexer methods ***/
+#define IMFASFMultiplexer_Initialize(This,pIContentInfo) (This)->lpVtbl->Initialize(This,pIContentInfo)
+#define IMFASFMultiplexer_SetFlags(This,dwFlags) (This)->lpVtbl->SetFlags(This,dwFlags)
+#define IMFASFMultiplexer_GetFlags(This,pdwFlags) (This)->lpVtbl->GetFlags(This,pdwFlags)
+#define IMFASFMultiplexer_ProcessSample(This,wStreamNumber,pISample,hnsTimestampAdjust) (This)->lpVtbl->ProcessSample(This,wStreamNumber,pISample,hnsTimestampAdjust)
+#define IMFASFMultiplexer_GetNextPacket(This,pdwStatusFlags,ppIPacket) (This)->lpVtbl->GetNextPacket(This,pdwStatusFlags,ppIPacket)
+#define IMFASFMultiplexer_Flush(This) (This)->lpVtbl->Flush(This)
+#define IMFASFMultiplexer_End(This,pIContentInfo) (This)->lpVtbl->End(This,pIContentInfo)
+#define IMFASFMultiplexer_GetStatistics(This,wStreamNumber,pMuxStats) (This)->lpVtbl->GetStatistics(This,wStreamNumber,pMuxStats)
+#define IMFASFMultiplexer_SetSyncTolerance(This,msSyncTolerance) (This)->lpVtbl->SetSyncTolerance(This,msSyncTolerance)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IMFASFMultiplexer_QueryInterface(IMFASFMultiplexer* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IMFASFMultiplexer_AddRef(IMFASFMultiplexer* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IMFASFMultiplexer_Release(IMFASFMultiplexer* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFASFMultiplexer methods ***/
+static FORCEINLINE HRESULT IMFASFMultiplexer_Initialize(IMFASFMultiplexer* This,IMFASFContentInfo *pIContentInfo) {
+    return This->lpVtbl->Initialize(This,pIContentInfo);
+}
+static FORCEINLINE HRESULT IMFASFMultiplexer_SetFlags(IMFASFMultiplexer* This,DWORD dwFlags) {
+    return This->lpVtbl->SetFlags(This,dwFlags);
+}
+static FORCEINLINE HRESULT IMFASFMultiplexer_GetFlags(IMFASFMultiplexer* This,DWORD *pdwFlags) {
+    return This->lpVtbl->GetFlags(This,pdwFlags);
+}
+static FORCEINLINE HRESULT IMFASFMultiplexer_ProcessSample(IMFASFMultiplexer* This,WORD wStreamNumber,IMFSample *pISample,LONGLONG hnsTimestampAdjust) {
+    return This->lpVtbl->ProcessSample(This,wStreamNumber,pISample,hnsTimestampAdjust);
+}
+static FORCEINLINE HRESULT IMFASFMultiplexer_GetNextPacket(IMFASFMultiplexer* This,DWORD *pdwStatusFlags,IMFSample **ppIPacket) {
+    return This->lpVtbl->GetNextPacket(This,pdwStatusFlags,ppIPacket);
+}
+static FORCEINLINE HRESULT IMFASFMultiplexer_Flush(IMFASFMultiplexer* This) {
+    return This->lpVtbl->Flush(This);
+}
+static FORCEINLINE HRESULT IMFASFMultiplexer_End(IMFASFMultiplexer* This,IMFASFContentInfo *pIContentInfo) {
+    return This->lpVtbl->End(This,pIContentInfo);
+}
+static FORCEINLINE HRESULT IMFASFMultiplexer_GetStatistics(IMFASFMultiplexer* This,WORD wStreamNumber,ASF_MUX_STATISTICS *pMuxStats) {
+    return This->lpVtbl->GetStatistics(This,wStreamNumber,pMuxStats);
+}
+static FORCEINLINE HRESULT IMFASFMultiplexer_SetSyncTolerance(IMFASFMultiplexer* This,DWORD msSyncTolerance) {
+    return This->lpVtbl->SetSyncTolerance(This,msSyncTolerance);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMFASFMultiplexer_Initialize_Proxy(
+    IMFASFMultiplexer* This,
+    IMFASFContentInfo *pIContentInfo);
+void __RPC_STUB IMFASFMultiplexer_Initialize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFMultiplexer_SetFlags_Proxy(
+    IMFASFMultiplexer* This,
+    DWORD dwFlags);
+void __RPC_STUB IMFASFMultiplexer_SetFlags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFMultiplexer_GetFlags_Proxy(
+    IMFASFMultiplexer* This,
+    DWORD *pdwFlags);
+void __RPC_STUB IMFASFMultiplexer_GetFlags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFMultiplexer_ProcessSample_Proxy(
+    IMFASFMultiplexer* This,
+    WORD wStreamNumber,
+    IMFSample *pISample,
+    LONGLONG hnsTimestampAdjust);
+void __RPC_STUB IMFASFMultiplexer_ProcessSample_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFMultiplexer_GetNextPacket_Proxy(
+    IMFASFMultiplexer* This,
+    DWORD *pdwStatusFlags,
+    IMFSample **ppIPacket);
+void __RPC_STUB IMFASFMultiplexer_GetNextPacket_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFMultiplexer_Flush_Proxy(
+    IMFASFMultiplexer* This);
+void __RPC_STUB IMFASFMultiplexer_Flush_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFMultiplexer_End_Proxy(
+    IMFASFMultiplexer* This,
+    IMFASFContentInfo *pIContentInfo);
+void __RPC_STUB IMFASFMultiplexer_End_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFMultiplexer_GetStatistics_Proxy(
+    IMFASFMultiplexer* This,
+    WORD wStreamNumber,
+    ASF_MUX_STATISTICS *pMuxStats);
+void __RPC_STUB IMFASFMultiplexer_GetStatistics_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFMultiplexer_SetSyncTolerance_Proxy(
+    IMFASFMultiplexer* This,
+    DWORD msSyncTolerance);
+void __RPC_STUB IMFASFMultiplexer_SetSyncTolerance_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMFASFMultiplexer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMFASFIndexer interface
+ */
+#ifndef __IMFASFIndexer_INTERFACE_DEFINED__
+#define __IMFASFIndexer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFASFIndexer, 0x53590f48, 0xdc3b, 0x4297, 0x81,0x3f, 0x78,0x77,0x61,0xad,0x7b,0x3e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("53590f48-dc3b-4297-813f-787761ad7b3e")
+IMFASFIndexer : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetFlags(
+        DWORD dwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFlags(
+        DWORD *pdwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Initialize(
+        IMFASFContentInfo *pIContentInfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetIndexPosition(
+        IMFASFContentInfo *pIContentInfo,
+        QWORD *pcbIndexOffset) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetIndexByteStreams(
+        IMFByteStream **ppIByteStreams,
+        DWORD cByteStreams) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetIndexByteStreamCount(
+        DWORD *pcByteStreams) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetIndexStatus(
+        ASF_INDEX_IDENTIFIER *pIndexIdentifier,
+        WINBOOL *pfIsIndexed,
+        BYTE *pbIndexDescriptor,
+        DWORD *pcbIndexDescriptor) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetIndexStatus(
+        BYTE *pbIndexDescriptor,
+        DWORD cbIndexDescriptor,
+        WINBOOL fGenerateIndex) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSeekPositionForValue(
+        const PROPVARIANT *pvarValue,
+        ASF_INDEX_IDENTIFIER *pIndexIdentifier,
+        QWORD *pcbOffsetWithinData,
+        MFTIME *phnsApproxTime,
+        DWORD *pdwPayloadNumberOfStreamWithinPacket) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GenerateIndexEntries(
+        IMFSample *pIASFPacketSample) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CommitIndex(
+        IMFASFContentInfo *pIContentInfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetIndexWriteSpace(
+        QWORD *pcbIndexWriteSpace) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCompletedIndex(
+        IMFMediaBuffer *pIIndexBuffer,
+        QWORD cbOffsetWithinIndex) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFASFIndexer, 0x53590f48, 0xdc3b, 0x4297, 0x81,0x3f, 0x78,0x77,0x61,0xad,0x7b,0x3e)
+#endif
+#else
+typedef struct IMFASFIndexerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFASFIndexer* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFASFIndexer* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFASFIndexer* This);
+
+    /*** IMFASFIndexer methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetFlags)(
+        IMFASFIndexer* This,
+        DWORD dwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *GetFlags)(
+        IMFASFIndexer* This,
+        DWORD *pdwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *Initialize)(
+        IMFASFIndexer* This,
+        IMFASFContentInfo *pIContentInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIndexPosition)(
+        IMFASFIndexer* This,
+        IMFASFContentInfo *pIContentInfo,
+        QWORD *pcbIndexOffset);
+
+    HRESULT (STDMETHODCALLTYPE *SetIndexByteStreams)(
+        IMFASFIndexer* This,
+        IMFByteStream **ppIByteStreams,
+        DWORD cByteStreams);
+
+    HRESULT (STDMETHODCALLTYPE *GetIndexByteStreamCount)(
+        IMFASFIndexer* This,
+        DWORD *pcByteStreams);
+
+    HRESULT (STDMETHODCALLTYPE *GetIndexStatus)(
+        IMFASFIndexer* This,
+        ASF_INDEX_IDENTIFIER *pIndexIdentifier,
+        WINBOOL *pfIsIndexed,
+        BYTE *pbIndexDescriptor,
+        DWORD *pcbIndexDescriptor);
+
+    HRESULT (STDMETHODCALLTYPE *SetIndexStatus)(
+        IMFASFIndexer* This,
+        BYTE *pbIndexDescriptor,
+        DWORD cbIndexDescriptor,
+        WINBOOL fGenerateIndex);
+
+    HRESULT (STDMETHODCALLTYPE *GetSeekPositionForValue)(
+        IMFASFIndexer* This,
+        const PROPVARIANT *pvarValue,
+        ASF_INDEX_IDENTIFIER *pIndexIdentifier,
+        QWORD *pcbOffsetWithinData,
+        MFTIME *phnsApproxTime,
+        DWORD *pdwPayloadNumberOfStreamWithinPacket);
+
+    HRESULT (STDMETHODCALLTYPE *GenerateIndexEntries)(
+        IMFASFIndexer* This,
+        IMFSample *pIASFPacketSample);
+
+    HRESULT (STDMETHODCALLTYPE *CommitIndex)(
+        IMFASFIndexer* This,
+        IMFASFContentInfo *pIContentInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIndexWriteSpace)(
+        IMFASFIndexer* This,
+        QWORD *pcbIndexWriteSpace);
+
+    HRESULT (STDMETHODCALLTYPE *GetCompletedIndex)(
+        IMFASFIndexer* This,
+        IMFMediaBuffer *pIIndexBuffer,
+        QWORD cbOffsetWithinIndex);
+
+    END_INTERFACE
+} IMFASFIndexerVtbl;
+interface IMFASFIndexer {
+    CONST_VTBL IMFASFIndexerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFASFIndexer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFASFIndexer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFASFIndexer_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFASFIndexer methods ***/
+#define IMFASFIndexer_SetFlags(This,dwFlags) (This)->lpVtbl->SetFlags(This,dwFlags)
+#define IMFASFIndexer_GetFlags(This,pdwFlags) (This)->lpVtbl->GetFlags(This,pdwFlags)
+#define IMFASFIndexer_Initialize(This,pIContentInfo) (This)->lpVtbl->Initialize(This,pIContentInfo)
+#define IMFASFIndexer_GetIndexPosition(This,pIContentInfo,pcbIndexOffset) (This)->lpVtbl->GetIndexPosition(This,pIContentInfo,pcbIndexOffset)
+#define IMFASFIndexer_SetIndexByteStreams(This,ppIByteStreams,cByteStreams) (This)->lpVtbl->SetIndexByteStreams(This,ppIByteStreams,cByteStreams)
+#define IMFASFIndexer_GetIndexByteStreamCount(This,pcByteStreams) (This)->lpVtbl->GetIndexByteStreamCount(This,pcByteStreams)
+#define IMFASFIndexer_GetIndexStatus(This,pIndexIdentifier,pfIsIndexed,pbIndexDescriptor,pcbIndexDescriptor) (This)->lpVtbl->GetIndexStatus(This,pIndexIdentifier,pfIsIndexed,pbIndexDescriptor,pcbIndexDescriptor)
+#define IMFASFIndexer_SetIndexStatus(This,pbIndexDescriptor,cbIndexDescriptor,fGenerateIndex) (This)->lpVtbl->SetIndexStatus(This,pbIndexDescriptor,cbIndexDescriptor,fGenerateIndex)
+#define IMFASFIndexer_GetSeekPositionForValue(This,pvarValue,pIndexIdentifier,pcbOffsetWithinData,phnsApproxTime,pdwPayloadNumberOfStreamWithinPacket) (This)->lpVtbl->GetSeekPositionForValue(This,pvarValue,pIndexIdentifier,pcbOffsetWithinData,phnsApproxTime,pdwPayloadNumberOfStreamWithinPacket)
+#define IMFASFIndexer_GenerateIndexEntries(This,pIASFPacketSample) (This)->lpVtbl->GenerateIndexEntries(This,pIASFPacketSample)
+#define IMFASFIndexer_CommitIndex(This,pIContentInfo) (This)->lpVtbl->CommitIndex(This,pIContentInfo)
+#define IMFASFIndexer_GetIndexWriteSpace(This,pcbIndexWriteSpace) (This)->lpVtbl->GetIndexWriteSpace(This,pcbIndexWriteSpace)
+#define IMFASFIndexer_GetCompletedIndex(This,pIIndexBuffer,cbOffsetWithinIndex) (This)->lpVtbl->GetCompletedIndex(This,pIIndexBuffer,cbOffsetWithinIndex)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IMFASFIndexer_QueryInterface(IMFASFIndexer* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IMFASFIndexer_AddRef(IMFASFIndexer* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IMFASFIndexer_Release(IMFASFIndexer* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFASFIndexer methods ***/
+static FORCEINLINE HRESULT IMFASFIndexer_SetFlags(IMFASFIndexer* This,DWORD dwFlags) {
+    return This->lpVtbl->SetFlags(This,dwFlags);
+}
+static FORCEINLINE HRESULT IMFASFIndexer_GetFlags(IMFASFIndexer* This,DWORD *pdwFlags) {
+    return This->lpVtbl->GetFlags(This,pdwFlags);
+}
+static FORCEINLINE HRESULT IMFASFIndexer_Initialize(IMFASFIndexer* This,IMFASFContentInfo *pIContentInfo) {
+    return This->lpVtbl->Initialize(This,pIContentInfo);
+}
+static FORCEINLINE HRESULT IMFASFIndexer_GetIndexPosition(IMFASFIndexer* This,IMFASFContentInfo *pIContentInfo,QWORD *pcbIndexOffset) {
+    return This->lpVtbl->GetIndexPosition(This,pIContentInfo,pcbIndexOffset);
+}
+static FORCEINLINE HRESULT IMFASFIndexer_SetIndexByteStreams(IMFASFIndexer* This,IMFByteStream **ppIByteStreams,DWORD cByteStreams) {
+    return This->lpVtbl->SetIndexByteStreams(This,ppIByteStreams,cByteStreams);
+}
+static FORCEINLINE HRESULT IMFASFIndexer_GetIndexByteStreamCount(IMFASFIndexer* This,DWORD *pcByteStreams) {
+    return This->lpVtbl->GetIndexByteStreamCount(This,pcByteStreams);
+}
+static FORCEINLINE HRESULT IMFASFIndexer_GetIndexStatus(IMFASFIndexer* This,ASF_INDEX_IDENTIFIER *pIndexIdentifier,WINBOOL *pfIsIndexed,BYTE *pbIndexDescriptor,DWORD *pcbIndexDescriptor) {
+    return This->lpVtbl->GetIndexStatus(This,pIndexIdentifier,pfIsIndexed,pbIndexDescriptor,pcbIndexDescriptor);
+}
+static FORCEINLINE HRESULT IMFASFIndexer_SetIndexStatus(IMFASFIndexer* This,BYTE *pbIndexDescriptor,DWORD cbIndexDescriptor,WINBOOL fGenerateIndex) {
+    return This->lpVtbl->SetIndexStatus(This,pbIndexDescriptor,cbIndexDescriptor,fGenerateIndex);
+}
+static FORCEINLINE HRESULT IMFASFIndexer_GetSeekPositionForValue(IMFASFIndexer* This,const PROPVARIANT *pvarValue,ASF_INDEX_IDENTIFIER *pIndexIdentifier,QWORD *pcbOffsetWithinData,MFTIME *phnsApproxTime,DWORD *pdwPayloadNumberOfStreamWithinPacket) {
+    return This->lpVtbl->GetSeekPositionForValue(This,pvarValue,pIndexIdentifier,pcbOffsetWithinData,phnsApproxTime,pdwPayloadNumberOfStreamWithinPacket);
+}
+static FORCEINLINE HRESULT IMFASFIndexer_GenerateIndexEntries(IMFASFIndexer* This,IMFSample *pIASFPacketSample) {
+    return This->lpVtbl->GenerateIndexEntries(This,pIASFPacketSample);
+}
+static FORCEINLINE HRESULT IMFASFIndexer_CommitIndex(IMFASFIndexer* This,IMFASFContentInfo *pIContentInfo) {
+    return This->lpVtbl->CommitIndex(This,pIContentInfo);
+}
+static FORCEINLINE HRESULT IMFASFIndexer_GetIndexWriteSpace(IMFASFIndexer* This,QWORD *pcbIndexWriteSpace) {
+    return This->lpVtbl->GetIndexWriteSpace(This,pcbIndexWriteSpace);
+}
+static FORCEINLINE HRESULT IMFASFIndexer_GetCompletedIndex(IMFASFIndexer* This,IMFMediaBuffer *pIIndexBuffer,QWORD cbOffsetWithinIndex) {
+    return This->lpVtbl->GetCompletedIndex(This,pIIndexBuffer,cbOffsetWithinIndex);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMFASFIndexer_SetFlags_Proxy(
+    IMFASFIndexer* This,
+    DWORD dwFlags);
+void __RPC_STUB IMFASFIndexer_SetFlags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFIndexer_GetFlags_Proxy(
+    IMFASFIndexer* This,
+    DWORD *pdwFlags);
+void __RPC_STUB IMFASFIndexer_GetFlags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFIndexer_Initialize_Proxy(
+    IMFASFIndexer* This,
+    IMFASFContentInfo *pIContentInfo);
+void __RPC_STUB IMFASFIndexer_Initialize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFIndexer_GetIndexPosition_Proxy(
+    IMFASFIndexer* This,
+    IMFASFContentInfo *pIContentInfo,
+    QWORD *pcbIndexOffset);
+void __RPC_STUB IMFASFIndexer_GetIndexPosition_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFIndexer_SetIndexByteStreams_Proxy(
+    IMFASFIndexer* This,
+    IMFByteStream **ppIByteStreams,
+    DWORD cByteStreams);
+void __RPC_STUB IMFASFIndexer_SetIndexByteStreams_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFIndexer_GetIndexByteStreamCount_Proxy(
+    IMFASFIndexer* This,
+    DWORD *pcByteStreams);
+void __RPC_STUB IMFASFIndexer_GetIndexByteStreamCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFIndexer_GetIndexStatus_Proxy(
+    IMFASFIndexer* This,
+    ASF_INDEX_IDENTIFIER *pIndexIdentifier,
+    WINBOOL *pfIsIndexed,
+    BYTE *pbIndexDescriptor,
+    DWORD *pcbIndexDescriptor);
+void __RPC_STUB IMFASFIndexer_GetIndexStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFIndexer_SetIndexStatus_Proxy(
+    IMFASFIndexer* This,
+    BYTE *pbIndexDescriptor,
+    DWORD cbIndexDescriptor,
+    WINBOOL fGenerateIndex);
+void __RPC_STUB IMFASFIndexer_SetIndexStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFIndexer_GetSeekPositionForValue_Proxy(
+    IMFASFIndexer* This,
+    const PROPVARIANT *pvarValue,
+    ASF_INDEX_IDENTIFIER *pIndexIdentifier,
+    QWORD *pcbOffsetWithinData,
+    MFTIME *phnsApproxTime,
+    DWORD *pdwPayloadNumberOfStreamWithinPacket);
+void __RPC_STUB IMFASFIndexer_GetSeekPositionForValue_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFIndexer_GenerateIndexEntries_Proxy(
+    IMFASFIndexer* This,
+    IMFSample *pIASFPacketSample);
+void __RPC_STUB IMFASFIndexer_GenerateIndexEntries_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFIndexer_CommitIndex_Proxy(
+    IMFASFIndexer* This,
+    IMFASFContentInfo *pIContentInfo);
+void __RPC_STUB IMFASFIndexer_CommitIndex_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFIndexer_GetIndexWriteSpace_Proxy(
+    IMFASFIndexer* This,
+    QWORD *pcbIndexWriteSpace);
+void __RPC_STUB IMFASFIndexer_GetIndexWriteSpace_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFIndexer_GetCompletedIndex_Proxy(
+    IMFASFIndexer* This,
+    IMFMediaBuffer *pIIndexBuffer,
+    QWORD cbOffsetWithinIndex);
+void __RPC_STUB IMFASFIndexer_GetCompletedIndex_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMFASFIndexer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMFASFStreamSelector interface
+ */
+#ifndef __IMFASFStreamSelector_INTERFACE_DEFINED__
+#define __IMFASFStreamSelector_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFASFStreamSelector, 0xd01bad4a, 0x4fa0, 0x4a60, 0x93,0x49, 0xc2,0x7e,0x62,0xda,0x9d,0x41);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("d01bad4a-4fa0-4a60-9349-c27e62da9d41")
+IMFASFStreamSelector : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetStreamCount(
+        DWORD *pcStreams) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOutputCount(
+        DWORD *pcOutputs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOutputStreamCount(
+        DWORD dwOutputNum,
+        DWORD *pcStreams) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOutputStreamNumbers(
+        DWORD dwOutputNum,
+        WORD *rgwStreamNumbers) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOutputFromStream(
+        WORD wStreamNum,
+        DWORD *pdwOutput) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOutputOverride(
+        DWORD dwOutputNum,
+        ASF_SELECTION_STATUS *pSelection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOutputOverride(
+        DWORD dwOutputNum,
+        ASF_SELECTION_STATUS Selection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOutputMutexCount(
+        DWORD dwOutputNum,
+        DWORD *pcMutexes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOutputMutex(
+        DWORD dwOutputNum,
+        DWORD dwMutexNum,
+        IUnknown **ppMutex) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOutputMutexSelection(
+        DWORD dwOutputNum,
+        DWORD dwMutexNum,
+        WORD wSelectedRecord) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBandwidthStepCount(
+        DWORD *pcStepCount) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBandwidthStep(
+        DWORD dwStepNum,
+        DWORD *pdwBitrate,
+        WORD *rgwStreamNumbers,
+        ASF_SELECTION_STATUS *rgSelections) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BitrateToStepNumber(
+        DWORD dwBitrate,
+        DWORD *pdwStepNum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetStreamSelectorFlags(
+        DWORD dwStreamSelectorFlags) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFASFStreamSelector, 0xd01bad4a, 0x4fa0, 0x4a60, 0x93,0x49, 0xc2,0x7e,0x62,0xda,0x9d,0x41)
+#endif
+#else
+typedef struct IMFASFStreamSelectorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFASFStreamSelector* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFASFStreamSelector* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFASFStreamSelector* This);
+
+    /*** IMFASFStreamSelector methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetStreamCount)(
+        IMFASFStreamSelector* This,
+        DWORD *pcStreams);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputCount)(
+        IMFASFStreamSelector* This,
+        DWORD *pcOutputs);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputStreamCount)(
+        IMFASFStreamSelector* This,
+        DWORD dwOutputNum,
+        DWORD *pcStreams);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputStreamNumbers)(
+        IMFASFStreamSelector* This,
+        DWORD dwOutputNum,
+        WORD *rgwStreamNumbers);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputFromStream)(
+        IMFASFStreamSelector* This,
+        WORD wStreamNum,
+        DWORD *pdwOutput);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputOverride)(
+        IMFASFStreamSelector* This,
+        DWORD dwOutputNum,
+        ASF_SELECTION_STATUS *pSelection);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputOverride)(
+        IMFASFStreamSelector* This,
+        DWORD dwOutputNum,
+        ASF_SELECTION_STATUS Selection);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputMutexCount)(
+        IMFASFStreamSelector* This,
+        DWORD dwOutputNum,
+        DWORD *pcMutexes);
+
+    HRESULT (STDMETHODCALLTYPE *GetOutputMutex)(
+        IMFASFStreamSelector* This,
+        DWORD dwOutputNum,
+        DWORD dwMutexNum,
+        IUnknown **ppMutex);
+
+    HRESULT (STDMETHODCALLTYPE *SetOutputMutexSelection)(
+        IMFASFStreamSelector* This,
+        DWORD dwOutputNum,
+        DWORD dwMutexNum,
+        WORD wSelectedRecord);
+
+    HRESULT (STDMETHODCALLTYPE *GetBandwidthStepCount)(
+        IMFASFStreamSelector* This,
+        DWORD *pcStepCount);
+
+    HRESULT (STDMETHODCALLTYPE *GetBandwidthStep)(
+        IMFASFStreamSelector* This,
+        DWORD dwStepNum,
+        DWORD *pdwBitrate,
+        WORD *rgwStreamNumbers,
+        ASF_SELECTION_STATUS *rgSelections);
+
+    HRESULT (STDMETHODCALLTYPE *BitrateToStepNumber)(
+        IMFASFStreamSelector* This,
+        DWORD dwBitrate,
+        DWORD *pdwStepNum);
+
+    HRESULT (STDMETHODCALLTYPE *SetStreamSelectorFlags)(
+        IMFASFStreamSelector* This,
+        DWORD dwStreamSelectorFlags);
+
+    END_INTERFACE
+} IMFASFStreamSelectorVtbl;
+interface IMFASFStreamSelector {
+    CONST_VTBL IMFASFStreamSelectorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFASFStreamSelector_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFASFStreamSelector_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFASFStreamSelector_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFASFStreamSelector methods ***/
+#define IMFASFStreamSelector_GetStreamCount(This,pcStreams) (This)->lpVtbl->GetStreamCount(This,pcStreams)
+#define IMFASFStreamSelector_GetOutputCount(This,pcOutputs) (This)->lpVtbl->GetOutputCount(This,pcOutputs)
+#define IMFASFStreamSelector_GetOutputStreamCount(This,dwOutputNum,pcStreams) (This)->lpVtbl->GetOutputStreamCount(This,dwOutputNum,pcStreams)
+#define IMFASFStreamSelector_GetOutputStreamNumbers(This,dwOutputNum,rgwStreamNumbers) (This)->lpVtbl->GetOutputStreamNumbers(This,dwOutputNum,rgwStreamNumbers)
+#define IMFASFStreamSelector_GetOutputFromStream(This,wStreamNum,pdwOutput) (This)->lpVtbl->GetOutputFromStream(This,wStreamNum,pdwOutput)
+#define IMFASFStreamSelector_GetOutputOverride(This,dwOutputNum,pSelection) (This)->lpVtbl->GetOutputOverride(This,dwOutputNum,pSelection)
+#define IMFASFStreamSelector_SetOutputOverride(This,dwOutputNum,Selection) (This)->lpVtbl->SetOutputOverride(This,dwOutputNum,Selection)
+#define IMFASFStreamSelector_GetOutputMutexCount(This,dwOutputNum,pcMutexes) (This)->lpVtbl->GetOutputMutexCount(This,dwOutputNum,pcMutexes)
+#define IMFASFStreamSelector_GetOutputMutex(This,dwOutputNum,dwMutexNum,ppMutex) (This)->lpVtbl->GetOutputMutex(This,dwOutputNum,dwMutexNum,ppMutex)
+#define IMFASFStreamSelector_SetOutputMutexSelection(This,dwOutputNum,dwMutexNum,wSelectedRecord) (This)->lpVtbl->SetOutputMutexSelection(This,dwOutputNum,dwMutexNum,wSelectedRecord)
+#define IMFASFStreamSelector_GetBandwidthStepCount(This,pcStepCount) (This)->lpVtbl->GetBandwidthStepCount(This,pcStepCount)
+#define IMFASFStreamSelector_GetBandwidthStep(This,dwStepNum,pdwBitrate,rgwStreamNumbers,rgSelections) (This)->lpVtbl->GetBandwidthStep(This,dwStepNum,pdwBitrate,rgwStreamNumbers,rgSelections)
+#define IMFASFStreamSelector_BitrateToStepNumber(This,dwBitrate,pdwStepNum) (This)->lpVtbl->BitrateToStepNumber(This,dwBitrate,pdwStepNum)
+#define IMFASFStreamSelector_SetStreamSelectorFlags(This,dwStreamSelectorFlags) (This)->lpVtbl->SetStreamSelectorFlags(This,dwStreamSelectorFlags)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IMFASFStreamSelector_QueryInterface(IMFASFStreamSelector* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IMFASFStreamSelector_AddRef(IMFASFStreamSelector* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IMFASFStreamSelector_Release(IMFASFStreamSelector* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFASFStreamSelector methods ***/
+static FORCEINLINE HRESULT IMFASFStreamSelector_GetStreamCount(IMFASFStreamSelector* This,DWORD *pcStreams) {
+    return This->lpVtbl->GetStreamCount(This,pcStreams);
+}
+static FORCEINLINE HRESULT IMFASFStreamSelector_GetOutputCount(IMFASFStreamSelector* This,DWORD *pcOutputs) {
+    return This->lpVtbl->GetOutputCount(This,pcOutputs);
+}
+static FORCEINLINE HRESULT IMFASFStreamSelector_GetOutputStreamCount(IMFASFStreamSelector* This,DWORD dwOutputNum,DWORD *pcStreams) {
+    return This->lpVtbl->GetOutputStreamCount(This,dwOutputNum,pcStreams);
+}
+static FORCEINLINE HRESULT IMFASFStreamSelector_GetOutputStreamNumbers(IMFASFStreamSelector* This,DWORD dwOutputNum,WORD *rgwStreamNumbers) {
+    return This->lpVtbl->GetOutputStreamNumbers(This,dwOutputNum,rgwStreamNumbers);
+}
+static FORCEINLINE HRESULT IMFASFStreamSelector_GetOutputFromStream(IMFASFStreamSelector* This,WORD wStreamNum,DWORD *pdwOutput) {
+    return This->lpVtbl->GetOutputFromStream(This,wStreamNum,pdwOutput);
+}
+static FORCEINLINE HRESULT IMFASFStreamSelector_GetOutputOverride(IMFASFStreamSelector* This,DWORD dwOutputNum,ASF_SELECTION_STATUS *pSelection) {
+    return This->lpVtbl->GetOutputOverride(This,dwOutputNum,pSelection);
+}
+static FORCEINLINE HRESULT IMFASFStreamSelector_SetOutputOverride(IMFASFStreamSelector* This,DWORD dwOutputNum,ASF_SELECTION_STATUS Selection) {
+    return This->lpVtbl->SetOutputOverride(This,dwOutputNum,Selection);
+}
+static FORCEINLINE HRESULT IMFASFStreamSelector_GetOutputMutexCount(IMFASFStreamSelector* This,DWORD dwOutputNum,DWORD *pcMutexes) {
+    return This->lpVtbl->GetOutputMutexCount(This,dwOutputNum,pcMutexes);
+}
+static FORCEINLINE HRESULT IMFASFStreamSelector_GetOutputMutex(IMFASFStreamSelector* This,DWORD dwOutputNum,DWORD dwMutexNum,IUnknown **ppMutex) {
+    return This->lpVtbl->GetOutputMutex(This,dwOutputNum,dwMutexNum,ppMutex);
+}
+static FORCEINLINE HRESULT IMFASFStreamSelector_SetOutputMutexSelection(IMFASFStreamSelector* This,DWORD dwOutputNum,DWORD dwMutexNum,WORD wSelectedRecord) {
+    return This->lpVtbl->SetOutputMutexSelection(This,dwOutputNum,dwMutexNum,wSelectedRecord);
+}
+static FORCEINLINE HRESULT IMFASFStreamSelector_GetBandwidthStepCount(IMFASFStreamSelector* This,DWORD *pcStepCount) {
+    return This->lpVtbl->GetBandwidthStepCount(This,pcStepCount);
+}
+static FORCEINLINE HRESULT IMFASFStreamSelector_GetBandwidthStep(IMFASFStreamSelector* This,DWORD dwStepNum,DWORD *pdwBitrate,WORD *rgwStreamNumbers,ASF_SELECTION_STATUS *rgSelections) {
+    return This->lpVtbl->GetBandwidthStep(This,dwStepNum,pdwBitrate,rgwStreamNumbers,rgSelections);
+}
+static FORCEINLINE HRESULT IMFASFStreamSelector_BitrateToStepNumber(IMFASFStreamSelector* This,DWORD dwBitrate,DWORD *pdwStepNum) {
+    return This->lpVtbl->BitrateToStepNumber(This,dwBitrate,pdwStepNum);
+}
+static FORCEINLINE HRESULT IMFASFStreamSelector_SetStreamSelectorFlags(IMFASFStreamSelector* This,DWORD dwStreamSelectorFlags) {
+    return This->lpVtbl->SetStreamSelectorFlags(This,dwStreamSelectorFlags);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMFASFStreamSelector_GetStreamCount_Proxy(
+    IMFASFStreamSelector* This,
+    DWORD *pcStreams);
+void __RPC_STUB IMFASFStreamSelector_GetStreamCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamSelector_GetOutputCount_Proxy(
+    IMFASFStreamSelector* This,
+    DWORD *pcOutputs);
+void __RPC_STUB IMFASFStreamSelector_GetOutputCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamSelector_GetOutputStreamCount_Proxy(
+    IMFASFStreamSelector* This,
+    DWORD dwOutputNum,
+    DWORD *pcStreams);
+void __RPC_STUB IMFASFStreamSelector_GetOutputStreamCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamSelector_GetOutputStreamNumbers_Proxy(
+    IMFASFStreamSelector* This,
+    DWORD dwOutputNum,
+    WORD *rgwStreamNumbers);
+void __RPC_STUB IMFASFStreamSelector_GetOutputStreamNumbers_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamSelector_GetOutputFromStream_Proxy(
+    IMFASFStreamSelector* This,
+    WORD wStreamNum,
+    DWORD *pdwOutput);
+void __RPC_STUB IMFASFStreamSelector_GetOutputFromStream_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamSelector_GetOutputOverride_Proxy(
+    IMFASFStreamSelector* This,
+    DWORD dwOutputNum,
+    ASF_SELECTION_STATUS *pSelection);
+void __RPC_STUB IMFASFStreamSelector_GetOutputOverride_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamSelector_SetOutputOverride_Proxy(
+    IMFASFStreamSelector* This,
+    DWORD dwOutputNum,
+    ASF_SELECTION_STATUS Selection);
+void __RPC_STUB IMFASFStreamSelector_SetOutputOverride_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamSelector_GetOutputMutexCount_Proxy(
+    IMFASFStreamSelector* This,
+    DWORD dwOutputNum,
+    DWORD *pcMutexes);
+void __RPC_STUB IMFASFStreamSelector_GetOutputMutexCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamSelector_GetOutputMutex_Proxy(
+    IMFASFStreamSelector* This,
+    DWORD dwOutputNum,
+    DWORD dwMutexNum,
+    IUnknown **ppMutex);
+void __RPC_STUB IMFASFStreamSelector_GetOutputMutex_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamSelector_SetOutputMutexSelection_Proxy(
+    IMFASFStreamSelector* This,
+    DWORD dwOutputNum,
+    DWORD dwMutexNum,
+    WORD wSelectedRecord);
+void __RPC_STUB IMFASFStreamSelector_SetOutputMutexSelection_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamSelector_GetBandwidthStepCount_Proxy(
+    IMFASFStreamSelector* This,
+    DWORD *pcStepCount);
+void __RPC_STUB IMFASFStreamSelector_GetBandwidthStepCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamSelector_GetBandwidthStep_Proxy(
+    IMFASFStreamSelector* This,
+    DWORD dwStepNum,
+    DWORD *pdwBitrate,
+    WORD *rgwStreamNumbers,
+    ASF_SELECTION_STATUS *rgSelections);
+void __RPC_STUB IMFASFStreamSelector_GetBandwidthStep_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamSelector_BitrateToStepNumber_Proxy(
+    IMFASFStreamSelector* This,
+    DWORD dwBitrate,
+    DWORD *pdwStepNum);
+void __RPC_STUB IMFASFStreamSelector_BitrateToStepNumber_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamSelector_SetStreamSelectorFlags_Proxy(
+    IMFASFStreamSelector* This,
+    DWORD dwStreamSelectorFlags);
+void __RPC_STUB IMFASFStreamSelector_SetStreamSelectorFlags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMFASFStreamSelector_INTERFACE_DEFINED__ */
+
+#if WINVER >= 0x0601
+/*****************************************************************************
+ * IMFDRMNetHelper interface
+ */
+#ifndef __IMFDRMNetHelper_INTERFACE_DEFINED__
+#define __IMFDRMNetHelper_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFDRMNetHelper, 0x3d1ff0ea, 0x679a, 0x4190, 0x8d,0x46, 0x7f,0xa6,0x9e,0x8c,0x7e,0x15);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("3d1ff0ea-679a-4190-8d46-7fa69e8c7e15")
+IMFDRMNetHelper : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE ProcessLicenseRequest(
+        BYTE *pLicenseRequest,
+        DWORD cbLicenseRequest,
+        BYTE **ppLicenseResponse,
+        DWORD *pcbLicenseResponse,
+        BSTR *pbstrKID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetChainedLicenseResponse(
+        BYTE **ppLicenseResponse,
+        DWORD *pcbLicenseResponse) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFDRMNetHelper, 0x3d1ff0ea, 0x679a, 0x4190, 0x8d,0x46, 0x7f,0xa6,0x9e,0x8c,0x7e,0x15)
+#endif
+#else
+typedef struct IMFDRMNetHelperVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFDRMNetHelper* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFDRMNetHelper* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFDRMNetHelper* This);
+
+    /*** IMFDRMNetHelper methods ***/
+    HRESULT (STDMETHODCALLTYPE *ProcessLicenseRequest)(
+        IMFDRMNetHelper* This,
+        BYTE *pLicenseRequest,
+        DWORD cbLicenseRequest,
+        BYTE **ppLicenseResponse,
+        DWORD *pcbLicenseResponse,
+        BSTR *pbstrKID);
+
+    HRESULT (STDMETHODCALLTYPE *GetChainedLicenseResponse)(
+        IMFDRMNetHelper* This,
+        BYTE **ppLicenseResponse,
+        DWORD *pcbLicenseResponse);
+
+    END_INTERFACE
+} IMFDRMNetHelperVtbl;
+interface IMFDRMNetHelper {
+    CONST_VTBL IMFDRMNetHelperVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFDRMNetHelper_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFDRMNetHelper_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFDRMNetHelper_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFDRMNetHelper methods ***/
+#define IMFDRMNetHelper_ProcessLicenseRequest(This,pLicenseRequest,cbLicenseRequest,ppLicenseResponse,pcbLicenseResponse,pbstrKID) (This)->lpVtbl->ProcessLicenseRequest(This,pLicenseRequest,cbLicenseRequest,ppLicenseResponse,pcbLicenseResponse,pbstrKID)
+#define IMFDRMNetHelper_GetChainedLicenseResponse(This,ppLicenseResponse,pcbLicenseResponse) (This)->lpVtbl->GetChainedLicenseResponse(This,ppLicenseResponse,pcbLicenseResponse)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IMFDRMNetHelper_QueryInterface(IMFDRMNetHelper* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IMFDRMNetHelper_AddRef(IMFDRMNetHelper* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IMFDRMNetHelper_Release(IMFDRMNetHelper* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFDRMNetHelper methods ***/
+static FORCEINLINE HRESULT IMFDRMNetHelper_ProcessLicenseRequest(IMFDRMNetHelper* This,BYTE *pLicenseRequest,DWORD cbLicenseRequest,BYTE **ppLicenseResponse,DWORD *pcbLicenseResponse,BSTR *pbstrKID) {
+    return This->lpVtbl->ProcessLicenseRequest(This,pLicenseRequest,cbLicenseRequest,ppLicenseResponse,pcbLicenseResponse,pbstrKID);
+}
+static FORCEINLINE HRESULT IMFDRMNetHelper_GetChainedLicenseResponse(IMFDRMNetHelper* This,BYTE **ppLicenseResponse,DWORD *pcbLicenseResponse) {
+    return This->lpVtbl->GetChainedLicenseResponse(This,ppLicenseResponse,pcbLicenseResponse);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMFDRMNetHelper_ProcessLicenseRequest_Proxy(
+    IMFDRMNetHelper* This,
+    BYTE *pLicenseRequest,
+    DWORD cbLicenseRequest,
+    BYTE **ppLicenseResponse,
+    DWORD *pcbLicenseResponse,
+    BSTR *pbstrKID);
+void __RPC_STUB IMFDRMNetHelper_ProcessLicenseRequest_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFDRMNetHelper_GetChainedLicenseResponse_Proxy(
+    IMFDRMNetHelper* This,
+    BYTE **ppLicenseResponse,
+    DWORD *pcbLicenseResponse);
+void __RPC_STUB IMFDRMNetHelper_GetChainedLicenseResponse_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMFDRMNetHelper_INTERFACE_DEFINED__ */
+
+#endif
+/*****************************************************************************
+ * IMFASFProfile interface
+ */
+#ifndef __IMFASFProfile_INTERFACE_DEFINED__
+#define __IMFASFProfile_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFASFProfile, 0xd267bf6a, 0x028b, 0x4e0d, 0x90,0x3d, 0x43,0xf0,0xef,0x82,0xd0,0xd4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("d267bf6a-028b-4e0d-903d-43f0ef82d0d4")
+IMFASFProfile : public IMFAttributes
+{
+    virtual HRESULT STDMETHODCALLTYPE GetStreamCount(
+        DWORD *pcStreams) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStream(
+        DWORD dwStreamIndex,
+        WORD *pwStreamNumber,
+        IMFASFStreamConfig **ppIStream) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStreamByNumber(
+        WORD wStreamNumber,
+        IMFASFStreamConfig **ppIStream) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetStream(
+        IMFASFStreamConfig *pIStream) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveStream(
+        WORD wStreamNumber) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateStream(
+        IMFMediaType *pIMediaType,
+        IMFASFStreamConfig **ppIStream) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMutualExclusionCount(
+        DWORD *pcMutexs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMutualExclusion(
+        DWORD dwMutexIndex,
+        IMFASFMutualExclusion **ppIMutex) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddMutualExclusion(
+        IMFASFMutualExclusion *pIMutex) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveMutualExclusion(
+        DWORD dwMutexIndex) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateMutualExclusion(
+        IMFASFMutualExclusion **ppIMutex) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStreamPrioritization(
+        IMFASFStreamPrioritization **ppIStreamPrioritization) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddStreamPrioritization(
+        IMFASFStreamPrioritization *pIStreamPrioritization) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveStreamPrioritization(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateStreamPrioritization(
+        IMFASFStreamPrioritization **ppIStreamPrioritization) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IMFASFProfile **ppIProfile) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFASFProfile, 0xd267bf6a, 0x028b, 0x4e0d, 0x90,0x3d, 0x43,0xf0,0xef,0x82,0xd0,0xd4)
+#endif
+#else
+typedef struct IMFASFProfileVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFASFProfile* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFASFProfile* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFASFProfile* This);
+
+    /*** IMFAttributes methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetItem)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        PROPVARIANT *pValue);
+
+    HRESULT (STDMETHODCALLTYPE *GetItemType)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        MF_ATTRIBUTE_TYPE *pType);
+
+    HRESULT (STDMETHODCALLTYPE *CompareItem)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        REFPROPVARIANT Value,
+        WINBOOL *pbResult);
+
+    HRESULT (STDMETHODCALLTYPE *Compare)(
+        IMFASFProfile* This,
+        IMFAttributes *pTheirs,
+        MF_ATTRIBUTES_MATCH_TYPE MatchType,
+        WINBOOL *pbResult);
+
+    HRESULT (STDMETHODCALLTYPE *GetUINT32)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        UINT32 *punValue);
+
+    HRESULT (STDMETHODCALLTYPE *GetUINT64)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        UINT64 *punValue);
+
+    HRESULT (STDMETHODCALLTYPE *GetDouble)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        double *pfValue);
+
+    HRESULT (STDMETHODCALLTYPE *GetGUID)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        GUID *pguidValue);
+
+    HRESULT (STDMETHODCALLTYPE *GetStringLength)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        UINT32 *pcchLength);
+
+    HRESULT (STDMETHODCALLTYPE *GetString)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        LPWSTR pwszValue,
+        UINT32 cchBufSize,
+        UINT32 *pcchLength);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllocatedString)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        LPWSTR *ppwszValue,
+        UINT32 *pcchLength);
+
+    HRESULT (STDMETHODCALLTYPE *GetBlobSize)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        UINT32 *pcbBlobSize);
+
+    HRESULT (STDMETHODCALLTYPE *GetBlob)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        UINT8 *pBuf,
+        UINT32 cbBufSize,
+        UINT32 *pcbBlobSize);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllocatedBlob)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        UINT8 **ppBuf,
+        UINT32 *pcbSize);
+
+    HRESULT (STDMETHODCALLTYPE *GetUnknown)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        REFIID riid,
+        LPVOID *ppv);
+
+    HRESULT (STDMETHODCALLTYPE *SetItem)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        REFPROPVARIANT Value);
+
+    HRESULT (STDMETHODCALLTYPE *DeleteItem)(
+        IMFASFProfile* This,
+        REFGUID guidKey);
+
+    HRESULT (STDMETHODCALLTYPE *DeleteAllItems)(
+        IMFASFProfile* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetUINT32)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        UINT32 unValue);
+
+    HRESULT (STDMETHODCALLTYPE *SetUINT64)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        UINT64 unValue);
+
+    HRESULT (STDMETHODCALLTYPE *SetDouble)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        double fValue);
+
+    HRESULT (STDMETHODCALLTYPE *SetGUID)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        REFGUID guidValue);
+
+    HRESULT (STDMETHODCALLTYPE *SetString)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        LPCWSTR wszValue);
+
+    HRESULT (STDMETHODCALLTYPE *SetBlob)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        const UINT8 *pBuf,
+        UINT32 cbBufSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetUnknown)(
+        IMFASFProfile* This,
+        REFGUID guidKey,
+        IUnknown *pUnknown);
+
+    HRESULT (STDMETHODCALLTYPE *LockStore)(
+        IMFASFProfile* This);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockStore)(
+        IMFASFProfile* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetCount)(
+        IMFASFProfile* This,
+        UINT32 *pcItems);
+
+    HRESULT (STDMETHODCALLTYPE *GetItemByIndex)(
+        IMFASFProfile* This,
+        UINT32 unIndex,
+        GUID *pguidKey,
+        PROPVARIANT *pValue);
+
+    HRESULT (STDMETHODCALLTYPE *CopyAllItems)(
+        IMFASFProfile* This,
+        IMFAttributes *pDest);
+
+    /*** IMFASFProfile methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetStreamCount)(
+        IMFASFProfile* This,
+        DWORD *pcStreams);
+
+    HRESULT (STDMETHODCALLTYPE *GetStream)(
+        IMFASFProfile* This,
+        DWORD dwStreamIndex,
+        WORD *pwStreamNumber,
+        IMFASFStreamConfig **ppIStream);
+
+    HRESULT (STDMETHODCALLTYPE *GetStreamByNumber)(
+        IMFASFProfile* This,
+        WORD wStreamNumber,
+        IMFASFStreamConfig **ppIStream);
+
+    HRESULT (STDMETHODCALLTYPE *SetStream)(
+        IMFASFProfile* This,
+        IMFASFStreamConfig *pIStream);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveStream)(
+        IMFASFProfile* This,
+        WORD wStreamNumber);
+
+    HRESULT (STDMETHODCALLTYPE *CreateStream)(
+        IMFASFProfile* This,
+        IMFMediaType *pIMediaType,
+        IMFASFStreamConfig **ppIStream);
+
+    HRESULT (STDMETHODCALLTYPE *GetMutualExclusionCount)(
+        IMFASFProfile* This,
+        DWORD *pcMutexs);
+
+    HRESULT (STDMETHODCALLTYPE *GetMutualExclusion)(
+        IMFASFProfile* This,
+        DWORD dwMutexIndex,
+        IMFASFMutualExclusion **ppIMutex);
+
+    HRESULT (STDMETHODCALLTYPE *AddMutualExclusion)(
+        IMFASFProfile* This,
+        IMFASFMutualExclusion *pIMutex);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveMutualExclusion)(
+        IMFASFProfile* This,
+        DWORD dwMutexIndex);
+
+    HRESULT (STDMETHODCALLTYPE *CreateMutualExclusion)(
+        IMFASFProfile* This,
+        IMFASFMutualExclusion **ppIMutex);
+
+    HRESULT (STDMETHODCALLTYPE *GetStreamPrioritization)(
+        IMFASFProfile* This,
+        IMFASFStreamPrioritization **ppIStreamPrioritization);
+
+    HRESULT (STDMETHODCALLTYPE *AddStreamPrioritization)(
+        IMFASFProfile* This,
+        IMFASFStreamPrioritization *pIStreamPrioritization);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveStreamPrioritization)(
+        IMFASFProfile* This);
+
+    HRESULT (STDMETHODCALLTYPE *CreateStreamPrioritization)(
+        IMFASFProfile* This,
+        IMFASFStreamPrioritization **ppIStreamPrioritization);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IMFASFProfile* This,
+        IMFASFProfile **ppIProfile);
+
+    END_INTERFACE
+} IMFASFProfileVtbl;
+interface IMFASFProfile {
+    CONST_VTBL IMFASFProfileVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFASFProfile_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFASFProfile_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFASFProfile_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFAttributes methods ***/
+#define IMFASFProfile_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
+#define IMFASFProfile_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
+#define IMFASFProfile_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
+#define IMFASFProfile_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
+#define IMFASFProfile_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
+#define IMFASFProfile_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
+#define IMFASFProfile_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
+#define IMFASFProfile_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
+#define IMFASFProfile_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
+#define IMFASFProfile_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
+#define IMFASFProfile_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
+#define IMFASFProfile_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
+#define IMFASFProfile_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
+#define IMFASFProfile_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
+#define IMFASFProfile_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
+#define IMFASFProfile_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
+#define IMFASFProfile_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
+#define IMFASFProfile_DeleteAllItems(This) (This)->lpVtbl->DeleteAllItems(This)
+#define IMFASFProfile_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
+#define IMFASFProfile_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
+#define IMFASFProfile_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
+#define IMFASFProfile_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
+#define IMFASFProfile_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
+#define IMFASFProfile_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
+#define IMFASFProfile_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
+#define IMFASFProfile_LockStore(This) (This)->lpVtbl->LockStore(This)
+#define IMFASFProfile_UnlockStore(This) (This)->lpVtbl->UnlockStore(This)
+#define IMFASFProfile_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
+#define IMFASFProfile_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
+#define IMFASFProfile_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
+/*** IMFASFProfile methods ***/
+#define IMFASFProfile_GetStreamCount(This,pcStreams) (This)->lpVtbl->GetStreamCount(This,pcStreams)
+#define IMFASFProfile_GetStream(This,dwStreamIndex,pwStreamNumber,ppIStream) (This)->lpVtbl->GetStream(This,dwStreamIndex,pwStreamNumber,ppIStream)
+#define IMFASFProfile_GetStreamByNumber(This,wStreamNumber,ppIStream) (This)->lpVtbl->GetStreamByNumber(This,wStreamNumber,ppIStream)
+#define IMFASFProfile_SetStream(This,pIStream) (This)->lpVtbl->SetStream(This,pIStream)
+#define IMFASFProfile_RemoveStream(This,wStreamNumber) (This)->lpVtbl->RemoveStream(This,wStreamNumber)
+#define IMFASFProfile_CreateStream(This,pIMediaType,ppIStream) (This)->lpVtbl->CreateStream(This,pIMediaType,ppIStream)
+#define IMFASFProfile_GetMutualExclusionCount(This,pcMutexs) (This)->lpVtbl->GetMutualExclusionCount(This,pcMutexs)
+#define IMFASFProfile_GetMutualExclusion(This,dwMutexIndex,ppIMutex) (This)->lpVtbl->GetMutualExclusion(This,dwMutexIndex,ppIMutex)
+#define IMFASFProfile_AddMutualExclusion(This,pIMutex) (This)->lpVtbl->AddMutualExclusion(This,pIMutex)
+#define IMFASFProfile_RemoveMutualExclusion(This,dwMutexIndex) (This)->lpVtbl->RemoveMutualExclusion(This,dwMutexIndex)
+#define IMFASFProfile_CreateMutualExclusion(This,ppIMutex) (This)->lpVtbl->CreateMutualExclusion(This,ppIMutex)
+#define IMFASFProfile_GetStreamPrioritization(This,ppIStreamPrioritization) (This)->lpVtbl->GetStreamPrioritization(This,ppIStreamPrioritization)
+#define IMFASFProfile_AddStreamPrioritization(This,pIStreamPrioritization) (This)->lpVtbl->AddStreamPrioritization(This,pIStreamPrioritization)
+#define IMFASFProfile_RemoveStreamPrioritization(This) (This)->lpVtbl->RemoveStreamPrioritization(This)
+#define IMFASFProfile_CreateStreamPrioritization(This,ppIStreamPrioritization) (This)->lpVtbl->CreateStreamPrioritization(This,ppIStreamPrioritization)
+#define IMFASFProfile_Clone(This,ppIProfile) (This)->lpVtbl->Clone(This,ppIProfile)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IMFASFProfile_QueryInterface(IMFASFProfile* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IMFASFProfile_AddRef(IMFASFProfile* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IMFASFProfile_Release(IMFASFProfile* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFAttributes methods ***/
+static FORCEINLINE HRESULT IMFASFProfile_GetItem(IMFASFProfile* This,REFGUID guidKey,PROPVARIANT *pValue) {
+    return This->lpVtbl->GetItem(This,guidKey,pValue);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetItemType(IMFASFProfile* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
+    return This->lpVtbl->GetItemType(This,guidKey,pType);
+}
+static FORCEINLINE HRESULT IMFASFProfile_CompareItem(IMFASFProfile* This,REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) {
+    return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
+}
+static FORCEINLINE HRESULT IMFASFProfile_Compare(IMFASFProfile* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) {
+    return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetUINT32(IMFASFProfile* This,REFGUID guidKey,UINT32 *punValue) {
+    return This->lpVtbl->GetUINT32(This,guidKey,punValue);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetUINT64(IMFASFProfile* This,REFGUID guidKey,UINT64 *punValue) {
+    return This->lpVtbl->GetUINT64(This,guidKey,punValue);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetDouble(IMFASFProfile* This,REFGUID guidKey,double *pfValue) {
+    return This->lpVtbl->GetDouble(This,guidKey,pfValue);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetGUID(IMFASFProfile* This,REFGUID guidKey,GUID *pguidValue) {
+    return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetStringLength(IMFASFProfile* This,REFGUID guidKey,UINT32 *pcchLength) {
+    return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetString(IMFASFProfile* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
+    return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetAllocatedString(IMFASFProfile* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
+    return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetBlobSize(IMFASFProfile* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
+    return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetBlob(IMFASFProfile* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
+    return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetAllocatedBlob(IMFASFProfile* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
+    return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetUnknown(IMFASFProfile* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
+    return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
+}
+static FORCEINLINE HRESULT IMFASFProfile_SetItem(IMFASFProfile* This,REFGUID guidKey,REFPROPVARIANT Value) {
+    return This->lpVtbl->SetItem(This,guidKey,Value);
+}
+static FORCEINLINE HRESULT IMFASFProfile_DeleteItem(IMFASFProfile* This,REFGUID guidKey) {
+    return This->lpVtbl->DeleteItem(This,guidKey);
+}
+static FORCEINLINE HRESULT IMFASFProfile_DeleteAllItems(IMFASFProfile* This) {
+    return This->lpVtbl->DeleteAllItems(This);
+}
+static FORCEINLINE HRESULT IMFASFProfile_SetUINT32(IMFASFProfile* This,REFGUID guidKey,UINT32 unValue) {
+    return This->lpVtbl->SetUINT32(This,guidKey,unValue);
+}
+static FORCEINLINE HRESULT IMFASFProfile_SetUINT64(IMFASFProfile* This,REFGUID guidKey,UINT64 unValue) {
+    return This->lpVtbl->SetUINT64(This,guidKey,unValue);
+}
+static FORCEINLINE HRESULT IMFASFProfile_SetDouble(IMFASFProfile* This,REFGUID guidKey,double fValue) {
+    return This->lpVtbl->SetDouble(This,guidKey,fValue);
+}
+static FORCEINLINE HRESULT IMFASFProfile_SetGUID(IMFASFProfile* This,REFGUID guidKey,REFGUID guidValue) {
+    return This->lpVtbl->SetGUID(This,guidKey,guidValue);
+}
+static FORCEINLINE HRESULT IMFASFProfile_SetString(IMFASFProfile* This,REFGUID guidKey,LPCWSTR wszValue) {
+    return This->lpVtbl->SetString(This,guidKey,wszValue);
+}
+static FORCEINLINE HRESULT IMFASFProfile_SetBlob(IMFASFProfile* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
+    return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
+}
+static FORCEINLINE HRESULT IMFASFProfile_SetUnknown(IMFASFProfile* This,REFGUID guidKey,IUnknown *pUnknown) {
+    return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
+}
+static FORCEINLINE HRESULT IMFASFProfile_LockStore(IMFASFProfile* This) {
+    return This->lpVtbl->LockStore(This);
+}
+static FORCEINLINE HRESULT IMFASFProfile_UnlockStore(IMFASFProfile* This) {
+    return This->lpVtbl->UnlockStore(This);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetCount(IMFASFProfile* This,UINT32 *pcItems) {
+    return This->lpVtbl->GetCount(This,pcItems);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetItemByIndex(IMFASFProfile* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
+    return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
+}
+static FORCEINLINE HRESULT IMFASFProfile_CopyAllItems(IMFASFProfile* This,IMFAttributes *pDest) {
+    return This->lpVtbl->CopyAllItems(This,pDest);
+}
+/*** IMFASFProfile methods ***/
+static FORCEINLINE HRESULT IMFASFProfile_GetStreamCount(IMFASFProfile* This,DWORD *pcStreams) {
+    return This->lpVtbl->GetStreamCount(This,pcStreams);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetStream(IMFASFProfile* This,DWORD dwStreamIndex,WORD *pwStreamNumber,IMFASFStreamConfig **ppIStream) {
+    return This->lpVtbl->GetStream(This,dwStreamIndex,pwStreamNumber,ppIStream);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetStreamByNumber(IMFASFProfile* This,WORD wStreamNumber,IMFASFStreamConfig **ppIStream) {
+    return This->lpVtbl->GetStreamByNumber(This,wStreamNumber,ppIStream);
+}
+static FORCEINLINE HRESULT IMFASFProfile_SetStream(IMFASFProfile* This,IMFASFStreamConfig *pIStream) {
+    return This->lpVtbl->SetStream(This,pIStream);
+}
+static FORCEINLINE HRESULT IMFASFProfile_RemoveStream(IMFASFProfile* This,WORD wStreamNumber) {
+    return This->lpVtbl->RemoveStream(This,wStreamNumber);
+}
+static FORCEINLINE HRESULT IMFASFProfile_CreateStream(IMFASFProfile* This,IMFMediaType *pIMediaType,IMFASFStreamConfig **ppIStream) {
+    return This->lpVtbl->CreateStream(This,pIMediaType,ppIStream);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetMutualExclusionCount(IMFASFProfile* This,DWORD *pcMutexs) {
+    return This->lpVtbl->GetMutualExclusionCount(This,pcMutexs);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetMutualExclusion(IMFASFProfile* This,DWORD dwMutexIndex,IMFASFMutualExclusion **ppIMutex) {
+    return This->lpVtbl->GetMutualExclusion(This,dwMutexIndex,ppIMutex);
+}
+static FORCEINLINE HRESULT IMFASFProfile_AddMutualExclusion(IMFASFProfile* This,IMFASFMutualExclusion *pIMutex) {
+    return This->lpVtbl->AddMutualExclusion(This,pIMutex);
+}
+static FORCEINLINE HRESULT IMFASFProfile_RemoveMutualExclusion(IMFASFProfile* This,DWORD dwMutexIndex) {
+    return This->lpVtbl->RemoveMutualExclusion(This,dwMutexIndex);
+}
+static FORCEINLINE HRESULT IMFASFProfile_CreateMutualExclusion(IMFASFProfile* This,IMFASFMutualExclusion **ppIMutex) {
+    return This->lpVtbl->CreateMutualExclusion(This,ppIMutex);
+}
+static FORCEINLINE HRESULT IMFASFProfile_GetStreamPrioritization(IMFASFProfile* This,IMFASFStreamPrioritization **ppIStreamPrioritization) {
+    return This->lpVtbl->GetStreamPrioritization(This,ppIStreamPrioritization);
+}
+static FORCEINLINE HRESULT IMFASFProfile_AddStreamPrioritization(IMFASFProfile* This,IMFASFStreamPrioritization *pIStreamPrioritization) {
+    return This->lpVtbl->AddStreamPrioritization(This,pIStreamPrioritization);
+}
+static FORCEINLINE HRESULT IMFASFProfile_RemoveStreamPrioritization(IMFASFProfile* This) {
+    return This->lpVtbl->RemoveStreamPrioritization(This);
+}
+static FORCEINLINE HRESULT IMFASFProfile_CreateStreamPrioritization(IMFASFProfile* This,IMFASFStreamPrioritization **ppIStreamPrioritization) {
+    return This->lpVtbl->CreateStreamPrioritization(This,ppIStreamPrioritization);
+}
+static FORCEINLINE HRESULT IMFASFProfile_Clone(IMFASFProfile* This,IMFASFProfile **ppIProfile) {
+    return This->lpVtbl->Clone(This,ppIProfile);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMFASFProfile_GetStreamCount_Proxy(
+    IMFASFProfile* This,
+    DWORD *pcStreams);
+void __RPC_STUB IMFASFProfile_GetStreamCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFProfile_GetStream_Proxy(
+    IMFASFProfile* This,
+    DWORD dwStreamIndex,
+    WORD *pwStreamNumber,
+    IMFASFStreamConfig **ppIStream);
+void __RPC_STUB IMFASFProfile_GetStream_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFProfile_GetStreamByNumber_Proxy(
+    IMFASFProfile* This,
+    WORD wStreamNumber,
+    IMFASFStreamConfig **ppIStream);
+void __RPC_STUB IMFASFProfile_GetStreamByNumber_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFProfile_SetStream_Proxy(
+    IMFASFProfile* This,
+    IMFASFStreamConfig *pIStream);
+void __RPC_STUB IMFASFProfile_SetStream_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFProfile_RemoveStream_Proxy(
+    IMFASFProfile* This,
+    WORD wStreamNumber);
+void __RPC_STUB IMFASFProfile_RemoveStream_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFProfile_CreateStream_Proxy(
+    IMFASFProfile* This,
+    IMFMediaType *pIMediaType,
+    IMFASFStreamConfig **ppIStream);
+void __RPC_STUB IMFASFProfile_CreateStream_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFProfile_GetMutualExclusionCount_Proxy(
+    IMFASFProfile* This,
+    DWORD *pcMutexs);
+void __RPC_STUB IMFASFProfile_GetMutualExclusionCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFProfile_GetMutualExclusion_Proxy(
+    IMFASFProfile* This,
+    DWORD dwMutexIndex,
+    IMFASFMutualExclusion **ppIMutex);
+void __RPC_STUB IMFASFProfile_GetMutualExclusion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFProfile_AddMutualExclusion_Proxy(
+    IMFASFProfile* This,
+    IMFASFMutualExclusion *pIMutex);
+void __RPC_STUB IMFASFProfile_AddMutualExclusion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFProfile_RemoveMutualExclusion_Proxy(
+    IMFASFProfile* This,
+    DWORD dwMutexIndex);
+void __RPC_STUB IMFASFProfile_RemoveMutualExclusion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFProfile_CreateMutualExclusion_Proxy(
+    IMFASFProfile* This,
+    IMFASFMutualExclusion **ppIMutex);
+void __RPC_STUB IMFASFProfile_CreateMutualExclusion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFProfile_GetStreamPrioritization_Proxy(
+    IMFASFProfile* This,
+    IMFASFStreamPrioritization **ppIStreamPrioritization);
+void __RPC_STUB IMFASFProfile_GetStreamPrioritization_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFProfile_AddStreamPrioritization_Proxy(
+    IMFASFProfile* This,
+    IMFASFStreamPrioritization *pIStreamPrioritization);
+void __RPC_STUB IMFASFProfile_AddStreamPrioritization_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFProfile_RemoveStreamPrioritization_Proxy(
+    IMFASFProfile* This);
+void __RPC_STUB IMFASFProfile_RemoveStreamPrioritization_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFProfile_CreateStreamPrioritization_Proxy(
+    IMFASFProfile* This,
+    IMFASFStreamPrioritization **ppIStreamPrioritization);
+void __RPC_STUB IMFASFProfile_CreateStreamPrioritization_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFProfile_Clone_Proxy(
+    IMFASFProfile* This,
+    IMFASFProfile **ppIProfile);
+void __RPC_STUB IMFASFProfile_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMFASFProfile_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMFASFStreamConfig interface
+ */
+#ifndef __IMFASFStreamConfig_INTERFACE_DEFINED__
+#define __IMFASFStreamConfig_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFASFStreamConfig, 0x9e8ae8d2, 0xdbbd, 0x4200, 0x9a,0xca, 0x06,0xe6,0xdf,0x48,0x49,0x13);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("9e8ae8d2-dbbd-4200-9aca-06e6df484913")
+IMFASFStreamConfig : public IMFAttributes
+{
+    virtual HRESULT STDMETHODCALLTYPE GetStreamType(
+        GUID *pguidStreamType) = 0;
+
+    virtual WORD STDMETHODCALLTYPE GetStreamNumber(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetStreamNumber(
+        WORD wStreamNum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMediaType(
+        IMFMediaType **ppIMediaType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetMediaType(
+        IMFMediaType *pIMediaType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPayloadExtensionCount(
+        WORD *pcPayloadExtensions) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPayloadExtension(
+        WORD wPayloadExtensionNumber,
+        GUID *pguidExtensionSystemID,
+        WORD *pcbExtensionDataSize,
+        BYTE *pbExtensionSystemInfo,
+        DWORD *pcbExtensionSystemInfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddPayloadExtension(
+        GUID guidExtensionSystemID,
+        WORD cbExtensionDataSize,
+        BYTE *pbExtensionSystemInfo,
+        DWORD cbExtensionSystemInfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveAllPayloadExtensions(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IMFASFStreamConfig **ppIStreamConfig) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFASFStreamConfig, 0x9e8ae8d2, 0xdbbd, 0x4200, 0x9a,0xca, 0x06,0xe6,0xdf,0x48,0x49,0x13)
+#endif
+#else
+typedef struct IMFASFStreamConfigVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFASFStreamConfig* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFASFStreamConfig* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFASFStreamConfig* This);
+
+    /*** IMFAttributes methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetItem)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        PROPVARIANT *pValue);
+
+    HRESULT (STDMETHODCALLTYPE *GetItemType)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        MF_ATTRIBUTE_TYPE *pType);
+
+    HRESULT (STDMETHODCALLTYPE *CompareItem)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        REFPROPVARIANT Value,
+        WINBOOL *pbResult);
+
+    HRESULT (STDMETHODCALLTYPE *Compare)(
+        IMFASFStreamConfig* This,
+        IMFAttributes *pTheirs,
+        MF_ATTRIBUTES_MATCH_TYPE MatchType,
+        WINBOOL *pbResult);
+
+    HRESULT (STDMETHODCALLTYPE *GetUINT32)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        UINT32 *punValue);
+
+    HRESULT (STDMETHODCALLTYPE *GetUINT64)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        UINT64 *punValue);
+
+    HRESULT (STDMETHODCALLTYPE *GetDouble)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        double *pfValue);
+
+    HRESULT (STDMETHODCALLTYPE *GetGUID)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        GUID *pguidValue);
+
+    HRESULT (STDMETHODCALLTYPE *GetStringLength)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        UINT32 *pcchLength);
+
+    HRESULT (STDMETHODCALLTYPE *GetString)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        LPWSTR pwszValue,
+        UINT32 cchBufSize,
+        UINT32 *pcchLength);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllocatedString)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        LPWSTR *ppwszValue,
+        UINT32 *pcchLength);
+
+    HRESULT (STDMETHODCALLTYPE *GetBlobSize)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        UINT32 *pcbBlobSize);
+
+    HRESULT (STDMETHODCALLTYPE *GetBlob)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        UINT8 *pBuf,
+        UINT32 cbBufSize,
+        UINT32 *pcbBlobSize);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllocatedBlob)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        UINT8 **ppBuf,
+        UINT32 *pcbSize);
+
+    HRESULT (STDMETHODCALLTYPE *GetUnknown)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        REFIID riid,
+        LPVOID *ppv);
+
+    HRESULT (STDMETHODCALLTYPE *SetItem)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        REFPROPVARIANT Value);
+
+    HRESULT (STDMETHODCALLTYPE *DeleteItem)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey);
+
+    HRESULT (STDMETHODCALLTYPE *DeleteAllItems)(
+        IMFASFStreamConfig* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetUINT32)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        UINT32 unValue);
+
+    HRESULT (STDMETHODCALLTYPE *SetUINT64)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        UINT64 unValue);
+
+    HRESULT (STDMETHODCALLTYPE *SetDouble)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        double fValue);
+
+    HRESULT (STDMETHODCALLTYPE *SetGUID)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        REFGUID guidValue);
+
+    HRESULT (STDMETHODCALLTYPE *SetString)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        LPCWSTR wszValue);
+
+    HRESULT (STDMETHODCALLTYPE *SetBlob)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        const UINT8 *pBuf,
+        UINT32 cbBufSize);
+
+    HRESULT (STDMETHODCALLTYPE *SetUnknown)(
+        IMFASFStreamConfig* This,
+        REFGUID guidKey,
+        IUnknown *pUnknown);
+
+    HRESULT (STDMETHODCALLTYPE *LockStore)(
+        IMFASFStreamConfig* This);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockStore)(
+        IMFASFStreamConfig* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetCount)(
+        IMFASFStreamConfig* This,
+        UINT32 *pcItems);
+
+    HRESULT (STDMETHODCALLTYPE *GetItemByIndex)(
+        IMFASFStreamConfig* This,
+        UINT32 unIndex,
+        GUID *pguidKey,
+        PROPVARIANT *pValue);
+
+    HRESULT (STDMETHODCALLTYPE *CopyAllItems)(
+        IMFASFStreamConfig* This,
+        IMFAttributes *pDest);
+
+    /*** IMFASFStreamConfig methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetStreamType)(
+        IMFASFStreamConfig* This,
+        GUID *pguidStreamType);
+
+    WORD (STDMETHODCALLTYPE *GetStreamNumber)(
+        IMFASFStreamConfig* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetStreamNumber)(
+        IMFASFStreamConfig* This,
+        WORD wStreamNum);
+
+    HRESULT (STDMETHODCALLTYPE *GetMediaType)(
+        IMFASFStreamConfig* This,
+        IMFMediaType **ppIMediaType);
+
+    HRESULT (STDMETHODCALLTYPE *SetMediaType)(
+        IMFASFStreamConfig* This,
+        IMFMediaType *pIMediaType);
+
+    HRESULT (STDMETHODCALLTYPE *GetPayloadExtensionCount)(
+        IMFASFStreamConfig* This,
+        WORD *pcPayloadExtensions);
+
+    HRESULT (STDMETHODCALLTYPE *GetPayloadExtension)(
+        IMFASFStreamConfig* This,
+        WORD wPayloadExtensionNumber,
+        GUID *pguidExtensionSystemID,
+        WORD *pcbExtensionDataSize,
+        BYTE *pbExtensionSystemInfo,
+        DWORD *pcbExtensionSystemInfo);
+
+    HRESULT (STDMETHODCALLTYPE *AddPayloadExtension)(
+        IMFASFStreamConfig* This,
+        GUID guidExtensionSystemID,
+        WORD cbExtensionDataSize,
+        BYTE *pbExtensionSystemInfo,
+        DWORD cbExtensionSystemInfo);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveAllPayloadExtensions)(
+        IMFASFStreamConfig* This);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IMFASFStreamConfig* This,
+        IMFASFStreamConfig **ppIStreamConfig);
+
+    END_INTERFACE
+} IMFASFStreamConfigVtbl;
+interface IMFASFStreamConfig {
+    CONST_VTBL IMFASFStreamConfigVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFASFStreamConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFASFStreamConfig_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFASFStreamConfig_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFAttributes methods ***/
+#define IMFASFStreamConfig_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
+#define IMFASFStreamConfig_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
+#define IMFASFStreamConfig_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
+#define IMFASFStreamConfig_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
+#define IMFASFStreamConfig_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
+#define IMFASFStreamConfig_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
+#define IMFASFStreamConfig_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
+#define IMFASFStreamConfig_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
+#define IMFASFStreamConfig_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
+#define IMFASFStreamConfig_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
+#define IMFASFStreamConfig_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
+#define IMFASFStreamConfig_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
+#define IMFASFStreamConfig_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
+#define IMFASFStreamConfig_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
+#define IMFASFStreamConfig_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
+#define IMFASFStreamConfig_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
+#define IMFASFStreamConfig_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
+#define IMFASFStreamConfig_DeleteAllItems(This) (This)->lpVtbl->DeleteAllItems(This)
+#define IMFASFStreamConfig_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
+#define IMFASFStreamConfig_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
+#define IMFASFStreamConfig_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
+#define IMFASFStreamConfig_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
+#define IMFASFStreamConfig_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
+#define IMFASFStreamConfig_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
+#define IMFASFStreamConfig_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
+#define IMFASFStreamConfig_LockStore(This) (This)->lpVtbl->LockStore(This)
+#define IMFASFStreamConfig_UnlockStore(This) (This)->lpVtbl->UnlockStore(This)
+#define IMFASFStreamConfig_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
+#define IMFASFStreamConfig_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
+#define IMFASFStreamConfig_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
+/*** IMFASFStreamConfig methods ***/
+#define IMFASFStreamConfig_GetStreamType(This,pguidStreamType) (This)->lpVtbl->GetStreamType(This,pguidStreamType)
+#define IMFASFStreamConfig_GetStreamNumber(This) (This)->lpVtbl->GetStreamNumber(This)
+#define IMFASFStreamConfig_SetStreamNumber(This,wStreamNum) (This)->lpVtbl->SetStreamNumber(This,wStreamNum)
+#define IMFASFStreamConfig_GetMediaType(This,ppIMediaType) (This)->lpVtbl->GetMediaType(This,ppIMediaType)
+#define IMFASFStreamConfig_SetMediaType(This,pIMediaType) (This)->lpVtbl->SetMediaType(This,pIMediaType)
+#define IMFASFStreamConfig_GetPayloadExtensionCount(This,pcPayloadExtensions) (This)->lpVtbl->GetPayloadExtensionCount(This,pcPayloadExtensions)
+#define IMFASFStreamConfig_GetPayloadExtension(This,wPayloadExtensionNumber,pguidExtensionSystemID,pcbExtensionDataSize,pbExtensionSystemInfo,pcbExtensionSystemInfo) (This)->lpVtbl->GetPayloadExtension(This,wPayloadExtensionNumber,pguidExtensionSystemID,pcbExtensionDataSize,pbExtensionSystemInfo,pcbExtensionSystemInfo)
+#define IMFASFStreamConfig_AddPayloadExtension(This,guidExtensionSystemID,cbExtensionDataSize,pbExtensionSystemInfo,cbExtensionSystemInfo) (This)->lpVtbl->AddPayloadExtension(This,guidExtensionSystemID,cbExtensionDataSize,pbExtensionSystemInfo,cbExtensionSystemInfo)
+#define IMFASFStreamConfig_RemoveAllPayloadExtensions(This) (This)->lpVtbl->RemoveAllPayloadExtensions(This)
+#define IMFASFStreamConfig_Clone(This,ppIStreamConfig) (This)->lpVtbl->Clone(This,ppIStreamConfig)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IMFASFStreamConfig_QueryInterface(IMFASFStreamConfig* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IMFASFStreamConfig_AddRef(IMFASFStreamConfig* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IMFASFStreamConfig_Release(IMFASFStreamConfig* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFAttributes methods ***/
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetItem(IMFASFStreamConfig* This,REFGUID guidKey,PROPVARIANT *pValue) {
+    return This->lpVtbl->GetItem(This,guidKey,pValue);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetItemType(IMFASFStreamConfig* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
+    return This->lpVtbl->GetItemType(This,guidKey,pType);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_CompareItem(IMFASFStreamConfig* This,REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) {
+    return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_Compare(IMFASFStreamConfig* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) {
+    return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetUINT32(IMFASFStreamConfig* This,REFGUID guidKey,UINT32 *punValue) {
+    return This->lpVtbl->GetUINT32(This,guidKey,punValue);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetUINT64(IMFASFStreamConfig* This,REFGUID guidKey,UINT64 *punValue) {
+    return This->lpVtbl->GetUINT64(This,guidKey,punValue);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetDouble(IMFASFStreamConfig* This,REFGUID guidKey,double *pfValue) {
+    return This->lpVtbl->GetDouble(This,guidKey,pfValue);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetGUID(IMFASFStreamConfig* This,REFGUID guidKey,GUID *pguidValue) {
+    return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetStringLength(IMFASFStreamConfig* This,REFGUID guidKey,UINT32 *pcchLength) {
+    return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetString(IMFASFStreamConfig* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
+    return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetAllocatedString(IMFASFStreamConfig* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
+    return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetBlobSize(IMFASFStreamConfig* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
+    return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetBlob(IMFASFStreamConfig* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
+    return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetAllocatedBlob(IMFASFStreamConfig* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
+    return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetUnknown(IMFASFStreamConfig* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
+    return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_SetItem(IMFASFStreamConfig* This,REFGUID guidKey,REFPROPVARIANT Value) {
+    return This->lpVtbl->SetItem(This,guidKey,Value);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_DeleteItem(IMFASFStreamConfig* This,REFGUID guidKey) {
+    return This->lpVtbl->DeleteItem(This,guidKey);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_DeleteAllItems(IMFASFStreamConfig* This) {
+    return This->lpVtbl->DeleteAllItems(This);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_SetUINT32(IMFASFStreamConfig* This,REFGUID guidKey,UINT32 unValue) {
+    return This->lpVtbl->SetUINT32(This,guidKey,unValue);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_SetUINT64(IMFASFStreamConfig* This,REFGUID guidKey,UINT64 unValue) {
+    return This->lpVtbl->SetUINT64(This,guidKey,unValue);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_SetDouble(IMFASFStreamConfig* This,REFGUID guidKey,double fValue) {
+    return This->lpVtbl->SetDouble(This,guidKey,fValue);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_SetGUID(IMFASFStreamConfig* This,REFGUID guidKey,REFGUID guidValue) {
+    return This->lpVtbl->SetGUID(This,guidKey,guidValue);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_SetString(IMFASFStreamConfig* This,REFGUID guidKey,LPCWSTR wszValue) {
+    return This->lpVtbl->SetString(This,guidKey,wszValue);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_SetBlob(IMFASFStreamConfig* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
+    return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_SetUnknown(IMFASFStreamConfig* This,REFGUID guidKey,IUnknown *pUnknown) {
+    return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_LockStore(IMFASFStreamConfig* This) {
+    return This->lpVtbl->LockStore(This);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_UnlockStore(IMFASFStreamConfig* This) {
+    return This->lpVtbl->UnlockStore(This);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetCount(IMFASFStreamConfig* This,UINT32 *pcItems) {
+    return This->lpVtbl->GetCount(This,pcItems);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetItemByIndex(IMFASFStreamConfig* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
+    return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_CopyAllItems(IMFASFStreamConfig* This,IMFAttributes *pDest) {
+    return This->lpVtbl->CopyAllItems(This,pDest);
+}
+/*** IMFASFStreamConfig methods ***/
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetStreamType(IMFASFStreamConfig* This,GUID *pguidStreamType) {
+    return This->lpVtbl->GetStreamType(This,pguidStreamType);
+}
+static FORCEINLINE WORD IMFASFStreamConfig_GetStreamNumber(IMFASFStreamConfig* This) {
+    return This->lpVtbl->GetStreamNumber(This);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_SetStreamNumber(IMFASFStreamConfig* This,WORD wStreamNum) {
+    return This->lpVtbl->SetStreamNumber(This,wStreamNum);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetMediaType(IMFASFStreamConfig* This,IMFMediaType **ppIMediaType) {
+    return This->lpVtbl->GetMediaType(This,ppIMediaType);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_SetMediaType(IMFASFStreamConfig* This,IMFMediaType *pIMediaType) {
+    return This->lpVtbl->SetMediaType(This,pIMediaType);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetPayloadExtensionCount(IMFASFStreamConfig* This,WORD *pcPayloadExtensions) {
+    return This->lpVtbl->GetPayloadExtensionCount(This,pcPayloadExtensions);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_GetPayloadExtension(IMFASFStreamConfig* This,WORD wPayloadExtensionNumber,GUID *pguidExtensionSystemID,WORD *pcbExtensionDataSize,BYTE *pbExtensionSystemInfo,DWORD *pcbExtensionSystemInfo) {
+    return This->lpVtbl->GetPayloadExtension(This,wPayloadExtensionNumber,pguidExtensionSystemID,pcbExtensionDataSize,pbExtensionSystemInfo,pcbExtensionSystemInfo);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_AddPayloadExtension(IMFASFStreamConfig* This,GUID guidExtensionSystemID,WORD cbExtensionDataSize,BYTE *pbExtensionSystemInfo,DWORD cbExtensionSystemInfo) {
+    return This->lpVtbl->AddPayloadExtension(This,guidExtensionSystemID,cbExtensionDataSize,pbExtensionSystemInfo,cbExtensionSystemInfo);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_RemoveAllPayloadExtensions(IMFASFStreamConfig* This) {
+    return This->lpVtbl->RemoveAllPayloadExtensions(This);
+}
+static FORCEINLINE HRESULT IMFASFStreamConfig_Clone(IMFASFStreamConfig* This,IMFASFStreamConfig **ppIStreamConfig) {
+    return This->lpVtbl->Clone(This,ppIStreamConfig);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMFASFStreamConfig_GetStreamType_Proxy(
+    IMFASFStreamConfig* This,
+    GUID *pguidStreamType);
+void __RPC_STUB IMFASFStreamConfig_GetStreamType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+WORD STDMETHODCALLTYPE IMFASFStreamConfig_GetStreamNumber_Proxy(
+    IMFASFStreamConfig* This);
+void __RPC_STUB IMFASFStreamConfig_GetStreamNumber_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamConfig_SetStreamNumber_Proxy(
+    IMFASFStreamConfig* This,
+    WORD wStreamNum);
+void __RPC_STUB IMFASFStreamConfig_SetStreamNumber_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamConfig_GetMediaType_Proxy(
+    IMFASFStreamConfig* This,
+    IMFMediaType **ppIMediaType);
+void __RPC_STUB IMFASFStreamConfig_GetMediaType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamConfig_SetMediaType_Proxy(
+    IMFASFStreamConfig* This,
+    IMFMediaType *pIMediaType);
+void __RPC_STUB IMFASFStreamConfig_SetMediaType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamConfig_GetPayloadExtensionCount_Proxy(
+    IMFASFStreamConfig* This,
+    WORD *pcPayloadExtensions);
+void __RPC_STUB IMFASFStreamConfig_GetPayloadExtensionCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamConfig_GetPayloadExtension_Proxy(
+    IMFASFStreamConfig* This,
+    WORD wPayloadExtensionNumber,
+    GUID *pguidExtensionSystemID,
+    WORD *pcbExtensionDataSize,
+    BYTE *pbExtensionSystemInfo,
+    DWORD *pcbExtensionSystemInfo);
+void __RPC_STUB IMFASFStreamConfig_GetPayloadExtension_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamConfig_AddPayloadExtension_Proxy(
+    IMFASFStreamConfig* This,
+    GUID guidExtensionSystemID,
+    WORD cbExtensionDataSize,
+    BYTE *pbExtensionSystemInfo,
+    DWORD cbExtensionSystemInfo);
+void __RPC_STUB IMFASFStreamConfig_AddPayloadExtension_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamConfig_RemoveAllPayloadExtensions_Proxy(
+    IMFASFStreamConfig* This);
+void __RPC_STUB IMFASFStreamConfig_RemoveAllPayloadExtensions_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFASFStreamConfig_Clone_Proxy(
+    IMFASFStreamConfig* This,
+    IMFASFStreamConfig **ppIStreamConfig);
+void __RPC_STUB IMFASFStreamConfig_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMFASFStreamConfig_INTERFACE_DEFINED__ */
+
+
+EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY MFPKEY_ASFMEDIASINK_BASE_SENDTIME = { { 0xcddcbc82, 0x3411, 0x4119, 0x91, 0x35, 0x84, 0x23, 0xc4, 0x1b, 0x39, 0x57}, 3  };
+EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY MFPKEY_ASFMEDIASINK_AUTOADJUST_BITRATE = { { 0xcddcbc82, 0x3411, 0x4119, 0x91, 0x35, 0x84, 0x23, 0xc4, 0x1b, 0x39, 0x57}, 4  };
+EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY MFPKEY_ASFMEDIASINK_DRMACTION = { { 0xa1db6f6c, 0x1d0a, 0x4cb6, 0x82, 0x54, 0xcb, 0x36, 0xbe, 0xed, 0xbc, 0x48}, 5  };
+EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY MFPKEY_ASFSTREAMSINK_CORRECTED_LEAKYBUCKET = { { 0xa2f152fb, 0x8ad9, 0x4a11, 0xb3, 0x45, 0x2c, 0xe2, 0xfa, 0xd8, 0x72, 0x3d}, 1  };
+
+STDAPI MFCreateASFContentInfo(IMFASFContentInfo **ppIContentInfo);
+STDAPI MFCreateASFIndexer(IMFASFIndexer **ppIIndexer);
+STDAPI MFCreateASFIndexerByteStream(IMFByteStream *pIContentByteStream, QWORD cbIndexStartOffset, IMFByteStream **pIIndexByteStream);
+STDAPI MFCreateASFMediaSink(IMFByteStream *pIByteStream, IMFMediaSink **ppIMediaSink);
+STDAPI MFCreateASFMediaSinkActivate(LPCWSTR pwszFileName, IMFASFContentInfo *pContentInfo, IMFActivate **ppIActivate);
+STDAPI MFCreateASFMultiplexer(IMFASFMultiplexer **ppIMultiplexer);
+STDAPI MFCreateASFProfile(IMFASFProfile **ppIProfile);
+STDAPI MFCreateASFProfileFromPresentationDescriptor(IMFPresentationDescriptor  *pIPD, IMFASFProfile **ppIProfile);
+STDAPI MFCreateASFSplitter(IMFASFSplitter **ppISplitter);
+STDAPI MFCreateASFStreamingMediaSink(IMFByteStream *pIByteStream, IMFMediaSink **ppIMediaSink);
+STDAPI MFCreateASFStreamingMediaSinkActivate(IMFActivate *pByteStreamActivate, IMFASFContentInfo *pContentInfo, IMFActivate **ppIActivate);
+STDAPI MFCreateASFStreamSelector(IMFASFProfile *pIASFProfile, IMFASFStreamSelector **ppSelector);
+STDAPI MFCreatePresentationDescriptorFromASFProfile(IMFASFProfile *pIProfile, IMFPresentationDescriptor **ppIPD);
+HRESULT STDMETHODCALLTYPE MFCreateWMVEncoderActivate(IMFMediaType *pMediaType, IPropertyStore *pEncodingConfigurationProperties, IMFActivate **ppActivate);
+HRESULT STDMETHODCALLTYPE MFCreateWMAEncoderActivate(IMFMediaType *pMediaType, IPropertyStore *pEncodingConfigurationProperties, IMFActivate **ppActivate);
+#endif
+/* Begin additional prototypes for all interfaces */
+
+ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
+unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
+unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
+void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
+
+/* End additional prototypes */
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif /* (_WIN32_WINNT >= 0x0600) */
-#endif /*_INC_WMCONTAINER*/
+#endif /* __wmcontainer_h__ */
diff --git a/mingw-w64-headers/include/wmcontainer.idl b/mingw-w64-headers/include/wmcontainer.idl
new file mode 100644
index 0000000..c0b6497
--- /dev/null
+++ b/mingw-w64-headers/include/wmcontainer.idl
@@ -0,0 +1,309 @@
+/**
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+
+cpp_quote("#include <winapifamily.h>")
+cpp_quote("")
+cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)")
+
+import "mfidl.idl";
+
+cpp_quote("")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_FILE_ID, 0x3de649b4, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_CREATION_TIME, 0x3de649b6, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_FLAGS, 0x3de649bb, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_MAX_PACKET_SIZE, 0x3de649bd, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_MAX_BITRATE, 0x3de649be, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_MIN_PACKET_SIZE, 0x3de649bc, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_PACKETS, 0x3de649b7, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_PLAY_DURATION, 0x3de649b8, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_PREROLL, 0x3de649ba, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_FILEPROPERTIES_SEND_DURATION, 0x3de649b9, 0xd76d, 0x4e66, 0x9e, 0xc9, 0x78, 0x12, 0xf, 0xb4, 0xc7, 0xe3);")
+cpp_quote("EXTERN_GUID(CLSID_WMDRMSystemID, 0x8948BB22, 0x11BD, 0x4796, 0x93, 0xE3, 0x97, 0x4D, 0x1B, 0x57, 0x56, 0x78);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_CONTENTENCRYPTION_KEYID, 0x8520fe3e, 0x277e, 0x46ea, 0x99, 0xe4, 0xe3, 0xa, 0x86, 0xdb, 0x12, 0xbe);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_CONTENTENCRYPTION_LICENSE_URL, 0x8520fe40, 0x277e, 0x46ea, 0x99, 0xe4, 0xe3, 0xa, 0x86, 0xdb, 0x12, 0xbe);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_CONTENTENCRYPTION_SECRET_DATA, 0x8520fe3f, 0x277e, 0x46ea, 0x99, 0xe4, 0xe3, 0xa, 0x86, 0xdb, 0x12, 0xbe);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_CONTENTENCRYPTION_TYPE, 0x8520fe3d, 0x277e, 0x46ea, 0x99, 0xe4, 0xe3, 0xa, 0x86, 0xdb, 0x12, 0xbe);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_CONTENTENCRYPTIONEX_ENCRYPTION_DATA, 0x62508be5, 0xecdf, 0x4924, 0xa3, 0x59, 0x72, 0xba, 0xb3, 0x39, 0x7b, 0x9d);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_LANGLIST, 0xf23de43c, 0x9977, 0x460d, 0xa6, 0xec, 0x32, 0x93, 0x7f, 0x16, 0xf, 0x7d);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_MARKER, 0x5134330e, 0x83a6, 0x475e, 0xa9, 0xd5, 0x4f, 0xb8, 0x75, 0xfb, 0x2e, 0x31);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_SCRIPT, 0xe29cd0d7, 0xd602, 0x4923, 0xa7, 0xfe, 0x73, 0xfd, 0x97, 0xec, 0xc6, 0x50);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_CODECLIST, 0xe4bb3509, 0xc18d, 0x4df1, 0xbb, 0x99, 0x7a, 0x36, 0xb3, 0xcc, 0x41, 0x19);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_METADATA_IS_VBR, 0x5fc6947a, 0xef60, 0x445d, 0xb4, 0x49, 0x44, 0x2e, 0xcc, 0x78, 0xb4, 0xc1);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_METADATA_V8_VBRPEAK, 0x5fc6947b, 0xef60, 0x445d, 0xb4, 0x49, 0x44, 0x2e, 0xcc, 0x78, 0xb4, 0xc1);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_METADATA_V8_BUFFERAVERAGE, 0x5fc6947c, 0xef60, 0x445d, 0xb4, 0x49, 0x44, 0x2e, 0xcc, 0x78, 0xb4, 0xc1);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_METADATA_LEAKY_BUCKET_PAIRS, 0x5fc6947d, 0xef60, 0x445d, 0xb4, 0x49, 0x44, 0x2e, 0xcc, 0x78, 0xb4, 0xc1);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_DATA_START_OFFSET, 0xe7d5b3e7, 0x1f29, 0x45d3, 0x88, 0x22, 0x3e, 0x78, 0xfa, 0xe2, 0x72, 0xed);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_DATA_LENGTH, 0xe7d5b3e8, 0x1f29, 0x45d3, 0x88, 0x22, 0x3e, 0x78, 0xfa, 0xe2, 0x72, 0xed);")
+cpp_quote("EXTERN_GUID(MF_SD_ASF_EXTSTRMPROP_LANGUAGE_ID_INDEX, 0x48f8a522, 0x305d, 0x422d, 0x85, 0x24, 0x25, 0x2, 0xdd, 0xa3, 0x36, 0x80);")
+cpp_quote("EXTERN_GUID(MF_SD_ASF_EXTSTRMPROP_AVG_DATA_BITRATE, 0x48f8a523, 0x305d, 0x422d, 0x85, 0x24, 0x25, 0x2, 0xdd, 0xa3, 0x36, 0x80);")
+cpp_quote("EXTERN_GUID(MF_SD_ASF_EXTSTRMPROP_AVG_BUFFERSIZE, 0x48f8a524, 0x305d, 0x422d, 0x85, 0x24, 0x25, 0x2, 0xdd, 0xa3, 0x36, 0x80);")
+cpp_quote("EXTERN_GUID(MF_SD_ASF_EXTSTRMPROP_MAX_DATA_BITRATE, 0x48f8a525, 0x305d, 0x422d, 0x85, 0x24, 0x25, 0x2, 0xdd, 0xa3, 0x36, 0x80);")
+cpp_quote("EXTERN_GUID(MF_SD_ASF_EXTSTRMPROP_MAX_BUFFERSIZE, 0x48f8a526, 0x305d, 0x422d, 0x85, 0x24, 0x25, 0x2, 0xdd, 0xa3, 0x36, 0x80);")
+cpp_quote("EXTERN_GUID(MF_SD_ASF_STREAMBITRATES_BITRATE, 0xa8e182ed, 0xafc8, 0x43d0, 0xb0, 0xd1, 0xf6, 0x5b, 0xad, 0x9d, 0xa5, 0x58);")
+cpp_quote("EXTERN_GUID(MF_SD_ASF_METADATA_DEVICE_CONFORMANCE_TEMPLATE, 0x245e929d, 0xc44e, 0x4f7e, 0xbb, 0x3c, 0x77, 0xd4, 0xdf, 0xd2, 0x7f, 0x8a);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_INFO_HAS_AUDIO, 0x80e62295, 0x2296, 0x4a44, 0xb3, 0x1c, 0xd1, 0x3, 0xc6, 0xfe, 0xd2, 0x3c);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_INFO_HAS_VIDEO, 0x80e62296, 0x2296, 0x4a44, 0xb3, 0x1c, 0xd1, 0x3, 0xc6, 0xfe, 0xd2, 0x3c);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_INFO_HAS_NON_AUDIO_VIDEO, 0x80e62297, 0x2296, 0x4a44, 0xb3, 0x1c, 0xd1, 0x3, 0xc6, 0xfe, 0xd2, 0x3c);")
+cpp_quote("#if WINVER >= 0x0601")
+cpp_quote("EXTERN_GUID(MFASFINDEXER_TYPE_TIMECODE, 0x49815231, 0x6bad, 0x44fd, 0x81, 0xa, 0x3f, 0x60, 0x98, 0x4e, 0xc7, 0xfd);")
+cpp_quote("EXTERN_GUID(MF_PD_ASF_LANGLIST_LEGACYORDER, 0xf23de43d, 0x9977, 0x460d, 0xa6, 0xec, 0x32, 0x93, 0x7f, 0x16, 0xf, 0x7d);")
+cpp_quote("#endif")
+cpp_quote("")
+cpp_quote("EXTERN_GUID(MFASFMutexType_Bitrate, 0x72178C2C, 0xE45B, 0x11D5, 0xBC, 0x2A, 0x00, 0xB0, 0xD0, 0xF3, 0xF4, 0xAB);")
+cpp_quote("EXTERN_GUID(MFASFMutexType_Language, 0x72178C2B, 0xE45B, 0x11D5, 0xBC, 0x2A, 0x00, 0xB0, 0xD0, 0xF3, 0xF4, 0xAB);")
+cpp_quote("EXTERN_GUID(MFASFMutexType_Presentation, 0x72178C2D, 0xE45B, 0x11D5, 0xBC, 0x2A, 0x00, 0xB0, 0xD0, 0xF3, 0xF4, 0xAB);")
+cpp_quote("EXTERN_GUID(MFASFMutexType_Unknown, 0x72178C2E, 0xE45B, 0x11D5, 0xBC, 0x2A, 0x00, 0xB0, 0xD0, 0xF3, 0xF4, 0xAB);")
+cpp_quote("EXTERN_GUID(MFASFSampleExtension_ContentType, 0xd590dc20, 0x07bc, 0x436c, 0x9c, 0xf7, 0xf3, 0xbb, 0xfb, 0xf1, 0xa4, 0xdc);")
+cpp_quote("EXTERN_GUID(MFASFSampleExtension_Encryption_SampleID, 0x6698B84E, 0x0AFA, 0x4330, 0xAE, 0xB2, 0x1C, 0x0A, 0x98, 0xD7, 0xA4, 0x4D);")
+cpp_quote("EXTERN_GUID(MFASFSampleExtension_Encryption_KeyID, 0x76376591,  0x795f,  0x4da1, 0x86, 0xed, 0x9d, 0x46, 0xec, 0xa1, 0x09, 0xa9);")
+cpp_quote("EXTERN_GUID(MFASFSampleExtension_FileName, 0xe165ec0e, 0x19ed, 0x45d7, 0xb4, 0xa7, 0x25, 0xcb, 0xd1, 0xe2, 0x8e, 0x9b);")
+cpp_quote("EXTERN_GUID(MFASFSampleExtension_OutputCleanPoint, 0xf72a3c6f, 0x6eb4, 0x4ebc, 0xb1, 0x92, 0x9, 0xad, 0x97, 0x59, 0xe8, 0x28);")
+cpp_quote("EXTERN_GUID(MFASFSampleExtension_PixelAspectRatio, 0x1b1ee554, 0xf9ea, 0x4bc8, 0x82, 0x1a, 0x37, 0x6b, 0x74, 0xe4, 0xc4, 0xb8);")
+cpp_quote("EXTERN_GUID(MFASFSampleExtension_SampleDuration, 0xc6bd9450, 0x867f, 0x4907, 0x83, 0xa3, 0xc7, 0x79, 0x21, 0xb7, 0x33, 0xad);")
+cpp_quote("EXTERN_GUID(MFASFSampleExtension_SMPTE, 0x399595ec, 0x8667, 0x4e2d, 0x8f, 0xdb, 0x98, 0x81, 0x4c, 0xe7, 0x6c, 0x1e);")
+cpp_quote("EXTERN_GUID(MFASFSPLITTER_PACKET_BOUNDARY, 0xfe584a05, 0xe8d6, 0x42e3, 0xb1, 0x76, 0xf1, 0x21, 0x17, 0x5, 0xfb, 0x6f);")
+cpp_quote("EXTERN_GUID(MF_ASFPROFILE_MINPACKETSIZE, 0x22587626, 0x47de, 0x4168, 0x87, 0xf5, 0xb5, 0xaa, 0x9b, 0x12, 0xa8, 0xf0);")
+cpp_quote("EXTERN_GUID(MF_ASFPROFILE_MAXPACKETSIZE, 0x22587627, 0x47de, 0x4168, 0x87, 0xf5, 0xb5, 0xaa, 0x9b, 0x12, 0xa8, 0xf0);")
+cpp_quote("EXTERN_GUID(MF_ASFSTREAMCONFIG_LEAKYBUCKET1, 0xc69b5901, 0xea1a, 0x4c9b, 0xb6, 0x92, 0xe2, 0xa0, 0xd2, 0x9a, 0x8a, 0xdd);")
+cpp_quote("EXTERN_GUID(MF_ASFSTREAMCONFIG_LEAKYBUCKET2, 0xc69b5902, 0xea1a, 0x4c9b, 0xb6, 0x92, 0xe2, 0xa0, 0xd2, 0x9a, 0x8a, 0xdd);")
+
+interface IMFASFProfile;
+interface IMFASFStreamConfig;
+interface IMFASFMutualExclusion;
+interface IMFASFStreamPrioritization;
+
+cpp_quote("#define MFASFINDEXER_PER_ENTRY_BYTES_DYNAMIC 0xffff")
+cpp_quote("#define MFASFINDEXER_NO_FIXED_INTERVAL 0xffffffff")
+cpp_quote("#define MFASFINDEXER_READ_FOR_REVERSEPLAYBACK_OUTOFDATASEGMENT 0xffffffffffffffffll")
+cpp_quote("#define MFASFINDEXER_APPROX_SEEK_TIME_UNKNOWN 0xffffffffffffffffll")
+cpp_quote("")
+cpp_quote("#define MFASF_MIN_HEADER_BYTES (sizeof (GUID) + sizeof (QWORD))")
+cpp_quote("")
+cpp_quote("#define  MFASF_MAX_STREAM_NUMBER 127")
+cpp_quote("#define  MFASF_INVALID_STREAM_NUMBER (MFASF_MAX_STREAM_NUMBER + 1)")
+cpp_quote("#define  MFASF_PAYLOADEXTENSION_MAX_SIZE 0xff")
+cpp_quote("#define  MFASF_PAYLOADEXTENSION_VARIABLE_SIZE 0xffff")
+cpp_quote("#define  MFASF_DEFAULT_BUFFER_WINDOW_MS 3000")
+
+cpp_quote("")
+typedef enum MFASF_SPLITTERFLAGS {
+  MFASF_SPLITTER_REVERSE = 0x00000001,
+  MFASF_SPLITTER_WMDRM = 0x00000002,
+} MFASF_SPLITTERFLAGS;
+
+typedef enum ASF_STATUSFLAGS {
+  ASF_STATUSFLAGS_INCOMPLETE = 0x1
+#if WINVER >= 0x0601
+  ,ASF_STATUSFLAGS_NONFATAL_ERROR = 0x2
+#endif
+} ASF_STATUSFLAGS;
+
+typedef enum MFASF_MULTIPLEXERFLAGS {
+  MFASF_MULTIPLEXER_AUTOADJUST_BITRATE = 0x1
+} MFASF_MULTIPLEXERFLAGS;
+
+typedef enum MFASF_INDEXERFLAGS {
+  MFASF_INDEXER_WRITE_NEW_INDEX = 0x1,
+  MFASF_INDEXER_READ_FOR_REVERSEPLAYBACK = 0x2,
+  MFASF_INDEXER_WRITE_FOR_LIVEREAD = 0x4
+} MFASF_INDEXER_FLAGS;
+
+typedef enum MFASF_STREAMSELECTORFLAGS {
+  MFASF_STREAMSELECTOR_DISABLE_THINNING = 0x00000001,
+  MFASF_STREAMSELECTOR_USE_AVERAGE_BITRATE = 0x00000002,
+} MFASF_STREAMSELECTOR_FLAGS;
+
+typedef enum ASF_SELECTION_STATUS {
+  ASF_STATUS_NOTSELECTED = 0,
+  ASF_STATUS_CLEANPOINTSONLY = 1,
+  ASF_STATUS_ALLDATAUNITS = 2,
+} ASF_SELECTION_STATUS;
+
+typedef enum _MFSINK_WMDRMACTION {
+  MFSINK_WMDRMACTION_UNDEFINED = 0,
+  MFSINK_WMDRMACTION_ENCODE = 1,
+  MFSINK_WMDRMACTION_TRANSCODE = 2,
+  MFSINK_WMDRMACTION_TRANSCRYPT = 3,
+  MFSINK_WMDRMACTION_LAST = 3
+} MFSINK_WMDRMACTION;
+
+cpp_quote("")
+typedef struct ASF_MUX_STATISTICS {
+  DWORD cFramesWritten;
+  DWORD cFramesDropped;
+} ASF_MUX_STATISTICS;
+
+typedef struct _ASF_INDEX_IDENTIFIER {
+  GUID guidIndexType;
+  WORD wStreamNumber;
+} ASF_INDEX_IDENTIFIER;
+
+typedef struct _ASF_INDEX_DESCRIPTOR {
+  ASF_INDEX_IDENTIFIER Identifier;
+  WORD cPerEntryBytes;
+  WCHAR szDescription[32];
+  DWORD dwInterval;
+} ASF_INDEX_DESCRIPTOR;
+
+cpp_quote("")
+[object, uuid (B1DCA5CD-D5DA-4451-8e9e-DB5C59914EAD), local]
+interface IMFASFContentInfo : IUnknown {
+  HRESULT GetHeaderSize ([in] IMFMediaBuffer *pIStartOfContent,[out] QWORD *cbHeaderSize);
+  HRESULT ParseHeader ([in] IMFMediaBuffer *pIHeaderBuffer,[in] QWORD cbOffsetWithinHeader);
+  HRESULT GenerateHeader ([in, out] IMFMediaBuffer *pIHeader,[out] DWORD *pcbHeader);
+  HRESULT GetProfile ([out] IMFASFProfile **ppIProfile);
+  HRESULT SetProfile ([in] IMFASFProfile *pIProfile);
+  HRESULT GeneratePresentationDescriptor ([out] IMFPresentationDescriptor **ppIPresentationDescriptor);
+  HRESULT GetEncodingConfigurationPropertyStore ([in] WORD wStreamNumber,[out] IPropertyStore **ppIStore);
+};
+
+[object, uuid (12558291-E399-11d5-BC2A-00b0d0f3f4ab), local]
+interface IMFASFMutualExclusion : IUnknown {
+  HRESULT GetType ([out] GUID *pguidType);
+  HRESULT SetType ([in] REFGUID guidType);
+  HRESULT GetRecordCount ([out] DWORD *pdwRecordCount);
+  HRESULT GetStreamsForRecord ([in] DWORD dwRecordNumber,[out] WORD *pwStreamNumArray,[in, out] DWORD *pcStreams);
+  HRESULT AddStreamForRecord ([in] DWORD dwRecordNumber,[in] WORD wStreamNumber);
+  HRESULT RemoveStreamFromRecord ([in] DWORD dwRecordNumber,[in] WORD wStreamNumber);
+  HRESULT RemoveRecord ([in] DWORD dwRecordNumber);
+  HRESULT AddRecord ([out] DWORD *pdwRecordNumber);
+  HRESULT Clone ([out] IMFASFMutualExclusion **ppIMutex);
+};
+
+[object, uuid (699bdc27-bbaf-49ff-8e38-9c39c9b5e088), local]
+interface IMFASFStreamPrioritization : IUnknown {
+  HRESULT GetStreamCount ([out] DWORD *pdwStreamCount);
+  HRESULT GetStream ([in] DWORD dwStreamIndex,[out] WORD *pwStreamNumber,[out] WORD *pwStreamFlags);
+  HRESULT AddStream ([in] WORD wStreamNumber,[in] WORD wStreamFlags);
+  HRESULT RemoveStream ([in] DWORD dwStreamIndex);
+  HRESULT Clone ([out] IMFASFStreamPrioritization **ppIStreamPrioritization);
+};
+
+[object, local, uuid (12558295-E399-11d5-BC2A-00b0d0f3f4ab)]
+interface IMFASFSplitter : IUnknown {
+  HRESULT Initialize ([in] IMFASFContentInfo *pIContentInfo);
+  HRESULT SetFlags ([in] DWORD dwFlags);
+  HRESULT GetFlags ([out] DWORD *pdwFlags);
+  HRESULT SelectStreams ([in] WORD *pwStreamNumbers,[in] WORD wNumStreams);
+  HRESULT GetSelectedStreams ([out] WORD *pwStreamNumbers,[in, out] WORD *pwNumStreams);
+  HRESULT ParseData ([in] IMFMediaBuffer *pIBuffer,[in] DWORD cbBufferOffset,[in] DWORD cbLength);
+  HRESULT GetNextSample ([out] DWORD *pdwStatusFlags,[out] WORD *pwStreamNumber,[out] IMFSample **ppISample);
+  HRESULT Flush ();
+  HRESULT GetLastSendTime ([out] DWORD *pdwLastSendTime);
+};
+
+[object, local, uuid (57bdd80a-9b38-4838-B737-C58F670D7D4F)]
+interface IMFASFMultiplexer : IUnknown {
+  HRESULT Initialize ([in] IMFASFContentInfo *pIContentInfo);
+  HRESULT SetFlags ([in] DWORD dwFlags);
+  HRESULT GetFlags ([out] DWORD *pdwFlags);
+  HRESULT ProcessSample ([in] WORD wStreamNumber,[in] IMFSample *pISample,[in] LONGLONG hnsTimestampAdjust);
+  HRESULT GetNextPacket ([out] DWORD *pdwStatusFlags,[out] IMFSample **ppIPacket);
+  HRESULT Flush ();
+  HRESULT End ([in, out] IMFASFContentInfo *pIContentInfo);
+  HRESULT GetStatistics ([in] WORD wStreamNumber,[out] ASF_MUX_STATISTICS *pMuxStats);
+  HRESULT SetSyncTolerance ([in] DWORD msSyncTolerance);
+};
+
+[object, uuid (53590f48-DC3B-4297-813f-787761ad7b3e), local]
+interface IMFASFIndexer : IUnknown {
+  HRESULT SetFlags ([in] DWORD dwFlags);
+  HRESULT GetFlags ([out] DWORD *pdwFlags);
+  HRESULT Initialize ([in] IMFASFContentInfo *pIContentInfo);
+  HRESULT GetIndexPosition ([in] IMFASFContentInfo *pIContentInfo,[out] QWORD *pcbIndexOffset);
+  HRESULT SetIndexByteStreams ([in] IMFByteStream **ppIByteStreams,[in] DWORD cByteStreams);
+  HRESULT GetIndexByteStreamCount ([out] DWORD *pcByteStreams);
+  HRESULT GetIndexStatus ([in] ASF_INDEX_IDENTIFIER *pIndexIdentifier,[out] WINBOOL *pfIsIndexed,[out] BYTE *pbIndexDescriptor,[in, out] DWORD *pcbIndexDescriptor);
+  HRESULT SetIndexStatus ([in] BYTE *pbIndexDescriptor,[in] DWORD cbIndexDescriptor,[in] WINBOOL fGenerateIndex);
+  HRESULT GetSeekPositionForValue ([in] const PROPVARIANT *pvarValue,[in] ASF_INDEX_IDENTIFIER *pIndexIdentifier,[out] QWORD *pcbOffsetWithinData,[out, optional] MFTIME *phnsApproxTime,[out, optional] DWORD *pdwPayloadNumberOfStreamWithinPacket);
+  HRESULT GenerateIndexEntries ([in] IMFSample *pIASFPacketSample);
+  HRESULT CommitIndex ([in] IMFASFContentInfo *pIContentInfo);
+  HRESULT GetIndexWriteSpace ([out] QWORD *pcbIndexWriteSpace);
+  HRESULT GetCompletedIndex ([in] IMFMediaBuffer *pIIndexBuffer,[in] QWORD cbOffsetWithinIndex);
+};
+
+[object, uuid (d01bad4a-4fa0-4a60-9349-c27e62da9d41), local]
+interface IMFASFStreamSelector : IUnknown {
+  HRESULT GetStreamCount ([out] DWORD *pcStreams);
+  HRESULT GetOutputCount ([out] DWORD *pcOutputs);
+  HRESULT GetOutputStreamCount ([in] DWORD dwOutputNum,[out] DWORD *pcStreams);
+  HRESULT GetOutputStreamNumbers ([in] DWORD dwOutputNum,[out] WORD *rgwStreamNumbers);
+  HRESULT GetOutputFromStream ([in] WORD wStreamNum,[out] DWORD *pdwOutput);
+  HRESULT GetOutputOverride ([in] DWORD dwOutputNum,[out] ASF_SELECTION_STATUS *pSelection);
+  HRESULT SetOutputOverride ([in] DWORD dwOutputNum,[in] ASF_SELECTION_STATUS Selection);
+  HRESULT GetOutputMutexCount ([in] DWORD dwOutputNum,[out] DWORD *pcMutexes);
+  HRESULT GetOutputMutex ([in] DWORD dwOutputNum,[in] DWORD dwMutexNum,[out] IUnknown **ppMutex);
+  HRESULT SetOutputMutexSelection ([in] DWORD dwOutputNum,[in] DWORD dwMutexNum,[in] WORD wSelectedRecord);
+  HRESULT GetBandwidthStepCount ([out] DWORD *pcStepCount);
+  HRESULT GetBandwidthStep ([in] DWORD dwStepNum,[out] DWORD *pdwBitrate,[out] WORD *rgwStreamNumbers,[out] ASF_SELECTION_STATUS *rgSelections);
+  HRESULT BitrateToStepNumber ([in] DWORD dwBitrate,[out] DWORD *pdwStepNum);
+  HRESULT SetStreamSelectorFlags ([in] DWORD dwStreamSelectorFlags);
+};
+
+cpp_quote("#if WINVER >= 0x0601")
+[object, uuid (3d1ff0ea-679a-4190-8d46-7fa69e8c7e15)]
+interface IMFDRMNetHelper : IUnknown {
+  HRESULT ProcessLicenseRequest ([in, size_is (cbLicenseRequest)] BYTE *pLicenseRequest,[in] DWORD cbLicenseRequest,[out, size_is (,*pcbLicenseResponse)] BYTE **ppLicenseResponse,[out] DWORD *pcbLicenseResponse,[out] BSTR *pbstrKID);
+  HRESULT GetChainedLicenseResponse ([out, size_is (,*pcbLicenseResponse)] BYTE **ppLicenseResponse,[out] DWORD *pcbLicenseResponse);
+};
+cpp_quote("#endif")
+
+[object, local, uuid (D267BF6A-028b-4e0d-903d-43f0ef82d0d4)]
+interface IMFASFProfile : IMFAttributes {
+  HRESULT GetStreamCount ([out] DWORD *pcStreams);
+  HRESULT GetStream ([in] DWORD dwStreamIndex,[out] WORD *pwStreamNumber,[out] IMFASFStreamConfig **ppIStream);
+  HRESULT GetStreamByNumber ([in] WORD wStreamNumber,[out] IMFASFStreamConfig **ppIStream);
+  HRESULT SetStream ([in] IMFASFStreamConfig *pIStream);
+  HRESULT RemoveStream ([in] WORD wStreamNumber);
+  HRESULT CreateStream ([in] IMFMediaType *pIMediaType,[out] IMFASFStreamConfig **ppIStream);
+  HRESULT GetMutualExclusionCount ([out] DWORD *pcMutexs);
+  HRESULT GetMutualExclusion ([in] DWORD dwMutexIndex,[out] IMFASFMutualExclusion **ppIMutex);
+  HRESULT AddMutualExclusion ([in] IMFASFMutualExclusion *pIMutex);
+  HRESULT RemoveMutualExclusion ([in] DWORD dwMutexIndex);
+  HRESULT CreateMutualExclusion ([out] IMFASFMutualExclusion **ppIMutex);
+  HRESULT GetStreamPrioritization ([out] IMFASFStreamPrioritization **ppIStreamPrioritization);
+  HRESULT AddStreamPrioritization ([in] IMFASFStreamPrioritization *pIStreamPrioritization);
+  HRESULT RemoveStreamPrioritization ();
+  HRESULT CreateStreamPrioritization ([out] IMFASFStreamPrioritization **ppIStreamPrioritization);
+  HRESULT Clone ([out] IMFASFProfile **ppIProfile);
+};
+
+[object, local, uuid (9e8ae8d2-DBBD-4200-9aca-06e6df484913)]
+interface IMFASFStreamConfig : IMFAttributes {
+  HRESULT GetStreamType ([out] GUID *pguidStreamType);
+  WORD GetStreamNumber ();
+  HRESULT SetStreamNumber ([in] WORD wStreamNum);
+  HRESULT GetMediaType ([out] IMFMediaType **ppIMediaType);
+  HRESULT SetMediaType ([in] IMFMediaType *pIMediaType);
+  HRESULT GetPayloadExtensionCount ([out] WORD *pcPayloadExtensions);
+  HRESULT GetPayloadExtension ([in] WORD wPayloadExtensionNumber,[out] GUID *pguidExtensionSystemID,[out] WORD *pcbExtensionDataSize,[out, optional, size_is (*pcbExtensionSystemInfo)] BYTE *pbExtensionSystemInfo,[in, out, optional] DWORD *pcbExtensionSystemInfo);
+  HRESULT AddPayloadExtension ([in] GUID guidExtensionSystemID,[in] WORD cbExtensionDataSize,[in, size_is (cbExtensionSystemInfo)] BYTE *pbExtensionSystemInfo,[in] DWORD cbExtensionSystemInfo);
+  HRESULT RemoveAllPayloadExtensions ();
+  HRESULT Clone ([out] IMFASFStreamConfig **ppIStreamConfig);
+};
+
+  cpp_quote("")
+cpp_quote("EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY MFPKEY_ASFMEDIASINK_BASE_SENDTIME = { { 0xcddcbc82, 0x3411, 0x4119, 0x91, 0x35, 0x84, 0x23, 0xc4, 0x1b, 0x39, 0x57}, 3  };")
+cpp_quote("EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY MFPKEY_ASFMEDIASINK_AUTOADJUST_BITRATE = { { 0xcddcbc82, 0x3411, 0x4119, 0x91, 0x35, 0x84, 0x23, 0xc4, 0x1b, 0x39, 0x57}, 4  };")
+cpp_quote("EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY MFPKEY_ASFMEDIASINK_DRMACTION = { { 0xa1db6f6c, 0x1d0a, 0x4cb6, 0x82, 0x54, 0xcb, 0x36, 0xbe, 0xed, 0xbc, 0x48}, 5  };")
+cpp_quote("EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY MFPKEY_ASFSTREAMSINK_CORRECTED_LEAKYBUCKET = { { 0xa2f152fb, 0x8ad9, 0x4a11, 0xb3, 0x45, 0x2c, 0xe2, 0xfa, 0xd8, 0x72, 0x3d}, 1  };")
+cpp_quote("")
+cpp_quote("STDAPI MFCreateASFContentInfo(IMFASFContentInfo **ppIContentInfo);")
+cpp_quote("STDAPI MFCreateASFIndexer(IMFASFIndexer **ppIIndexer);")
+cpp_quote("STDAPI MFCreateASFIndexerByteStream(IMFByteStream *pIContentByteStream, QWORD cbIndexStartOffset, IMFByteStream **pIIndexByteStream);")
+cpp_quote("STDAPI MFCreateASFMediaSink(IMFByteStream *pIByteStream, IMFMediaSink **ppIMediaSink);")
+cpp_quote("STDAPI MFCreateASFMediaSinkActivate(LPCWSTR pwszFileName, IMFASFContentInfo *pContentInfo, IMFActivate **ppIActivate);")
+cpp_quote("STDAPI MFCreateASFMultiplexer(IMFASFMultiplexer **ppIMultiplexer);")
+cpp_quote("STDAPI MFCreateASFProfile(IMFASFProfile **ppIProfile);")
+cpp_quote("STDAPI MFCreateASFProfileFromPresentationDescriptor(IMFPresentationDescriptor  *pIPD, IMFASFProfile **ppIProfile);")
+cpp_quote("STDAPI MFCreateASFSplitter(IMFASFSplitter **ppISplitter);")
+cpp_quote("STDAPI MFCreateASFStreamingMediaSink(IMFByteStream *pIByteStream, IMFMediaSink **ppIMediaSink);")
+cpp_quote("STDAPI MFCreateASFStreamingMediaSinkActivate(IMFActivate *pByteStreamActivate, IMFASFContentInfo *pContentInfo, IMFActivate **ppIActivate);")
+cpp_quote("STDAPI MFCreateASFStreamSelector(IMFASFProfile *pIASFProfile, IMFASFStreamSelector **ppSelector);")
+cpp_quote("STDAPI MFCreatePresentationDescriptorFromASFProfile(IMFASFProfile *pIProfile, IMFPresentationDescriptor **ppIPD);")
+cpp_quote("HRESULT STDMETHODCALLTYPE MFCreateWMVEncoderActivate(IMFMediaType *pMediaType, IPropertyStore *pEncodingConfigurationProperties, IMFActivate **ppActivate);")
+cpp_quote("HRESULT STDMETHODCALLTYPE MFCreateWMAEncoderActivate(IMFMediaType *pMediaType, IPropertyStore *pEncodingConfigurationProperties, IMFActivate **ppActivate);")
+
+cpp_quote("#endif")