0

我有一个 DirectShow 网络摄像头应用程序。我使用 Sample Grabber 来获取缓冲区回调,并使用 IVideoWindow 来控制预览的显示坐标。我有如下运行的预览和捕获流。

g_pBuild->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,cam,g_pGrabberF,pNullRenderer2); g_pBuild->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video,cam,NULL,NULL);

在某些机载摄像机上,IMediaControl::Run 后跟 IMediaControl::Stop 后跟 IMediaCOntrol::Run 不会打开摄像机。

外接 USB 摄像头在这里正常工作。我怎样才能对此进行更多诊断?任何指针,请帮助。

4

2 回答 2

1

也许它特定于单元中的某个硬件问题。通过在呼叫之间添加 1 秒的睡眠来进行快速测试。如果它确实有帮助,那么您需要找到一种方法来了解何时将单元状态置于空闲状态。

于 2012-05-22T14:41:32.817 回答
0

您没有提供问题的两个重要部分:

  1. 过滤图拓扑
  2. HRESULTs 的方法调用

您可能遇到的一个问题是拓扑中的一个过滤器不能很好地处理状态转换,并且在状态之间的某处失败。据说你的第二个Run遇到它仍在尝试完成Stop。您可能会得到一个HRESULT指示问题(对您更好)或过滤器静默失败的提示。

过滤器图不太可能是错误本身的来源。它完美地完成所有事情的可能性很高,但是由于它在内部分配过滤器之间的调用,因此其中一个过滤器让您失望。

于 2012-05-22T13:11:53.580 回答