gpt4 book ai didi

c++ - DirectShow - 如何确定流是否有效 (C++)

转载 作者:搜寻专家 更新时间:2023-10-31 01:09:25 24 4
gpt4 key购买 nike

我的任务是修复医疗应用程序中的一个错误,除其他外,该应用程序可以从口腔内摄像机捕获快照。它为此任务使用 DirectShow SampleGrabber。我必须做出免责声明,我没有使用过 DirectShow,所以我正在尝试加快速度。我基本上了解各种组件如何协同工作。

无论如何,这个错误本身看似微不足道,但我想不出解决方法。由于该系统的模块化特性,预览窗口是一个独立图形的一部分,而不是 SampleGrabber 创建的图形(这是一个很长的故事,但这是由于遗留代码支持以前的设备)。当相机处于事件状态时,我们可以拍摄快照,一切都很开心。当相机关闭时,SampleGrabber 拍摄暗帧,但在释放在预览模块中创建的 IAMStreamConfig 接口(interface)时 DirectShow 崩溃(访问冲突)。似乎出于某种原因,SampleGrabber 图以某种方式破坏了预览模块中构建的图。由于此应用程序的性质,我无法在此处显示任何来源,但基本上这是我想要完成的:

我需要能够检测相机是否真正打开。我遇到的问题是,当插入相机 (USB) 时,它看起来就像打开的系统一样返回视频流,只是该流不包含实际数据。当我使用 GetState 方法检查捕获过滤器的状态时,它声称它正在运行;此外,当我检查视频格式属性时,它会返回正确的属性。在我看来,相机上的按钮只是简单地打开/关闭相机传感器本身,但当相机关闭时,设备仍会返回空白流。但是一定有什么不同,因为它不会在传感器实际打开并返回实时视频时崩溃。

有人知道如何确定流是空白还是有实时视频吗? IE,是否有任何公开的接口(interface)或方法我可以调用来确定这一点?我查看了 MSDN 的 DirectShow 文档中的所有各种接口(interface),但未能找到执行此操作的方法。

最佳答案

如果你不想调用你的样本采集器的回调函数,那么你可以考虑添加一个特殊的transform filter。在样本采集器和源过滤器之间(或紧接在源过滤器之后),以及此转换过滤器的作用是检查输入样本是否已损坏并阻止那些损坏的样本。这基本上需要您实现自己的 Transform() 函数:

HRESULT CRleFilter::Transform(IMediaSample *pSource, IMediaSample *pDest)

关于c++ - DirectShow - 如何确定流是否有效 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17049864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com