/*
 *  control.h   ActiveMovie control interfaces
 *
 * =========================================================================
 *
 *                          Open Watcom Project
 *
 * Copyright (c) 2004-2026 The Open Watcom Contributors. All Rights Reserved.
 *
 *    This file is automatically generated. Do not edit directly.
 *
 * =========================================================================
 */

#ifndef __control_h__
#define __control_h__

#ifndef _ENABLE_AUTODEPEND
 #pragma read_only_file
#endif

#ifdef __cplusplus
extern "C" {
#endif

/* ActiveMovie primitive data types */
typedef double      REFTIME;
typedef LONG_PTR    OAEVENT;
typedef LONG_PTR    OAHWND;
typedef long        OAFilterState;

/* IAMCollection interface */
#undef INTERFACE
#define INTERFACE   IAMCollection
DECLARE_INTERFACE_( IAMCollection, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IAMCollection methods */
    STDMETHOD( get_Count )( THIS_ LONG * ) PURE;
    STDMETHOD( Item )( THIS_ long, IUnknown ** ) PURE;
    STDMETHOD( get__NewEnum )( THIS_ IUnknown ** ) PURE;
};

/* IMediaControl interface */
#undef INTERFACE
#define INTERFACE   IMediaControl
DECLARE_INTERFACE_( IMediaControl, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IMediaControl methods */
    STDMETHOD( Run )( THIS ) PURE;
    STDMETHOD( Pause )( THIS ) PURE;
    STDMETHOD( Stop )( THIS ) PURE;
    STDMETHOD( GetState )( THIS_ LONG, OAFilterState * ) PURE;
    STDMETHOD( RenderFile )( THIS_ BSTR ) PURE;
    STDMETHOD( AddSourceFilter )( THIS_ BSTR, IDispatch ** ) PURE;
    STDMETHOD( get_FilterCollection )( THIS_ IDispatch ** ) PURE;
    STDMETHOD( get_RegFilterCollection )( THIS_ IDispatch ** ) PURE;
    STDMETHOD( StopWhenReady )( THIS ) PURE;
};

/* IMediaEvent interface */
#undef INTERFACE
#define INTERFACE   IMediaEvent
DECLARE_INTERFACE_( IMediaEvent, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IMediaEvent methods */
    STDMETHOD( GetEventHandle )( THIS_  OAEVENT * ) PURE;
    STDMETHOD( GetEvent )( THIS_ long *, LONG_PTR *, LONG_PTR *, long ) PURE;
    STDMETHOD( WaitForCompletion )( THIS_ long, long * ) PURE;
    STDMETHOD( CancelDefaultHandling )( THIS_ long ) PURE;
    STDMETHOD( RestoreDefaultHandling )( THIS_ long ) PURE;
    STDMETHOD( FreeEventParams )( THIS_ long, LONG_PTR, LONG_PTR ) PURE;
};

/* IMediaEventEx interface */
#undef INTERFACE
#define INTERFACE   IMediaEventEx
DECLARE_INTERFACE_( IMediaEventEx, IMediaEvent ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IMediaEvent methods */
    STDMETHOD( GetEventHandle )( THIS_  OAEVENT * ) PURE;
    STDMETHOD( GetEvent )( THIS_ long *, LONG_PTR *, LONG_PTR *, long ) PURE;
    STDMETHOD( WaitForCompletion )( THIS_ long, long * ) PURE;
    STDMETHOD( CancelDefaultHandling )( THIS_ long ) PURE;
    STDMETHOD( RestoreDefaultHandling )( THIS_ long ) PURE;
    STDMETHOD( FreeEventParams )( THIS_ long, LONG_PTR, LONG_PTR ) PURE;

    /* IMediaEventEx methods */
    STDMETHOD( SetNotifyWindow )( THIS_ OAHWND, long, LONG_PTR ) PURE;
    STDMETHOD( SetNotifyFlags )( THIS_ long ) PURE;
    STDMETHOD( GetNotifyFlags )( THIS_ long * ) PURE;
};

/* IMediaPosition interface */
#undef INTERFACE
#define INTERFACE   IMediaPosition
DECLARE_INTERFACE_( IMediaPosition, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IMediaPosition methods */
    STDMETHOD( get_Duration )( THIS_ REFTIME * ) PURE;
    STDMETHOD( put_CurrentPosition )( THIS_ REFTIME ) PURE;
    STDMETHOD( get_CurrentPosition )( THIS_ REFTIME * ) PURE;
    STDMETHOD( get_StopTime )( THIS_ REFTIME * ) PURE;
    STDMETHOD( put_StopTime )( THIS_ REFTIME ) PURE;
    STDMETHOD( get_PrerollTime )( THIS_ REFTIME * ) PURE;
    STDMETHOD( put_PrerollTime )( THIS_ REFTIME ) PURE;
    STDMETHOD( put_Rate )( THIS_ double ) PURE;
    STDMETHOD( get_Rate )( THIS_ double * ) PURE;
    STDMETHOD( CanSeekForward )( THIS_ LONG * ) PURE;
    STDMETHOD( CanSeekBackward )( THIS_ LONG * ) PURE;
};

/* IBasicAudio interface */
#undef INTERFACE
#define INTERFACE   IBasicAudio
DECLARE_INTERFACE_( IBasicAudio, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IBasicAudio methods */
    STDMETHOD( put_Volume )( THIS_ long ) PURE;
    STDMETHOD( get_Volume )( THIS_ long * ) PURE;
    STDMETHOD( put_Balance )( THIS_ long ) PURE;
    STDMETHOD( get_Balance )( THIS_ long * ) PURE;
};

/* IVideoWindow interface */
#undef INTERFACE
#define INTERFACE   IVideoWindow
DECLARE_INTERFACE_( IVideoWindow, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IVideoWindow methods */
    STDMETHOD( put_Caption )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Caption )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_WindowStyle )( THIS_ long ) PURE;
    STDMETHOD( get_WindowStyle )( THIS_ long * ) PURE;
    STDMETHOD( put_WindowStyleEx )( THIS_ long ) PURE;
    STDMETHOD( get_WindowStyleEx )( THIS_ long * ) PURE;
    STDMETHOD( put_AutoShow )( THIS_ long ) PURE;
    STDMETHOD( get_AutoShow )( THIS_ long * ) PURE;
    STDMETHOD( put_WindowState )( THIS_ long ) PURE;
    STDMETHOD( get_WindowState )( THIS_ long * ) PURE;
    STDMETHOD( put_BackgroundPalette )( THIS_ long ) PURE;
    STDMETHOD( get_BackgroundPalette )( THIS_ long * ) PURE;
    STDMETHOD( put_Visible )( THIS_ long ) PURE;
    STDMETHOD( get_Visible )( THIS_ long * ) PURE;
    STDMETHOD( put_Left )( THIS_ long ) PURE;
    STDMETHOD( get_Left )( THIS_ long * ) PURE;
    STDMETHOD( put_Width )( THIS_ long ) PURE;
    STDMETHOD( get_Width )( THIS_ long * ) PURE;
    STDMETHOD( put_Top )( THIS_ long ) PURE;
    STDMETHOD( get_Top )( THIS_ long * ) PURE;
    STDMETHOD( put_Height )( THIS_ long ) PURE;
    STDMETHOD( get_Height )( THIS_ long * ) PURE;
    STDMETHOD( put_Owner )( THIS_ OAHWND ) PURE;
    STDMETHOD( get_Owner )( THIS_ OAHWND * ) PURE;
    STDMETHOD( put_MessageDrain )( THIS_ OAHWND ) PURE;
    STDMETHOD( get_MessageDrain )( THIS_ OAHWND * ) PURE;
    STDMETHOD( get_BorderColor )( THIS_ long * ) PURE;
    STDMETHOD( put_BorderColor )( THIS_ long ) PURE;
    STDMETHOD( get_FullScreenMode )( THIS_ long * ) PURE;
    STDMETHOD( put_FullScreenMode )( THIS_ long ) PURE;
    STDMETHOD( SetWindowForeground )( THIS_ long ) PURE;
    STDMETHOD( NotifyOwnerMessage )( THIS_ OAHWND, long, LONG_PTR, LONG_PTR ) PURE;
    STDMETHOD( SetWindowPosition )( THIS_ long, long, long, long ) PURE;
    STDMETHOD( GetWindowPosition )( THIS_ long *, long *, long *, long * ) PURE;
    STDMETHOD( GetMinIdealImageSize )( THIS_ long *, long * ) PURE;
    STDMETHOD( GetMaxIdealImageSize )( THIS_ long *, long * ) PURE;
    STDMETHOD( GetRestorePosition )( THIS_ long *, long *, long *, long * ) PURE;
    STDMETHOD( HideCursor )( THIS_ long ) PURE;
    STDMETHOD( IsCursorHidden )( THIS_ long * ) PURE;
};

