sample\iron\sample_camera_mf_dual.hsp » Plain Format
;============================================================
; iron_camera_mf サンプル: 2 台同時プレビュー
;
; hspmfcam.dll は最大 8 台のカメラを並列で扱える設計のため、
; 単純に iron_cam_open を 2 回呼ぶだけで両方のフィードを同時に
; プレビューできる (各カメラに専用 worker thread + child window)。
;
; 操作:
; [S] 両方スナップショット保存 (snap_left.png / snap_right.png)
; [ESC] 終了
;
; 注意: 2 台目のカメラがない場合は 1 台のみで起動してエラー表示
;============================================================
#include "hsp3_net_64.as"
#include "iron_camera_mf.hsp"
title "iron_camera_mf — 2 cameras simultaneous preview"
n_cams = iron_cam_count()
if n_cams = 0 {
dialog "Webcam が接続されていません。", 1
end
}
; 配置: 横並びで 2 つ (各 640x480) + UI バー
prev_w = 640
prev_h = 480
gap = 20
screen_w = prev_w * 2 + gap * 3
screen_h = prev_h + 100
screen 0, screen_w, screen_h
font "MS Gothic", 14
title strf("iron_camera_mf — 2 cams (found %d device(s))", n_cams)
; カメラ名取得
iron_cam_name 0, name_l
if n_cams >= 2 : iron_cam_name 1, name_r
; カメラ 1 (左) を起動
hcam_l = iron_cam_open(0, gap, 0, prev_w, prev_h)
if hcam_l >= 0 {
iron_cam_set_aspect hcam_l, 1
iron_cam_size hcam_l, cw_l, ch_l
}
; カメラ 2 (右) を起動 — 1 台しか無ければ skip
hcam_r = -1
if n_cams >= 2 {
hcam_r = iron_cam_open(1, gap * 2 + prev_w, 0, prev_w, prev_h)
if hcam_r >= 0 {
iron_cam_set_aspect hcam_r, 1
iron_cam_size hcam_r, cw_r, ch_r
}
}
snap_msg_until = 0
*main_loop
stick k, $80
if k & $80 : goto *do_exit
getkey k_s, 'S'
if k_s {
if hcam_l >= 0 : iron_cam_save hcam_l, "snap_left.png"
if hcam_r >= 0 : iron_cam_save hcam_r, "snap_right.png"
snap_msg_until = gettime(7) + gettime(6) * 1000 + 1500
repeat 5 : await 30 : loop
}
redraw 0
color 32, 32, 32 : boxf 0, prev_h, screen_w, screen_h : color 0, 0, 0
color 255, 255, 255
pos 10, prev_h + 8
mes strf("Camera 0: %s (%dx%d, state=%d)", name_l, cw_l, ch_l, iron_cam_state(hcam_l))
pos 10, prev_h + 28
if hcam_r >= 0 {
mes strf("Camera 1: %s (%dx%d, state=%d)", name_r, cw_r, ch_r, iron_cam_state(hcam_r))
} else {
color 255, 80, 80
mes "Camera 1: (not available — only 1 camera connected)"
color 255, 255, 255
}
pos 10, prev_h + 56
mes "[S] 両方保存 [ESC] 終了 各カメラは独立 worker thread で動作"
now_ms = gettime(7) + gettime(6) * 1000
if snap_msg_until > now_ms {
color 255, 255, 0
pos screen_w - 280, prev_h + 8
mes "snap_left.png / snap_right.png 保存"
}
color 0, 0, 0
redraw 1
await 30
goto *main_loop
*do_exit
if hcam_l >= 0 : iron_cam_close hcam_l
if hcam_r >= 0 : iron_cam_close hcam_r
end