/*** Autogenerated by WIDL 10.4 from include/vidcap.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 __vidcap_h__
#define __vidcap_h__

/* Forward declarations */

#ifndef __IKsTopologyInfo_FWD_DEFINED__
#define __IKsTopologyInfo_FWD_DEFINED__
typedef interface IKsTopologyInfo IKsTopologyInfo;
#ifdef __cplusplus
interface IKsTopologyInfo;
#endif /* __cplusplus */
#endif

#ifndef __ISelector_FWD_DEFINED__
#define __ISelector_FWD_DEFINED__
typedef interface ISelector ISelector;
#ifdef __cplusplus
interface ISelector;
#endif /* __cplusplus */
#endif

#ifndef __ICameraControl_FWD_DEFINED__
#define __ICameraControl_FWD_DEFINED__
typedef interface ICameraControl ICameraControl;
#ifdef __cplusplus
interface ICameraControl;
#endif /* __cplusplus */
#endif

#ifndef __IVideoProcAmp_FWD_DEFINED__
#define __IVideoProcAmp_FWD_DEFINED__
typedef interface IVideoProcAmp IVideoProcAmp;
#ifdef __cplusplus
interface IVideoProcAmp;
#endif /* __cplusplus */
#endif

#ifndef __IKsNodeControl_FWD_DEFINED__
#define __IKsNodeControl_FWD_DEFINED__
typedef interface IKsNodeControl IKsNodeControl;
#ifdef __cplusplus
interface IKsNodeControl;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

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

#ifdef __cplusplus
extern "C" {
#endif

#include <winapifamily.h>
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#include "ks.h"
#ifndef _KS_
typedef struct __WIDL_vidcap_generated_name_00000016 {
    ULONG FromNode;
    ULONG FromNodePin;
    ULONG ToNode;
    ULONG ToNodePin;
} KSTOPOLOGY_CONNECTION;
typedef struct __WIDL_vidcap_generated_name_00000016 *PKSTOPOLOGY_CONNECTION;
#endif
/*****************************************************************************
 * IKsTopologyInfo interface
 */
#ifndef __IKsTopologyInfo_INTERFACE_DEFINED__
#define __IKsTopologyInfo_INTERFACE_DEFINED__

DEFINE_GUID(IID_IKsTopologyInfo, 0x720d4ac0, 0x7533, 0x11d0, 0xa5,0xd6, 0x28,0xdb,0x04,0xc1,0x00,0x00);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("720d4ac0-7533-11d0-a5d6-28db04c10000")
IKsTopologyInfo : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE get_NumCategories(
        DWORD *pdwNumCategories) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Category(
        DWORD dwIndex,
        GUID *pCategory) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NumConnections(
        DWORD *pdwNumConnections) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ConnectionInfo(
        DWORD dwIndex,
        KSTOPOLOGY_CONNECTION *pConnectionInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NodeName(
        DWORD dwNodeId,
        WCHAR *pwchNodeName,
        DWORD dwBufSize,
        DWORD *pdwNameLen) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NumNodes(
        DWORD *pdwNumNodes) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NodeType(
        DWORD dwNodeId,
        GUID *pNodeType) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateNodeInstance(
        DWORD dwNodeId,
        REFIID iid,
        void **ppvObject) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IKsTopologyInfo, 0x720d4ac0, 0x7533, 0x11d0, 0xa5,0xd6, 0x28,0xdb,0x04,0xc1,0x00,0x00)
#endif
#else
typedef struct IKsTopologyInfoVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IKsTopologyInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *get_NumCategories)(
        IKsTopologyInfo *This,
        DWORD *pdwNumCategories);

    HRESULT (STDMETHODCALLTYPE *get_Category)(
        IKsTopologyInfo *This,
        DWORD dwIndex,
        GUID *pCategory);

    HRESULT (STDMETHODCALLTYPE *get_NumConnections)(
        IKsTopologyInfo *This,
        DWORD *pdwNumConnections);

    HRESULT (STDMETHODCALLTYPE *get_ConnectionInfo)(
        IKsTopologyInfo *This,
        DWORD dwIndex,
        KSTOPOLOGY_CONNECTION *pConnectionInfo);

    HRESULT (STDMETHODCALLTYPE *get_NodeName)(
        IKsTopologyInfo *This,
        DWORD dwNodeId,
        WCHAR *pwchNodeName,
        DWORD dwBufSize,
        DWORD *pdwNameLen);

    HRESULT (STDMETHODCALLTYPE *get_NumNodes)(
        IKsTopologyInfo *This,
        DWORD *pdwNumNodes);

    HRESULT (STDMETHODCALLTYPE *get_NodeType)(
        IKsTopologyInfo *This,
        DWORD dwNodeId,
        GUID *pNodeType);

    HRESULT (STDMETHODCALLTYPE *CreateNodeInstance)(
        IKsTopologyInfo *This,
        DWORD dwNodeId,
        REFIID iid,
        void **ppvObject);

    END_INTERFACE
} IKsTopologyInfoVtbl;

