源过滤器 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()
。当我 GetdeliveryBuffer
或 FillBuffer
时,我是否必须做类似的事情?
除非对缓冲区的唯一引用是来自其拥有的内存分配器的引用,否则不会重用缓冲区。
这意味着在 DoBufferProcessingLoop
中你会得到干净的缓冲区,你可以填充它,然后将它传递到下游。然后魔术继续,最后缓冲区准备好在被丢弃或出现时重新使用,并且没有被其他任何人使用。您无需执行任何操作来确保这一点,它会自行发生。
我正在为 directshow
编写源过滤器。英特尔媒体 SDK H.264 编码器需要 ALLOCATOR_PROPERTIES->cBuffer > 1
.
在 DoBufferProcessingLoop
时,我使用 GetDeliveryBuffer(&pSample, NULL, NULL, 0)
我是否需要做任何事情来确保我得到下一个缓冲区,并且我不会覆盖以前的缓冲区?
我注意到示例编码器中的 pSample->AddRef()
。当我 GetdeliveryBuffer
或 FillBuffer
时,我是否必须做类似的事情?
除非对缓冲区的唯一引用是来自其拥有的内存分配器的引用,否则不会重用缓冲区。
这意味着在 DoBufferProcessingLoop
中你会得到干净的缓冲区,你可以填充它,然后将它传递到下游。然后魔术继续,最后缓冲区准备好在被丢弃或出现时重新使用,并且没有被其他任何人使用。您无需执行任何操作来确保这一点,它会自行发生。