DirectXを用いて、キャプチャー映像を表示しています。
同じ映像を、2箇所に表示したいのですが、可能うまくできません。
下記が現在のプログラムです。
Option Explicit
'カメラのフィルタ名
Private Const CAMERA_FILTER_NAME$ = "Python2 USB WDM Encoder" 'Che-es! SPYZ
Private Const CAMERA_OUTPUTPIN_NAME$ = "Video Out"
'フィルタグラフマネージャ
Private mGrp As QuartzTypeLib.FilgraphManager
'フィルタグラフマネージャ
Private mGrp2 As QuartzTypeLib.FilgraphManager
Private Sub Form_Activate()
'グラフマネージャの作成
Set mGrp = New QuartzTypeLib.FilgraphManager
'グラフにキャプチャ(カメラ)フィルタを追加する
Dim cameraflt As QuartzTypeLib.IFilterInfo
Dim cameraflt2 As QuartzTypeLib.IFilterInfo
Set cameraflt = AddFilter(mGrp, CAMERA_FILTER_NAME$)
If cameraflt Is Nothing Then
MsgBox "カメラ'" + CAMERA_FILTER_NAME + "'が見つかりません。" + vbCrLf + "カメラの名前を確認してください。"
Exit Sub
End If
Set cameraflt2 = AddFilter(mGrp, "Video Renderer")
If cameraflt Is Nothing Then
MsgBox "カメラ'" + CAMERA_FILTER_NAME + "'が見つかりません。" + vbCrLf + "カメラの名前を確認してください。"
Exit Sub
End If
'カメラの出力ピンを取得
Dim camerapin As QuartzTypeLib.IPinInfo
Dim camerapin2 As QuartzTypeLib.IPinInfo
cameraflt.FindPin 0, camerapin
cameraflt2.FindPin "VMR Input0", camerapin2
Call camerapin.Connect(camerapin2)
'ビデオサイズ(縦横)を取得
Dim bv As QuartzTypeLib.IBasicVideo
Dim vx&, vy&
Set bv = mGrp
bv.GetVideoSize vx, vy
'ビデオサイズに合わせてウィンドウを調整
Dim winx&, winy& 'ウィンドウの縁サイズ
Me.ScaleMode = vbTwips
winx = Me.Width - Me.ScaleWidth
winy = Me.Height - Me.ScaleHeight
Me.Width = winx + vx * Screen.TwipsPerPixelX
Me.Height = winy + vy * Screen.TwipsPerPixelY
'ウィンドウ内で動画を再生させる
Dim vw As QuartzTypeLib.IVideoWindow
Set vw = mGrp
vw.WindowStyle = &H40000000 'WS_CHILD
vw.SetWindowPosition 0, 0, vx, vy
vw.Owner = Me.hWnd
'再生
mGrp.Run
End Sub
'レジストリに登録されているフィルタをグラフに追加する
Public Function AddFilter(ByRef Grp As QuartzTypeLib.FilgraphManager, ByVal FilterName$) As IFilterInfo
Dim regflt As QuartzTypeLib.IRegFilterInfo
For Each regflt In Grp.RegFilterCollection
If regflt.Name = FilterName$ Then
regflt.Filter AddFilter
Exit Function
End If
Next
End Function