interface IKsTopologyInfo {
    CONST_VTBL IKsTopologyInfoVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IKsTopologyInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IKsTopologyInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IKsTopologyInfo_Release(This) (This)->lpVtbl->Release(This)
/*** IKsTopologyInfo methods ***/
#define IKsTopologyInfo_get_NumCategories(This,pdwNumCategories) (This)->lpVtbl->get_NumCategories(This,pdwNumCategories)
#define IKsTopologyInfo_get_Category(This,dwIndex,pCategory) (This)->lpVtbl->get_Category(This,dwIndex,pCategory)
#define IKsTopologyInfo_get_NumConnections(This,pdwNumConnections) (This)->lpVtbl->get_NumConnections(This,pdwNumConnections)
#define IKsTopologyInfo_get_ConnectionInfo(This,dwIndex,pConnectionInfo) (This)->lpVtbl->get_ConnectionInfo(This,dwIndex,pConnectionInfo)
#define IKsTopologyInfo_get_NodeName(This,dwNodeId,pwchNodeName,dwBufSize,pdwNameLen) (This)->lpVtbl->get_NodeName(This,dwNodeId,pwchNodeName,dwBufSize,pdwNameLen)
#define IKsTopologyInfo_get_NumNodes(This,pdwNumNodes) (This)->lpVtbl->get_NumNodes(This,pdwNumNodes)
#define IKsTopologyInfo_get_NodeType(This,dwNodeId,pNodeType) (This)->lpVtbl->get_NodeType(This,dwNodeId,pNodeType)
#define IKsTopologyInfo_CreateNodeInstance(This,dwNodeId,iid,ppvObject) (This)->lpVtbl->CreateNodeInstance(This,dwNodeId,iid,ppvObject)
#else
/*** IUnknown methods ***/
static inline HRESULT IKsTopologyInfo_QueryInterface(IKsTopologyInfo* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IKsTopologyInfo_AddRef(IKsTopologyInfo* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IKsTopologyInfo_Release(IKsTopologyInfo* This) {
    return This->lpVtbl->Release(This);
}
/*** IKsTopologyInfo methods ***/
static inline HRESULT IKsTopologyInfo_get_NumCategories(IKsTopologyInfo* This,DWORD *pdwNumCategories) {
    return This->lpVtbl->get_NumCategories(This,pdwNumCategories);
}
static inline HRESULT IKsTopologyInfo_get_Category(IKsTopologyInfo* This,DWORD dwIndex,GUID *pCategory) {
    return This->lpVtbl->get_Category(This,dwIndex,pCategory);
}
static inline HRESULT IKsTopologyInfo_get_NumConnections(IKsTopologyInfo* This,DWORD *pdwNumConnections) {
    return This->lpVtbl->get_NumConnections(This,pdwNumConnections);
}
static inline HRESULT IKsTopologyInfo_get_ConnectionInfo(IKsTopologyInfo* This,DWORD dwIndex,KSTOPOLOGY_CONNECTION *pConnectionInfo) {
    return This->lpVtbl->get_ConnectionInfo(This,dwIndex,pConnectionInfo);
}
static inline HRESULT IKsTopologyInfo_get_NodeName(IKsTopologyInfo* This,DWORD dwNodeId,WCHAR *pwchNodeName,DWORD dwBufSize,DWORD *pdwNameLen) {
    return This->lpVtbl->get_NodeName(This,dwNodeId,pwchNodeName,dwBufSize,pdwNameLen);
}
static inline HRESULT IKsTopologyInfo_get_NumNodes(IKsTopologyInfo* This,DWORD *pdwNumNodes) {
    return This->lpVtbl->get_NumNodes(This,pdwNumNodes);
}
static inline HRESULT IKsTopologyInfo_get_NodeType(IKsTopologyInfo* This,DWORD dwNodeId,GUID *pNodeType) {
    return This->lpVtbl->get_NodeType(This,dwNodeId,pNodeType);
}
static inline HRESULT IKsTopologyInfo_CreateNodeInstance(IKsTopologyInfo* This,DWORD dwNodeId,REFIID iid,void **ppvObject) {
    return This->lpVtbl->CreateNodeInstance(This,dwNodeId,iid,ppvObject);
}
#endif
#endif

#endif


#endif  /* __IKsTopologyInfo_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISelector interface
 */
#ifndef __ISelector_INTERFACE_DEFINED__
#define __ISelector_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISelector, 0x1abdaeca, 0x68b6, 0x4f83, 0x93,0x71, 0xb4,0x13,0x90,0x7c,0x7b,0x9f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("1abdaeca-68b6-4f83-9371-b413907c7b9f")
ISelector : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE get_NumSources(
        DWORD *pdwNumSources) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_SourceNodeId(
        DWORD *pdwPinId) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_SourceNodeId(
        DWORD dwPinId) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISelector, 0x1abdaeca, 0x68b6, 0x4f83, 0x93,0x71, 0xb4,0x13,0x90,0x7c,0x7b,0x9f)
#endif
#else
typedef struct ISelectorVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISelector methods ***/
    HRESULT (STDMETHODCALLTYPE *get_NumSources)(
        ISelector *This,
        DWORD *pdwNumSources);

    HRESULT (STDMETHODCALLTYPE *get_SourceNodeId)(
        ISelector *This,
        DWORD *pdwPinId);

    HRESULT (STDMETHODCALLTYPE *put_SourceNodeId)(
        ISelector *This,
        DWORD dwPinId);

    END_INTERFACE
} ISelectorVtbl;

interface ISelector {
    CONST_VTBL ISelectorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISelector_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISelector_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISelector_Release(This) (This)->lpVtbl->Release(This)
/*** ISelector methods ***/
#define ISelector_get_NumSources(This,pdwNumSources) (This)->lpVtbl->get_NumSources(This,pdwNumSources)
#define ISelector_get_SourceNodeId(This,pdwPinId) (This)->lpVtbl->get_SourceNodeId(This,pdwPinId)
#define ISelector_put_SourceNodeId(This,dwPinId) (This)->lpVtbl->put_SourceNodeId(This,dwPinId)
#else
/*** IUnknown methods ***/
static inline HRESULT ISelector_QueryInterface(ISelector* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISelector_AddRef(ISelector* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISelector_Release(ISelector* This) {
    return This->lpVtbl->Release(This);
}
/*** ISelector methods ***/
static inline HRESULT ISelector_get_NumSources(ISelector* This,DWORD *pdwNumSources) {
    return This->lpVtbl->get_NumSources(This,pdwNumSources);
}
static inline HRESULT ISelector_get_SourceNodeId(ISelector* This,DWORD *pdwPinId) {
    return This->lpVtbl->get_SourceNodeId(This,pdwPinId);
}
static inline HRESULT ISelector_put_SourceNodeId(ISelector* This,DWORD dwPinId) {
    return This->lpVtbl->put_SourceNodeId(This,dwPinId);
}
#endif
#endif

#endif


#endif  /* __ISelector_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ICameraControl interface
 */
#ifndef __ICameraControl_INTERFACE_DEFINED__
#define __ICameraControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_ICameraControl, 0x2ba1785d, 0x4d1b, 0x44ef, 0x85,0xe8, 0xc7,0xf1,0xd3,0xf2,0x01,0x84);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2ba1785d-4d1b-44ef-85e8-c7f1d3f20184")
ICameraControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE get_Exposure(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Exposure(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_Exposure(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Focus(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Focus(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_Focus(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Iris(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Iris(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_Iris(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Zoom(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Zoom(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_Zoom(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_FocalLengths(
        LONG *plOcularFocalLength,
        LONG *plObjectiveFocalLengthMin,
        LONG *plObjectiveFocalLengthMax) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Pan(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Pan(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_Pan(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Tilt(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Tilt(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_Tilt(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PanTilt(
        LONG *pPanValue,
        LONG *pTiltValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_PanTilt(
        LONG PanValue,
        LONG TiltValue,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Roll(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Roll(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_Roll(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ExposureRelative(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_ExposureRelative(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_ExposureRelative(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_FocusRelative(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_FocusRelative(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_FocusRelative(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_IrisRelative(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_IrisRelative(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_IrisRelative(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ZoomRelative(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_ZoomRelative(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_ZoomRelative(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PanRelative(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_PanRelative(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_TiltRelative(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_TiltRelative(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_TiltRelative(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PanTiltRelative(
        LONG *pPanValue,
        LONG *pTiltValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_PanTiltRelative(
        LONG PanValue,
        LONG TiltValue,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_PanRelative(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_RollRelative(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_RollRelative(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_RollRelative(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ScanMode(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_ScanMode(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PrivacyMode(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_PrivacyMode(
        LONG Value,
        LONG Flags) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ICameraControl, 0x2ba1785d, 0x4d1b, 0x44ef, 0x85,0xe8, 0xc7,0xf1,0xd3,0xf2,0x01,0x84)
#endif
#else
typedef struct ICameraControlVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ICameraControl methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Exposure)(
        ICameraControl *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_Exposure)(
        ICameraControl *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_Exposure)(
        ICameraControl *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_Focus)(
        ICameraControl *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_Focus)(
        ICameraControl *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_Focus)(
        ICameraControl *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_Iris)(
        ICameraControl *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_Iris)(
        ICameraControl *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_Iris)(
        ICameraControl *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_Zoom)(
        ICameraControl *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_Zoom)(
        ICameraControl *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_Zoom)(
        ICameraControl *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_FocalLengths)(
        ICameraControl *This,
        LONG *plOcularFocalLength,
        LONG *plObjectiveFocalLengthMin,
        LONG *plObjectiveFocalLengthMax);

    HRESULT (STDMETHODCALLTYPE *get_Pan)(
        ICameraControl *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_Pan)(
        ICameraControl *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_Pan)(
        ICameraControl *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_Tilt)(
        ICameraControl *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_Tilt)(
        ICameraControl *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_Tilt)(
        ICameraControl *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_PanTilt)(
        ICameraControl *This,
        LONG *pPanValue,
        LONG *pTiltValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_PanTilt)(
        ICameraControl *This,
        LONG PanValue,
        LONG TiltValue,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *get_Roll)(
        ICameraControl *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_Roll)(
        ICameraControl *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_Roll)(
        ICameraControl *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_ExposureRelative)(
        ICameraControl *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_ExposureRelative)(
        ICameraControl *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_ExposureRelative)(
        ICameraControl *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_FocusRelative)(
        ICameraControl *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_FocusRelative)(
        ICameraControl *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_FocusRelative)(
        ICameraControl *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_IrisRelative)(
        ICameraControl *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_IrisRelative)(
        ICameraControl *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_IrisRelative)(
        ICameraControl *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_ZoomRelative)(
        ICameraControl *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_ZoomRelative)(
        ICameraControl *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_ZoomRelative)(
        ICameraControl *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_PanRelative)(
        ICameraControl *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_PanRelative)(
        ICameraControl *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *get_TiltRelative)(
        ICameraControl *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_TiltRelative)(
        ICameraControl *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_TiltRelative)(
        ICameraControl *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_PanTiltRelative)(
        ICameraControl *This,
        LONG *pPanValue,
        LONG *pTiltValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_PanTiltRelative)(
        ICameraControl *This,
        LONG PanValue,
        LONG TiltValue,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_PanRelative)(
        ICameraControl *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_RollRelative)(
        ICameraControl *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_RollRelative)(
        ICameraControl *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_RollRelative)(
        ICameraControl *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_ScanMode)(
        ICameraControl *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_ScanMode)(
        ICameraControl *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *get_PrivacyMode)(
        ICameraControl *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_PrivacyMode)(
        ICameraControl *This,
        LONG Value,
        LONG Flags);

    END_INTERFACE
} ICameraControlVtbl;

interface ICameraControl {
    CONST_VTBL ICameraControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ICameraControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ICameraControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ICameraControl_Release(This) (This)->lpVtbl->Release(This)
/*** ICameraControl methods ***/
#define ICameraControl_get_Exposure(This,pValue,pFlags) (This)->lpVtbl->get_Exposure(This,pValue,pFlags)
#define ICameraControl_put_Exposure(This,Value,Flags) (This)->lpVtbl->put_Exposure(This,Value,Flags)
#define ICameraControl_getRange_Exposure(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_Exposure(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define ICameraControl_get_Focus(This,pValue,pFlags) (This)->lpVtbl->get_Focus(This,pValue,pFlags)
#define ICameraControl_put_Focus(This,Value,Flags) (This)->lpVtbl->put_Focus(This,Value,Flags)
#define ICameraControl_getRange_Focus(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_Focus(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define ICameraControl_get_Iris(This,pValue,pFlags) (This)->lpVtbl->get_Iris(This,pValue,pFlags)
#define ICameraControl_put_Iris(This,Value,Flags) (This)->lpVtbl->put_Iris(This,Value,Flags)
#define ICameraControl_getRange_Iris(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_Iris(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define ICameraControl_get_Zoom(This,pValue,pFlags) (This)->lpVtbl->get_Zoom(This,pValue,pFlags)
#define ICameraControl_put_Zoom(This,Value,Flags) (This)->lpVtbl->put_Zoom(This,Value,Flags)
#define ICameraControl_getRange_Zoom(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_Zoom(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define ICameraControl_get_FocalLengths(This,plOcularFocalLength,plObjectiveFocalLengthMin,plObjectiveFocalLengthMax) (This)->lpVtbl->get_FocalLengths(This,plOcularFocalLength,plObjectiveFocalLengthMin,plObjectiveFocalLengthMax)
#define ICameraControl_get_Pan(This,pValue,pFlags) (This)->lpVtbl->get_Pan(This,pValue,pFlags)
#define ICameraControl_put_Pan(This,Value,Flags) (This)->lpVtbl->put_Pan(This,Value,Flags)
#define ICameraControl_getRange_Pan(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_Pan(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define ICameraControl_get_Tilt(This,pValue,pFlags) (This)->lpVtbl->get_Tilt(This,pValue,pFlags)
#define ICameraControl_put_Tilt(This,Value,Flags) (This)->lpVtbl->put_Tilt(This,Value,Flags)
#define ICameraControl_getRange_Tilt(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_Tilt(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define ICameraControl_get_PanTilt(This,pPanValue,pTiltValue,pFlags) (This)->lpVtbl->get_PanTilt(This,pPanValue,pTiltValue,pFlags)
#define ICameraControl_put_PanTilt(This,PanValue,TiltValue,Flags) (This)->lpVtbl->put_PanTilt(This,PanValue,TiltValue,Flags)
#define ICameraControl_get_Roll(This,pValue,pFlags) (This)->lpVtbl->get_Roll(This,pValue,pFlags)
#define ICameraControl_put_Roll(This,Value,Flags) (This)->lpVtbl->put_Roll(This,Value,Flags)
#define ICameraControl_getRange_Roll(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_Roll(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define ICameraControl_get_ExposureRelative(This,pValue,pFlags) (This)->lpVtbl->get_ExposureRelative(This,pValue,pFlags)
#define ICameraControl_put_ExposureRelative(This,Value,Flags) (This)->lpVtbl->put_ExposureRelative(This,Value,Flags)
#define ICameraControl_getRange_ExposureRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_ExposureRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define ICameraControl_get_FocusRelative(This,pValue,pFlags) (This)->lpVtbl->get_FocusRelative(This,pValue,pFlags)
#define ICameraControl_put_FocusRelative(This,Value,Flags) (This)->lpVtbl->put_FocusRelative(This,Value,Flags)
#define ICameraControl_getRange_FocusRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_FocusRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define ICameraControl_get_IrisRelative(This,pValue,pFlags) (This)->lpVtbl->get_IrisRelative(This,pValue,pFlags)
#define ICameraControl_put_IrisRelative(This,Value,Flags) (This)->lpVtbl->put_IrisRelative(This,Value,Flags)
#define ICameraControl_getRange_IrisRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_IrisRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define ICameraControl_get_ZoomRelative(This,pValue,pFlags) (This)->lpVtbl->get_ZoomRelative(This,pValue,pFlags)
#define ICameraControl_put_ZoomRelative(This,Value,Flags) (This)->lpVtbl->put_ZoomRelative(This,Value,Flags)
#define ICameraControl_getRange_ZoomRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_ZoomRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define ICameraControl_get_PanRelative(This,pValue,pFlags) (This)->lpVtbl->get_PanRelative(This,pValue,pFlags)
#define ICameraControl_put_PanRelative(This,Value,Flags) (This)->lpVtbl->put_PanRelative(This,Value,Flags)
#define ICameraControl_get_TiltRelative(This,pValue,pFlags) (This)->lpVtbl->get_TiltRelative(This,pValue,pFlags)
#define ICameraControl_put_TiltRelative(This,Value,Flags) (This)->lpVtbl->put_TiltRelative(This,Value,Flags)
#define ICameraControl_getRange_TiltRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_TiltRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define ICameraControl_get_PanTiltRelative(This,pPanValue,pTiltValue,pFlags) (This)->lpVtbl->get_PanTiltRelative(This,pPanValue,pTiltValue,pFlags)
#define ICameraControl_put_PanTiltRelative(This,PanValue,TiltValue,Flags) (This)->lpVtbl->put_PanTiltRelative(This,PanValue,TiltValue,Flags)
#define ICameraControl_getRange_PanRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_PanRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define ICameraControl_get_RollRelative(This,pValue,pFlags) (This)->lpVtbl->get_RollRelative(This,pValue,pFlags)
#define ICameraControl_put_RollRelative(This,Value,Flags) (This)->lpVtbl->put_RollRelative(This,Value,Flags)
#define ICameraControl_getRange_RollRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_RollRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define ICameraControl_get_ScanMode(This,pValue,pFlags) (This)->lpVtbl->get_ScanMode(This,pValue,pFlags)
#define ICameraControl_put_ScanMode(This,Value,Flags) (This)->lpVtbl->put_ScanMode(This,Value,Flags)
#define ICameraControl_get_PrivacyMode(This,pValue,pFlags) (This)->lpVtbl->get_PrivacyMode(This,pValue,pFlags)
#define ICameraControl_put_PrivacyMode(This,Value,Flags) (This)->lpVtbl->put_PrivacyMode(This,Value,Flags)
#else
/*** IUnknown methods ***/
static inline HRESULT ICameraControl_QueryInterface(ICameraControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ICameraControl_AddRef(ICameraControl* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ICameraControl_Release(ICameraControl* This) {
    return This->lpVtbl->Release(This);
}
/*** ICameraControl methods ***/
static inline HRESULT ICameraControl_get_Exposure(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Exposure(This,pValue,pFlags);
}
static inline HRESULT ICameraControl_put_Exposure(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Exposure(This,Value,Flags);
}
static inline HRESULT ICameraControl_getRange_Exposure(ICameraControl* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_Exposure(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT ICameraControl_get_Focus(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Focus(This,pValue,pFlags);
}
static inline HRESULT ICameraControl_put_Focus(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Focus(This,Value,Flags);
}
static inline HRESULT ICameraControl_getRange_Focus(ICameraControl* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_Focus(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT ICameraControl_get_Iris(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Iris(This,pValue,pFlags);
}
static inline HRESULT ICameraControl_put_Iris(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Iris(This,Value,Flags);
}
static inline HRESULT ICameraControl_getRange_Iris(ICameraControl* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_Iris(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT ICameraControl_get_Zoom(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Zoom(This,pValue,pFlags);
}
static inline HRESULT ICameraControl_put_Zoom(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Zoom(This,Value,Flags);
}
static inline HRESULT ICameraControl_getRange_Zoom(ICameraControl* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_Zoom(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT ICameraControl_get_FocalLengths(ICameraControl* This,LONG *plOcularFocalLength,LONG *plObjectiveFocalLengthMin,LONG *plObjectiveFocalLengthMax) {
    return This->lpVtbl->get_FocalLengths(This,plOcularFocalLength,plObjectiveFocalLengthMin,plObjectiveFocalLengthMax);
}
static inline HRESULT ICameraControl_get_Pan(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Pan(This,pValue,pFlags);
}
static inline HRESULT ICameraControl_put_Pan(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Pan(This,Value,Flags);
}
static inline HRESULT ICameraControl_getRange_Pan(ICameraControl* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_Pan(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT ICameraControl_get_Tilt(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Tilt(This,pValue,pFlags);
}
static inline HRESULT ICameraControl_put_Tilt(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Tilt(This,Value,Flags);
}
static inline HRESULT ICameraControl_getRange_Tilt(ICameraControl* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_Tilt(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT ICameraControl_get_PanTilt(ICameraControl* This,LONG *pPanValue,LONG *pTiltValue,LONG *pFlags) {
    return This->lpVtbl->get_PanTilt(This,pPanValue,pTiltValue,pFlags);
}
static inline HRESULT ICameraControl_put_PanTilt(ICameraControl* This,LONG PanValue,LONG TiltValue,LONG Flags) {
    return This->lpVtbl->put_PanTilt(This,PanValue,TiltValue,Flags);
}
static inline HRESULT ICameraControl_get_Roll(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Roll(This,pValue,pFlags);
}
static inline HRESULT ICameraControl_put_Roll(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Roll(This,Value,Flags);
}
static inline HRESULT ICameraControl_getRange_Roll(ICameraControl* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_Roll(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT ICameraControl_get_ExposureRelative(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_ExposureRelative(This,pValue,pFlags);
}
static inline HRESULT ICameraControl_put_ExposureRelative(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_ExposureRelative(This,Value,Flags);
}
static inline HRESULT ICameraControl_getRange_ExposureRelative(ICameraControl* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_ExposureRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT ICameraControl_get_FocusRelative(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_FocusRelative(This,pValue,pFlags);
}
static inline HRESULT ICameraControl_put_FocusRelative(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_FocusRelative(This,Value,Flags);
}
static inline HRESULT ICameraControl_getRange_FocusRelative(ICameraControl* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_FocusRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT ICameraControl_get_IrisRelative(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_IrisRelative(This,pValue,pFlags);
}
static inline HRESULT ICameraControl_put_IrisRelative(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_IrisRelative(This,Value,Flags);
}
static inline HRESULT ICameraControl_getRange_IrisRelative(ICameraControl* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_IrisRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT ICameraControl_get_ZoomRelative(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_ZoomRelative(This,pValue,pFlags);
}
static inline HRESULT ICameraControl_put_ZoomRelative(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_ZoomRelative(This,Value,Flags);
}
static inline HRESULT ICameraControl_getRange_ZoomRelative(ICameraControl* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_ZoomRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT ICameraControl_get_PanRelative(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_PanRelative(This,pValue,pFlags);
}
static inline HRESULT ICameraControl_put_PanRelative(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_PanRelative(This,Value,Flags);
}
static inline HRESULT ICameraControl_get_TiltRelative(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_TiltRelative(This,pValue,pFlags);
}
static inline HRESULT ICameraControl_put_TiltRelative(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_TiltRelative(This,Value,Flags);
}
static inline HRESULT ICameraControl_getRange_TiltRelative(ICameraControl* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_TiltRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT ICameraControl_get_PanTiltRelative(ICameraControl* This,LONG *pPanValue,LONG *pTiltValue,LONG *pFlags) {
    return This->lpVtbl->get_PanTiltRelative(This,pPanValue,pTiltValue,pFlags);
}
static inline HRESULT ICameraControl_put_PanTiltRelative(ICameraControl* This,LONG PanValue,LONG TiltValue,LONG Flags) {
    return This->lpVtbl->put_PanTiltRelative(This,PanValue,TiltValue,Flags);
}
static inline HRESULT ICameraControl_getRange_PanRelative(ICameraControl* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_PanRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT ICameraControl_get_RollRelative(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_RollRelative(This,pValue,pFlags);
}
static inline HRESULT ICameraControl_put_RollRelative(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_RollRelative(This,Value,Flags);
}
static inline HRESULT ICameraControl_getRange_RollRelative(ICameraControl* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_RollRelative(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT ICameraControl_get_ScanMode(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_ScanMode(This,pValue,pFlags);
}
static inline HRESULT ICameraControl_put_ScanMode(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_ScanMode(This,Value,Flags);
}
static inline HRESULT ICameraControl_get_PrivacyMode(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_PrivacyMode(This,pValue,pFlags);
}
static inline HRESULT ICameraControl_put_PrivacyMode(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_PrivacyMode(This,Value,Flags);
}
#endif
#endif

#endif


#endif  /* __ICameraControl_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVideoProcAmp interface
 */
#ifndef __IVideoProcAmp_INTERFACE_DEFINED__
#define __IVideoProcAmp_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVideoProcAmp, 0x4050560e, 0x42a7, 0x413a, 0x85,0xc2, 0x09,0x26,0x9a,0x2d,0x0f,0x44);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("4050560e-42a7-413a-85c2-09269a2d0f44")
IVideoProcAmp : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE get_BacklightCompensation(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_BacklightCompensation(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_BacklightCompensation(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Brightness(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Brightness(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_Brightness(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ColorEnable(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_ColorEnable(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_ColorEnable(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Contrast(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Contrast(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_Contrast(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Gamma(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Gamma(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_Gamma(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Saturation(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Saturation(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_Saturation(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Sharpness(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Sharpness(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_Sharpness(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_WhiteBalance(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_WhiteBalance(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_WhiteBalance(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Gain(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Gain(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_Gain(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Hue(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Hue(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_Hue(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_DigitalMultiplier(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_DigitalMultiplier(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_DigitalMultiplier(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PowerlineFrequency(
        LONG *pValue,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_PowerlineFrequency(
        LONG Value,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_PowerlineFrequency(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_WhiteBalanceComponent(
        LONG *pValue1,
        LONG *pValue2,
        LONG *pFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_WhiteBalanceComponent(
        LONG Value1,
        LONG Value2,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE getRange_WhiteBalanceComponent(
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVideoProcAmp, 0x4050560e, 0x42a7, 0x413a, 0x85,0xc2, 0x09,0x26,0x9a,0x2d,0x0f,0x44)
#endif
#else
typedef struct IVideoProcAmpVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IVideoProcAmp methods ***/
    HRESULT (STDMETHODCALLTYPE *get_BacklightCompensation)(
        IVideoProcAmp *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_BacklightCompensation)(
        IVideoProcAmp *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_BacklightCompensation)(
        IVideoProcAmp *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_Brightness)(
        IVideoProcAmp *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_Brightness)(
        IVideoProcAmp *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_Brightness)(
        IVideoProcAmp *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_ColorEnable)(
        IVideoProcAmp *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_ColorEnable)(
        IVideoProcAmp *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_ColorEnable)(
        IVideoProcAmp *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_Contrast)(
        IVideoProcAmp *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_Contrast)(
        IVideoProcAmp *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_Contrast)(
        IVideoProcAmp *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_Gamma)(
        IVideoProcAmp *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_Gamma)(
        IVideoProcAmp *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_Gamma)(
        IVideoProcAmp *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_Saturation)(
        IVideoProcAmp *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_Saturation)(
        IVideoProcAmp *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_Saturation)(
        IVideoProcAmp *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_Sharpness)(
        IVideoProcAmp *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_Sharpness)(
        IVideoProcAmp *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_Sharpness)(
        IVideoProcAmp *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_WhiteBalance)(
        IVideoProcAmp *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_WhiteBalance)(
        IVideoProcAmp *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_WhiteBalance)(
        IVideoProcAmp *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_Gain)(
        IVideoProcAmp *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_Gain)(
        IVideoProcAmp *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_Gain)(
        IVideoProcAmp *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_Hue)(
        IVideoProcAmp *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_Hue)(
        IVideoProcAmp *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_Hue)(
        IVideoProcAmp *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_DigitalMultiplier)(
        IVideoProcAmp *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_DigitalMultiplier)(
        IVideoProcAmp *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_DigitalMultiplier)(
        IVideoProcAmp *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_PowerlineFrequency)(
        IVideoProcAmp *This,
        LONG *pValue,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_PowerlineFrequency)(
        IVideoProcAmp *This,
        LONG Value,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_PowerlineFrequency)(
        IVideoProcAmp *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    HRESULT (STDMETHODCALLTYPE *get_WhiteBalanceComponent)(
        IVideoProcAmp *This,
        LONG *pValue1,
        LONG *pValue2,
        LONG *pFlags);

    HRESULT (STDMETHODCALLTYPE *put_WhiteBalanceComponent)(
        IVideoProcAmp *This,
        LONG Value1,
        LONG Value2,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *getRange_WhiteBalanceComponent)(
        IVideoProcAmp *This,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlag);

    END_INTERFACE
} IVideoProcAmpVtbl;

interface IVideoProcAmp {
    CONST_VTBL IVideoProcAmpVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVideoProcAmp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVideoProcAmp_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVideoProcAmp_Release(This) (This)->lpVtbl->Release(This)
/*** IVideoProcAmp methods ***/
#define IVideoProcAmp_get_BacklightCompensation(This,pValue,pFlags) (This)->lpVtbl->get_BacklightCompensation(This,pValue,pFlags)
#define IVideoProcAmp_put_BacklightCompensation(This,Value,Flags) (This)->lpVtbl->put_BacklightCompensation(This,Value,Flags)
#define IVideoProcAmp_getRange_BacklightCompensation(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_BacklightCompensation(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define IVideoProcAmp_get_Brightness(This,pValue,pFlags) (This)->lpVtbl->get_Brightness(This,pValue,pFlags)
#define IVideoProcAmp_put_Brightness(This,Value,Flags) (This)->lpVtbl->put_Brightness(This,Value,Flags)
#define IVideoProcAmp_getRange_Brightness(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_Brightness(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define IVideoProcAmp_get_ColorEnable(This,pValue,pFlags) (This)->lpVtbl->get_ColorEnable(This,pValue,pFlags)
#define IVideoProcAmp_put_ColorEnable(This,Value,Flags) (This)->lpVtbl->put_ColorEnable(This,Value,Flags)
#define IVideoProcAmp_getRange_ColorEnable(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_ColorEnable(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define IVideoProcAmp_get_Contrast(This,pValue,pFlags) (This)->lpVtbl->get_Contrast(This,pValue,pFlags)
#define IVideoProcAmp_put_Contrast(This,Value,Flags) (This)->lpVtbl->put_Contrast(This,Value,Flags)
#define IVideoProcAmp_getRange_Contrast(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_Contrast(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define IVideoProcAmp_get_Gamma(This,pValue,pFlags) (This)->lpVtbl->get_Gamma(This,pValue,pFlags)
#define IVideoProcAmp_put_Gamma(This,Value,Flags) (This)->lpVtbl->put_Gamma(This,Value,Flags)
#define IVideoProcAmp_getRange_Gamma(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_Gamma(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define IVideoProcAmp_get_Saturation(This,pValue,pFlags) (This)->lpVtbl->get_Saturation(This,pValue,pFlags)
#define IVideoProcAmp_put_Saturation(This,Value,Flags) (This)->lpVtbl->put_Saturation(This,Value,Flags)
#define IVideoProcAmp_getRange_Saturation(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_Saturation(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define IVideoProcAmp_get_Sharpness(This,pValue,pFlags) (This)->lpVtbl->get_Sharpness(This,pValue,pFlags)
#define IVideoProcAmp_put_Sharpness(This,Value,Flags) (This)->lpVtbl->put_Sharpness(This,Value,Flags)
#define IVideoProcAmp_getRange_Sharpness(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_Sharpness(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define IVideoProcAmp_get_WhiteBalance(This,pValue,pFlags) (This)->lpVtbl->get_WhiteBalance(This,pValue,pFlags)
#define IVideoProcAmp_put_WhiteBalance(This,Value,Flags) (This)->lpVtbl->put_WhiteBalance(This,Value,Flags)
#define IVideoProcAmp_getRange_WhiteBalance(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_WhiteBalance(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define IVideoProcAmp_get_Gain(This,pValue,pFlags) (This)->lpVtbl->get_Gain(This,pValue,pFlags)
#define IVideoProcAmp_put_Gain(This,Value,Flags) (This)->lpVtbl->put_Gain(This,Value,Flags)
#define IVideoProcAmp_getRange_Gain(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_Gain(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define IVideoProcAmp_get_Hue(This,pValue,pFlags) (This)->lpVtbl->get_Hue(This,pValue,pFlags)
#define IVideoProcAmp_put_Hue(This,Value,Flags) (This)->lpVtbl->put_Hue(This,Value,Flags)
#define IVideoProcAmp_getRange_Hue(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_Hue(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define IVideoProcAmp_get_DigitalMultiplier(This,pValue,pFlags) (This)->lpVtbl->get_DigitalMultiplier(This,pValue,pFlags)
#define IVideoProcAmp_put_DigitalMultiplier(This,Value,Flags) (This)->lpVtbl->put_DigitalMultiplier(This,Value,Flags)
#define IVideoProcAmp_getRange_DigitalMultiplier(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_DigitalMultiplier(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define IVideoProcAmp_get_PowerlineFrequency(This,pValue,pFlags) (This)->lpVtbl->get_PowerlineFrequency(This,pValue,pFlags)
#define IVideoProcAmp_put_PowerlineFrequency(This,Value,Flags) (This)->lpVtbl->put_PowerlineFrequency(This,Value,Flags)
#define IVideoProcAmp_getRange_PowerlineFrequency(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_PowerlineFrequency(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#define IVideoProcAmp_get_WhiteBalanceComponent(This,pValue1,pValue2,pFlags) (This)->lpVtbl->get_WhiteBalanceComponent(This,pValue1,pValue2,pFlags)
#define IVideoProcAmp_put_WhiteBalanceComponent(This,Value1,Value2,Flags) (This)->lpVtbl->put_WhiteBalanceComponent(This,Value1,Value2,Flags)
#define IVideoProcAmp_getRange_WhiteBalanceComponent(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag) (This)->lpVtbl->getRange_WhiteBalanceComponent(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag)
#else
/*** IUnknown methods ***/
static inline HRESULT IVideoProcAmp_QueryInterface(IVideoProcAmp* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IVideoProcAmp_AddRef(IVideoProcAmp* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IVideoProcAmp_Release(IVideoProcAmp* This) {
    return This->lpVtbl->Release(This);
}
/*** IVideoProcAmp methods ***/
static inline HRESULT IVideoProcAmp_get_BacklightCompensation(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_BacklightCompensation(This,pValue,pFlags);
}
static inline HRESULT IVideoProcAmp_put_BacklightCompensation(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_BacklightCompensation(This,Value,Flags);
}
static inline HRESULT IVideoProcAmp_getRange_BacklightCompensation(IVideoProcAmp* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_BacklightCompensation(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT IVideoProcAmp_get_Brightness(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Brightness(This,pValue,pFlags);
}
static inline HRESULT IVideoProcAmp_put_Brightness(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Brightness(This,Value,Flags);
}
static inline HRESULT IVideoProcAmp_getRange_Brightness(IVideoProcAmp* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_Brightness(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT IVideoProcAmp_get_ColorEnable(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_ColorEnable(This,pValue,pFlags);
}
static inline HRESULT IVideoProcAmp_put_ColorEnable(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_ColorEnable(This,Value,Flags);
}
static inline HRESULT IVideoProcAmp_getRange_ColorEnable(IVideoProcAmp* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_ColorEnable(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT IVideoProcAmp_get_Contrast(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Contrast(This,pValue,pFlags);
}
static inline HRESULT IVideoProcAmp_put_Contrast(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Contrast(This,Value,Flags);
}
static inline HRESULT IVideoProcAmp_getRange_Contrast(IVideoProcAmp* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_Contrast(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT IVideoProcAmp_get_Gamma(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Gamma(This,pValue,pFlags);
}
static inline HRESULT IVideoProcAmp_put_Gamma(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Gamma(This,Value,Flags);
}
static inline HRESULT IVideoProcAmp_getRange_Gamma(IVideoProcAmp* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_Gamma(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT IVideoProcAmp_get_Saturation(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Saturation(This,pValue,pFlags);
}
static inline HRESULT IVideoProcAmp_put_Saturation(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Saturation(This,Value,Flags);
}
static inline HRESULT IVideoProcAmp_getRange_Saturation(IVideoProcAmp* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_Saturation(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT IVideoProcAmp_get_Sharpness(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Sharpness(This,pValue,pFlags);
}
static inline HRESULT IVideoProcAmp_put_Sharpness(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Sharpness(This,Value,Flags);
}
static inline HRESULT IVideoProcAmp_getRange_Sharpness(IVideoProcAmp* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_Sharpness(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT IVideoProcAmp_get_WhiteBalance(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_WhiteBalance(This,pValue,pFlags);
}
static inline HRESULT IVideoProcAmp_put_WhiteBalance(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_WhiteBalance(This,Value,Flags);
}
static inline HRESULT IVideoProcAmp_getRange_WhiteBalance(IVideoProcAmp* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_WhiteBalance(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT IVideoProcAmp_get_Gain(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Gain(This,pValue,pFlags);
}
static inline HRESULT IVideoProcAmp_put_Gain(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Gain(This,Value,Flags);
}
static inline HRESULT IVideoProcAmp_getRange_Gain(IVideoProcAmp* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_Gain(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT IVideoProcAmp_get_Hue(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Hue(This,pValue,pFlags);
}
static inline HRESULT IVideoProcAmp_put_Hue(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Hue(This,Value,Flags);
}
static inline HRESULT IVideoProcAmp_getRange_Hue(IVideoProcAmp* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_Hue(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT IVideoProcAmp_get_DigitalMultiplier(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_DigitalMultiplier(This,pValue,pFlags);
}
static inline HRESULT IVideoProcAmp_put_DigitalMultiplier(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_DigitalMultiplier(This,Value,Flags);
}
static inline HRESULT IVideoProcAmp_getRange_DigitalMultiplier(IVideoProcAmp* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_DigitalMultiplier(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT IVideoProcAmp_get_PowerlineFrequency(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_PowerlineFrequency(This,pValue,pFlags);
}
static inline HRESULT IVideoProcAmp_put_PowerlineFrequency(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_PowerlineFrequency(This,Value,Flags);
}
static inline HRESULT IVideoProcAmp_getRange_PowerlineFrequency(IVideoProcAmp* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_PowerlineFrequency(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
static inline HRESULT IVideoProcAmp_get_WhiteBalanceComponent(IVideoProcAmp* This,LONG *pValue1,LONG *pValue2,LONG *pFlags) {
    return This->lpVtbl->get_WhiteBalanceComponent(This,pValue1,pValue2,pFlags);
}
static inline HRESULT IVideoProcAmp_put_WhiteBalanceComponent(IVideoProcAmp* This,LONG Value1,LONG Value2,LONG Flags) {
    return This->lpVtbl->put_WhiteBalanceComponent(This,Value1,Value2,Flags);
}
static inline HRESULT IVideoProcAmp_getRange_WhiteBalanceComponent(IVideoProcAmp* This,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlag) {
    return This->lpVtbl->getRange_WhiteBalanceComponent(This,pMin,pMax,pSteppingDelta,pDefault,pCapsFlag);
}
#endif
#endif

#endif


#endif  /* __IVideoProcAmp_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IKsNodeControl interface
 */
#ifndef __IKsNodeControl_INTERFACE_DEFINED__
#define __IKsNodeControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_IKsNodeControl, 0x11737c14, 0x24a7, 0x4bb5, 0x81,0xa0, 0x0d,0x00,0x38,0x13,0xb0,0xc4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("11737c14-24a7-4bb5-81a0-0d003813b0c4")
IKsNodeControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE put_NodeId(
        DWORD dwNodeId) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_KsControl(
        PVOID pKsControl) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IKsNodeControl, 0x11737c14, 0x24a7, 0x4bb5, 0x81,0xa0, 0x0d,0x00,0x38,0x13,0xb0,0xc4)
#endif
#else
typedef struct IKsNodeControlVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IKsNodeControl methods ***/
    HRESULT (STDMETHODCALLTYPE *put_NodeId)(
        IKsNodeControl *This,
        DWORD dwNodeId);

    HRESULT (STDMETHODCALLTYPE *put_KsControl)(
        IKsNodeControl *This,
        PVOID pKsControl);

    END_INTERFACE
} IKsNodeControlVtbl;

interface IKsNodeControl {
    CONST_VTBL IKsNodeControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IKsNodeControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IKsNodeControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IKsNodeControl_Release(This) (This)->lpVtbl->Release(This)
/*** IKsNodeControl methods ***/
#define IKsNodeControl_put_NodeId(This,dwNodeId) (This)->lpVtbl->put_NodeId(This,dwNodeId)
#define IKsNodeControl_put_KsControl(This,pKsControl) (This)->lpVtbl->put_KsControl(This,pKsControl)
#else
/*** IUnknown methods ***/
static inline HRESULT IKsNodeControl_QueryInterface(IKsNodeControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IKsNodeControl_AddRef(IKsNodeControl* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IKsNodeControl_Release(IKsNodeControl* This) {
    return This->lpVtbl->Release(This);
}
/*** IKsNodeControl methods ***/
static inline HRESULT IKsNodeControl_put_NodeId(IKsNodeControl* This,DWORD dwNodeId) {
    return This->lpVtbl->put_NodeId(This,dwNodeId);
}
static inline HRESULT IKsNodeControl_put_KsControl(IKsNodeControl* This,PVOID pKsControl) {
    return This->lpVtbl->put_KsControl(This,pKsControl);
}
#endif
#endif

#endif


#endif  /* __IKsNodeControl_INTERFACE_DEFINED__ */

#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __vidcap_h__ */
