/*** Autogenerated by WIDL 5.0.5 from amstream.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

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

#ifndef __amstream_h__
#define __amstream_h__

/* Forward declarations */

#ifndef __IDirectShowStream_FWD_DEFINED__
#define __IDirectShowStream_FWD_DEFINED__
typedef interface IDirectShowStream IDirectShowStream;
#ifdef __cplusplus
interface IDirectShowStream;
#endif /* __cplusplus */
#endif

#ifndef __IAMMultiMediaStream_FWD_DEFINED__
#define __IAMMultiMediaStream_FWD_DEFINED__
typedef interface IAMMultiMediaStream IAMMultiMediaStream;
#ifdef __cplusplus
interface IAMMultiMediaStream;
#endif /* __cplusplus */
#endif

#ifndef __IAMMediaStream_FWD_DEFINED__
#define __IAMMediaStream_FWD_DEFINED__
typedef interface IAMMediaStream IAMMediaStream;
#ifdef __cplusplus
interface IAMMediaStream;
#endif /* __cplusplus */
#endif

#ifndef __IMediaStreamFilter_FWD_DEFINED__
#define __IMediaStreamFilter_FWD_DEFINED__
typedef interface IMediaStreamFilter IMediaStreamFilter;
#ifdef __cplusplus
interface IMediaStreamFilter;
#endif /* __cplusplus */
#endif

#ifndef __IDirectDrawMediaSampleAllocator_FWD_DEFINED__
#define __IDirectDrawMediaSampleAllocator_FWD_DEFINED__
typedef interface IDirectDrawMediaSampleAllocator IDirectDrawMediaSampleAllocator;
#ifdef __cplusplus
interface IDirectDrawMediaSampleAllocator;
#endif /* __cplusplus */
#endif

#ifndef __IDirectDrawMediaSample_FWD_DEFINED__
#define __IDirectDrawMediaSample_FWD_DEFINED__
typedef interface IDirectDrawMediaSample IDirectDrawMediaSample;
#ifdef __cplusplus
interface IDirectDrawMediaSample;
#endif /* __cplusplus */
#endif

#ifndef __IAMMediaTypeStream_FWD_DEFINED__
#define __IAMMediaTypeStream_FWD_DEFINED__
typedef interface IAMMediaTypeStream IAMMediaTypeStream;
#ifdef __cplusplus
interface IAMMediaTypeStream;
#endif /* __cplusplus */
#endif

#ifndef __IAMMediaTypeSample_FWD_DEFINED__
#define __IAMMediaTypeSample_FWD_DEFINED__
typedef interface IAMMediaTypeSample IAMMediaTypeSample;
#ifdef __cplusplus
interface IAMMediaTypeSample;
#endif /* __cplusplus */
#endif

#ifndef __AMMultiMediaStream_FWD_DEFINED__
#define __AMMultiMediaStream_FWD_DEFINED__
#ifdef __cplusplus
typedef class AMMultiMediaStream AMMultiMediaStream;
#else
typedef struct AMMultiMediaStream AMMultiMediaStream;
#endif /* defined __cplusplus */
#endif /* defined __AMMultiMediaStream_FWD_DEFINED__ */

/* Headers for imported files */

#include <unknwn.h>
#include <mmstream.h>
#include <strmif.h>

#ifdef __cplusplus
extern "C" {
#endif

#include <ddraw.h>
#include <mmsystem.h>
#include <mmstream.h>
#include <ddstream.h>
#include <austream.h>
#if 0
#ifndef __IDirectDraw_FWD_DEFINED__
#define __IDirectDraw_FWD_DEFINED__
typedef interface IDirectDraw IDirectDraw;
#ifdef __cplusplus
interface IDirectDraw;
#endif /* __cplusplus */
#endif

#ifndef __IDirectDrawSurface_FWD_DEFINED__
#define __IDirectDrawSurface_FWD_DEFINED__
typedef interface IDirectDrawSurface IDirectDrawSurface;
#ifdef __cplusplus
interface IDirectDrawSurface;
#endif /* __cplusplus */
#endif

#endif
#ifndef __IAMMultiMediaStream_FWD_DEFINED__
#define __IAMMultiMediaStream_FWD_DEFINED__
typedef interface IAMMultiMediaStream IAMMultiMediaStream;
#ifdef __cplusplus
interface IAMMultiMediaStream;
#endif /* __cplusplus */
#endif

#ifndef __IAMMediaStream_FWD_DEFINED__
#define __IAMMediaStream_FWD_DEFINED__
typedef interface IAMMediaStream IAMMediaStream;
#ifdef __cplusplus
interface IAMMediaStream;
#endif /* __cplusplus */
#endif

#ifndef __IMediaStreamFilter_FWD_DEFINED__
#define __IMediaStreamFilter_FWD_DEFINED__
typedef interface IMediaStreamFilter IMediaStreamFilter;
#ifdef __cplusplus
interface IMediaStreamFilter;
#endif /* __cplusplus */
#endif

#ifndef __IAMMediaTypeStream_FWD_DEFINED__
#define __IAMMediaTypeStream_FWD_DEFINED__
typedef interface IAMMediaTypeStream IAMMediaTypeStream;
#ifdef __cplusplus
interface IAMMediaTypeStream;
#endif /* __cplusplus */
#endif

#ifndef __IAMMediaTypeSample_FWD_DEFINED__
#define __IAMMediaTypeSample_FWD_DEFINED__
typedef interface IAMMediaTypeSample IAMMediaTypeSample;
#ifdef __cplusplus
interface IAMMediaTypeSample;
#endif /* __cplusplus */
#endif

enum {
    AMMSF_NOGRAPHTHREAD = 0x1
};
enum {
    AMMSF_ADDDEFAULTRENDERER = 0x1,
    AMMSF_CREATEPEER = 0x2,
    AMMSF_STOPIFNOSAMPLES = 0x4,
    AMMSF_NOSTALL = 0x8
};
enum {
    AMMSF_RENDERTYPEMASK = 0x3,
    AMMSF_RENDERTOEXISTING = 0x0,
    AMMSF_RENDERALLSTREAMS = 0x1,
    AMMSF_NORENDER = 0x2,
    AMMSF_NOCLOCK = 0x4,
    AMMSF_RUN = 0x8
};
typedef enum __WIDL_amstream_generated_name_00000019 {
    Disabled = 0,
    ReadData = 1,
    RenderData = 2
} OUTPUT_STATE;
/*****************************************************************************
 * IDirectShowStream interface
 */
#ifndef __IDirectShowStream_INTERFACE_DEFINED__
#define __IDirectShowStream_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDirectShowStream, 0x7db01c96, 0xc0c3, 0x11d0, 0x8f,0xf1, 0x00,0xc0,0x4f,0xd9,0x18,0x9d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("7db01c96-c0c3-11d0-8ff1-00c04fd9189d")
IDirectShowStream : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_FileName(
        BSTR *pVal) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_FileName(
        BSTR newVal) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Video(
        OUTPUT_STATE *pVal) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Video(
        OUTPUT_STATE newVal) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Audio(
        OUTPUT_STATE *pVal) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Audio(
        OUTPUT_STATE newVal) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDirectShowStream, 0x7db01c96, 0xc0c3, 0x11d0, 0x8f,0xf1, 0x00,0xc0,0x4f,0xd9,0x18,0x9d)
#endif
#else
typedef struct IDirectShowStreamVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        IDirectShowStream *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        IDirectShowStream *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        IDirectShowStream *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        IDirectShowStream *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** IDirectShowStream methods ***/
    HRESULT (STDMETHODCALLTYPE *get_FileName)(
        IDirectShowStream *This,
        BSTR *pVal);

    HRESULT (STDMETHODCALLTYPE *put_FileName)(
        IDirectShowStream *This,
        BSTR newVal);

    HRESULT (STDMETHODCALLTYPE *get_Video)(
        IDirectShowStream *This,
        OUTPUT_STATE *pVal);

    HRESULT (STDMETHODCALLTYPE *put_Video)(
        IDirectShowStream *This,
        OUTPUT_STATE newVal);

    HRESULT (STDMETHODCALLTYPE *get_Audio)(
        IDirectShowStream *This,
        OUTPUT_STATE *pVal);

    HRESULT (STDMETHODCALLTYPE *put_Audio)(
        IDirectShowStream *This,
        OUTPUT_STATE newVal);

    END_INTERFACE
} IDirectShowStreamVtbl;

