源过滤器 cBuffers > 1 和 GetDeliveryBuffer

Source Filter cBuffers > 1 and GetDeliveryBuffer

我正在为 directshow 编写源过滤器。英特尔媒体 SDK H.264 编码器需要 ALLOCATOR_PROPERTIES->cBuffer > 1.

DoBufferProcessingLoop 时,我使用 GetDeliveryBuffer(&pSample, NULL, NULL, 0)

获取缓冲区

我是否需要做任何事情来确保我得到下一个缓冲区,并且我不会覆盖以前的缓冲区?
我注意到示例编码器中的 pSample->AddRef()。当我 GetdeliveryBufferFillBuffer 时,我是否必须做类似的事情?

除非对缓冲区的唯一引用是来自其拥有的内存分配器的引用,否则不会重用缓冲区。

这意味着在 DoBufferProcessingLoop 中你会得到干净的缓冲区,你可以填充它,然后将它传递到下游。然后魔术继续,最后缓冲区准备好在被丢弃或出现时重新使用,并且没有被其他任何人使用。您无需执行任何操作来确保这一点,它会自行发生。