IsampleGrabberFilter一次一个框架步骤
ISampleGrabberFilter one frame step at a time
i有一个图形端点,其中是 samplegrabber 我使用回调函数获取所有帧的未压缩数据。
在我的顶级接口代码中,我想要一个函数 readnextframe()在图中获取下一个帧的数据(直到到达文件的末尾)。
通过性能不好的实现将是将 NextFrameIndex 传递给GrabberCB类,以指定我目前想要哪个帧。因此,我的回调功能会跳过所有其他帧,只选择我想要的框架。这是昂贵的,因为该图必须通过整个文件来选择单个帧数据。
。我注意到有一个 ivideoframestep 接口,这是我想要的。但是看来该界面与样本抓取器不兼容,并且文档说:
在Microsoft下实施帧准确寻求的解码 DirectShow必须实现AM_KSPROPSETID_FRAMESTEP属性, 与ivideoframestep接口一起使用。
我尝试将其连接到我的图形,但 ivideoframestep :: canstep()函数返回false for Me for Me for for Me,这意味着我无法将其与sample Grabber一起使用。
所以我的问题是:是否有一个简单且性能的好解决方案,以便我可以使用我的图表来保持当前状态,然后将单个帧向前进行,然后使用示例抓取器获取数据?
您发现IVideoFrameStep
有某些工作要求,其背后的想法是整个滤镜图确实会弹奏状态过渡,运行和暂停。
要使用示例抓手来一次获取所有帧,您可以实现一种更简单的方法,这没有任何特殊要求。
- 让您的过滤器图运行;从图表中删除时钟是很有意义的 - 请参阅
IMediaFilter::SetSyncSource(NULL)
- 使用
SampleCB
回调
有一个样本抓取者 - 执行了
SampleCB
后,请使用数据进行操作,并指示运行图形的更高级别代码的框架 - 在上面的
SampleCB
和#3内完成时,请勿从该方法返回,而要等待事件,这表明您准备继续 - 高级应用程序代码将处理帧并设置上面#4的事件,允许
SampleCB
退出并进一步努力获得新的帧;使用新框架,您将在上面的#3中重复。
也就是说,您的 SampleCB
等待是锁定整个管道,以保留其状态的所需时间,让您在方便的速度下按框架进行处理。
SampleCB
的伪代码将是(带有手动设置/重置事件):
data m_Data;
event m_DataAvailability;
event m_NextFrameRequest;
void SampleCB(Frame)
{
m_Data = Frame.GetData();
m_DataAvailability.Set();
m_NextFrameRequest.WaitFor(); // Sleeping here until signaled to continue
m_NextFrameRequest.Reset();
}
data ReadNextFrame()
{
m_DataAvailability.WaitFor();
data Data = m_Data;
m_DataAvailability.Reset(); // Current data processed, we need next portion
m_NextFrameRequest.Set(); // Indicate that we allow next callback call
return Data; // Make captured frame available
}
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 如何编译和运行一个新的 C++ Actor 框架项目?
- 我正在尝试用 c++ 制作一个日志记录框架,但信息没有传递给记录器的子组件,我做错了什么?
- 构建一个真正、完全静态的Qt 5框架和应用程序(Qt 5.8之后)
- FreeRTOS(和其他RTOS)也是一个框架吗?
- 从C 库中制作一个快速共享的框架
- 如何在不重写整个视频文件的情况下仅替换流中的一个数据框架?(ffmpeg)
- 我的任务是在框架内打印一个字符串,例如一个正方形
- 为什么我不能用这个函数在Qt框架中打开另一个进程?
- 将两个不同的设备捕获框架组合到一个框架中,然后写一个视频
- 编写一个功能,该函数将使用框架交换两个整数
- QT 框架C++我如何从另一个类访问进度栏
- 禁用QT安装程序框架中的本机下一个按钮
- IsampleGrabberFilter一次一个框架步骤
- 在 Google 的C++测试框架中为多个单元测试创建一个二进制文件
- 从谷歌测试框架中的另一个测试执行测试
- winapi-如何在MFC中以编程方式将多个菜单栏添加到一个框架中
- 铬嵌入框架(C++)和另一个二进制之间的IPC
- 我如何测试一个调用是在谷歌测试延迟后使用嘲讽框架进行的
- 我需要一个框架来使用依赖项注入吗