interface IDirectShowStream {
    CONST_VTBL IDirectShowStreamVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDirectShowStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDirectShowStream_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDirectShowStream_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define IDirectShowStream_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IDirectShowStream_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IDirectShowStream_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IDirectShowStream_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** IDirectShowStream methods ***/
#define IDirectShowStream_get_FileName(This,pVal) (This)->lpVtbl->get_FileName(This,pVal)
#define IDirectShowStream_put_FileName(This,newVal) (This)->lpVtbl->put_FileName(This,newVal)
#define IDirectShowStream_get_Video(This,pVal) (This)->lpVtbl->get_Video(This,pVal)
#define IDirectShowStream_put_Video(This,newVal) (This)->lpVtbl->put_Video(This,newVal)
#define IDirectShowStream_get_Audio(This,pVal) (This)->lpVtbl->get_Audio(This,pVal)
#define IDirectShowStream_put_Audio(This,newVal) (This)->lpVtbl->put_Audio(This,newVal)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDirectShowStream_QueryInterface(IDirectShowStream* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDirectShowStream_AddRef(IDirectShowStream* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDirectShowStream_Release(IDirectShowStream* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT IDirectShowStream_GetTypeInfoCount(IDirectShowStream* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT IDirectShowStream_GetTypeInfo(IDirectShowStream* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT IDirectShowStream_GetIDsOfNames(IDirectShowStream* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT IDirectShowStream_Invoke(IDirectShowStream* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** IDirectShowStream methods ***/
static FORCEINLINE HRESULT IDirectShowStream_get_FileName(IDirectShowStream* This,BSTR *pVal) {
    return This->lpVtbl->get_FileName(This,pVal);
}
static FORCEINLINE HRESULT IDirectShowStream_put_FileName(IDirectShowStream* This,BSTR newVal) {
    return This->lpVtbl->put_FileName(This,newVal);
}
static FORCEINLINE HRESULT IDirectShowStream_get_Video(IDirectShowStream* This,OUTPUT_STATE *pVal) {
    return This->lpVtbl->get_Video(This,pVal);
}
static FORCEINLINE HRESULT IDirectShowStream_put_Video(IDirectShowStream* This,OUTPUT_STATE newVal) {
    return This->lpVtbl->put_Video(This,newVal);
}
static FORCEINLINE HRESULT IDirectShowStream_get_Audio(IDirectShowStream* This,OUTPUT_STATE *pVal) {
    return This->lpVtbl->get_Audio(This,pVal);
}
static FORCEINLINE HRESULT IDirectShowStream_put_Audio(IDirectShowStream* This,OUTPUT_STATE newVal) {
    return This->lpVtbl->put_Audio(This,newVal);
}
#endif
#endif

#endif


#endif  /* __IDirectShowStream_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAMMultiMediaStream interface
 */
#ifndef __IAMMultiMediaStream_INTERFACE_DEFINED__
#define __IAMMultiMediaStream_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMMultiMediaStream, 0xbebe595c, 0x9a6f, 0x11d0, 0x8f,0xde, 0x00,0xc0,0x4f,0xd9,0x18,0x9d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("bebe595c-9a6f-11d0-8fde-00c04fd9189d")
IAMMultiMediaStream : public IMultiMediaStream
{
    virtual HRESULT STDMETHODCALLTYPE Initialize(
        STREAM_TYPE StreamType,
        DWORD dwFlags,
        IGraphBuilder *pFilterGraph) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFilterGraph(
        IGraphBuilder **ppGraphBuilder) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFilter(
        IMediaStreamFilter **ppFilter) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddMediaStream(
        IUnknown *pStreamObject,
        const MSPID *PurposeId,
        DWORD dwFlags,
        IMediaStream **ppNewStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE OpenFile(
        LPCWSTR pszFileName,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE OpenMoniker(
        IBindCtx *pCtx,
        IMoniker *pMoniker,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE Render(
        DWORD dwFlags) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMMultiMediaStream, 0xbebe595c, 0x9a6f, 0x11d0, 0x8f,0xde, 0x00,0xc0,0x4f,0xd9,0x18,0x9d)
#endif
#else
typedef struct IAMMultiMediaStreamVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMultiMediaStream methods ***/
    HRESULT (STDMETHODCALLTYPE *GetInformation)(
        IAMMultiMediaStream *This,
        DWORD *pdwFlags,
        STREAM_TYPE *pStreamType);

    HRESULT (STDMETHODCALLTYPE *GetMediaStream)(
        IAMMultiMediaStream *This,
        REFMSPID idPurpose,
        IMediaStream **ppMediaStream);

    HRESULT (STDMETHODCALLTYPE *EnumMediaStreams)(
        IAMMultiMediaStream *This,
        LONG Index,
        IMediaStream **ppMediaStream);

    HRESULT (STDMETHODCALLTYPE *GetState)(
        IAMMultiMediaStream *This,
        STREAM_STATE *pCurrentState);

    HRESULT (STDMETHODCALLTYPE *SetState)(
        IAMMultiMediaStream *This,
        STREAM_STATE NewState);

    HRESULT (STDMETHODCALLTYPE *GetTime)(
        IAMMultiMediaStream *This,
        STREAM_TIME *pCurrentTime);

    HRESULT (STDMETHODCALLTYPE *GetDuration)(
        IAMMultiMediaStream *This,
        STREAM_TIME *pDuration);

    HRESULT (STDMETHODCALLTYPE *Seek)(
        IAMMultiMediaStream *This,
        STREAM_TIME SeekTime);

    HRESULT (STDMETHODCALLTYPE *GetEndOfStreamEventHandle)(
        IAMMultiMediaStream *This,
        HANDLE *phEOS);

    /*** IAMMultiMediaStream methods ***/
    HRESULT (STDMETHODCALLTYPE *Initialize)(
        IAMMultiMediaStream *This,
        STREAM_TYPE StreamType,
        DWORD dwFlags,
        IGraphBuilder *pFilterGraph);

    HRESULT (STDMETHODCALLTYPE *GetFilterGraph)(
        IAMMultiMediaStream *This,
        IGraphBuilder **ppGraphBuilder);

    HRESULT (STDMETHODCALLTYPE *GetFilter)(
        IAMMultiMediaStream *This,
        IMediaStreamFilter **ppFilter);

    HRESULT (STDMETHODCALLTYPE *AddMediaStream)(
        IAMMultiMediaStream *This,
        IUnknown *pStreamObject,
        const MSPID *PurposeId,
        DWORD dwFlags,
        IMediaStream **ppNewStream);

    HRESULT (STDMETHODCALLTYPE *OpenFile)(
        IAMMultiMediaStream *This,
        LPCWSTR pszFileName,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *OpenMoniker)(
        IAMMultiMediaStream *This,
        IBindCtx *pCtx,
        IMoniker *pMoniker,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *Render)(
        IAMMultiMediaStream *This,
        DWORD dwFlags);

    END_INTERFACE
} IAMMultiMediaStreamVtbl;

interface IAMMultiMediaStream {
    CONST_VTBL IAMMultiMediaStreamVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMMultiMediaStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMMultiMediaStream_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMMultiMediaStream_Release(This) (This)->lpVtbl->Release(This)
/*** IMultiMediaStream methods ***/
#define IAMMultiMediaStream_GetInformation(This,pdwFlags,pStreamType) (This)->lpVtbl->GetInformation(This,pdwFlags,pStreamType)
#define IAMMultiMediaStream_GetMediaStream(This,idPurpose,ppMediaStream) (This)->lpVtbl->GetMediaStream(This,idPurpose,ppMediaStream)
#define IAMMultiMediaStream_EnumMediaStreams(This,Index,ppMediaStream) (This)->lpVtbl->EnumMediaStreams(This,Index,ppMediaStream)
#define IAMMultiMediaStream_GetState(This,pCurrentState) (This)->lpVtbl->GetState(This,pCurrentState)
#define IAMMultiMediaStream_SetState(This,NewState) (This)->lpVtbl->SetState(This,NewState)
#define IAMMultiMediaStream_GetTime(This,pCurrentTime) (This)->lpVtbl->GetTime(This,pCurrentTime)
#define IAMMultiMediaStream_GetDuration(This,pDuration) (This)->lpVtbl->GetDuration(This,pDuration)
#define IAMMultiMediaStream_Seek(This,SeekTime) (This)->lpVtbl->Seek(This,SeekTime)
#define IAMMultiMediaStream_GetEndOfStreamEventHandle(This,phEOS) (This)->lpVtbl->GetEndOfStreamEventHandle(This,phEOS)
/*** IAMMultiMediaStream methods ***/
#define IAMMultiMediaStream_Initialize(This,StreamType,dwFlags,pFilterGraph) (This)->lpVtbl->Initialize(This,StreamType,dwFlags,pFilterGraph)
#define IAMMultiMediaStream_GetFilterGraph(This,ppGraphBuilder) (This)->lpVtbl->GetFilterGraph(This,ppGraphBuilder)
#define IAMMultiMediaStream_GetFilter(This,ppFilter) (This)->lpVtbl->GetFilter(This,ppFilter)
#define IAMMultiMediaStream_AddMediaStream(This,pStreamObject,PurposeId,dwFlags,ppNewStream) (This)->lpVtbl->AddMediaStream(This,pStreamObject,PurposeId,dwFlags,ppNewStream)
#define IAMMultiMediaStream_OpenFile(This,pszFileName,dwFlags) (This)->lpVtbl->OpenFile(This,pszFileName,dwFlags)
#define IAMMultiMediaStream_OpenMoniker(This,pCtx,pMoniker,dwFlags) (This)->lpVtbl->OpenMoniker(This,pCtx,pMoniker,dwFlags)
#define IAMMultiMediaStream_Render(This,dwFlags) (This)->lpVtbl->Render(This,dwFlags)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMMultiMediaStream_QueryInterface(IAMMultiMediaStream* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMMultiMediaStream_AddRef(IAMMultiMediaStream* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMMultiMediaStream_Release(IAMMultiMediaStream* This) {
    return This->lpVtbl->Release(This);
}
/*** IMultiMediaStream methods ***/
static FORCEINLINE HRESULT IAMMultiMediaStream_GetInformation(IAMMultiMediaStream* This,DWORD *pdwFlags,STREAM_TYPE *pStreamType) {
    return This->lpVtbl->GetInformation(This,pdwFlags,pStreamType);
}
static FORCEINLINE HRESULT IAMMultiMediaStream_GetMediaStream(IAMMultiMediaStream* This,REFMSPID idPurpose,IMediaStream **ppMediaStream) {
    return This->lpVtbl->GetMediaStream(This,idPurpose,ppMediaStream);
}
static FORCEINLINE HRESULT IAMMultiMediaStream_EnumMediaStreams(IAMMultiMediaStream* This,LONG Index,IMediaStream **ppMediaStream) {
    return This->lpVtbl->EnumMediaStreams(This,Index,ppMediaStream);
}
static FORCEINLINE HRESULT IAMMultiMediaStream_GetState(IAMMultiMediaStream* This,STREAM_STATE *pCurrentState) {
    return This->lpVtbl->GetState(This,pCurrentState);
}
static FORCEINLINE HRESULT IAMMultiMediaStream_SetState(IAMMultiMediaStream* This,STREAM_STATE NewState) {
    return This->lpVtbl->SetState(This,NewState);
}
static FORCEINLINE HRESULT IAMMultiMediaStream_GetTime(IAMMultiMediaStream* This,STREAM_TIME *pCurrentTime) {
    return This->lpVtbl->GetTime(This,pCurrentTime);
}
static FORCEINLINE HRESULT IAMMultiMediaStream_GetDuration(IAMMultiMediaStream* This,STREAM_TIME *pDuration) {
    return This->lpVtbl->GetDuration(This,pDuration);
}
static FORCEINLINE HRESULT IAMMultiMediaStream_Seek(IAMMultiMediaStream* This,STREAM_TIME SeekTime) {
    return This->lpVtbl->Seek(This,SeekTime);
}
static FORCEINLINE HRESULT IAMMultiMediaStream_GetEndOfStreamEventHandle(IAMMultiMediaStream* This,HANDLE *phEOS) {
    return This->lpVtbl->GetEndOfStreamEventHandle(This,phEOS);
}
/*** IAMMultiMediaStream methods ***/
static FORCEINLINE HRESULT IAMMultiMediaStream_Initialize(IAMMultiMediaStream* This,STREAM_TYPE StreamType,DWORD dwFlags,IGraphBuilder *pFilterGraph) {
    return This->lpVtbl->Initialize(This,StreamType,dwFlags,pFilterGraph);
}
static FORCEINLINE HRESULT IAMMultiMediaStream_GetFilterGraph(IAMMultiMediaStream* This,IGraphBuilder **ppGraphBuilder) {
    return This->lpVtbl->GetFilterGraph(This,ppGraphBuilder);
}
static FORCEINLINE HRESULT IAMMultiMediaStream_GetFilter(IAMMultiMediaStream* This,IMediaStreamFilter **ppFilter) {
    return This->lpVtbl->GetFilter(This,ppFilter);
}
static FORCEINLINE HRESULT IAMMultiMediaStream_AddMediaStream(IAMMultiMediaStream* This,IUnknown *pStreamObject,const MSPID *PurposeId,DWORD dwFlags,IMediaStream **ppNewStream) {
    return This->lpVtbl->AddMediaStream(This,pStreamObject,PurposeId,dwFlags,ppNewStream);
}
static FORCEINLINE HRESULT IAMMultiMediaStream_OpenFile(IAMMultiMediaStream* This,LPCWSTR pszFileName,DWORD dwFlags) {
    return This->lpVtbl->OpenFile(This,pszFileName,dwFlags);
}
static FORCEINLINE HRESULT IAMMultiMediaStream_OpenMoniker(IAMMultiMediaStream* This,IBindCtx *pCtx,IMoniker *pMoniker,DWORD dwFlags) {
    return This->lpVtbl->OpenMoniker(This,pCtx,pMoniker,dwFlags);
}
static FORCEINLINE HRESULT IAMMultiMediaStream_Render(IAMMultiMediaStream* This,DWORD dwFlags) {
    return This->lpVtbl->Render(This,dwFlags);
}
#endif
#endif

#endif


#endif  /* __IAMMultiMediaStream_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAMMediaStream interface
 */
#ifndef __IAMMediaStream_INTERFACE_DEFINED__
#define __IAMMediaStream_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMMediaStream, 0xbebe595d, 0x9a6f, 0x11d0, 0x8f,0xde, 0x00,0xc0,0x4f,0xd9,0x18,0x9d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("bebe595d-9a6f-11d0-8fde-00c04fd9189d")
IAMMediaStream : public IMediaStream
{
    virtual HRESULT STDMETHODCALLTYPE Initialize(
        IUnknown *pSourceObject,
        DWORD dwFlags,
        REFMSPID PurposeId,
        const STREAM_TYPE StreamType) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetState(
        FILTER_STATE State) = 0;

    virtual HRESULT STDMETHODCALLTYPE JoinAMMultiMediaStream(
        IAMMultiMediaStream *pAMMultiMediaStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE JoinFilter(
        IMediaStreamFilter *pMediaStreamFilter) = 0;

    virtual HRESULT STDMETHODCALLTYPE JoinFilterGraph(
        IFilterGraph *pFilterGraph) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMMediaStream, 0xbebe595d, 0x9a6f, 0x11d0, 0x8f,0xde, 0x00,0xc0,0x4f,0xd9,0x18,0x9d)
#endif
#else
typedef struct IAMMediaStreamVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMediaStream methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMultiMediaStream)(
        IAMMediaStream *This,
        IMultiMediaStream **ppMultiMediaStream);

    HRESULT (STDMETHODCALLTYPE *GetInformation)(
        IAMMediaStream *This,
        MSPID *pPurposeId,
        STREAM_TYPE *pType);

    HRESULT (STDMETHODCALLTYPE *SetSameFormat)(
        IAMMediaStream *This,
        IMediaStream *pStreamThatHasDesiredFormat,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *AllocateSample)(
        IAMMediaStream *This,
        DWORD dwFlags,
        IStreamSample **ppSample);

    HRESULT (STDMETHODCALLTYPE *CreateSharedSample)(
        IAMMediaStream *This,
        IStreamSample *pExistingSample,
        DWORD dwFlags,
        IStreamSample **ppNewSample);

    HRESULT (STDMETHODCALLTYPE *SendEndOfStream)(
        IAMMediaStream *This,
        DWORD dwFlags);

    /*** IAMMediaStream methods ***/
    HRESULT (STDMETHODCALLTYPE *Initialize)(
        IAMMediaStream *This,
        IUnknown *pSourceObject,
        DWORD dwFlags,
        REFMSPID PurposeId,
        const STREAM_TYPE StreamType);

    HRESULT (STDMETHODCALLTYPE *SetState)(
        IAMMediaStream *This,
        FILTER_STATE State);

    HRESULT (STDMETHODCALLTYPE *JoinAMMultiMediaStream)(
        IAMMediaStream *This,
        IAMMultiMediaStream *pAMMultiMediaStream);

    HRESULT (STDMETHODCALLTYPE *JoinFilter)(
        IAMMediaStream *This,
        IMediaStreamFilter *pMediaStreamFilter);

    HRESULT (STDMETHODCALLTYPE *JoinFilterGraph)(
        IAMMediaStream *This,
        IFilterGraph *pFilterGraph);

    END_INTERFACE
} IAMMediaStreamVtbl;

interface IAMMediaStream {
    CONST_VTBL IAMMediaStreamVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMMediaStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMMediaStream_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMMediaStream_Release(This) (This)->lpVtbl->Release(This)
/*** IMediaStream methods ***/
#define IAMMediaStream_GetMultiMediaStream(This,ppMultiMediaStream) (This)->lpVtbl->GetMultiMediaStream(This,ppMultiMediaStream)
#define IAMMediaStream_GetInformation(This,pPurposeId,pType) (This)->lpVtbl->GetInformation(This,pPurposeId,pType)
#define IAMMediaStream_SetSameFormat(This,pStreamThatHasDesiredFormat,dwFlags) (This)->lpVtbl->SetSameFormat(This,pStreamThatHasDesiredFormat,dwFlags)
#define IAMMediaStream_AllocateSample(This,dwFlags,ppSample) (This)->lpVtbl->AllocateSample(This,dwFlags,ppSample)
#define IAMMediaStream_CreateSharedSample(This,pExistingSample,dwFlags,ppNewSample) (This)->lpVtbl->CreateSharedSample(This,pExistingSample,dwFlags,ppNewSample)
#define IAMMediaStream_SendEndOfStream(This,dwFlags) (This)->lpVtbl->SendEndOfStream(This,dwFlags)
/*** IAMMediaStream methods ***/
#define IAMMediaStream_Initialize(This,pSourceObject,dwFlags,PurposeId,StreamType) (This)->lpVtbl->Initialize(This,pSourceObject,dwFlags,PurposeId,StreamType)
#define IAMMediaStream_SetState(This,State) (This)->lpVtbl->SetState(This,State)
#define IAMMediaStream_JoinAMMultiMediaStream(This,pAMMultiMediaStream) (This)->lpVtbl->JoinAMMultiMediaStream(This,pAMMultiMediaStream)
#define IAMMediaStream_JoinFilter(This,pMediaStreamFilter) (This)->lpVtbl->JoinFilter(This,pMediaStreamFilter)
#define IAMMediaStream_JoinFilterGraph(This,pFilterGraph) (This)->lpVtbl->JoinFilterGraph(This,pFilterGraph)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMMediaStream_QueryInterface(IAMMediaStream* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMMediaStream_AddRef(IAMMediaStream* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMMediaStream_Release(IAMMediaStream* This) {
    return This->lpVtbl->Release(This);
}
/*** IMediaStream methods ***/
static FORCEINLINE HRESULT IAMMediaStream_GetMultiMediaStream(IAMMediaStream* This,IMultiMediaStream **ppMultiMediaStream) {
    return This->lpVtbl->GetMultiMediaStream(This,ppMultiMediaStream);
}
static FORCEINLINE HRESULT IAMMediaStream_GetInformation(IAMMediaStream* This,MSPID *pPurposeId,STREAM_TYPE *pType) {
    return This->lpVtbl->GetInformation(This,pPurposeId,pType);
}
static FORCEINLINE HRESULT IAMMediaStream_SetSameFormat(IAMMediaStream* This,IMediaStream *pStreamThatHasDesiredFormat,DWORD dwFlags) {
    return This->lpVtbl->SetSameFormat(This,pStreamThatHasDesiredFormat,dwFlags);
}
static FORCEINLINE HRESULT IAMMediaStream_AllocateSample(IAMMediaStream* This,DWORD dwFlags,IStreamSample **ppSample) {
    return This->lpVtbl->AllocateSample(This,dwFlags,ppSample);
}
static FORCEINLINE HRESULT IAMMediaStream_CreateSharedSample(IAMMediaStream* This,IStreamSample *pExistingSample,DWORD dwFlags,IStreamSample **ppNewSample) {
    return This->lpVtbl->CreateSharedSample(This,pExistingSample,dwFlags,ppNewSample);
}
static FORCEINLINE HRESULT IAMMediaStream_SendEndOfStream(IAMMediaStream* This,DWORD dwFlags) {
    return This->lpVtbl->SendEndOfStream(This,dwFlags);
}
/*** IAMMediaStream methods ***/
static FORCEINLINE HRESULT IAMMediaStream_Initialize(IAMMediaStream* This,IUnknown *pSourceObject,DWORD dwFlags,REFMSPID PurposeId,const STREAM_TYPE StreamType) {
    return This->lpVtbl->Initialize(This,pSourceObject,dwFlags,PurposeId,StreamType);
}
static FORCEINLINE HRESULT IAMMediaStream_SetState(IAMMediaStream* This,FILTER_STATE State) {
    return This->lpVtbl->SetState(This,State);
}
static FORCEINLINE HRESULT IAMMediaStream_JoinAMMultiMediaStream(IAMMediaStream* This,IAMMultiMediaStream *pAMMultiMediaStream) {
    return This->lpVtbl->JoinAMMultiMediaStream(This,pAMMultiMediaStream);
}
static FORCEINLINE HRESULT IAMMediaStream_JoinFilter(IAMMediaStream* This,IMediaStreamFilter *pMediaStreamFilter) {
    return This->lpVtbl->JoinFilter(This,pMediaStreamFilter);
}
static FORCEINLINE HRESULT IAMMediaStream_JoinFilterGraph(IAMMediaStream* This,IFilterGraph *pFilterGraph) {
    return This->lpVtbl->JoinFilterGraph(This,pFilterGraph);
}
#endif
#endif

#endif


#endif  /* __IAMMediaStream_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMediaStreamFilter interface
 */
#ifndef __IMediaStreamFilter_INTERFACE_DEFINED__
#define __IMediaStreamFilter_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMediaStreamFilter, 0xbebe595e, 0x9a6f, 0x11d0, 0x8f,0xde, 0x00,0xc0,0x4f,0xd9,0x18,0x9d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("bebe595e-9a6f-11d0-8fde-00c04fd9189d")
IMediaStreamFilter : public IBaseFilter
{
    virtual HRESULT STDMETHODCALLTYPE AddMediaStream(
        IAMMediaStream *pAMMediaStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMediaStream(
        REFMSPID idPurpose,
        IMediaStream **ppMediaStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumMediaStreams(
        LONG Index,
        IMediaStream **ppMediaStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE SupportSeeking(
        BOOL bRenderer) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReferenceTimeToStreamTime(
        REFERENCE_TIME *pTime) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentStreamTime(
        REFERENCE_TIME *pCurrentStreamTime) = 0;

    virtual HRESULT STDMETHODCALLTYPE WaitUntil(
        REFERENCE_TIME WaitStreamTime) = 0;

    virtual HRESULT STDMETHODCALLTYPE Flush(
        BOOL bCancelEOS) = 0;

    virtual HRESULT STDMETHODCALLTYPE EndOfStream(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMediaStreamFilter, 0xbebe595e, 0x9a6f, 0x11d0, 0x8f,0xde, 0x00,0xc0,0x4f,0xd9,0x18,0x9d)
#endif
#else
typedef struct IMediaStreamFilterVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IPersist methods ***/
    HRESULT (STDMETHODCALLTYPE *GetClassID)(
        IMediaStreamFilter *This,
        CLSID *pClassID);

    /*** IMediaFilter methods ***/
    HRESULT (STDMETHODCALLTYPE *Stop)(
        IMediaStreamFilter *This);

    HRESULT (STDMETHODCALLTYPE *Pause)(
        IMediaStreamFilter *This);

    HRESULT (STDMETHODCALLTYPE *Run)(
        IMediaStreamFilter *This,
        REFERENCE_TIME tStart);

    HRESULT (STDMETHODCALLTYPE *GetState)(
        IMediaStreamFilter *This,
        DWORD dwMilliSecsTimeout,
        FILTER_STATE *State);

    HRESULT (STDMETHODCALLTYPE *SetSyncSource)(
        IMediaStreamFilter *This,
        IReferenceClock *pClock);

    HRESULT (STDMETHODCALLTYPE *GetSyncSource)(
        IMediaStreamFilter *This,
        IReferenceClock **pClock);

    /*** IBaseFilter methods ***/
    HRESULT (STDMETHODCALLTYPE *EnumPins)(
        IMediaStreamFilter *This,
        IEnumPins **ppEnum);

    HRESULT (STDMETHODCALLTYPE *FindPin)(
        IMediaStreamFilter *This,
        LPCWSTR Id,
        IPin **ppPin);

    HRESULT (STDMETHODCALLTYPE *QueryFilterInfo)(
        IMediaStreamFilter *This,
        FILTER_INFO *pInfo);

    HRESULT (STDMETHODCALLTYPE *JoinFilterGraph)(
        IMediaStreamFilter *This,
        IFilterGraph *pGraph,
        LPCWSTR pName);

    HRESULT (STDMETHODCALLTYPE *QueryVendorInfo)(
        IMediaStreamFilter *This,
        LPWSTR *pVendorInfo);

    /*** IMediaStreamFilter methods ***/
    HRESULT (STDMETHODCALLTYPE *AddMediaStream)(
        IMediaStreamFilter *This,
        IAMMediaStream *pAMMediaStream);

    HRESULT (STDMETHODCALLTYPE *GetMediaStream)(
        IMediaStreamFilter *This,
        REFMSPID idPurpose,
        IMediaStream **ppMediaStream);

    HRESULT (STDMETHODCALLTYPE *EnumMediaStreams)(
        IMediaStreamFilter *This,
        LONG Index,
        IMediaStream **ppMediaStream);

    HRESULT (STDMETHODCALLTYPE *SupportSeeking)(
        IMediaStreamFilter *This,
        BOOL bRenderer);

    HRESULT (STDMETHODCALLTYPE *ReferenceTimeToStreamTime)(
        IMediaStreamFilter *This,
        REFERENCE_TIME *pTime);

    HRESULT (STDMETHODCALLTYPE *GetCurrentStreamTime)(
        IMediaStreamFilter *This,
        REFERENCE_TIME *pCurrentStreamTime);

    HRESULT (STDMETHODCALLTYPE *WaitUntil)(
        IMediaStreamFilter *This,
        REFERENCE_TIME WaitStreamTime);

    HRESULT (STDMETHODCALLTYPE *Flush)(
        IMediaStreamFilter *This,
        BOOL bCancelEOS);

    HRESULT (STDMETHODCALLTYPE *EndOfStream)(
        IMediaStreamFilter *This);

    END_INTERFACE
} IMediaStreamFilterVtbl;

interface IMediaStreamFilter {
    CONST_VTBL IMediaStreamFilterVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMediaStreamFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMediaStreamFilter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMediaStreamFilter_Release(This) (This)->lpVtbl->Release(This)
/*** IPersist methods ***/
#define IMediaStreamFilter_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
/*** IMediaFilter methods ***/
#define IMediaStreamFilter_Stop(This) (This)->lpVtbl->Stop(This)
#define IMediaStreamFilter_Pause(This) (This)->lpVtbl->Pause(This)
#define IMediaStreamFilter_Run(This,tStart) (This)->lpVtbl->Run(This,tStart)
#define IMediaStreamFilter_GetState(This,dwMilliSecsTimeout,State) (This)->lpVtbl->GetState(This,dwMilliSecsTimeout,State)
#define IMediaStreamFilter_SetSyncSource(This,pClock) (This)->lpVtbl->SetSyncSource(This,pClock)
#define IMediaStreamFilter_GetSyncSource(This,pClock) (This)->lpVtbl->GetSyncSource(This,pClock)
/*** IBaseFilter methods ***/
#define IMediaStreamFilter_EnumPins(This,ppEnum) (This)->lpVtbl->EnumPins(This,ppEnum)
#define IMediaStreamFilter_FindPin(This,Id,ppPin) (This)->lpVtbl->FindPin(This,Id,ppPin)
#define IMediaStreamFilter_QueryFilterInfo(This,pInfo) (This)->lpVtbl->QueryFilterInfo(This,pInfo)
#define IMediaStreamFilter_JoinFilterGraph(This,pGraph,pName) (This)->lpVtbl->JoinFilterGraph(This,pGraph,pName)
#define IMediaStreamFilter_QueryVendorInfo(This,pVendorInfo) (This)->lpVtbl->QueryVendorInfo(This,pVendorInfo)
/*** IMediaStreamFilter methods ***/
#define IMediaStreamFilter_AddMediaStream(This,pAMMediaStream) (This)->lpVtbl->AddMediaStream(This,pAMMediaStream)
#define IMediaStreamFilter_GetMediaStream(This,idPurpose,ppMediaStream) (This)->lpVtbl->GetMediaStream(This,idPurpose,ppMediaStream)
#define IMediaStreamFilter_EnumMediaStreams(This,Index,ppMediaStream) (This)->lpVtbl->EnumMediaStreams(This,Index,ppMediaStream)
#define IMediaStreamFilter_SupportSeeking(This,bRenderer) (This)->lpVtbl->SupportSeeking(This,bRenderer)
#define IMediaStreamFilter_ReferenceTimeToStreamTime(This,pTime) (This)->lpVtbl->ReferenceTimeToStreamTime(This,pTime)
#define IMediaStreamFilter_GetCurrentStreamTime(This,pCurrentStreamTime) (This)->lpVtbl->GetCurrentStreamTime(This,pCurrentStreamTime)
#define IMediaStreamFilter_WaitUntil(This,WaitStreamTime) (This)->lpVtbl->WaitUntil(This,WaitStreamTime)
#define IMediaStreamFilter_Flush(This,bCancelEOS) (This)->lpVtbl->Flush(This,bCancelEOS)
#define IMediaStreamFilter_EndOfStream(This) (This)->lpVtbl->EndOfStream(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMediaStreamFilter_QueryInterface(IMediaStreamFilter* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMediaStreamFilter_AddRef(IMediaStreamFilter* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMediaStreamFilter_Release(IMediaStreamFilter* This) {
    return This->lpVtbl->Release(This);
}
/*** IPersist methods ***/
static FORCEINLINE HRESULT IMediaStreamFilter_GetClassID(IMediaStreamFilter* This,CLSID *pClassID) {
    return This->lpVtbl->GetClassID(This,pClassID);
}
/*** IMediaFilter methods ***/
static FORCEINLINE HRESULT IMediaStreamFilter_Stop(IMediaStreamFilter* This) {
    return This->lpVtbl->Stop(This);
}
static FORCEINLINE HRESULT IMediaStreamFilter_Pause(IMediaStreamFilter* This) {
    return This->lpVtbl->Pause(This);
}
static FORCEINLINE HRESULT IMediaStreamFilter_Run(IMediaStreamFilter* This,REFERENCE_TIME tStart) {
    return This->lpVtbl->Run(This,tStart);
}
static FORCEINLINE HRESULT IMediaStreamFilter_GetState(IMediaStreamFilter* This,DWORD dwMilliSecsTimeout,FILTER_STATE *State) {
    return This->lpVtbl->GetState(This,dwMilliSecsTimeout,State);
}
static FORCEINLINE HRESULT IMediaStreamFilter_SetSyncSource(IMediaStreamFilter* This,IReferenceClock *pClock) {
    return This->lpVtbl->SetSyncSource(This,pClock);
}
static FORCEINLINE HRESULT IMediaStreamFilter_GetSyncSource(IMediaStreamFilter* This,IReferenceClock **pClock) {
    return This->lpVtbl->GetSyncSource(This,pClock);
}
/*** IBaseFilter methods ***/
static FORCEINLINE HRESULT IMediaStreamFilter_EnumPins(IMediaStreamFilter* This,IEnumPins **ppEnum) {
    return This->lpVtbl->EnumPins(This,ppEnum);
}
static FORCEINLINE HRESULT IMediaStreamFilter_FindPin(IMediaStreamFilter* This,LPCWSTR Id,IPin **ppPin) {
    return This->lpVtbl->FindPin(This,Id,ppPin);
}
static FORCEINLINE HRESULT IMediaStreamFilter_QueryFilterInfo(IMediaStreamFilter* This,FILTER_INFO *pInfo) {
    return This->lpVtbl->QueryFilterInfo(This,pInfo);
}
static FORCEINLINE HRESULT IMediaStreamFilter_JoinFilterGraph(IMediaStreamFilter* This,IFilterGraph *pGraph,LPCWSTR pName) {
    return This->lpVtbl->JoinFilterGraph(This,pGraph,pName);
}
static FORCEINLINE HRESULT IMediaStreamFilter_QueryVendorInfo(IMediaStreamFilter* This,LPWSTR *pVendorInfo) {
    return This->lpVtbl->QueryVendorInfo(This,pVendorInfo);
}
/*** IMediaStreamFilter methods ***/
static FORCEINLINE HRESULT IMediaStreamFilter_AddMediaStream(IMediaStreamFilter* This,IAMMediaStream *pAMMediaStream) {
    return This->lpVtbl->AddMediaStream(This,pAMMediaStream);
}
static FORCEINLINE HRESULT IMediaStreamFilter_GetMediaStream(IMediaStreamFilter* This,REFMSPID idPurpose,IMediaStream **ppMediaStream) {
    return This->lpVtbl->GetMediaStream(This,idPurpose,ppMediaStream);
}
static FORCEINLINE HRESULT IMediaStreamFilter_EnumMediaStreams(IMediaStreamFilter* This,LONG Index,IMediaStream **ppMediaStream) {
    return This->lpVtbl->EnumMediaStreams(This,Index,ppMediaStream);
}
static FORCEINLINE HRESULT IMediaStreamFilter_SupportSeeking(IMediaStreamFilter* This,BOOL bRenderer) {
    return This->lpVtbl->SupportSeeking(This,bRenderer);
}
static FORCEINLINE HRESULT IMediaStreamFilter_ReferenceTimeToStreamTime(IMediaStreamFilter* This,REFERENCE_TIME *pTime) {
    return This->lpVtbl->ReferenceTimeToStreamTime(This,pTime);
}
static FORCEINLINE HRESULT IMediaStreamFilter_GetCurrentStreamTime(IMediaStreamFilter* This,REFERENCE_TIME *pCurrentStreamTime) {
    return This->lpVtbl->GetCurrentStreamTime(This,pCurrentStreamTime);
}
static FORCEINLINE HRESULT IMediaStreamFilter_WaitUntil(IMediaStreamFilter* This,REFERENCE_TIME WaitStreamTime) {
    return This->lpVtbl->WaitUntil(This,WaitStreamTime);
}
static FORCEINLINE HRESULT IMediaStreamFilter_Flush(IMediaStreamFilter* This,BOOL bCancelEOS) {
    return This->lpVtbl->Flush(This,bCancelEOS);
}
static FORCEINLINE HRESULT IMediaStreamFilter_EndOfStream(IMediaStreamFilter* This) {
    return This->lpVtbl->EndOfStream(This);
}
#endif
#endif

#endif


#endif  /* __IMediaStreamFilter_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDirectDrawMediaSampleAllocator interface
 */
#ifndef __IDirectDrawMediaSampleAllocator_INTERFACE_DEFINED__
#define __IDirectDrawMediaSampleAllocator_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDirectDrawMediaSampleAllocator, 0xab6b4afc, 0xf6e4, 0x11d0, 0x90,0x0d, 0x00,0xc0,0x4f,0xd9,0x18,0x9d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ab6b4afc-f6e4-11d0-900d-00c04fd9189d")
IDirectDrawMediaSampleAllocator : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetDirectDraw(
        IDirectDraw **ppDirectDraw) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDirectDrawMediaSampleAllocator, 0xab6b4afc, 0xf6e4, 0x11d0, 0x90,0x0d, 0x00,0xc0,0x4f,0xd9,0x18,0x9d)
#endif
#else
typedef struct IDirectDrawMediaSampleAllocatorVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDirectDrawMediaSampleAllocator methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDirectDraw)(
        IDirectDrawMediaSampleAllocator *This,
        IDirectDraw **ppDirectDraw);

    END_INTERFACE
} IDirectDrawMediaSampleAllocatorVtbl;

interface IDirectDrawMediaSampleAllocator {
    CONST_VTBL IDirectDrawMediaSampleAllocatorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDirectDrawMediaSampleAllocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDirectDrawMediaSampleAllocator_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDirectDrawMediaSampleAllocator_Release(This) (This)->lpVtbl->Release(This)
/*** IDirectDrawMediaSampleAllocator methods ***/
#define IDirectDrawMediaSampleAllocator_GetDirectDraw(This,ppDirectDraw) (This)->lpVtbl->GetDirectDraw(This,ppDirectDraw)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDirectDrawMediaSampleAllocator_QueryInterface(IDirectDrawMediaSampleAllocator* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDirectDrawMediaSampleAllocator_AddRef(IDirectDrawMediaSampleAllocator* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDirectDrawMediaSampleAllocator_Release(IDirectDrawMediaSampleAllocator* This) {
    return This->lpVtbl->Release(This);
}
/*** IDirectDrawMediaSampleAllocator methods ***/
static FORCEINLINE HRESULT IDirectDrawMediaSampleAllocator_GetDirectDraw(IDirectDrawMediaSampleAllocator* This,IDirectDraw **ppDirectDraw) {
    return This->lpVtbl->GetDirectDraw(This,ppDirectDraw);
}
#endif
#endif

#endif


#endif  /* __IDirectDrawMediaSampleAllocator_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDirectDrawMediaSample interface
 */
#ifndef __IDirectDrawMediaSample_INTERFACE_DEFINED__
#define __IDirectDrawMediaSample_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDirectDrawMediaSample, 0xab6b4afe, 0xf6e4, 0x11d0, 0x90,0x0d, 0x00,0xc0,0x4f,0xd9,0x18,0x9d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ab6b4afe-f6e4-11d0-900d-00c04fd9189d")
IDirectDrawMediaSample : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetSurfaceAndReleaseLock(
        IDirectDrawSurface **ppDirectDrawSurface,
        RECT *pRect) = 0;

    virtual HRESULT STDMETHODCALLTYPE LockMediaSamplePointer(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDirectDrawMediaSample, 0xab6b4afe, 0xf6e4, 0x11d0, 0x90,0x0d, 0x00,0xc0,0x4f,0xd9,0x18,0x9d)
#endif
#else
typedef struct IDirectDrawMediaSampleVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDirectDrawMediaSample methods ***/
    HRESULT (STDMETHODCALLTYPE *GetSurfaceAndReleaseLock)(
        IDirectDrawMediaSample *This,
        IDirectDrawSurface **ppDirectDrawSurface,
        RECT *pRect);

    HRESULT (STDMETHODCALLTYPE *LockMediaSamplePointer)(
        IDirectDrawMediaSample *This);

    END_INTERFACE
} IDirectDrawMediaSampleVtbl;

interface IDirectDrawMediaSample {
    CONST_VTBL IDirectDrawMediaSampleVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDirectDrawMediaSample_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDirectDrawMediaSample_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDirectDrawMediaSample_Release(This) (This)->lpVtbl->Release(This)
/*** IDirectDrawMediaSample methods ***/
#define IDirectDrawMediaSample_GetSurfaceAndReleaseLock(This,ppDirectDrawSurface,pRect) (This)->lpVtbl->GetSurfaceAndReleaseLock(This,ppDirectDrawSurface,pRect)
#define IDirectDrawMediaSample_LockMediaSamplePointer(This) (This)->lpVtbl->LockMediaSamplePointer(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDirectDrawMediaSample_QueryInterface(IDirectDrawMediaSample* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDirectDrawMediaSample_AddRef(IDirectDrawMediaSample* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDirectDrawMediaSample_Release(IDirectDrawMediaSample* This) {
    return This->lpVtbl->Release(This);
}
/*** IDirectDrawMediaSample methods ***/
static FORCEINLINE HRESULT IDirectDrawMediaSample_GetSurfaceAndReleaseLock(IDirectDrawMediaSample* This,IDirectDrawSurface **ppDirectDrawSurface,RECT *pRect) {
    return This->lpVtbl->GetSurfaceAndReleaseLock(This,ppDirectDrawSurface,pRect);
}
static FORCEINLINE HRESULT IDirectDrawMediaSample_LockMediaSamplePointer(IDirectDrawMediaSample* This) {
    return This->lpVtbl->LockMediaSamplePointer(This);
}
#endif
#endif

#endif


#endif  /* __IDirectDrawMediaSample_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAMMediaTypeStream interface
 */
#ifndef __IAMMediaTypeStream_INTERFACE_DEFINED__
#define __IAMMediaTypeStream_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMMediaTypeStream, 0xab6b4afa, 0xf6e4, 0x11d0, 0x90,0x0d, 0x00,0xc0,0x4f,0xd9,0x18,0x9d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ab6b4afa-f6e4-11d0-900d-00c04fd9189d")
IAMMediaTypeStream : public IMediaStream
{
    virtual HRESULT STDMETHODCALLTYPE GetFormat(
        AM_MEDIA_TYPE *pMediaType,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetFormat(
        AM_MEDIA_TYPE *pMediaType,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateSample(
        LONG lSampleSize,
        BYTE *pbBuffer,
        DWORD dwFlags,
        IUnknown *pUnkOuter,
        IAMMediaTypeSample **ppAMMediaTypeSample) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStreamAllocatorRequirements(
        ALLOCATOR_PROPERTIES *pProps) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetStreamAllocatorRequirements(
        ALLOCATOR_PROPERTIES *pProps) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMMediaTypeStream, 0xab6b4afa, 0xf6e4, 0x11d0, 0x90,0x0d, 0x00,0xc0,0x4f,0xd9,0x18,0x9d)
#endif
#else
typedef struct IAMMediaTypeStreamVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMediaStream methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMultiMediaStream)(
        IAMMediaTypeStream *This,
        IMultiMediaStream **ppMultiMediaStream);

    HRESULT (STDMETHODCALLTYPE *GetInformation)(
        IAMMediaTypeStream *This,
        MSPID *pPurposeId,
        STREAM_TYPE *pType);

    HRESULT (STDMETHODCALLTYPE *SetSameFormat)(
        IAMMediaTypeStream *This,
        IMediaStream *pStreamThatHasDesiredFormat,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *AllocateSample)(
        IAMMediaTypeStream *This,
        DWORD dwFlags,
        IStreamSample **ppSample);

    HRESULT (STDMETHODCALLTYPE *CreateSharedSample)(
        IAMMediaTypeStream *This,
        IStreamSample *pExistingSample,
        DWORD dwFlags,
        IStreamSample **ppNewSample);

    HRESULT (STDMETHODCALLTYPE *SendEndOfStream)(
        IAMMediaTypeStream *This,
        DWORD dwFlags);

    /*** IAMMediaTypeStream methods ***/
    HRESULT (STDMETHODCALLTYPE *GetFormat)(
        IAMMediaTypeStream *This,
        AM_MEDIA_TYPE *pMediaType,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *SetFormat)(
        IAMMediaTypeStream *This,
        AM_MEDIA_TYPE *pMediaType,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *CreateSample)(
        IAMMediaTypeStream *This,
        LONG lSampleSize,
        BYTE *pbBuffer,
        DWORD dwFlags,
        IUnknown *pUnkOuter,
        IAMMediaTypeSample **ppAMMediaTypeSample);

    HRESULT (STDMETHODCALLTYPE *GetStreamAllocatorRequirements)(
        IAMMediaTypeStream *This,
        ALLOCATOR_PROPERTIES *pProps);

    HRESULT (STDMETHODCALLTYPE *SetStreamAllocatorRequirements)(
        IAMMediaTypeStream *This,
        ALLOCATOR_PROPERTIES *pProps);

    END_INTERFACE
} IAMMediaTypeStreamVtbl;

interface IAMMediaTypeStream {
    CONST_VTBL IAMMediaTypeStreamVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMMediaTypeStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMMediaTypeStream_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMMediaTypeStream_Release(This) (This)->lpVtbl->Release(This)
/*** IMediaStream methods ***/
#define IAMMediaTypeStream_GetMultiMediaStream(This,ppMultiMediaStream) (This)->lpVtbl->GetMultiMediaStream(This,ppMultiMediaStream)
#define IAMMediaTypeStream_GetInformation(This,pPurposeId,pType) (This)->lpVtbl->GetInformation(This,pPurposeId,pType)
#define IAMMediaTypeStream_SetSameFormat(This,pStreamThatHasDesiredFormat,dwFlags) (This)->lpVtbl->SetSameFormat(This,pStreamThatHasDesiredFormat,dwFlags)
#define IAMMediaTypeStream_AllocateSample(This,dwFlags,ppSample) (This)->lpVtbl->AllocateSample(This,dwFlags,ppSample)
#define IAMMediaTypeStream_CreateSharedSample(This,pExistingSample,dwFlags,ppNewSample) (This)->lpVtbl->CreateSharedSample(This,pExistingSample,dwFlags,ppNewSample)
#define IAMMediaTypeStream_SendEndOfStream(This,dwFlags) (This)->lpVtbl->SendEndOfStream(This,dwFlags)
/*** IAMMediaTypeStream methods ***/
#define IAMMediaTypeStream_GetFormat(This,pMediaType,dwFlags) (This)->lpVtbl->GetFormat(This,pMediaType,dwFlags)
#define IAMMediaTypeStream_SetFormat(This,pMediaType,dwFlags) (This)->lpVtbl->SetFormat(This,pMediaType,dwFlags)
#define IAMMediaTypeStream_CreateSample(This,lSampleSize,pbBuffer,dwFlags,pUnkOuter,ppAMMediaTypeSample) (This)->lpVtbl->CreateSample(This,lSampleSize,pbBuffer,dwFlags,pUnkOuter,ppAMMediaTypeSample)
#define IAMMediaTypeStream_GetStreamAllocatorRequirements(This,pProps) (This)->lpVtbl->GetStreamAllocatorRequirements(This,pProps)
#define IAMMediaTypeStream_SetStreamAllocatorRequirements(This,pProps) (This)->lpVtbl->SetStreamAllocatorRequirements(This,pProps)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMMediaTypeStream_QueryInterface(IAMMediaTypeStream* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMMediaTypeStream_AddRef(IAMMediaTypeStream* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMMediaTypeStream_Release(IAMMediaTypeStream* This) {
    return This->lpVtbl->Release(This);
}
/*** IMediaStream methods ***/
static FORCEINLINE HRESULT IAMMediaTypeStream_GetMultiMediaStream(IAMMediaTypeStream* This,IMultiMediaStream **ppMultiMediaStream) {
    return This->lpVtbl->GetMultiMediaStream(This,ppMultiMediaStream);
}
static FORCEINLINE HRESULT IAMMediaTypeStream_GetInformation(IAMMediaTypeStream* This,MSPID *pPurposeId,STREAM_TYPE *pType) {
    return This->lpVtbl->GetInformation(This,pPurposeId,pType);
}
static FORCEINLINE HRESULT IAMMediaTypeStream_SetSameFormat(IAMMediaTypeStream* This,IMediaStream *pStreamThatHasDesiredFormat,DWORD dwFlags) {
    return This->lpVtbl->SetSameFormat(This,pStreamThatHasDesiredFormat,dwFlags);
}
static FORCEINLINE HRESULT IAMMediaTypeStream_AllocateSample(IAMMediaTypeStream* This,DWORD dwFlags,IStreamSample **ppSample) {
    return This->lpVtbl->AllocateSample(This,dwFlags,ppSample);
}
static FORCEINLINE HRESULT IAMMediaTypeStream_CreateSharedSample(IAMMediaTypeStream* This,IStreamSample *pExistingSample,DWORD dwFlags,IStreamSample **ppNewSample) {
    return This->lpVtbl->CreateSharedSample(This,pExistingSample,dwFlags,ppNewSample);
}
static FORCEINLINE HRESULT IAMMediaTypeStream_SendEndOfStream(IAMMediaTypeStream* This,DWORD dwFlags) {
    return This->lpVtbl->SendEndOfStream(This,dwFlags);
}
/*** IAMMediaTypeStream methods ***/
static FORCEINLINE HRESULT IAMMediaTypeStream_GetFormat(IAMMediaTypeStream* This,AM_MEDIA_TYPE *pMediaType,DWORD dwFlags) {
    return This->lpVtbl->GetFormat(This,pMediaType,dwFlags);
}
static FORCEINLINE HRESULT IAMMediaTypeStream_SetFormat(IAMMediaTypeStream* This,AM_MEDIA_TYPE *pMediaType,DWORD dwFlags) {
    return This->lpVtbl->SetFormat(This,pMediaType,dwFlags);
}
static FORCEINLINE HRESULT IAMMediaTypeStream_CreateSample(IAMMediaTypeStream* This,LONG lSampleSize,BYTE *pbBuffer,DWORD dwFlags,IUnknown *pUnkOuter,IAMMediaTypeSample **ppAMMediaTypeSample) {
    return This->lpVtbl->CreateSample(This,lSampleSize,pbBuffer,dwFlags,pUnkOuter,ppAMMediaTypeSample);
}
static FORCEINLINE HRESULT IAMMediaTypeStream_GetStreamAllocatorRequirements(IAMMediaTypeStream* This,ALLOCATOR_PROPERTIES *pProps) {
    return This->lpVtbl->GetStreamAllocatorRequirements(This,pProps);
}
static FORCEINLINE HRESULT IAMMediaTypeStream_SetStreamAllocatorRequirements(IAMMediaTypeStream* This,ALLOCATOR_PROPERTIES *pProps) {
    return This->lpVtbl->SetStreamAllocatorRequirements(This,pProps);
}
#endif
#endif

#endif


#endif  /* __IAMMediaTypeStream_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAMMediaTypeSample interface
 */
#ifndef __IAMMediaTypeSample_INTERFACE_DEFINED__
#define __IAMMediaTypeSample_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMMediaTypeSample, 0xab6b4afb, 0xf6e4, 0x11d0, 0x90,0x0d, 0x00,0xc0,0x4f,0xd9,0x18,0x9d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ab6b4afb-f6e4-11d0-900d-00c04fd9189d")
IAMMediaTypeSample : public IStreamSample
{
    virtual HRESULT STDMETHODCALLTYPE SetPointer(
        BYTE *pBuffer,
        LONG lSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPointer(
        BYTE **ppBuffer) = 0;

    virtual LONG STDMETHODCALLTYPE GetSize(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTime(
        REFERENCE_TIME *pTimeStart,
        REFERENCE_TIME *pTimeEnd) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetTime(
        REFERENCE_TIME *pTimeStart,
        REFERENCE_TIME *pTimeEnd) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsSyncPoint(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSyncPoint(
        BOOL bIsSyncPoint) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsPreroll(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPreroll(
        BOOL bIsPreroll) = 0;

    virtual LONG STDMETHODCALLTYPE GetActualDataLength(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetActualDataLength(
        LONG Len) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMediaType(
        AM_MEDIA_TYPE **ppMediaType) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetMediaType(
        AM_MEDIA_TYPE *pMediaType) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsDiscontinuity(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDiscontinuity(
        BOOL bDiscontinuity) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMediaTime(
        LONGLONG *pTimeStart,
        LONGLONG *pTimeEnd) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetMediaTime(
        LONGLONG *pTimeStart,
        LONGLONG *pTimeEnd) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMMediaTypeSample, 0xab6b4afb, 0xf6e4, 0x11d0, 0x90,0x0d, 0x00,0xc0,0x4f,0xd9,0x18,0x9d)
#endif
#else
typedef struct IAMMediaTypeSampleVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IStreamSample methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMediaStream)(
        IAMMediaTypeSample *This,
        IMediaStream **ppMediaStream);

    HRESULT (STDMETHODCALLTYPE *GetSampleTimes)(
        IAMMediaTypeSample *This,
        STREAM_TIME *pStartTime,
        STREAM_TIME *pEndTime,
        STREAM_TIME *pCurrentTime);

    HRESULT (STDMETHODCALLTYPE *SetSampleTimes)(
        IAMMediaTypeSample *This,
        const STREAM_TIME *pStartTime,
        const STREAM_TIME *pEndTime);

    HRESULT (STDMETHODCALLTYPE *Update)(
        IAMMediaTypeSample *This,
        DWORD dwFlags,
        HANDLE hEvent,
        PAPCFUNC pfnAPC,
        DWORD dwAPCData);

    HRESULT (STDMETHODCALLTYPE *CompletionStatus)(
        IAMMediaTypeSample *This,
        DWORD dwFlags,
        DWORD dwMilliseconds);

    /*** IAMMediaTypeSample methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPointer)(
        IAMMediaTypeSample *This,
        BYTE *pBuffer,
        LONG lSize);

    HRESULT (STDMETHODCALLTYPE *GetPointer)(
        IAMMediaTypeSample *This,
        BYTE **ppBuffer);

    LONG (STDMETHODCALLTYPE *GetSize)(
        IAMMediaTypeSample *This);

    HRESULT (STDMETHODCALLTYPE *GetTime)(
        IAMMediaTypeSample *This,
        REFERENCE_TIME *pTimeStart,
        REFERENCE_TIME *pTimeEnd);

    HRESULT (STDMETHODCALLTYPE *SetTime)(
        IAMMediaTypeSample *This,
        REFERENCE_TIME *pTimeStart,
        REFERENCE_TIME *pTimeEnd);

    HRESULT (STDMETHODCALLTYPE *IsSyncPoint)(
        IAMMediaTypeSample *This);

    HRESULT (STDMETHODCALLTYPE *SetSyncPoint)(
        IAMMediaTypeSample *This,
        BOOL bIsSyncPoint);

    HRESULT (STDMETHODCALLTYPE *IsPreroll)(
        IAMMediaTypeSample *This);

    HRESULT (STDMETHODCALLTYPE *SetPreroll)(
        IAMMediaTypeSample *This,
        BOOL bIsPreroll);

    LONG (STDMETHODCALLTYPE *GetActualDataLength)(
        IAMMediaTypeSample *This);

    HRESULT (STDMETHODCALLTYPE *SetActualDataLength)(
        IAMMediaTypeSample *This,
        LONG Len);

    HRESULT (STDMETHODCALLTYPE *GetMediaType)(
        IAMMediaTypeSample *This,
        AM_MEDIA_TYPE **ppMediaType);

    HRESULT (STDMETHODCALLTYPE *SetMediaType)(
        IAMMediaTypeSample *This,
        AM_MEDIA_TYPE *pMediaType);

    HRESULT (STDMETHODCALLTYPE *IsDiscontinuity)(
        IAMMediaTypeSample *This);

    HRESULT (STDMETHODCALLTYPE *SetDiscontinuity)(
        IAMMediaTypeSample *This,
        BOOL bDiscontinuity);

    HRESULT (STDMETHODCALLTYPE *GetMediaTime)(
        IAMMediaTypeSample *This,
        LONGLONG *pTimeStart,
        LONGLONG *pTimeEnd);

    HRESULT (STDMETHODCALLTYPE *SetMediaTime)(
        IAMMediaTypeSample *This,
        LONGLONG *pTimeStart,
        LONGLONG *pTimeEnd);

    END_INTERFACE
} IAMMediaTypeSampleVtbl;

interface IAMMediaTypeSample {
    CONST_VTBL IAMMediaTypeSampleVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMMediaTypeSample_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMMediaTypeSample_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMMediaTypeSample_Release(This) (This)->lpVtbl->Release(This)
/*** IStreamSample methods ***/
#define IAMMediaTypeSample_GetMediaStream(This,ppMediaStream) (This)->lpVtbl->GetMediaStream(This,ppMediaStream)
#define IAMMediaTypeSample_GetSampleTimes(This,pStartTime,pEndTime,pCurrentTime) (This)->lpVtbl->GetSampleTimes(This,pStartTime,pEndTime,pCurrentTime)
#define IAMMediaTypeSample_SetSampleTimes(This,pStartTime,pEndTime) (This)->lpVtbl->SetSampleTimes(This,pStartTime,pEndTime)
#define IAMMediaTypeSample_Update(This,dwFlags,hEvent,pfnAPC,dwAPCData) (This)->lpVtbl->Update(This,dwFlags,hEvent,pfnAPC,dwAPCData)
#define IAMMediaTypeSample_CompletionStatus(This,dwFlags,dwMilliseconds) (This)->lpVtbl->CompletionStatus(This,dwFlags,dwMilliseconds)
/*** IAMMediaTypeSample methods ***/
#define IAMMediaTypeSample_SetPointer(This,pBuffer,lSize) (This)->lpVtbl->SetPointer(This,pBuffer,lSize)
#define IAMMediaTypeSample_GetPointer(This,ppBuffer) (This)->lpVtbl->GetPointer(This,ppBuffer)
#define IAMMediaTypeSample_GetSize(This) (This)->lpVtbl->GetSize(This)
#define IAMMediaTypeSample_GetTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->GetTime(This,pTimeStart,pTimeEnd)
#define IAMMediaTypeSample_SetTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->SetTime(This,pTimeStart,pTimeEnd)
#define IAMMediaTypeSample_IsSyncPoint(This) (This)->lpVtbl->IsSyncPoint(This)
#define IAMMediaTypeSample_SetSyncPoint(This,bIsSyncPoint) (This)->lpVtbl->SetSyncPoint(This,bIsSyncPoint)
#define IAMMediaTypeSample_IsPreroll(This) (This)->lpVtbl->IsPreroll(This)
#define IAMMediaTypeSample_SetPreroll(This,bIsPreroll) (This)->lpVtbl->SetPreroll(This,bIsPreroll)
#define IAMMediaTypeSample_GetActualDataLength(This) (This)->lpVtbl->GetActualDataLength(This)
#define IAMMediaTypeSample_SetActualDataLength(This,Len) (This)->lpVtbl->SetActualDataLength(This,Len)
#define IAMMediaTypeSample_GetMediaType(This,ppMediaType) (This)->lpVtbl->GetMediaType(This,ppMediaType)
#define IAMMediaTypeSample_SetMediaType(This,pMediaType) (This)->lpVtbl->SetMediaType(This,pMediaType)
#define IAMMediaTypeSample_IsDiscontinuity(This) (This)->lpVtbl->IsDiscontinuity(This)
#define IAMMediaTypeSample_SetDiscontinuity(This,bDiscontinuity) (This)->lpVtbl->SetDiscontinuity(This,bDiscontinuity)
#define IAMMediaTypeSample_GetMediaTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->GetMediaTime(This,pTimeStart,pTimeEnd)
#define IAMMediaTypeSample_SetMediaTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->SetMediaTime(This,pTimeStart,pTimeEnd)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMMediaTypeSample_QueryInterface(IAMMediaTypeSample* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMMediaTypeSample_AddRef(IAMMediaTypeSample* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMMediaTypeSample_Release(IAMMediaTypeSample* This) {
    return This->lpVtbl->Release(This);
}
/*** IStreamSample methods ***/
static FORCEINLINE HRESULT IAMMediaTypeSample_GetMediaStream(IAMMediaTypeSample* This,IMediaStream **ppMediaStream) {
    return This->lpVtbl->GetMediaStream(This,ppMediaStream);
}
static FORCEINLINE HRESULT IAMMediaTypeSample_GetSampleTimes(IAMMediaTypeSample* This,STREAM_TIME *pStartTime,STREAM_TIME *pEndTime,STREAM_TIME *pCurrentTime) {
    return This->lpVtbl->GetSampleTimes(This,pStartTime,pEndTime,pCurrentTime);
}
static FORCEINLINE HRESULT IAMMediaTypeSample_SetSampleTimes(IAMMediaTypeSample* This,const STREAM_TIME *pStartTime,const STREAM_TIME *pEndTime) {
    return This->lpVtbl->SetSampleTimes(This,pStartTime,pEndTime);
}
static FORCEINLINE HRESULT IAMMediaTypeSample_Update(IAMMediaTypeSample* This,DWORD dwFlags,HANDLE hEvent,PAPCFUNC pfnAPC,DWORD dwAPCData) {
    return This->lpVtbl->Update(This,dwFlags,hEvent,pfnAPC,dwAPCData);
}
static FORCEINLINE HRESULT IAMMediaTypeSample_CompletionStatus(IAMMediaTypeSample* This,DWORD dwFlags,DWORD dwMilliseconds) {
    return This->lpVtbl->CompletionStatus(This,dwFlags,dwMilliseconds);
}
/*** IAMMediaTypeSample methods ***/
static FORCEINLINE HRESULT IAMMediaTypeSample_SetPointer(IAMMediaTypeSample* This,BYTE *pBuffer,LONG lSize) {
    return This->lpVtbl->SetPointer(This,pBuffer,lSize);
}
static FORCEINLINE HRESULT IAMMediaTypeSample_GetPointer(IAMMediaTypeSample* This,BYTE **ppBuffer) {
    return This->lpVtbl->GetPointer(This,ppBuffer);
}
static FORCEINLINE LONG IAMMediaTypeSample_GetSize(IAMMediaTypeSample* This) {
    return This->lpVtbl->GetSize(This);
}
static FORCEINLINE HRESULT IAMMediaTypeSample_GetTime(IAMMediaTypeSample* This,REFERENCE_TIME *pTimeStart,REFERENCE_TIME *pTimeEnd) {
    return This->lpVtbl->GetTime(This,pTimeStart,pTimeEnd);
}
static FORCEINLINE HRESULT IAMMediaTypeSample_SetTime(IAMMediaTypeSample* This,REFERENCE_TIME *pTimeStart,REFERENCE_TIME *pTimeEnd) {
    return This->lpVtbl->SetTime(This,pTimeStart,pTimeEnd);
}
static FORCEINLINE HRESULT IAMMediaTypeSample_IsSyncPoint(IAMMediaTypeSample* This) {
    return This->lpVtbl->IsSyncPoint(This);
}
static FORCEINLINE HRESULT IAMMediaTypeSample_SetSyncPoint(IAMMediaTypeSample* This,BOOL bIsSyncPoint) {
    return This->lpVtbl->SetSyncPoint(This,bIsSyncPoint);
}
static FORCEINLINE HRESULT IAMMediaTypeSample_IsPreroll(IAMMediaTypeSample* This) {
    return This->lpVtbl->IsPreroll(This);
}
static FORCEINLINE HRESULT IAMMediaTypeSample_SetPreroll(IAMMediaTypeSample* This,BOOL bIsPreroll) {
    return This->lpVtbl->SetPreroll(This,bIsPreroll);
}
static FORCEINLINE LONG IAMMediaTypeSample_GetActualDataLength(IAMMediaTypeSample* This) {
    return This->lpVtbl->GetActualDataLength(This);
}
static FORCEINLINE HRESULT IAMMediaTypeSample_SetActualDataLength(IAMMediaTypeSample* This,LONG Len) {
    return This->lpVtbl->SetActualDataLength(This,Len);
}
static FORCEINLINE HRESULT IAMMediaTypeSample_GetMediaType(IAMMediaTypeSample* This,AM_MEDIA_TYPE **ppMediaType) {
    return This->lpVtbl->GetMediaType(This,ppMediaType);
}
static FORCEINLINE HRESULT IAMMediaTypeSample_SetMediaType(IAMMediaTypeSample* This,AM_MEDIA_TYPE *pMediaType) {
    return This->lpVtbl->SetMediaType(This,pMediaType);
}
static FORCEINLINE HRESULT IAMMediaTypeSample_IsDiscontinuity(IAMMediaTypeSample* This) {
    return This->lpVtbl->IsDiscontinuity(This);
}
static FORCEINLINE HRESULT IAMMediaTypeSample_SetDiscontinuity(IAMMediaTypeSample* This,BOOL bDiscontinuity) {
    return This->lpVtbl->SetDiscontinuity(This,bDiscontinuity);
}
static FORCEINLINE HRESULT IAMMediaTypeSample_GetMediaTime(IAMMediaTypeSample* This,LONGLONG *pTimeStart,LONGLONG *pTimeEnd) {
    return This->lpVtbl->GetMediaTime(This,pTimeStart,pTimeEnd);
}
static FORCEINLINE HRESULT IAMMediaTypeSample_SetMediaTime(IAMMediaTypeSample* This,LONGLONG *pTimeStart,LONGLONG *pTimeEnd) {
    return This->lpVtbl->SetMediaTime(This,pTimeStart,pTimeEnd);
}
#endif
#endif

#endif


#endif  /* __IAMMediaTypeSample_INTERFACE_DEFINED__ */

/*****************************************************************************
 * AMMultiMediaStream coclass
 */

DEFINE_GUID(CLSID_AMMultiMediaStream, 0x49c47ce5, 0x9ba4, 0x11d0, 0x82,0x12, 0x00,0xc0,0x4f,0xc3,0x2c,0x45);

#ifdef __cplusplus
class DECLSPEC_UUID("49c47ce5-9ba4-11d0-8212-00c04fc32c45") AMMultiMediaStream;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(AMMultiMediaStream, 0x49c47ce5, 0x9ba4, 0x11d0, 0x82,0x12, 0x00,0xc0,0x4f,0xc3,0x2c,0x45)
#endif
#endif

DEFINE_GUID(CLSID_AMDirectDrawStream,  0x49c47ce4, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);
DEFINE_GUID(CLSID_AMAudioStream,       0x8496e040, 0xaf4c, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);
DEFINE_GUID(CLSID_AMAudioData,         0xf2468580, 0xaf8a, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);
DEFINE_GUID(CLSID_AMMediaTypeStream,   0xcf0f2f7c, 0xf7bf, 0x11d0, 0x90, 0x0d, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);
DEFINE_GUID(CLSID_MediaStreamFilter,   0x49c47ce0, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);
/* 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 /* __amstream_h__ */
