DirectShowアプリケーションの開発中に奇妙な問題が発生しています。私は、DSPACK DirectShowコンポーネントライブラリと共にDelphi 6を使用しています。 IBaseFilterインスタンスの1つは、TPinInfo.achNameプロパティ(_PinInfo)を使用してフィルタ内のピンを見つけようとするときに、所有しているピンを認識していないようです。 (この場合は、この奇妙な動作を示しているのはTSampleGrabberコンポーネントによって作成されたIBaseFilterです)。DirectShowフィルタのピンがQueryPinInfoから返されたIDであるにもかかわらず、名前/ IDで見つからない
- IBaseFilterインスタンス内の最初の利用可能な入力ピンを検索:
以下のサンプルコードでカプセル化されたイベントのシーケンスは、このです。以下のコードでは、これはtestPinInfo()に渡されるピンです。
- 返されたピンに対してQueryPinInfo()を実行して、その情報を取得します。返された情報は、ピンのachNameを 'Input'として示しています。
- IBaseFilter.findPin()を使用して、非常に同じIBaseFilterインスタンスで 'Input'というピンを検索してみてください。
- その名前でピンが見つからないことを示すNILを戻します。これは私の意見では本当に奇妙な状態(エラー)です。
どのような状況でこのシナリオが発生する可能性がありますか?デバッガでデータ構造を調べると、データ構造が正常に表示されるため、メモリ破損の問題ではないと思います。一部のIBaseFilter実装でFindPin()メソッドを正しく実装できない可能性はありますか?
がここに以下のコードです:
procedure testPinInfo(intfInputPin: IPin);
var
intfTestPin: IPin;
pinInfo_input: TPinInfo;
begin
intfTestPin := nil;
// Get the pin information.
ZeroMemory(@pinInfo_input, SizeOf(pinInfo_input));
intfInputPin.QueryPinInfo(pinInfo_input);
// Now immediately turn around and try to find the pin in the filter that
// owns it, using the name found in pinInfo_input
pinInfo_input.pFilter.FindPin(pinInfo_input.achName, intfTestPin);
// >>> intfTestPin is NIL (unassigned). This is an error.
end;