投稿時間:2004/09/25(Sat) 18:24 投稿者名:YAS
Eメール:yasunari@sakai.atnifty.com
URL :
タイトル:DirectShowでタイムシフト
こんにちは。YASと申します。よろしくお願いします。 VB6.0でDirectShowとVideoControlを使ってDVカメラの画像をタイムシフトして 表示したいのですがうまくいきません。 以下のコードで,ファイルの記録まではうまくいきますが,そのファイルの再生ができません。 ご存知の方がいらっしゃいましたらご教授をお願いいたします。 Option Explicit
Dim mobjMCSink As FilgraphManager Dim MSVidCtlSrc As MSVidCtl
'一時ファイルに録画する Private Sub Form_Load() Set mobjMCSink = New FilgraphManager Dim objFGSink As IGraphBuilder Set objFGSink = mobjMCSink Dim objSBESink As New MSVidStreamBufferSink Call objFGSink.AddFilter(objSBESink.SBESink, "SBESink") objSBESink.SinkName = "c:\temp.avi" Call RenderOutPin(mobjMCSink, AddFilter(mobjMCSink, "microsoft dv camera and vcr")) objSBESink.NameSetLock mobjMCSink.Run End Sub
'一時ファイルを再生する '参考:hhttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/DirectX9_c/directx/htm/usingthestreambufferinscript.asp
Private Sub Command1_Click() Set MSVidCtlSrc = New MSVidCtl Dim InputDev As IMSVidInputDevice Dim objStreamBufferSource As IMSVidInputDevice For Each InputDev In MSVidCtlSrc.InputsAvailable("{00000000-0000-0000-0000-000000000000}") If InputDev.ClassID = "{AD8E510D-217F-409B-8076-29C5E73B98E8}" Then MSVidCtlSrc.InputActive = InputDev Set objStreamBufferSource = InputDev End If Next objStreamBufferSource.FileName = "c:\temp.avi" MSVidCtlSrc.Run End Sub
Private Sub Form_Unload(Cancel As Integer) mobjMCSink.Stop MSVidCtlSrc.Stop Set mobjMCSink = Nothing Set MSVidCtlSrc = Nothing End Sub
Private Function AddFilter(objMC As FilgraphManager, strFilterName As String) As IFilterInfo Dim objRegFilter As IRegFilterInfo Set AddFilter = Nothing For Each objRegFilter In objMC.RegFilterCollection If LCase(objRegFilter.Name) = LCase(strFilterName) Then Call objRegFilter.Filter(AddFilter) Exit For End If Next Set objRegFilter = Nothing End Function
Private Sub RenderOutPin(objMC As FilgraphManager, objFilter As IFilterInfo) Dim objPin As IPinInfo If objFilter Is Nothing Then Exit Sub For Each objPin In objFilter.Pins If objPin.Direction = 1 Then Call objPin.Render Exit For End If Next Set objPin = Nothing End Sub
|