/* IBasicVideo interface */
#undef INTERFACE
#define INTERFACE   IBasicVideo
DECLARE_INTERFACE_( IBasicVideo, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IBasicVideo methods */
    STDMETHOD( get_AvgTimePerFrame )( THIS_ REFTIME * ) PURE;
    STDMETHOD( get_BitRate )( THIS_ long * ) PURE;
    STDMETHOD( get_BitErrorRate )( THIS_ long * ) PURE;
    STDMETHOD( get_VideoWidth )( THIS_ long * ) PURE;
    STDMETHOD( get_VideoHeight )( THIS_ long * ) PURE;
    STDMETHOD( put_SourceLeft )( THIS_ long ) PURE;
    STDMETHOD( get_SourceLeft )( THIS_ long * ) PURE;
    STDMETHOD( put_SourceWidth )( THIS_ long ) PURE;
    STDMETHOD( get_SourceWidth )( THIS_ long * ) PURE;
    STDMETHOD( put_SourceTop )( THIS_ long ) PURE;
    STDMETHOD( get_SourceTop )( THIS_ long * ) PURE;
    STDMETHOD( put_SourceHeight )( THIS_ long ) PURE;
    STDMETHOD( get_SourceHeight )( THIS_ long * ) PURE;
    STDMETHOD( put_DestinationLeft )( THIS_ long ) PURE;
    STDMETHOD( get_DestinationLeft )( THIS_ long * ) PURE;
    STDMETHOD( put_DestinationWidth )( THIS_ long ) PURE;
    STDMETHOD( get_DestinationWidth )( THIS_ long * ) PURE;
    STDMETHOD( put_DestinationTop )( THIS_ long ) PURE;
    STDMETHOD( get_DestinationTop )( THIS_ long * ) PURE;
    STDMETHOD( put_DestinationHeight )( THIS_ long ) PURE;
    STDMETHOD( get_DestinationHeight )( THIS_ long * ) PURE;
    STDMETHOD( SetSourcePosition )( THIS_ long, long, long, long ) PURE;
    STDMETHOD( GetSourcePosition )( THIS_ long *, long *, long *, long * ) PURE;
    STDMETHOD( SetDefaultSourcePosition )( THIS ) PURE;
    STDMETHOD( SetDestinationPosition )( THIS_ long, long, long, long ) PURE;
    STDMETHOD( GetDestinationPosition )( THIS_ long *, long *, long *, long * ) PURE;
    STDMETHOD( SetDefaultDestinationPosition )( THIS ) PURE;
    STDMETHOD( GetVideoSize )( THIS_ long *, long * ) PURE;
    STDMETHOD( GetVideoPaletteEntries )( THIS_ long, long, long *, long * ) PURE;
    STDMETHOD( GetCurrentImage )( THIS_ long *, long * ) PURE;
    STDMETHOD( IsUsingDefaultSource )( THIS ) PURE;
    STDMETHOD( IsUsingDefaultDestination )( THIS ) PURE;
};

