こちらのサイトでFlash Playerから仮想デバイスであるSCFH DSFを
使用して実験してみたところ一応動いているようです。
http://dev.dgdk.net/jk25k/face/
SCFH DSF
http://mosax.sakura.ne.jp/fswiki.cgi?page=SCFH+DSF
サンプルコード
http://homepage2.nifty.com/MJHS/dotou_hsp/module/SCFH_DSF_Sample.hsp
SCFH DSF API
http://mosax.sakura.ne.jp/fswiki.cgi?page=SCFH+DSF+API
手順
1. SCFH DSF をインストール
2. Webカメラを使用するアプリやFlashを起動しておいて待機させる。
(カメラデバイスが複数ある場合は、SCFH DSFが使用されるように変更する。)
3. サンプルを実行する。
プロセス一覧が出てくれば成功しています。
Flashの場合はプロセス名がウェブブラウザになっています。
対象を選択できたら、「このプロセスを使用する」ボタンを押して
キャプチャ対象をHSPウィンドウになるように設定を変更します。
アプリやFlash側で"Broadcast Test for HSP!!"の画面が表示されていれば成功です。
------------------------------------------------------------
SCFH DSF APIで使用される構造体のサイズのメモ
struct RECTF ( 16 bytes )
{
4*4 float left, top, right, bottom;
};
struct AreaInfo ( 44 bytes )
{
4 BOOL active; // 出力範囲有効化
4 DWORD hwnd; // ウィンドウのハンドル
16 RECT src; // 取込範囲 ピクセル単位 ウィンドウの右上を[0, 0]とした座標系
16 RECTF dst; // 出力範囲 右上端を[0.0, 0.0]、右下端を[1.0, 1.0]とした座標系
1 bool zoom; // 取込範囲が出力範囲より小さい場合に拡大するか否か
1 bool fixAspect; // 取込範囲と出力範囲のアスペクトが異なる場合にアスペクト比を調整するか否か
1 bool showCursor; // マウスカーソルを取り込むか否か
1 bool showLW; // レイヤードウィンドウを取り込むか否か
};
struct SharedInfo ( 408 bytes )
{
4 BOOL active; // [inout] SCFH DSF有効化 (プロセスからアンロードされたときにFALSEに設定される)
44*8 struct AreaInfo area[8]; = 352 // [in] 取込範囲設定
8 POINT dummy1; // 未使用
4 int resizeMode; // [in] 縮小モード (RESIZE_MODE_*)
4 int dummy2; // 未使用
8 double aveTime; // [out] 一フレームの平均処理時間
4+4 int width, height; // [out] 出力サイズ
8 double framerate; // [out] 出力フレームレート
4 DWORD threadNum; // [in] ソフトウェア縮小スレッド数
4 BOOL overSampling; // [in] オーバーサンプリング有効化
};
struct ProcessInfo ( 264 bytes )
{
4 DWORD pid; // [out] プロセスID
260 char name[260]; // [out] 実行ファイル名
};
------------------------------------------------------------