2012-03-27 4 views
0

カスタムグラフフィルタを作成しようとしていますが、問題が発生しています。DirectShow .NETカスタムグラフ

libに私はC#DirectShow.NET使用しています

私はVC1ビデオやDTSオーディオのファイルを読んでいます。私はグラフにソースフィルタを追加する、それは正常に動作します、私はまた、スプリッタフィルタ(lavスプリッタを使用して)を追加することができますが、私は、lavスプリッタにファイルソースフィルタを接続しようとすると失敗します。

スプリッタで入力ピンが見つからないために失敗します...出力ピンがダイナミックになる可能性がありますが、入力ピンが正しくなければなりませんか?

これはコード

_graphBuilder = (IGraphBuilder)new FilterGraph(); 
_dsRotEntry = new DsROTEntry((IFilterGraph)_graphBuilder); 

LogInfo("Adding source filter..."); 
int hr = _graphBuilder.AddSourceFilter(_inputFilePath, _inputFilePath, 
    out _fileSource); 
DsError.ThrowExceptionForHR(hr); 

IPin pinSourceOut = DsFindPin.ByDirection(_fileSource, PinDirection.Output, 0); 
if (pinSourceOut == null) 
{ 
    LogError("Unable to find source output pin"); 
}; 

IBaseFilter lavSplitter = CreateFilter(LAV_SPLITTER); 
if (lavSplitter == null) 
{ 
    LogError("LAV Splitter not found"); 
}; 

hr = _graphBuilder.AddFilter(lavSplitter, "LAV Splitter"); 
DsError.ThrowExceptionForHR(hr); 

bool result = TryConnectToAny(pinSourceOut, lavSplitter); 
if (!result) 
{ 
    LogError("Unable to connect FileSource with LAV Splitter"); 
} 

入力ピンが存在しない可能性が最も高い
private bool TryConnectToAny(IPin sourcePin, IBaseFilter destinationFilter) 
{ 
    IEnumPins pinEnum; 
    int hr = destinationFilter.EnumPins(out pinEnum); 
    DsError.ThrowExceptionForHR(hr); 
    IPin[] pins = { null }; 
    while (pinEnum.Next(pins.Length, pins, IntPtr.Zero) == 0) 
    { 
     int err = _graphBuilder.Connect(sourcePin, pins[0]); 
     if (err == 0) 
      return true; 
     Marshal.ReleaseComObject(pins[0]); 
    } 
    return false; 
} 

答えて

1

あり、そしてどのような障害が発生すると、接続そのものです。 errには、問題を説明するためのエラーコードが格納されています。接続できない場合は、入力ピンがまったくない場合と同様に、TryConnectToAnyはfalseを返します。