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