カメラコントロールＤＬＬ  関数リファレンス

概要

CMOpen	カメラオープン処理

CMClose	カメラクローズ処理

CMControl	カメラコントロール

CMGetCameraOpt	カメラオプション情報取得

CMSetCameraOpt	カメラオプション情報設定

CMGetPreset	プリセット情報取得

CMSetPreset	プリセット情報設定

CMMovePreset	プリセット位置に移動

CMGetCameraPos	現カメラ位置情報取得

CMSetCameraPos	カメラ位置設定

CMLock	カメラコントロールロック

CMCaptureVideo	ビデオ画像取り込み

CMDraw	ビデオ画像描画

エラーコード

Visual Basicでの使用について


概要

本 DLL はローカルマシンまたはPC-VIDEOが動作しているネットワーク上のマシンに接続されたカメラをコントロールし、画像データを取り込むためのものです。

ローカルマシン上のカメラをコントロールする場合はPV-VIDEOは必要ありませんが、ネットワークを介して他のマシン上のカメラをコントロールする場合は、そのマシン上でVersion 1.23以上のPC-VIDEOが動作している必要があります。


CMOpen関数
CMOpen　カメラオープン処理

int CMOpen(lpConnect, lpUserName, option, handle)

LPSTR lpConnect;	/* 接続先名 */

LPSTR lpUserName;	/* ユーザ名 */

int option;	/* オプションフラグ */

LPINT lpHandle;	/* カメラ制御ハンドル */

パラメータ	説明

lpConnect	コントロールするカメラを指定します。

内容	意味

NULLポインタ	ローカルカメラの画像を取り込みます。ただし、カメラコントロールはできません。

空文字列	同上

COM#	COM#（# はポート番号）に接続したローカルカメラをコントロールします。

ホスト名	PC-VIDEOの動作しているマシンのホスト名を指定した場合は、そのPC-VIDEOに接続し、そのマシン上のカメラをコントロールします。ただし、リフレクタに対して接続することはできません。

lpUserName	PC-VIDEOに接続した場合、そのPC-VIDEOのウィンドウに表示されるユーザ名です。ローカルマシンのカメラを使用する場合はNULLポインタまたは空文字列で構いません。

option	現バージョンでは０を設定します。

lpHandle	正常終了した場合はカメラ制御ハンドルを返します。

戻り値

関数が正常終了した場合は０、異常終了した場合はエラーコードを返します。

説明

カメラをコントロールするための準備を行い、カメラ制御ハンドルを取得します。

参照

CMClose


CMClose関数
CMClose　カメラクローズ処理

int CMClose(handle)

int handle;	/* カメラ制御ハンドル */

パラメータ	説明

handle	カメラ制御ハンドルを指定します。

戻り値

関数が正常終了した場合は０、異常終了した場合はエラーコードを返します。

説明

CMOpen関数によりオープンしたカメラ制御ハンドルをクローズします。

参照

CMOpen


CMControl関数
CMControl　カメラコントロール

int CMControl(handle, command)

int handle;	/* カメラ制御ハンドル */

int command;	/* カメラ制御コマンド */

パラメータ	説明

handle	カメラ制御ハンドルを指定します。

command	以下のコマンドを指定します。

コマンド	意味

CM_RESET	リセット

CM_HOME_POSITION	ホームポジション（中央）に移動

CM_PAN_RIGHT	右向きに移動開始

CM_PAN_LEFT	左向きに移動開始

CM_TILT_UP	上向きに移動開始

CM_TILT_DOWN	下向きに移動開始

CM_STOP	カメラ向き移動停止

CM_ZOOM_WIDE	ワイド（広角）側へズーム開始

CM_ZOOM_TELE	テレ（望遠）側へズーム開始

CM_ZOOM_STOP	ズーム停止

CM_FOCUS_AUTO	オートフォーカス

CM_FOCUS_MANUAL	マニュアルフォーカス

CM_FOCUS_NEAR	フォーカス NEAR（近）

CM_FOCUS_FAR	フォーカス FAR（遠）

CM_POWER_ON	パワーオン

CM_POWER_OFF	パワーオフ

戻り値

関数が正常終了した場合は０、異常終了した場合はエラーコードを返します。

説明

カメラの向き、ズーム、フォーカス等のコントロールを行います。

参照


#define CM_RESET 0


#define CM_HOME_POSITION 1


#define CM_PAN_RIGHT 2


#define CM_PAN_LEFT 3


#define CM_TILT_UP 4


#define CM_TILT_DOWN 5


#define CM_STOP 6


#define CM_ZOOM_WIDE 7