/* IBasicVideo2 interface */
#undef INTERFACE
#define INTERFACE   IBasicVideo2
DECLARE_INTERFACE_( IBasicVideo2, IBasicVideo ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IBasicVideo methods */
    STDMETHOD( get_AvgTimePerFrame )( THIS_ REFTIME * ) PURE;
    STDMETHOD( get_BitRate )( THIS_ long * ) PURE;
    STDMETHOD( get_BitErrorRate )( THIS_ long * ) PURE;
    STDMETHOD( get_VideoWidth )( THIS_ long * ) PURE;
    STDMETHOD( get_VideoHeight )( THIS_ long * ) PURE;
    STDMETHOD( put_SourceLeft )( THIS_ long ) PURE;
    STDMETHOD( get_SourceLeft )( THIS_ long * ) PURE;
    STDMETHOD( put_SourceWidth )( THIS_ long ) PURE;
    STDMETHOD( get_SourceWidth )( THIS_ long * ) PURE;
    STDMETHOD( put_SourceTop )( THIS_ long ) PURE;
    STDMETHOD( get_SourceTop )( THIS_ long * ) PURE;
    STDMETHOD( put_SourceHeight )( THIS_ long ) PURE;
    STDMETHOD( get_SourceHeight )( THIS_ long * ) PURE;
    STDMETHOD( put_DestinationLeft )( THIS_ long ) PURE;
    STDMETHOD( get_DestinationLeft )( THIS_ long * ) PURE;
    STDMETHOD( put_DestinationWidth )( THIS_ long ) PURE;
    STDMETHOD( get_DestinationWidth )( THIS_ long * ) PURE;
    STDMETHOD( put_DestinationTop )( THIS_ long ) PURE;
    STDMETHOD( get_DestinationTop )( THIS_ long * ) PURE;
    STDMETHOD( put_DestinationHeight )( THIS_ long ) PURE;
    STDMETHOD( get_DestinationHeight )( THIS_ long * ) PURE;
    STDMETHOD( SetSourcePosition )( THIS_ long, long, long, long ) PURE;
    STDMETHOD( GetSourcePosition )( THIS_ long *, long *, long *, long * ) PURE;
    STDMETHOD( SetDefaultSourcePosition )( THIS ) PURE;
    STDMETHOD( SetDestinationPosition )( THIS_ long, long, long, long ) PURE;
    STDMETHOD( GetDestinationPosition )( THIS_ long *, long *, long *, long * ) PURE;
    STDMETHOD( SetDefaultDestinationPosition )( THIS ) PURE;
    STDMETHOD( GetVideoSize )( THIS_ long *, long * ) PURE;
    STDMETHOD( GetVideoPaletteEntries )( THIS_ long, long, long *, long * ) PURE;
    STDMETHOD( GetCurrentImage )( THIS_ long *, long * ) PURE;
    STDMETHOD( IsUsingDefaultSource )( THIS ) PURE;
    STDMETHOD( IsUsingDefaultDestination )( THIS ) PURE;

    /* IBasicVideo2 methods */
    STDMETHOD( GetPreferredAspectRatio )( THIS_ long *, long * ) PURE;
};

/* IDeferredCommand interface */
#undef INTERFACE
#define INTERFACE   IDeferredCommand
DECLARE_INTERFACE_( IDeferredCommand, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDeferredCommand methods */
    STDMETHOD( Cancel )( THIS ) PURE;
    STDMETHOD( Confidence )( THIS_ LONG * ) PURE;
    STDMETHOD( Postpone )( THIS_ REFTIME ) PURE;
    STDMETHOD( GetHResult )( THIS_ HRESULT * ) PURE;
};

/* IQueueCommand interface */
#undef INTERFACE
#define INTERFACE   IQueueCommand
DECLARE_INTERFACE_( IQueueCommand, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IQueueCommand methods */
    STDMETHOD( InvokeAtStreamTime )( THIS_ IDeferredCommand **, REFTIME, GUID *, long, short, long, VARIANT *, VARIANT *, short * ) PURE;
    STDMETHOD( InvokeAtPresentationTime )( THIS_ IDeferredCommand **, REFTIME, GUID *, long, short, long, VARIANT *, VARIANT *, short * ) PURE;
};

/* IFilterInfo interface */
#undef INTERFACE
#define INTERFACE   IFilterInfo
DECLARE_INTERFACE_( IFilterInfo, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IFilterInfo methods */
    STDMETHOD( FindPin )( THIS_ BSTR, IDispatch ** ) PURE;
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_VendorInfo )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Filter )( THIS_ IUnknown ** ) PURE;
    STDMETHOD( get_Pins )( THIS_ IDispatch ** ) PURE;
    STDMETHOD( get_IsFileSource )( THIS_ LONG * ) PURE;
    STDMETHOD( get_Filename )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Filename )( THIS_ BSTR ) PURE;
};

/* IRegFilterInfo interface */
#undef INTERFACE
#define INTERFACE   IRegFilterInfo
DECLARE_INTERFACE_( IRegFilterInfo, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IRegFilterInfo methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( Filter )( THIS_ IDispatch ** ) PURE;
};

/* IMediaTypeInfo interface */
#undef INTERFACE
#define INTERFACE   IMediaTypeInfo
DECLARE_INTERFACE_( IMediaTypeInfo, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IMediaTypeInfo methods */
    STDMETHOD( get_Type )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Subtype )( THIS_ BSTR * ) PURE;
};

