Буферный CB, подписанный на неподвижный вывод , повторно вызывается с длиной буфера как 0 , даже если он еще не запущен.
Вывод предварительного просмотра подключен к средству визуализации VMR9,Неподвижный контакт подключен к нулевому рендереру через samplegrabber, а обратный вызов buffercb подписан на неподвижный контакт.Мы запускаем сценарий, чтобы запускать неподвижное изображение для захвата с неподвижного контакта, используя setmode () API, каждые 3 минуты .
После запуска в течение 10 ~ 20 ч. Buffercb вызывается для каждого кадра, даже не вызывая при этом setmode ().
Мы проверили использование памяти, создание объекта иГрафик разрушений и наводок.Все выглядит хорошо.
Мы пытались игнорировать обратные вызовы, которые не были запущены, поскольку сработавшие обратные вызовы вернули правильный буфер и длину.Но через несколько часов инициированные обратные вызовы также возвращают длину буфера как 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);
Я хотел бы знать,
- Почему buffercb вызывается повторно, когда еще не запущен?
- Почему длина буфера возвращается как 0, а буфер не равен нулю?
Спасибо.