2

複数の入力ピン間で単純なオーディオ ミキシングを行い、マージされたデータを単一の出力ピン (多対 1) に配信する DirectShow フィルターを実装しています。オーディオ データのミキシングについては理解しましたが、メディア以外のデータストリーム メッセージをどうするかについて意見を求めたいと思います。たとえば、DSPACK DirectShow コンポーネント ライブラリから取得した以下のコードを変更し、Delphi 6 アプリで使用しているとします。

var
  Props: PAMSample2Properties;
  OutSample: IMediaSample;
begin
  Assert(Assigned(inputPin));

  //  Check for other streams and pass them on
  // Props := FInput.SampleProps;
  Props := inputPin.SampleProps;

  if(Props.dwStreamId <> AM_STREAM_MEDIA) then
  begin
    // ATI: Currently, any stream notices that come in that aren't
    //  regular stream media data notices are immediately passed
    //  through to the output pin.  Is this behavior OK for my multi-pin filter?
    result := FOutput.FInputPin.Receive(Sample);
    exit;
  end;

  ...

ご覧のとおり、現在、ストリーム メディア データメッセージではない入力ピンの配信をすぐに出力ピンに渡しています。これは、すべての入力ピンが次のオーディオ データ バッファーを配信するまで保持するオーディオ データを受信し、そのオーディオ データをミキシングしてから、唯一の出力ピンに対して単一の Receive 呼び出しを行う場合とは対照的です。私の質問は次のとおりです。

  1. オーディオ データの受信を処理するときに入力ピンの配信をバッチ処理し、メディア以外のデータの受信にはすぐに渡すと、どのような影響がありますか? このようなメッセージのリストは、次の MSDN ドキュメントにあります。

http://msdn.microsoft.com/en-us/library/windows/desktop/dd373500(v=vs.85).aspx

  1. このアプローチによって、ダウンストリーム フィルターが混乱したり破損したりすることはありますか? もしそうなら、オーディオデータを混合するフィルターに現在接続されている入力ピン間で非ストリームメディアデータの受信を調停するには、どのような手法を採用する必要がありますか?
4

0 に答える 0