/* IPinInfo interface */
#undef INTERFACE
#define INTERFACE   IPinInfo
DECLARE_INTERFACE_( IPinInfo, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IPinInfo methods */
    STDMETHOD( get_Pin )( THIS_ IUnknown ** ) PURE;
    STDMETHOD( get_ConnectedTo )( THIS_ IDispatch ** ) PURE;
    STDMETHOD( get_ConnectionMediaType )( THIS_ IDispatch ** ) PURE;
    STDMETHOD( get_FilterInfo )( THIS_ IDispatch ** ) PURE;
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Direction )( THIS_ LONG * ) PURE;
    STDMETHOD( get_PinID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_MediaTypes )( THIS_ IDispatch ** ) PURE;
    STDMETHOD( Connect )( THIS_ IUnknown * ) PURE;
    STDMETHOD( ConnectDirect )( THIS_ IUnknown * ) PURE;
    STDMETHOD( ConnectWithType )( THIS_ IUnknown *, IDispatch * ) PURE;
    STDMETHOD( Disconnect )( THIS ) PURE;
    STDMETHOD( Render )( THIS ) PURE;
};

/* IAMStats interface */
#undef INTERFACE
#define INTERFACE   IAMStats
DECLARE_INTERFACE_( IAMStats, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IAMStats methods */
    STDMETHOD( Reset )( THIS ) PURE;
    STDMETHOD( get_Count )( THIS_ LONG * ) PURE;
    STDMETHOD( GetValueByIndex )( THIS_ long, BSTR *, long *, double *, double *, double *, double *, double * ) PURE;
    STDMETHOD( GetValueByName )( THIS_ BSTR, long *, long *, double *, double *, double *, double *, double * ) PURE;
    STDMETHOD( GetIndex )( THIS_ BSTR, long, long * ) PURE;
    STDMETHOD( AddValue )( THIS_ long, double ) PURE;
};

