我正在使用 DirectShow.Net 并尝试在一个类上实现 ISampleGrabberCB。
为了在图表中设置 Grabber,我遵循以下清单:
创建一个 SampleGrabber 对象
定义 MediaType 格式(AMMediaType: Video, Rgb, VideoInfo)并将其设置到 SampleGrabber 对象中。HRESULT 为 0,所以我认为没关系。
我使用 sampleGrabber.SetCallback(this, 0) 设置回调。我正在传递“this”,因为 ISampleGrabber 是在类本身中实现和定义的;第二个参数是 0,因为我希望调用 SampleCB 方法。
最后,我将过滤器添加到图表中。HRESULT 再次为 0。
但是 ISampleGrabber.SampleCB 方法没有被调用。
您对这种不当行为的原因有任何想法吗?
[编辑]
我发现这里发生了什么!但我仍然需要一些帮助。我拥有的两个网络摄像头都返回 YUY2 子类型视频格式。如上所述,我使用的代码将 MediaType 强制为 RGB24。在运行时我可以看到 HResult 为 0,因此没关系。但是因为它们是“不兼容的”,所以从不调用 Sample Callback。如果我删除了子类型显式定义,则会点击回调。但是我收到的帧是 YUY2;它不是一个有效的位图,因此它看起来“损坏”、“扭曲”。
在这一点上,我想知道如何成功强制 RGB24 格式或如何将视频帧转换为 RGB24 格式。
我在谷歌上花了很多时间试图找到一个有效的答案,但我没有运气。
任何想法?
干杯。詹卢卡。