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;
}