/* C object macros */
#if (!defined( __cplusplus ) || defined( CINTERFACE )) && defined( COBJMACROS )
    #define IAMCollection_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IAMCollection_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IAMCollection_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IAMCollection_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IAMCollection_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IAMCollection_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IAMCollection_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IAMCollection_get_Count( x, p ) \
        (x)->lpVtbl->get_Count( x, p )
    #define IAMCollection_Item( x, p1, p2 ) \
        (x)->lpVtbl->Item( x, p1, p2 )
    #define IAMCollection_get__NewEnum( x, p ) \
        (x)->lpvtbl->get__NewEnum( x, p )
    #define IMediaControl_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IMediaControl_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IMediaControl_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IMediaControl_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IMediaControl_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IMediaControl_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IMediaControl_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IMediaControl_Run( x ) \
        (x)->lpVtbl->Run( x )
    #define IMediaControl_Pause( x ) \
        (x)->lpVtbl->Pause( x )
    #define IMediaControl_Stop( x ) \
        (x)->lpVtbl->Stop( x )
    #define IMediaControl_GetState( x, p1, p2 ) \
        (x)->lpVtbl->GetState( x, p1, p2 )
    #define IMediaControl_RenderFile( x, p ) \
        (x)->lpVtbl->RenderFile( x, p )
    #define IMediaControl_AddSourceFilter( x, p1, p2 ) \
        (x)->lpVtbl->AddSourceFilter( x, p1, p2 )
    #define IMediaControl_get_FilterCollection( x, p ) \
        (x)->lpVtbl->get_FilterCollection( x, p )
    #define IMediaControl_get_RegFilterCollection( x, p ) \
        (x)->lpVtbl->get_regFilterCollection( x, p )
    #define IMediaControl_StopWhenReady( x ) \
        (x)->lpVtbl->StopWhenReady( x )
    #define IMediaEvent_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IMediaEvent_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IMediaEvent_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IMediaEvent_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IMediaEvent_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IMediaEvent_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IMediaEvent_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IMediaEvent_GetEventHandle( x, p ) \
        (x)->lpVtbl->GetEventHandle( x, p )
    #define IMediaEvent_GetEvent( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->GetEvent( x, p1, p2, p3, p4 )
    #define IMediaEvent_WaitForCompletion( x, p1, p2 ) \
        (x)->lpVtbl->WaitForCompletion( x, p1, p2 )
    #define IMediaEvent_CancelDefaultHandling( x, p ) \
        (x)->lpVtbl->CancelDefaultHandling( x, p )
    #define IMediaEvent_RestoreDefaultHandling( x, p ) \
        (x)->lpVtbl->RestoreDefaultHandling( x, p )
    #define IMediaEvent_FreeEventParams( x, p1, p2, p3 ) \
        (x)->lpVtbl->FreeEventParams( x, p1, p2, p3 )
    #define IMediaEventEx_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IMediaEventEx_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IMediaEventEx_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IMediaEventEx_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IMediaEventEx_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IMediaEventEx_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IMediaEventEx_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IMediaEventEx_GetEventHandle( x, p ) \
        (x)->lpVtbl->GetEventHandle( x, p )
    #define IMediaEventEx_GetEvent( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->GetEvent( x, p1, p2, p3, p4 )
    #define IMediaEventEx_WaitForCompletion( x, p1, p2 ) \
        (x)->lpVtbl->WaitForCompletion( x, p1, p2 )
    #define IMediaEventEx_CancelDefaultHandling( x, p ) \
        (x)->lpVtbl->CancelDefaultHandling( x, p )
    #define IMediaEventEx_RestoreDefaultHandling( x, p ) \
        (x)->lpVtbl->RestoreDefaultHandling( x, p )
    #define IMediaEventEx_FreeEventParams( x, p1, p2, p3 ) \
        (x)->lpVtbl->FreeEventParams( x, p1, p2, p3 )
    #define IMediaEventEx_SetNotifyWindow( x, p1, p2, p3 ) \
        (x)->lpVtbl->SetNotifyWindow( x, p1, p2, p3 )
    #define IMediaEventEx_SetNotifyFlags( x, p ) \
        (x)->lpVtbl->SetNotifyFlags( x, p )
    #define IMediaEventEx_GetNotifyFlags( x, p ) \
        (x)->lpVtbl->GetNotifyFlags( x, p )
    #define IMediaPosition_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IMediaPosition_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IMediaPosition_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IMediaPosition_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IMediaPosition_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IMediaPosition_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IMediaPosition_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IMediaPosition_get_Duration( x, p ) \
        (x)->lpVtbl->get_Duration( x, p )
    #define IMediaPosition_put_CurrentPosition( x, p ) \
        (x)->lpVtbl->put_CurrentPosition( x, p )
    #define IMediaPosition_get_CurrentPosition( x, p ) \
        (x)->lpVtbl->get_CurrentPosition( x, p )
    #define IMediaPosition_get_StopTime( x, p ) \
        (x)->lpVtbl->get_StopTime( x, p )
    #define IMediaPosition_put_StopTime( x, p ) \
        (x)->lpVtbl->put_StopTime( x, p )
    #define IMediaPosition_get_PrerollTime( x, p ) \
        (x)->lpVtbl->get_PrerollTime( x, p )
    #define IMediaPosition_put_PrerollTime( x, p ) \
        (x)->lpVtbl->put_PrerollTime( x, p )
    #define IMediaPosition_put_Rate( x, p ) \
        (x)->lpVtbl->put_Rate( x, p )
    #define IMediaPosition_get_Rate( x, p ) \
        (x)->lpVtbl->get_Rate( x, p )
    #define IMediaPosition_CanSeekForward( x, p ) \
        (x)->lpVtbl->CanSeekForward( x, p )
    #define IMediaPosition_CanSeekBackward( x, p ) \
        (x)->lpVtbl->CanSeekBackward( x, p )
    #define IAMCollection_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IBasicAudio_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IBasicAudio_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IBasicAudio_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IBasicAudio_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IBasicAudio_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IBasicAudio_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IBasicAudio_put_Volume( x, p ) \
        (x)->lpVtbl->put_Volume( x, p )
    #define IBasicAudio_get_Volume( x, p ) \
        (x)->lpVtbl->get_Volume( x, p )
    #define IBasicAudio_put_Balance( x, p ) \
        (x)->lpVtbl->put_Balance( x, p )
    #define IBasicAudio_get_Balance( x, p ) \
        (x)->lpVtbl->get_Balance( x, p )
    #define IVideoWindow_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IVideoWindow_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IVideoWindow_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IVideoWindow_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IVideoWindow_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IVideoWindow_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IVideoWindow_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IVideoWindow_put_Caption( x, p ) \
        (x)->lpVtbl->put_Caption( x, p )
    #define IVideoWindow_get_Caption( x, p ) \
        (x)->lpVtbl->get_Caption( x, p )
    #define IVideoWindow_put_WindowStyle( x, p ) \
        (x)->lpVtbl->put_WindowStyle( x, p )
    #define IVideoWindow_get_WindowStyle( x, p ) \
        (x)->lpVtbl->get_WindowStyle( x, p )
    #define IVideoWindow_put_WindowStyleEx( x, p ) \
        (x)->lpVtbl->put_WindowStyleEx( x, p )
    #define IVideoWindow_get_WindowStyleEx( x, p ) \
        (x)->lpVtbl->get_WindowStyleEx( x, p )
    #define IVideoWindow_put_AutoShow( x, p ) \
        (x)->lpVtbl->put_AutoShow( x, p )
    #define IVideoWindow_get_AutoShow( x, p ) \
        (x)->lpVtbl->get_AutoShow( x, p )
    #define IVideoWindow_put_WindowState( x, p ) \
        (x)->lpVtbl->put_WindowState( x, p )
    #define IVideoWindow_get_WindowState( x, p ) \
        (x)->lpVtbl->get_WindowState( x, p )
    #define IVideoWindow_put_BackgroundPalette( x, p ) \
        (x)->lpVtbl->put_BackgroundPalette( x, p )
    #define IVideoWindow_get_BackgroundPalette( x, p ) \
        (x)->lpVtbl->get_BackgroundPalette( x, p )
    #define IVideoWindow_put_Visible( x, p ) \
        (x)->lpVtbl->put_Visible( x, p )
    #define IVideoWindow_get_Visible( x, p ) \
        (x)->lpVtbl->get_Visible( x, p )
    #define IVideoWindow_put_Left( x, p ) \
        (x)->lpVtbl->put_Left( x, p )
    #define IVideoWindow_get_Left( x, p ) \
        (x)->lpVtbl->get_Left( x, p )
    #define IVideoWindow_put_Width( x, p ) \
        (x)->lpVtbl->put_Width( x, p )
    #define IVideoWindow_get_Width( x, p ) \
        (x)->lpVtbl->get_Width( x, p )
    #define IVideoWindow_put_Top( x, p ) \
        (x)->lpVtbl->put_Top( x, p )
    #define IVideoWindow_get_Top( x, p ) \
        (x)->lpVtbl->get_Top( x, p )
    #define IVideoWindow_put_Height( x, p ) \
        (x)->lpVtbl->put_Height( x, p )
    #define IVideoWindow_get_Height( x, p ) \
        (x)->lpVtbl->get_Height( x, p )
    #define IVideoWindow_put_Owner( x, p ) \
        (x)->lpVtbl->put_Owner( x, p )
    #define IVideoWindow_get_Owner( x, p ) \
        (x)->lpVtbl->get_Owner( x, p )
    #define IVideoWindow_put_MessageDrain( x, p ) \
        (x)->lpVtbl->put_MessageDrain( x, p )
    #define IVideoWindow_get_MessageDrain( x, p ) \
        (x)->lpVtbl->get_MessageDrain( x, p )
    #define IVideoWindow_get_BorderColor( x, p ) \
        (x)->lpVtbl->get_BorderColor( x, p )
    #define IVideoWindow_put_BorderColor( x, p ) \
        (x)->lpVtbl->put_BorderColor( x, p )
    #define IVideoWindow_get_FullScreenMode( x, p ) \
        (x)->lpVtbl->get_FullScreenMode( x, p )
    #define IVideoWindow_put_FullScreenMode( x, p ) \
        (x)->lpVtbl->put_FullScreenMode( x, p )
    #define IVideoWindow_SetWindowForeground( x, p ) \
        (x)->lpVtbl->SetWindowForeground( x, p )
    #define IVideoWindow_NotifyOwnerMessage( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->NotifyOwnerMessage( x, p1, p2, p3, p4 )
    #define IVideoWindow_SetWindowPosition( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->SetWindowPosition( x, p1, p2, p3, p4 )
    #define IVideoWindow_GetWindowPosition( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->GetWindowPosition( x, p1, p2, p3, p4 )
    #define IVideoWindow_GetMinIdealImageSize( x, p1, p2 ) \
        (x)->lpVtbl->GetMinIdealImageSize( x, p1, p2 )
    #define IVideoWindow_GetMaxIdealImageSize( x, p1, p2 ) \
        (x)->lpVtbl->GetMaxIdealImageSize( x, p1, p2 )
    #define IVideoWindow_GetRestorePosition( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->GetRestorePosition( x, p1, p2, p3, p4 )
    #define IVideoWindow_HideCursor( x, p ) \
        (x)->lpVtbl->HideCursor( x, p )
    #define IVideoWindow_IsCursorHidden( x, p ) \
        (x)->lpVtbl->IsCursorHidden( x, p )
    #define IBasicVideo_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IBasicVideo_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IBasicVideo_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IBasicVideo_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IBasicVideo_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IBasicVideo_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IBasicVideo_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IBasicVideo_get_AvgTimePerFrame( x, p ) \
        (x)->lpVtbl->get_AvgTimePerFrame( x, p )
    #define IBasicVideo_get_BitRate( x, p ) \
        (x)->lpVtbl->get_BitRate( x, p )
    #define IBasicVideo_get_BitErrorRate( x, p ) \
        (x)->lpVtbl->get_BitErrorRate( x, p )
    #define IBasicVideo_get_VideoWidth( x, p ) \
        (x)->lpVtbl->get_VideoWidth( x, p )
    #define IBasicVideo_get_VideoHeight( x, p ) \
        (x)->lpVtbl->get_VideoHeight( x, p )
    #define IBasicVideo_put_SourceLeft( x, p ) \
        (x)->lpVtbl->put_SourceLeft( x, p )
    #define IBasicVideo_get_SourceLeft( x, p ) \
        (x)->lpVtbl->get_SourceLeft( x, p )
    #define IBasicVideo_put_SourceWidth( x, p ) \
        (x)->lpVtbl->put_SourceWidth( x, p )
    #define IBasicVideo_get_SourceWidth( x, p ) \
        (x)->lpVtbl->get_SourceWidth( x, p )
    #define IBasicVideo_put_SourceTop( x, p ) \
        (x)->lpVtbl->put_SourceTop( x, p )
    #define IBasicVideo_get_SourceTop( x, p ) \
        (x)->lpVtbl->get_SourceTop( x, p )
    #define IBasicVideo_put_SourceHeight( x, p ) \
        (x)->lpVtbl->put_SourceHeight( x, p )
    #define IBasicVideo_get_SourceHeight( x, p ) \
        (x)->lpVtbl->get_SourceHeight( x, p )
    #define IBasicVideo_put_DestinationLeft( x, p ) \
        (x)->lpVtbl->put_DestinationLeft( x, p )
    #define IBasicVideo_get_DestinationLeft( x, p ) \
        (x)->lpVtbl->get_DestinationLeft( x, p )
    #define IBasicVideo_put_DestinationWidth( x, p ) \
        (x)->lpVtbl->put_DestinationWidth( x, p )
    #define IBasicVideo_get_DestinationWidth( x, p ) \
        (x)->lpVtbl->get_DestinationWidth( x, p )
    #define IBasicVideo_put_DestinationTop( x, p ) \
        (x)->lpVtbl->put_DestinationTop( x, p )
    #define IBasicVideo_get_DestinationTop( x, p ) \
        (x)->lpVtbl->get_DestinationTop( x, p )
    #define IBasicVideo_put_DestinationHeight( x, p ) \
        (x)->lpVtbl->put_DestinationHeight( x, p )
    #define IBasicVideo_get_DestinationHeight( x, p ) \
        (x)->lpVtbl->get_DestinationHeight( x, p )
    #define IBasicVideo_SetSourcePosition( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->SetSourcePosition( x, p1, p2, p3, p4 )
    #define IBasicVideo_GetSourcePosition( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->GetSourcePosition( x, p1, p2, p3, p4 )
    #define IBasicVideo_SetDefaultSourcePosition( x ) \
        (x)->lpVtbl->SetDefaultSourcePosition( x )
    #define IBasicVideo_SetDestinationPosition( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->SetDestinationPosition( x, p1, p2, p3, p4 )
    #define IBasicVideo_GetDestinationPosition( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->GetDestinationPosition( x, p1, p2, p3, p4 )
    #define IBasicVideo_SetDefaultDestinationPosition( x ) \
        (x)->lpVtbl->SetDefaultDestinationPosition( x )
    #define IBasicVideo_GetVideoSize( x, p1, p2 ) \
        (x)->lpVtbl->GetVideoSize( x, p1, p2 )
    #define IBasicVideo_GetVideoPaletteEntries( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->GetVideoPaletteEntries( x, p1, p2, p3, p4 )
    #define IBasicVideo_GetCurrentImage( x, p1, p2 ) \
        (x)->lpVtbl->GetCurrentImage( x, p1, p2 )
    #define IBasicVideo_IsUsingDefaultSource( x ) \
        (x)->lpVtbl->IsUsingDefaultSource( x )
    #define IBasicVideo_IsUsingDefaultDestination( x ) \
        (x)->lpVtbl->IsUsingDefaultDestination( x )
    #define IBasicVideo2_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IBasicVideo2_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IBasicVideo2_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IBasicVideo2_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IBasicVideo2_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IBasicVideo2_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IBasicVideo2_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IBasicVideo2_get_AvgTimePerFrame( x, p ) \
        (x)->lpVtbl->get_AvgTimePerFrame( x, p )
    #define IBasicVideo2_get_BitRate( x, p ) \
        (x)->lpVtbl->get_BitRate( x, p )
    #define IBasicVideo2_get_BitErrorRate( x, p ) \
        (x)->lpVtbl->get_BitErrorRate( x, p )
    #define IBasicVideo2_get_VideoWidth( x, p ) \
        (x)->lpVtbl->get_VideoWidth( x, p )
    #define IBasicVideo2_get_VideoHeight( x, p ) \
        (x)->lpVtbl->get_VideoHeight( x, p )
    #define IBasicVideo2_put_SourceLeft( x, p ) \
        (x)->lpVtbl->put_SourceLeft( x, p )
    #define IBasicVideo2_get_SourceLeft( x, p ) \
        (x)->lpVtbl->get_SourceLeft( x, p )
    #define IBasicVideo2_put_SourceWidth( x, p ) \
        (x)->lpVtbl->put_SourceWidth( x, p )
    #define IBasicVideo2_get_SourceWidth( x, p ) \
        (x)->lpVtbl->get_SourceWidth( x, p )
    #define IBasicVideo2_put_SourceTop( x, p ) \
        (x)->lpVtbl->put_SourceTop( x, p )
    #define IBasicVideo2_get_SourceTop( x, p ) \
        (x)->lpVtbl->get_SourceTop( x, p )
    #define IBasicVideo2_put_SourceHeight( x, p ) \
        (x)->lpVtbl->put_SourceHeight( x, p )
    #define IBasicVideo2_get_SourceHeight( x, p ) \
        (x)->lpVtbl->get_SourceHeight( x, p )
    #define IBasicVideo2_put_DestinationLeft( x, p ) \
        (x)->lpVtbl->put_DestinationLeft( x, p )
    #define IBasicVideo2_get_DestinationLeft( x, p ) \
        (x)->lpVtbl->get_DestinationLeft( x, p )
    #define IBasicVideo2_put_DestinationWidth( x, p ) \
        (x)->lpVtbl->put_DestinationWidth( x, p )
    #define IBasicVideo2_get_DestinationWidth( x, p ) \
        (x)->lpVtbl->get_DestinationWidth( x, p )
    #define IBasicVideo2_put_DestinationTop( x, p ) \
        (x)->lpVtbl->put_DestinationTop( x, p )
    #define IBasicVideo2_get_DestinationTop( x, p ) \
        (x)->lpVtbl->get_DestinationTop( x, p )
    #define IBasicVideo2_put_DestinationHeight( x, p ) \
        (x)->lpVtbl->put_DestinationHeight( x, p )
    #define IBasicVideo2_get_DestinationHeight( x, p ) \
        (x)->lpVtbl->get_DestinationHeight( x, p )
    #define IBasicVideo2_SetSourcePosition( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->SetSourcePosition( x, p1, p2, p3, p4 )
    #define IBasicVideo2_GetSourcePosition( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->GetSourcePosition( x, p1, p2, p3, p4 )
    #define IBasicVideo2_SetDefaultSourcePosition( x ) \
        (x)->lpVtbl->SetDefaultSourcePosition( x )
    #define IBasicVideo2_SetDestinationPosition( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->SetDestinationPosition( x, p1, p2, p3, p4 )
    #define IBasicVideo2_GetDestinationPosition( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->GetDestinationPosition( x, p1, p2, p3, p4 )
    #define IBasicVideo2_SetDefaultDestinationPosition( x ) \
        (x)->lpVtbl->SetDefaultDestinationPosition( x )
    #define IBasicVideo2_GetVideoSize( x, p1, p2 ) \
        (x)->lpVtbl->GetVideoSize( x, p1, p2 )
    #define IBasicVideo2_GetVideoPaletteEntries( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->GetVideoPaletteEntries( x, p1, p2, p3, p4 )
    #define IBasicVideo2_GetCurrentImage( x, p1, p2 ) \
        (x)->lpVtbl->GetCurrentImage( x, p1, p2 )
    #define IBasicVideo2_IsUsingDefaultSource( x ) \
        (x)->lpVtbl->IsUsingDefaultSource( x )
    #define IBasicVideo2_IsUsingDefaultDestination( x ) \
        (x)->lpVtbl->IsUsingDefaultDestination( x )
    #define IBasicVideo2_GetPreferredAspectRatio( x, p1, p2 ) \
        (x)->lpVtbl->GetPreferredAspectRatio( x, p1, p2 )
    #define IDeferredCommand_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IDeferredCommand_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IDeferredCommand_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IDeferredCommand_Cancel( x ) \
        (x)->lpVtbl->Cancel( x )
    #define IDeferredCommand_Confidence( x, p ) \
        (x)->lpVtbl->Confidence( x, p )
    #define IDeferredCommand_Postpone( x, p ) \
        (x)->lpVtbl->Postpone( x, p )
    #define IDeferredCommand_GetHResult( x, p ) \
        (x)->lpVtbl->GetHResult( x, p )
    #define IQueueCommand_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IQueueCommand_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IQueueCommand_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IQueueCommand_InvokeAtStreamTime( x, p1, p2, p3, p4, p5, p6, p7, p8, p9 ) \
        (x)->lpVtbl->InvokeAtStreamTime( x, p1, p2, p3, p4, p5, p6, p7, p8, p9 )
    #define IQueueCommand_InvokeAtPresentationTime( x, p1, p2, p3, p4, p5, p6, p7, p8, p9 ) \
        (x)->lpVtbl->InvokeAtPresentationTime( x, p1, p2, p3, p4, p5, p6, p7, p8, p9 )
    #define IFilterInfo_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IFilterInfo_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IFilterInfo_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IFilterInfo_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IFilterInfo_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IFilterInfo_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IFilterInfo_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IFilterInfo_FindPin( x, p1, p2 ) \
        (x)->lpVtbl->FindPin( x, p1, p2 )
    #define IFilterInfo_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IFilterInfo_get_VendorInfo( x, p ) \
        (x)->lpVtbl->get_VendorInfo( x, p )
    #define IFilterInfo_get_Filter( x, p ) \
        (x)->lpVtbl->get_Filter( x, p )
    #define IFilterInfo_get_Pins( x, p ) \
        (x)->lpVtbl->get_Pins( x, p )
    #define IFilterInfo_get_IsFileSource( x, p ) \
        (x)->lpVtbl->get_IsFileSource( x, p )
    #define IFilterInfo_get_Filename( x, p ) \
        (x)->lpVtbl->get_Filename( x, p )
    #define IFilterInfo_put_Filename( x, p ) \
        (x)->lpVtbl->put_Filename( x, p )
    #define IRegFilterInfo_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IRegFilterInfo_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IRegFilterInfo_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IRegFilterInfo_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IRegFilterInfo_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IRegFilterInfo_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IRegFilterInfo_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IRegFilterInfo_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IRegFilterInfo_Filter( x, p ) \
        (x)->lpVtbl->Filter( x, p )
    #define IMediaTypeInfo_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IMediaTypeInfo_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IMediaTypeInfo_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IMediaTypeInfo_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IMediaTypeInfo_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IMediaTypeInfo_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IMediaTypeInfo_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IMediaTypeInfo_get_Type( x, p ) \
        (x)->lpVtbl->get_Type( x, p )
    #define IMediaTypeInfo_get_Subtype( x, p ) \
        (x)->lpVtbl->get_Subtype( x, p )
    #define IPinInfo_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IPinInfo_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IPinInfo_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IPinInfo_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IPinInfo_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IPinInfo_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IPinInfo_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IPinInfo_get_Pin( x, p ) \
        (x)->lpVtbl->get_Pin( x, p )
    #define IPinInfo_get_ConnectedTo( x, p ) \
        (x)->lpVtbl->get_ConnectedTo( x, p )
    #define IPinInfo_get_ConnectionMediaType( x, p ) \
        (x)->lpVtbl->get_ConnectionMediaType( x, p )
    #define IPinInfo_get_FilterInfo( x, p ) \
        (x)->lpVtbl->get_FilterInfo( x, p )
    #define IPinInfo_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IPinInfo_get_Direction( x, p ) \
        (x)->lpVtbl->get_Direction( x, p )
    #define IPinInfo_get_PinID( x, p ) \
        (x)->lpVtbl->get_PinID( x, p )
    #define IPinInfo_get_MediaTypes( x, p ) \
        (x)->lpVtbl->get_MediaTypes( x, p )
    #define IPinInfo_Connect( x, p ) \
        (x)->lpVtbl->Connect( x, p )
    #define IPinInfo_ConnectDirect( x, p ) \
        (x)->lpVtbl->ConnectDirect( x, p )
    #define IPinInfo_ConnectWithType( x, p1, p2 ) \
        (x)->lpVtbl->ConnectWithType( x, p1, p2 )
    #define IPinInfo_Disconnect( x ) \
        (x)->lpVtbl->Disconnect( x )
    #define IPinInfo_Render( x ) \
        (x)->lpVtbl->Render( x )
    #define IAMStats_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IAMStats_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IAMStats_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IAMStats_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IAMStats_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IAMStats_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IAMStats_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IAMStats_Reset( x ) \
        (x)->lpVtbl->Reset( x )
    #define IAMStats_get_Count( x, p ) \
        (x)->lpVtbl->get_Count( x, p )
    #define IAMStats_GetValueByIndex( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->GetValueByIndex( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IAMStats_GetValueByName( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->GetValueByName( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IAMStats_GetIndex( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetIndex( x, p1, p2, p3 )
    #define IAMStats_AddValue( x, p1, p2 ) \
        (x)->lpVtbl->AddValue( x, p1, p2 )
