[トップ][一覧][最近の更新]

編集履歴:差分

記録開始以来のUSBカメラの画像を表示してみる。の変更箇所

  • + 追加された行
  • - 削除された行

編集履歴ページに戻る

- USBカメラの画像を表示してみる。
- 
- 
- [[$$toc]]
- - →[[HSP3・サンプルスクリプト]]に戻る
- 
- ----
- 
- HSP3.1β1 XPsp2 で動作確認~%
- 
- DirectShowのサンプルの応用ですね。~%
- ただ問題なのが、パソコンにビデオ入力デバイスが複数枚ある場合面倒です。~%
- 
- '''*当然ではありますが、パソコンにUSBカメラを接続してから実行してください。'''
- 
- * スクリプト
- 
- {{{
- ; <<<< HSP 3.1β1 サンプル >>>>
- ;
- ; USBビデオカメラの画像を表示してみる。
- ;
- 
- onexit gosub *exit
- 
- #define WS_CHILD         0x40000000
- #define WS_CLIPSIBLINGS  0x4000000
- #define WS_CLIPCHILDREN	 0x2000000
- 
- //-------------インターフェイス登録
- #define IID_IGraphBuilder "{56A868A9-0AD4-11CE-B03A-0020AF0BA770}"
- #define CLSID_FilterGraph "{e436ebb3-524f-11ce-9f53-0020af0ba770}"
- 
- #usecom  IGraphBuilder IID_IGraphBuilder CLSID_FilterGraph
- #comfunc Builder_AddFilter   3 comobj,wstr
- #comfunc Builder_RenderFile 13 wstr,nullptr
- 
- #define IID_ICaptureGraphBuilder2  "{93E5A4E0-2D50-11D2-ABFA-00A0C9C6E38D}"
- #define CLSID_CaptureGraphBuilder2 "{BF87B6E1-8C27-11d0-B3F0-00AA003761C5}"
- 
- #usecom  ICaptureGraphBuilder2 IID_ICaptureGraphBuilder2 CLSID_CaptureGraphBuilder2
- #comfunc Builder2_SetFiltergraph 3 comobj
- #comfunc Builder2_FindInterface  6 var,var,comobj,var,var
- #comfunc Builder2_RenderStream   7 var,var,comobj,int,int
- 
- #define IID_ICreateDevEnum     "{29840822-5B84-11D0-BD3B-00A0C911CE86}"
- #define CLSID_SystemDeviceEnum "{62BE5D10-60EB-11d0-BD3B-00A0C911CE86}"
- 
- #usecom  ICreateDevEnum IID_ICreateDevEnum CLSID_SystemDeviceEnum
- #comfunc CreateDevEnum_CreateClassEnumerator 3 var,var,int
- 
- #usecom  IMoniker "{0000000F-0000-0000-C000-000000000046}"
- #comfunc Moniker_BindToObject 8 int,int,var,var
- 
- #usecom  IEnumMoniker "{00000102-0000-0000-C000-000000000046}"
- #comfunc EnumMoniker_Next 3 int,var,var
- 
- #usecom  IMediaControl "{56A868B1-0AD4-11CE-B03A-0020AF0BA770}"
- #comfunc MediaControl_Run   7
- #comfunc MediaControl_Pause 8
- #comfunc MediaControl_Stop  9
- 
- #usecom  IVideoWindow "{56A868B4-0AD4-11CE-B03A-0020AF0BA770}"
- #comfunc VideoWindow_put_WindowStyle    9 int
- #comfunc VideoWindow_put_Visible       19 int
- #comfunc VideoWindow_put_Owner         29 int
- #comfunc VideoWindow_SetWindowPosition 39 int,int,int,int
- //---------------------------------------------------------------
- 
- BaseFilter=1453877397,298715860,536885936,1889995695
- MEDIATYPE_Video=1935960438,1048576,-1442840448,1905997824
- 
- PIN_PREVIEW=-76791166,298910547,24464,-1172910912
- CLSID_Video=-2046053616,298867969,-1610597443,-2033315383
- 
- screen 0,320,240
- title "USB カメラ"
- 
- newcom pGraphBuilder, IGraphBuilder
- 
- newcom pCreateDevEnum,ICreateDevEnum
- 
- newcom pClassEnum
- CreateDevEnum_CreateClassEnumerator pCreateDevEnum,CLSID_Video,pClassEnum,0
- 
- //dim Moniker,10;自動確保に任す。
- 
- repeat 
- 	EnumMoniker_Next pClassEnum ,1,Moniker.cnt,cFetched
- 	if cFetched=0{break}
- loop
- 
- dialog "ビデオデバイスの数-> "+(-1+length(Moniker))+" あります。"
- 
- /*
- USBカメラしかつながっていない場合、これでOKなはずです。
- newcom pMoniker,,-1,Moniker.0
- 
- 何枚も繋がっている場合は、
- newcom pMoniker,,-1,Moniker.1
- newcom pMoniker,,-1,Moniker.2
- の様に替えてみてください。
- */
- 
- newcom pMoniker,,-1,Moniker.0
- newcom pSr
- Moniker_BindToObject pMoniker,0,0,BaseFilter,pSr
- 
- //これ以降使わないので、delcom します。
- ;delcom pMonike : delcom pClassEnum : delcom pCreateDevEnum
- pMoniker=0 : pClassEnum=0 : pCreateDevEnum=0
- 
- Builder_AddFilter pGraphBuilder,pSr,"Video Capture"
- 
- newcom pBuilder2,ICaptureGraphBuilder2
- 
- Builder2_SetFiltergraph pBuilder2,pGraphBuilder
- 
- Builder2_RenderStream pBuilder2,PIN_PREVIEW,MEDIATYPE_Video,pSr,0,0
- 
- ;delcom pSr
- pSr=0;ちょくと氏によればこれでもdelcomされるそうです。
- 
- querycom pMediaControl,pGraphBuilder,IMediaControl
- //---↓ここから
- querycom pVideoWindow, pGraphBuilder,IVideoWindow
- 
- VideoWindow_put_Owner pVideoWindow,hwnd
-  
- VideoWindow_put_WindowStyle pVideoWindow,WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS
- 
- VideoWindow_SetWindowPosition pVideoWindow,0,0,320,240
- 
- VideoWindow_put_Visible pVideoWindow,-1
- //---↑ここまでばっさり削除しても動作します(別ウインドウで開く)
- 
- MediaControl_Run pMediaControl
- 
- stop
- 
- *exit
- if vartype(pMediaControl)=6{MediaControl_Stop pMediaControl}
- pVideoWindow=0
- pMediaControl=0
- pBuilder2=0
- pGraphBuilder=0
- end
- }}}
- * memo
- 実はこのサンプル、TVも表示できるんです。~%
- 
- 2006/02/07 07:05:50 JST~%
- オートメージョン記述を止めました。
- 3.0でも動くはずです。
- 
- 2006/04/08 13:30:20 JST~%
- 変更~%
- onexit *exit -> onexit gosub *exit