我正在使用DirectShow.Net并试图在类上实现ISampleGrabberCB。ISampleGrabber回调没有被调用
为了建立抓取的图形,我按照这个清单:
创建SampleGrabber对象
定义的MediaType格式(AMMediaType:视频,RGB,VideoInfo)和将其设置为SampleGrabber对象。 HRESULT为0,所以我认为没关系。
我用sampleGrabber.SetCallback(this,0)设置了回调。我传递“this”是因为ISampleGrabber是在类中实现和定义的;第二个参数是0,因为我想调用SampleCB方法。
最后,我将过滤器添加到图中。 HRESULT再次为0.
但是ISampleGrabber.SampleCB方法未被调用。
你对这种不正当行为的原因有什么想法吗?
[编辑]
我发现了这是怎么回事了!但我仍然需要一些帮助。我拥有的网络摄像机都会返回YUY2子视频格式。如上所述,我使用的代码强制MediaType为RGB24。在运行时我可以看到HResult为0,因此没关系。但是因为它们“不兼容”,所以不会调用示例回调。如果我删除了子类型显式定义,则回调被击中。然而我收到的框架是YUY2;它不是有效的位图,因此它看起来“损坏”,“失真”。
在这一点上,我想知道我是如何成功地强制RGB24格式或如何将视频帧转换为RGB24格式。
我在谷歌上花了相当多的时间试图找到一个有效的答案,但我没有运气。
有什么想法?
干杯。 Gianluca。
我们可以看到一些代码吗? – Goz
@Goz:代码非常丰富,可以分成几个功能。你想看什么部分? –
根据您的编辑情况,可能会很高兴看到连接滤镜的部分 – Goz