我有一个图形端点,它是一个SampleGrabber,我使用回调函数获取所有帧的未压缩数据。
在我的顶级接口代码中,我想要一个函数ReadNextFrame()来获取图中下一帧的数据(直到它到达文件末尾)。
一个性能方面的糟糕实现是将 nextFrameIndex 传递给grabberCB类,指定此时我想要哪个帧。所以我的回调函数会跳过所有其他帧,只选择我想要的帧。这是昂贵的,因为图形必须遍历整个文件才能选择单个帧数据。
我注意到有一个IVideoFrameStep接口,这正是我想要的。但似乎这个接口与 Sample Grabber 不兼容,它的文档说:
在 Microsoft DirectShow 下实现帧精确搜索的解码器必须实现 AM_KSPROPSETID_FrameStep 属性集,该属性集与 IVideoFrameStep 接口一起使用。
我试图将它连接到我的图表,但IVideoFrameStep::CanStep()函数对我返回 false,这意味着我不能将它与 Sample Grabber 一起使用。
所以我的问题是:是否有一个简单且性能方面的好解决方案,这样我就可以让我的图表保持当前状态,然后向前推进一个帧并使用 Sample Grabber 获取数据?