#define CM_ZOOM_TELE 8


#define CM_ZOOM_STOP 9


#define CM_FOCUS_AUTO 10


#define CM_FOCUS_MANUAL 11


#define CM_FOCUS_NEAR 12


#define CM_FOCUS_FAR 13


#define CM_POWER_ON 14


#define CM_POWER_OFF 15


CMGetCameraOpt関数
CMGetCameraOpt　カメラオプション情報取得

int CMGetCameraOpt(handle, lpCameraOpt)

int handle;	/* カメラ制御ハンドル */

LPCAMERAOPT lpCameraOpt;	/* カメラオプション情報 */

パラメータ	説明

handle	カメラ制御ハンドルを指定します。

lpCameraOpt	CAMERAOPT構造体を指すポインタです。

戻り値

関数が正常終了した場合は０、異常終了した場合はエラーコードを返します。

説明

lpCameraOptが指すCAMERAOPT構造体に現在のカメラのオプション情報をセットします。

参照

CMSetCameraOpt


/* カメラオプションデータ */

typedef struct {

int	panSpeed;	/* パン速度（１００～５００） */

int	tiltSpeed;	/* チルト速度（１００～５００） */

int	zoomSpeed;	/* ズーム速度（０：遅い，１：速い） */

int	shutterSpeed;	/* シャッター速度（０：オート，１：１／６０，２：１／１００） */

int	autoFocus;	/* オートフォーカス（０：なし，１：あり） */

int	lightAdjust;	/* 逆光補正（０：なし，１：あり） */

int	autoWhiteBalance;	/* 自動ホワイトバランス（０：なし，１：あり） */

int	wideConverter;	/* ワイドコンバータ使用（０：なし，１：あり） */

} CAMERAOPT, FAR *LPCAMERAOPT;


CMSetCameraOpt関数
CMSetCameraOpt　カメラオプション情報設定

int CMSetCameraOpt(handle, lpCameraOpt)

int handle;	/* カメラ制御ハンドル */

LPCAMERAOPT lpCameraOpt;	/* カメラオプション情報 */

パラメータ	説明

handle	カメラ制御ハンドルを指定します。

lpCameraOpt	CAMERAOPT構造体を指すポインタです。

戻り値

関数が正常終了した場合は０、異常終了した場合はエラーコードを返します。

説明

lpCameraOptが指すCAMERAOPT構造体に設定されているカメラのオプション情報をカメラにセットします。

参照

CMGetCameraOpt


CMGetPreset関数
CMGetPreset　プリセット情報取得

int CMGetPreset(handle, lpPreset)

int handle;	/* カメラ制御ハンドル */

LPPRESET lpPreset;	/* プリセット情報 */

パラメータ	説明

handle	カメラ制御ハンドルを指定します。

lpPreset	PRESET構造体を指すポインタです。

戻り値

関数が正常終了した場合は０、異常終了した場合はエラーコードを返します。

説明

lpPresetが指すPRESET構造体に現在のプリセット情報をセットします。プリセットは８個用意されており、その全てを取得するため、lpPreset が指すエリアは８個分のエリア（配列）を確保しておく必要があります。

参照

CMSetPreset, CMMovePreset


/* プリセット情報 */

typedef struct {

CAMERAPOS	pos;	/* プリセット位置 */

char	comment[31];	/* コメント */

} PRESET, FAR *LPPRESET;


/* カメラ位置情報 */

typedef struct {

int	pan;	/* パン位置（－５００～５００） */

int	tilt;	/* チルト位置（－２００～２００） */

int	zoom;	/* ズーム位置（０～１２８） */

} CAMERAPOS, FAR *LPCAMERAPOS;


CMSetPreset関数
CMSetPreset　プリセット情報設定

int CMSetPreset(handle, lpPreset, presetNo)

int handle;	/* カメラ制御ハンドル */

LPPRESET lpPreset;	/* プリセット情報 */

int presetNo;	/* プリセット番号 */

パラメータ	説明

handle	カメラ制御ハンドルを指定します。

lpPreset	PRESET構造体を指すポインタです。

presetNo	設定するプリセット番号を指定します。（１～８）

戻り値

関数が正常終了した場合は０、異常終了した場合はエラーコードを返します。

説明

lpPresetが指すPRESET構造体に設定されたプリセット情報をカメラの指定されたプリセット番号にセットします。

参照

CMGetPreset, CMMovePreset


CMMovePreset関数
CMMovePreset　プリセット位置に移動

int CMMovePreset(handle, presetNo)

int handle;	/* カメラ制御ハンドル */