#endif

#ifdef __cplusplus
} /* extern "C" */
#endif

/* GUIDs */
EXTERN_C const IID      __cdecl LIBID_QuartzTypeLib;
EXTERN_C const IID      __cdecl IID_IAMCollection;
EXTERN_C const IID      __cdecl IID_IMediaControl;
EXTERN_C const IID      __cdecl IID_IMediaEvent;
EXTERN_C const IID      __cdecl IID_IMediaEventEx;
EXTERN_C const IID      __cdecl IID_IMediaPosition;
EXTERN_C const IID      __cdecl IID_IBasicAudio;
EXTERN_C const IID      __cdecl IID_IVideoWindow;
EXTERN_C const IID      __cdecl IID_IBasicVideo;
EXTERN_C const IID      __cdecl IID_IBasicVideo2;
EXTERN_C const IID      __cdecl IID_IDeferredCommand;
EXTERN_C const IID      __cdecl IID_IQueueCommand;
EXTERN_C const CLSID    __cdecl CLSID_FilgraphManager;
EXTERN_C const IID      __cdecl IID_IFilterInfo;
EXTERN_C const IID      __cdecl IID_IRegFilterInfo;
EXTERN_C const IID      __cdecl IID_IMediaTypeInfo;
EXTERN_C const IID      __cdecl IID_IPinInfo;
EXTERN_C const IID      __cdecl IID_IAMStats;

#endif /* __control_h__ */
