可以安全地从工作线程及其流线程调用IMemAllocator :: GetBuffer

时间:2013-10-27 18:19:33

标签: thread-safety directshow

我正在编写一个源过滤器,需要在单独的工作线程中为其输出引脚(1个或多个引脚)上的样本生成数据(工作线程调用一个只能从单个线程访问的库) )。

在流线程上正常使用的同时从工作线程调用输出引脚的分配器上的GetBuffer是否安全(例如,当播放停止时分配器被解除)?

我知道正常的注意事项,例如当没有缓冲区时GetBuffer阻塞或者在分配器被解除提交时返回失败代码。显然,这也涉及覆盖SourceStream :: GetDeliveryBuffer。

显而易见的替代方法是让worker生成一个普通内存缓冲区队列,这些缓冲区将被每个流线程复制到媒体样本中。

1 个答案:

答案 0 :(得分:1)

我所知道的唯一可能存在问题的案例非常模糊。如果您获得的缓冲区是(原始)视频渲染器的主要曲面,则分配和自由需要位于同一个线程上。

除了这种特殊情况之外,库存mem分配器是完全线程安全的。