int presetNo;	/* プリセット番号 */

パラメータ	説明

handle	カメラ制御ハンドルを指定します。

presetNo	プリセット番号を指定します。（１～８）

戻り値

関数が正常終了した場合は０、異常終了した場合はエラーコードを返します。

説明

指定したプリセット番号に設定されているカメラ位置にカメラの向きを移動します。

参照

CMGetPreset, CMSetPreset


CMGetCameraPos関数
CMGetCameraPos　現カメラ位置情報取得

int CMGetCameraPos(handle, lpCameraPos)

int handle;	/* カメラ制御ハンドル */

LPCAMERAPOS lpCameraPos;	/* カメラ位置情報 */

パラメータ	説明

handle	カメラ制御ハンドルを指定します。

lpCameraPos	CAMERAPOS構造体を指すポインタです。

戻り値

関数が正常終了した場合は０、異常終了した場合はエラーコードを返します。

説明

lpCameraPosが指すCAMERAPOS構造体に現在のカメラ位置（pan, tilt, zoom）を設定します。

参照

CMSetCameraPos


CMSetCameraPos関数
CMSetCameraPos　カメラ位置設定

int CMSetCameraPos(handle, lpCameraPos)

int handle;	/* カメラ制御ハンドル */

LPCAMERAPOS lpCameraPos;	/* カメラ位置情報 */

パラメータ	説明

handle	カメラ制御ハンドルを指定します。

lpCameraPos	CAMERAPOS構造体を指すポインタです。

戻り値

関数が正常終了した場合は０、異常終了した場合はエラーコードを返します。

説明

lpCameraPosが指すCAMERAPOS構造体にセットされたカメラ位置（pan, tilt, zoom）に、カメラの向きを移動します。

参照

CMGetCameraPos


CMLock関数
CMLock　カメラコントロールロック

int CMLock (handle, lockFlag)

int handle;	/* カメラ制御ハンドル */

int lockFlag;	/* ロック設定／解除フラグ */

パラメータ	説明

handle	カメラ制御ハンドルを指定します。

lockFlag	１をセットするとロックを設定し、０をセットするとロックを解除します。

戻り値

関数が正常終了した場合は０、異常終了した場合はエラーコードを返します。

説明

ロックを設定しない状態では同時に他のアプリケーションやPC-VIDEOからもカメラコントロールを行うことができますが、ロックを設定することにより、他からのカメラコントロールを禁止することができます。既に他のアプリケーションやPC-VIDEOがロックを設定している場合はこの関数はエラーとなります。

参照


CMCaptureVideo関数
CMCaptureVideo　ビデオ画像取り込み

int CMCaptureVideo(handle, lpCaptureMode, lpBuf)

int handle;	/* カメラ制御ハンドル */

LPCAPTUREMODE lpCaptureMode;	/* ビデオキャプチャモード */

LPSTR lpBuf;	/* ビデオデータバッファ */

パラメータ	説明

handle	カメラ制御ハンドルを指定します。

lpCaptureMode	CAPTUREMODE構造体を指すポインタです。

lpBuf	ビデオデータを格納するバッファのポインタです。

戻り値

関数が正常終了した場合は０、異常終了した場合はエラーコードを返します。

説明

lpCaptureModeが指すCAPTUREMODE構造体により指定されたキャプチャモードに従って、画像データをlpBufに転送します。必要なバッファサイズ（バイト数）はキャプチャするビデオサイズとビデオカラーモードにより次のように決まります。

横方向のピクセル数×縦方向のピクセル数×Ｎ	※Ｎは２５６階調モノクロの場合は１，６４Ｋ色カラーの場合は２，１６Ｍ色カラーの場合は３

現バージョンでは画像圧縮はサポートしていないため、圧縮モード及び圧縮時の画質は０をセットしてください。（このため、ルータ経由では非常に時間がかかるのでご注意ください）

lpBufに格納されるビデオ画像データ形式は以下の通りです。

画像の左下（左上ではないことに注意）を原点として、右方向に１ピクセルずつ格納され、右端に達すると１ピクセル上を同様に左から右へデータが格納されます。１ピクセルのデータはビデオカラーモードにより次のようになります。

ビデオカラーモード	格納形式

２５６階調モノクロ	１ピクセルが１バイトで、数値が大きくなるほど輝度が大きい（明るい）ことを示します。

６４Ｋ色カラー	１ピクセルが２バイト（１６ビット）で、下位ビットから５ビットずつ青(B)、緑(G)、赤(R)の輝度を示します。最上位の１ビットは使用されません。

