Audio Direcshow过滤器如何交换介质样本?

Audio Direcshow过滤器如何交换介质样本?,audio,directshow,audio-streaming,visual-c++-2010,audio-processing,Audio,Directshow,Audio Streaming,Visual C++ 2010,Audio Processing,有人知道directshow过滤器如何交换媒体样本吗 我们知道源过滤器抓取样本(从麦克风或现场),并将其传递到图中的下一个过滤器 显然,我想知道过滤器如何将样本传递给另一个过滤器 这有一个已知的模式吗 如果我决定在没有任何第三方组件的情况下实现音频处理过滤器, 是否可以使用多生产者/消费者队列实现媒体样本交换 假设源滤波器F1为媒体捕获滤波器,滤波器F2为DSP滤波器 F1写入多生产者/消费者队列,F2使用由F1排队的捕获样本(如果有样本可用)(我考虑多生产者/消费者队列,因为在某些情况下,一个

有人知道directshow过滤器如何交换媒体样本吗

我们知道源过滤器抓取样本(从麦克风或现场),并将其传递到图中的下一个过滤器

显然,我想知道过滤器如何将样本传递给另一个过滤器

这有一个已知的模式吗

如果我决定在没有任何第三方组件的情况下实现音频处理过滤器, 是否可以使用多生产者/消费者队列实现媒体样本交换

假设源滤波器F1为媒体捕获滤波器,滤波器F2为DSP滤波器

F1写入多生产者/消费者队列,F2使用由F1排队的捕获样本(如果有样本可用)(我考虑多生产者/消费者队列,因为在某些情况下,一个筛选器可以有多个输出和多个输入,每个筛选器都有自己的线程)。 还有更好的办法吗

*编辑:我们的解决方案必须看起来像发行者-订阅者模式,但我认为这不适合媒体处理


非常感谢

MSDN在这里提供了非常详细的描述。您需要整篇文章,这是关于过滤器之间数据交换的摘录:

[…]每当筛选器需要用数据填充缓冲区时,它都会通过调用IMemAllocator::GetBuffer从分配器请求一个样本。如果分配器有其他筛选器当前未使用的任何样本,则GetBuffer方法会立即返回一个指向该样本的指针。如果分配器的所有样本都在使用中,则该方法将阻塞,直到样本可用为止。当方法返回样本时,过滤器将数据放入缓冲区,在样本上设置适当的标志(通常包括时间戳),并将样本发送到下游。[……]