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

概要

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が動作している必要があります。

#$K 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

#$K CMClose　カメラクローズ処理

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

パラメータ	説明
handle	カメラ制御ハンドルを指定します。

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

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

参照
CMOpen

#$K 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

#$K 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;

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

int CMSetCameraOpt(handle, lpCameraOpt)
int handle;	/* カメラ制御ハンドル */
LPCAMERAOPT lpCameraOpt;	/* カメラオプション情報 */

パラメータ	説明
handle	カメラ制御ハンドルを指定します。
lpCameraOpt	CAMERAOPT構造体を指すポインタです。

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

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

参照
CMGetCameraOpt

#$K 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;

#$K CMSetPreset　プリセット情報設定

int CMSetPreset(handle, lpPreset, presetNo)
int handle;	/* カメラ制御ハンドル */
LPPRESET lpPreset;	/* プリセット情報 */
int presetNo;	/* プリセット番号 */

パラメータ	説明
handle	カメラ制御ハンドルを指定します。
lpPreset	PRESET構造体を指すポインタです。
presetNo	設定するプリセット番号を指定します。（１～８）

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

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

参照
CMGetPreset, CMMovePreset

#$K CMMovePreset　プリセット位置に移動

int CMMovePreset(handle, presetNo)
int handle;	/* カメラ制御ハンドル */
int presetNo;	/* プリセット番号 */

パラメータ	説明
handle	カメラ制御ハンドルを指定します。
presetNo	プリセット番号を指定します。（１～８）

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

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

参照
CMGetPreset, CMSetPreset

#$K CMGetCameraPos　現カメラ位置情報取得

int CMGetCameraPos(handle, lpCameraPos)
int handle;	/* カメラ制御ハンドル */
LPCAMERAPOS lpCameraPos;	/* カメラ位置情報 */

パラメータ	説明
handle	カメラ制御ハンドルを指定します。
lpCameraPos	CAMERAPOS構造体を指すポインタです。

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

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

参照
CMSetCameraPos

#$K CMSetCameraPos　カメラ位置設定

int CMSetCameraPos(handle, lpCameraPos)
int handle;	/* カメラ制御ハンドル */
LPCAMERAPOS lpCameraPos;	/* カメラ位置情報 */

パラメータ	説明
handle	カメラ制御ハンドルを指定します。
lpCameraPos	CAMERAPOS構造体を指すポインタです。

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

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

参照
CMGetCameraPos

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

int CMLock (handle, lockFlag)
int handle;	/* カメラ制御ハンドル */
int lockFlag;	/* ロック設定／解除フラグ */

パラメータ	説明
handle	カメラ制御ハンドルを指定します。
lockFlag	１をセットするとロックを設定し、０をセットするとロックを解除します。

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

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

参照

#$K 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 色カラー */

#$K CMDraw　ビデオ画像描画

int CMDraw(hDC, lpCaptureMode, lpBuf)
HDC hDC,	/* デバイス コンテキストのハンドル */
LPCAPTUREMODE lpCaptureMode,	/* ビデオキャプチャモード */
LPSTR lpBuf	/* ビデオデータバッファ */

パラメータ	説明
hDC	ウィンドウのデハイス コンテキストを識別します。
lpCaptureMode	CAPTUREMODE構造体を指すポインタです。
lpBuf	ビデオデータが格納されているバッファのポインタです。

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

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

参照
CMCaptureVideo

#$K エラーコード
#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にしてください。