１６Ｍ色カラー	１ピクセルが３バイトで、１バイトずつ青(B)、緑(G)、赤(R)の順で格納されます。

参照

CMDraw


/* ビデオキャプチャモード */

typedef struct {

int	size;	/* ビデオサイズ（０～１５） */

int	color;	/* ビデオカラーモード（０～２） */

int	compressMode;	/* 圧縮モード */

int	compressQuality;	/* 圧縮時の画質 */

} CAPTUREMODE, FAR *LPCAPTUREMODE;


/* ビデオサイズ */

#define SIZE_40_30	0	/* 40 x 30 */

#define SIZE_80_60	1	/* 80 x 60 */

#define SIZE_120_90	2	/* 120 x 90 */

#define SIZE_160_120	3	/* 160 x 120 */

#define SIZE_200_150	4	/* 200 x 150 */

#define SIZE_240_180	5	/* 240 x 180 */

#define SIZE_280_210	6	/* 280 x 210 */

#define SIZE_320_240	7	/* 320 x 240 */

#define SIZE_360_270	8	/* 360 x 270 */

#define SIZE_400_300	9	/* 400 x 300 */

#define SIZE_440_330	10	/* 440 x 330 */

#define SIZE_480_360	11	/* 480 x 360 */

#define SIZE_520_390	12	/* 520 x 390 */

#define SIZE_560_420	13	/* 560 x 420 */

#define SIZE_600_450	14	/* 600 x 450 */

#define SIZE_640_480	15	/* 640 x 480 */


/* ビデオカラーモード */

#define COLOR_8	0	/* 256階調モノクロ */

#define COLOR_16	1	/* 64k 色カラー */

#define COLOR_24	2	/* 16M 色カラー */


CMDraw関数
CMDraw　ビデオ画像描画

int CMDraw(hDC, lpCaptureMode, lpBuf)

HDC hDC,	/* デバイス コンテキストのハンドル */

LPCAPTUREMODE lpCaptureMode,	/* ビデオキャプチャモード */

LPSTR lpBuf	/* ビデオデータバッファ */

パラメータ	説明

hDC	ウィンドウのデハイス コンテキストを識別します。

lpCaptureMode	CAPTUREMODE構造体を指すポインタです。

lpBuf	ビデオデータが格納されているバッファのポインタです。

戻り値

関数が正常終了した場合は０、異常終了した場合はエラーコードを返します。

説明

CMCaptureVideoで取得したビデオ画像データをhDCが示すデバイスに表示します。 lpCaptureModeとlpBufはCMCaptureVideo関数に渡したものと同じものを与えます。

参照

CMCaptureVideo


エラーコード

#define ERROR_CM_TOO_MANY_OPEN	1000	/* オープン数が多すぎる */

#define ERROR_CM_VIDEO_OPEN	1001	/* ビデオキャプチャのオープンに失敗 */

#define ERROR_CM_PORT_OPEN	1002	/* RS-232C ポートのオープンに失敗 */

#define ERROR_CM_NOANSWER	1003	/* カメラから応答がない */

#define ERROR_CM_INVALID_HANDLE	1004	/* ハンドルが不正 */

#define ERROR_CM_INVALID_COMMAND	1005	/* CMControl() のコマンドが不正 */

#define ERROR_CM_PRESET_NO	1006	/* プリセットＮｏが不正 */

#define ERROR_CM_VIDEO_CONFIG	1007	/* キャプチャボードの設定に失敗 */

#define ERROR_CM_VIDEO_CAPTURE	1008	/* キャプチャに失敗 */

#define ERROR_CM_CAPTURE_MODE	1009	/* キャプチャモードの設定が不正 */

#define ERROR_CM_CAMERA_CONTROL	1010	/* カメラコントロールができない */

#define ERROR_CM_WINSOCK	1011	/* winsock.dll がロードできない */

#define ERROR_CM_HOSTNAME	1012	/* ホスト名が不正 */

#define ERROR_CM_SOCKET	1013	/* ソケットのオープンに失敗 */

#define ERROR_CM_CONNECT	1014	/* PC-VIDEO への接続に失敗 */

#define ERROR_CM_SEND	1015	/* データ送信でエラー */

#define ERROR_CM_RECEIVE	1016	/* データ受信でエラー */

#define ERROR_CM_NOCAPTURE	1017	/* PC-VIDEO がビデオ送信をしていない */

#define ERROR_CM_MEMORY	1018	/* メモリ不足 */

#define ERROR_CM_NOSUPPORT	1019	/* カメラコントロールのサポートなし */

#define ERROR_CM_DENY	1020	/* カメラコントロールが禁止 */

