我正在编写一个源过滤器,它需要在单独的工作线程(工作线程调用一个只能从单个线程访问的库)中为其输出引脚(1 个或多个引脚)上的样本生成数据。
在流线程上正常使用的同时从工作线程调用输出引脚的分配器上的 GetBuffer 是否安全(例如,当播放停止时分配器被解除)?
我知道正常的注意事项,例如在没有缓冲区时阻塞 GetBuffer 或在解除分配器时返回失败代码。显然,这也涉及覆盖 SourceStream::GetDeliveryBuffer。
显而易见的替代方法是让工作线程生成一个普通内存缓冲区队列,这些缓冲区被每个流线程复制到媒体样本中。