如何在DirectShow多输入音频滤波器中跨输入引脚仲裁流消息?

时间:2011-11-16 03:05:17

标签: delphi filter directshow dspack

我正在实现一个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;

  ...

如您所见,目前我正在将任何非流媒体数据消息的输入引脚传递立即传递到输出引脚。这与我收到音频数据时的情况形成对比,直到所有输入引脚都传送了下一个音频数据缓冲区,混合了音频数据,然后对我唯一的输出引脚进行单次接收调用。我的问题是:

  1. 处理音频数据收据时批处理输入引脚交付会产生什么影响,但是立即将它们传递给非媒体数据收据?可以在此MSDN文档中找到此类消息的列表:
  2. http://msdn.microsoft.com/en-us/library/windows/desktop/dd373500(v=vs.85).aspx

    1. 下游过滤器是否会被此方法混淆或被破坏?如果是这样,我应采用什么技术来仲裁当前连接到混合音频数据的滤波器的输入引脚上的非流媒体数据收据?

0 个答案:

没有答案