キャプチャーしている動画を2箇所に表示


KR  2007-12-17 11:35:58  No: 99946  IP: 192.*.*.*

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

編集 削除