1

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

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

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

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

4

1 回答 1

1

我知道这可能会出现问题的唯一情况是非常模糊的。如果您获得的缓冲区是(原始)视频渲染器的主要表面,则分配和释放需要在同一线程上。

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

于 2013-10-27T22:10:22.730 回答