【发布时间】:2011-10-20 11:47:04
【问题描述】:
我的任务是将第 3 方视频解码器库包装在直接显示变换过滤器中。
我相信这将是一个问题,因为 3rd 方库在完整帧准备好时使用异步回调,即
// on main thread
lib->RegisterCallback(callback function)
lib->write(raw data bytes)
void callback(frame)
{
// here is your frame (on a worker thread)
}
当我查看纯虚拟 CTransformFilter.Transform 函数时,它期望转换是同步的。现在我可以设置它,让它阻塞回调中设置的事件,但是如果进入 Transform 函数的数据不足以生成一个完整的新帧,会发生什么?我会死锁函数。
我唯一的选择是返回库开发人员并要求提供同步解码器吗?
我刚刚研究了 CTransformFilter Receive 函数。这就是所谓的(被覆盖的)Transform 函数。然后它调用 m_pOutput->m_pInputPin->Receive(pOutSample) 继续传递样本。我可以从回调中的工作线程调用这个 Receive 函数还是必须将所有内容都保留在同一个线程上?
谢谢
【问题讨论】:
标签: directx directshow video-encoding