无法执行该操作,因为筛选器处于错误状态GetCurrentBuffer

时间:2014-03-06 16:06:36

标签: directshow

由于过滤器处于错误状态,因此无法执行操作

我在运行hr = m_pGrabber-> GetCurrentBuffer(& cbBuffer,NULL);。

时遇到此错误

奇怪的是 - 当我停止图表时,它最初起作用,现在它在运行或停止图表时失败。 那么 - 它应该处于什么状态?

我复制的MSDN中的示例抓取器代码没有说明是应该停止还是运行图来获取缓冲区大小 - 但是它呈现的方式是图表正在运行。我假设图形应该运行以填充缓冲区,但我没有通过大小调整缓冲区。

图表没问题,所有过滤器都是连接并根据需要在may app和GraphEdit中呈现。

我正在尝试将捕获的静止帧保存到位图文件中,因此我需要缓冲区中的捕获数据。

2 个答案:

答案 0 :(得分:1)

缓冲并GetCurrentBuffer向您公开最后一次已知媒体样本的副本。因此,您可能会遇到“没有可用于复制的媒体样本”和“由于转换到停止状态而释放最后一个已知媒体样本”的条件。在这两种情况下,有问题的请求都可能失败。从SampleCB而不是缓冲模式复制数据,这将是百分之百可靠的。

另请参阅:ISampleGrabber::GetCurrentBuffer() returning VFW_E_WRONG_STATE

答案 1 :(得分:1)

在大多数情况下,使用GetCurrentBuffer是个坏主意。使用样本采集器的正确方法是在SampleCB中设置回调和接收数据。