你什么时候可以打电话给IMFSourceReader::SetCurrentMediaType



如果我有一个活动的异步IMFSourceReader,什么时候可以安全地调用SetCurrentMediaType((?

最初我尝试了IMFSourceReaderCallback::OnReadSample((和IMFSourceReaderCallback::OnFlush((,对象访问由关键部分保护,但我收到与挂起的样本或io完成端口错误有关的错误。

在从媒体基础工作线程调用的 IMFSourceReaderCallback 函数中调用什么是安全的

,这真的不清楚。

我是否必须从回调函数线程外部完全刷新/排出管道,然后从回调线程 OnFlush(( 向回调调用堆栈外部的线程发出信号(确保没有进一步的示例读取排队(,然后使用 SetCurrentMediaType(( 安全地更改媒体格式?

我是否必须更进一步并销毁SourceReader,然后重新开始重新创建,然后设置媒体格式?

似乎一旦

您设置了媒体格式,在源阅读器变为活动状态后更改它是不安全的。 因此,您必须销毁源读取器并重新创建它。

但是,在不挂在 Win7 上的情况下可靠地销毁异步源读取器是另一个问题......

我刚刚遇到了这个问题,我通过以下方式获得了在异步模式下正确更改格式的格式:

  1. 收到格式更改请求时,设置标志
  2. 在下一个 OnReadSample 回调中,读取标志并且不调用 ReadSample
  3. OnReadSample 完成后,读取器现在可以更改格式了

这对我有用,因为我只在一台相机上测试过

最新更新