【发布时间】:2013-12-09 05:40:10
【问题描述】:
我正在使用 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 格式。
我在谷歌上花了很多时间试图找到一个有效的答案,但我没有运气。
有什么想法吗?
干杯。 詹卢卡。
【问题讨论】:
-
@Goz:代码很广泛,分为几个函数。你想看哪一部分?
-
好吧,鉴于您的编辑,看看您连接过滤器的部分可能会很好
标签: c# wpf directshow directshow.net