订阅了静止销的bufferCB会以缓冲区长度为0 的方式重复调用,即使仍未触发。
预览针已连接到VMR9渲染器。静止引脚通过samplegrabber连接到null渲染器,并且buffercb回调已订阅到该静止引脚。我们运行脚本以使用setmode()API每隔3分钟触发一次触发,以从静态图钉捕获。
运行 10〜20 小时后,即使不使用setmode()进行触发,每一帧也会调用buffercb。
我们检查了内存使用情况,对象创建和销毁以及DirectShow图。一切看起来都很好。
我们试图忽略未触发的回调,因为触发的回调返回了有效的缓冲区和长度。但是几个小时后,触发的回调也会返回缓冲区长度为0。
以下是DirectShow过滤器的创建和渲染:
hr = m_pBuilder->RenderStream(0, &MEDIATYPE_Video, m_pStillPin, m_pSG_Filter,m_pNull);
hr = m_pBuilder->FindPin(
m_pVCap, // Filter.
PINDIR_OUTPUT, // Look for an output pin.
&PIN_CATEGORY_STILL, // Pin category.
NULL, // Media type (don't care).
FALSE, // Pin must be unconnected.
0, // Get the 0'th pin.
&m_pStillPin // Receives a pointer to thepin.
);
hr = m_pSG_Filter->QueryInterface(IID_ISampleGrabber, (void**)&m_pSG);
hr = m_pSG->SetCallback(&g_StillCapCB, 1);
以下代码用于触发静止图像:
hr = m_pAMVidControl->SetMode(m_pStillPin,(long)VideoControlFlag_Trigger);
我想知道,
谢谢。