/*** Autogenerated by WIDL 9.5 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__

#ifndef __WIDL_INLINE
#if defined(__cplusplus) || defined(_MSC_VER)
#define __WIDL_INLINE inline
#elif defined(__GNUC__)
#define __WIDL_INLINE __inline__
#endif
#endif

/* 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 __WIDL_INLINE HRESULT IKsTopologyInfo_QueryInterface(IKsTopologyInfo* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IKsTopologyInfo_AddRef(IKsTopologyInfo* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IKsTopologyInfo_Release(IKsTopologyInfo* This) {
    return This->lpVtbl->Release(This);
}
/*** IKsTopologyInfo methods ***/
static __WIDL_INLINE HRESULT IKsTopologyInfo_get_NumCategories(IKsTopologyInfo* This,DWORD *pdwNumCategories) {
    return This->lpVtbl->get_NumCategories(This,pdwNumCategories);
}
static __WIDL_INLINE HRESULT IKsTopologyInfo_get_Category(IKsTopologyInfo* This,DWORD dwIndex,GUID *pCategory) {
    return This->lpVtbl->get_Category(This,dwIndex,pCategory);
}
static __WIDL_INLINE HRESULT IKsTopologyInfo_get_NumConnections(IKsTopologyInfo* This,DWORD *pdwNumConnections) {
    return This->lpVtbl->get_NumConnections(This,pdwNumConnections);
}
static __WIDL_INLINE HRESULT IKsTopologyInfo_get_ConnectionInfo(IKsTopologyInfo* This,DWORD dwIndex,KSTOPOLOGY_CONNECTION *pConnectionInfo) {
    return This->lpVtbl->get_ConnectionInfo(This,dwIndex,pConnectionInfo);
}
static __WIDL_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 __WIDL_INLINE HRESULT IKsTopologyInfo_get_NumNodes(IKsTopologyInfo* This,DWORD *pdwNumNodes) {
    return This->lpVtbl->get_NumNodes(This,pdwNumNodes);
}
static __WIDL_INLINE HRESULT IKsTopologyInfo_get_NodeType(IKsTopologyInfo* This,DWORD dwNodeId,GUID *pNodeType) {
    return This->lpVtbl->get_NodeType(This,dwNodeId,pNodeType);
}
static __WIDL_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 __WIDL_INLINE HRESULT ISelector_QueryInterface(ISelector* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ISelector_AddRef(ISelector* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ISelector_Release(ISelector* This) {
    return This->lpVtbl->Release(This);
}
/*** ISelector methods ***/
static __WIDL_INLINE HRESULT ISelector_get_NumSources(ISelector* This,DWORD *pdwNumSources) {
    return This->lpVtbl->get_NumSources(This,pdwNumSources);
}
static __WIDL_INLINE HRESULT ISelector_get_SourceNodeId(ISelector* This,DWORD *pdwPinId) {
    return This->lpVtbl->get_SourceNodeId(This,pdwPinId);
}
static __WIDL_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 __WIDL_INLINE HRESULT ICameraControl_QueryInterface(ICameraControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ICameraControl_AddRef(ICameraControl* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ICameraControl_Release(ICameraControl* This) {
    return This->lpVtbl->Release(This);
}
/*** ICameraControl methods ***/
static __WIDL_INLINE HRESULT ICameraControl_get_Exposure(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Exposure(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT ICameraControl_put_Exposure(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Exposure(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT ICameraControl_get_Focus(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Focus(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT ICameraControl_put_Focus(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Focus(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT ICameraControl_get_Iris(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Iris(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT ICameraControl_put_Iris(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Iris(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT ICameraControl_get_Zoom(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Zoom(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT ICameraControl_put_Zoom(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Zoom(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT ICameraControl_get_FocalLengths(ICameraControl* This,LONG *plOcularFocalLength,LONG *plObjectiveFocalLengthMin,LONG *plObjectiveFocalLengthMax) {
    return This->lpVtbl->get_FocalLengths(This,plOcularFocalLength,plObjectiveFocalLengthMin,plObjectiveFocalLengthMax);
}
static __WIDL_INLINE HRESULT ICameraControl_get_Pan(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Pan(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT ICameraControl_put_Pan(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Pan(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT ICameraControl_get_Tilt(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Tilt(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT ICameraControl_put_Tilt(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Tilt(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT ICameraControl_get_PanTilt(ICameraControl* This,LONG *pPanValue,LONG *pTiltValue,LONG *pFlags) {
    return This->lpVtbl->get_PanTilt(This,pPanValue,pTiltValue,pFlags);
}
static __WIDL_INLINE HRESULT ICameraControl_put_PanTilt(ICameraControl* This,LONG PanValue,LONG TiltValue,LONG Flags) {
    return This->lpVtbl->put_PanTilt(This,PanValue,TiltValue,Flags);
}
static __WIDL_INLINE HRESULT ICameraControl_get_Roll(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Roll(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT ICameraControl_put_Roll(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Roll(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT ICameraControl_get_ExposureRelative(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_ExposureRelative(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT ICameraControl_put_ExposureRelative(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_ExposureRelative(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT ICameraControl_get_FocusRelative(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_FocusRelative(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT ICameraControl_put_FocusRelative(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_FocusRelative(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT ICameraControl_get_IrisRelative(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_IrisRelative(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT ICameraControl_put_IrisRelative(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_IrisRelative(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT ICameraControl_get_ZoomRelative(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_ZoomRelative(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT ICameraControl_put_ZoomRelative(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_ZoomRelative(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT ICameraControl_get_PanRelative(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_PanRelative(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT ICameraControl_put_PanRelative(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_PanRelative(This,Value,Flags);
}
static __WIDL_INLINE HRESULT ICameraControl_get_TiltRelative(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_TiltRelative(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT ICameraControl_put_TiltRelative(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_TiltRelative(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT ICameraControl_get_PanTiltRelative(ICameraControl* This,LONG *pPanValue,LONG *pTiltValue,LONG *pFlags) {
    return This->lpVtbl->get_PanTiltRelative(This,pPanValue,pTiltValue,pFlags);
}
static __WIDL_INLINE HRESULT ICameraControl_put_PanTiltRelative(ICameraControl* This,LONG PanValue,LONG TiltValue,LONG Flags) {
    return This->lpVtbl->put_PanTiltRelative(This,PanValue,TiltValue,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT ICameraControl_get_RollRelative(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_RollRelative(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT ICameraControl_put_RollRelative(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_RollRelative(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT ICameraControl_get_ScanMode(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_ScanMode(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT ICameraControl_put_ScanMode(ICameraControl* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_ScanMode(This,Value,Flags);
}
static __WIDL_INLINE HRESULT ICameraControl_get_PrivacyMode(ICameraControl* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_PrivacyMode(This,pValue,pFlags);
}
static __WIDL_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 __WIDL_INLINE HRESULT IVideoProcAmp_QueryInterface(IVideoProcAmp* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IVideoProcAmp_AddRef(IVideoProcAmp* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IVideoProcAmp_Release(IVideoProcAmp* This) {
    return This->lpVtbl->Release(This);
}
/*** IVideoProcAmp methods ***/
static __WIDL_INLINE HRESULT IVideoProcAmp_get_BacklightCompensation(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_BacklightCompensation(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT IVideoProcAmp_put_BacklightCompensation(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_BacklightCompensation(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT IVideoProcAmp_get_Brightness(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Brightness(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT IVideoProcAmp_put_Brightness(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Brightness(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT IVideoProcAmp_get_ColorEnable(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_ColorEnable(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT IVideoProcAmp_put_ColorEnable(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_ColorEnable(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT IVideoProcAmp_get_Contrast(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Contrast(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT IVideoProcAmp_put_Contrast(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Contrast(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT IVideoProcAmp_get_Gamma(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Gamma(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT IVideoProcAmp_put_Gamma(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Gamma(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT IVideoProcAmp_get_Saturation(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Saturation(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT IVideoProcAmp_put_Saturation(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Saturation(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT IVideoProcAmp_get_Sharpness(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Sharpness(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT IVideoProcAmp_put_Sharpness(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Sharpness(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT IVideoProcAmp_get_WhiteBalance(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_WhiteBalance(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT IVideoProcAmp_put_WhiteBalance(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_WhiteBalance(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT IVideoProcAmp_get_Gain(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Gain(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT IVideoProcAmp_put_Gain(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Gain(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT IVideoProcAmp_get_Hue(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_Hue(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT IVideoProcAmp_put_Hue(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_Hue(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT IVideoProcAmp_get_DigitalMultiplier(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_DigitalMultiplier(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT IVideoProcAmp_put_DigitalMultiplier(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_DigitalMultiplier(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT IVideoProcAmp_get_PowerlineFrequency(IVideoProcAmp* This,LONG *pValue,LONG *pFlags) {
    return This->lpVtbl->get_PowerlineFrequency(This,pValue,pFlags);
}
static __WIDL_INLINE HRESULT IVideoProcAmp_put_PowerlineFrequency(IVideoProcAmp* This,LONG Value,LONG Flags) {
    return This->lpVtbl->put_PowerlineFrequency(This,Value,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT IVideoProcAmp_get_WhiteBalanceComponent(IVideoProcAmp* This,LONG *pValue1,LONG *pValue2,LONG *pFlags) {
    return This->lpVtbl->get_WhiteBalanceComponent(This,pValue1,pValue2,pFlags);
}
static __WIDL_INLINE HRESULT IVideoProcAmp_put_WhiteBalanceComponent(IVideoProcAmp* This,LONG Value1,LONG Value2,LONG Flags) {
    return This->lpVtbl->put_WhiteBalanceComponent(This,Value1,Value2,Flags);
}
static __WIDL_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 __WIDL_INLINE HRESULT IKsNodeControl_QueryInterface(IKsNodeControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IKsNodeControl_AddRef(IKsNodeControl* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IKsNodeControl_Release(IKsNodeControl* This) {
    return This->lpVtbl->Release(This);
}
/*** IKsNodeControl methods ***/
static __WIDL_INLINE HRESULT IKsNodeControl_put_NodeId(IKsNodeControl* This,DWORD dwNodeId) {
    return This->lpVtbl->put_NodeId(This,dwNodeId);
}
static __WIDL_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__ */
