我正在为directshow
编写一个源过滤器。 intel Media SDK H.264编码器需要ALLOCATOR_PROPERTIES->cBuffer > 1
。
在DoBufferProcessingLoop
时,我使用GetDeliveryBuffer(&pSample, NULL, NULL, 0)
我是否需要做任何事情以确保我获得下一个缓冲区,而我不会覆盖之前的缓冲区?
我注意到了示例编码器中的pSample->AddRef()
。我GetdeliveryBuffer
或FillBuffer
时是否需要做类似的事情?
答案 0 :(得分:1)
在对缓冲区的唯一引用是其拥有的内存分配器的引用之前,不会重用缓冲区。
这意味着在DoBufferProcessingLoop
中你会得到干净的缓冲区,你可以填充它,然后将它传递到下游。然后魔术继续,最后缓冲区在被丢弃或呈现时准备重用,并且没有被其他任何人使用。你不需要做任何事情来确保这一点,它可以自己发生。