#define ERROR_CM_LOCK	1021	/* 他がロック中 */


Visual Basicでの使用について

本ライブラリは Ｖｉｓｕａｌ Ｂａｓｉｃ から呼び出して使用することもできます。以下に必要な定義とプログラム例を示します。

' CAMERAOPT構造体

Type CAMERAOPT

    PanSpeed As Integer

    TiltSpeed As Integer

    ZoomSpeed As Integer

    ShutterSpeed As Integer

    AutoFocus As Integer

    LightAdjust As Integer

    AutoWhiteBalance As Integer

    WideConverter As Integer

End Type

' CAMERAPOS構造体

Type CAMERAPOS

    Pan As Integer

    Tilt As Integer

    Zoom As Integer

End Type

' PRESET構造体

Type PRESET

    Pos As CAMERAPOS

    Comment As String * 31

End Type

' CAPTUREMODE構造体

Type CAPTUREMODE

    size As Integer

    color As Integer

    compressMode As Integer

    compressQuality As Integer

End Type

' ビデオデータバッファ（１６Ｍ色カラー）

Type RGBBUF24

    blue As Byte

    green As Byte

    red As Byte

End Type

' カメラコントロールコマンド

Public Const CM_RESET = 0

Public Const CM_HOME_POSITION = 1

Public Const CM_PAN_RIGHT = 2

Public Const CM_PAN_LEFT = 3

Public Const CM_TILT_UP = 4

Public Const CM_TILT_DOWN = 5

Public Const CM_STOP = 6

Public Const CM_ZOOM_WIDE = 7

Public Const CM_ZOOM_TELE = 8

Public Const CM_ZOOM_STOP = 9

Public Const CM_FOCUS_AUTO = 10

Public Const CM_FOCUS_MANUAL = 11

Public Const CM_FOCUS_NEAR = 12

Public Const CM_FOCUS_FAR = 13

Public Const CM_POWER_ON = 14

Public Const CM_POWER_OFF = 15

' 関数定義

Declare Function CMOpen Lib "cmctl.dll" (ByVal Connect As String, ByVal UserName As String, ByVal option1 As Integer, handle As Integer) As Integer

Declare Function CMClose Lib "cmctl.dll" (ByVal handle As Integer) As Integer

Declare Function CMControl Lib "cmctl.dll" (ByVal handle As Integer, ByVal command As Integer) As Integer

Declare Function CMGetCameraOpt Lib "cmctl.dll" (ByVal handle As Integer, opt As CAMERAOPT) As Integer

Declare Function CMSetCameraOpt Lib "cmctl.dll" (ByVal handle As Integer, opt As CAMERAOPT) As Integer

Declare Function CMGetPreset Lib "cmctl.dll" (ByVal handle As Integer, pre As PRESET) As Integer

Declare Function CMSetPreset Lib "cmctl.dll" (ByVal handle As Integer, pre As PRESET, ByVal no As Integer) As Integer

Declare Function CMMovePreset Lib "cmctl.dll" (ByVal handle As Integer, ByVal no As Integer) As Integer

Declare Function CMGetCameraPos Lib "cmctl.dll" (ByVal handle As Integer, Pos As CAMERAPOS) As Integer

Declare Function CMSetCameraPos Lib "cmctl.dll" (ByVal handle As Integer, Pos As CAMERAPOS) As Integer

Declare Function CMLock Lib "cmctl.dll" (ByVal handle As Integer, ByVal LockFlag As Integer) As Integer

Declare Function CMCaptureVideo Lib "cmctl.dll" (ByVal handle As Integer, mode As CAPTUREMODE, buf As Any) As Integer

Declare Function CMDraw Lib "cmctl.dll" (ByVal hdc As Integer, mode As CAPTUREMODE, buf As Any) As Integer

' プログラム例

Dim handle As Integer	' カメラ制御ハンドル

Dim ErrCode As Integer	' エラーコード

Dim mode As CAPTUREMODE	' キャプチャモード

Dim buf(160 * 120 ) As RGBBUF24	' ビデオデータバッファ

' カメラオープン

ErrCode = CMOpen("pcvideo", "test", 0, handle)

' キャプチャモード設定

mode.size = 3	' 160 x 120

mode.color = 2	' １６Ｍ色カラー

' ビデオ画像取り込み

ErrCode = CMCaptureVideo(handle, mode, buf(0))

' 画像表示

ErrCode = CMDraw(Picture1.hdc, mode, buf(0))

Picture1.Refresh

※Picture1はピクチャボックスでAutoRedrawプロパティをTrueにしてください。