Внешний аппаратный запуск камеры USB3.0 с DirectShow и Visual C++
Используя внешний аппаратный запуск камеры USB3.0, совместимой с UVC, я хочу получать неподвижные изображения, используя Directshow в нашем коде Visual C++. Используя API, предоставленный производителем камеры, мы можем установить камеру в режиме внешнего запуска. С камерой в режиме Master ("Режим свободного хода" без внешнего запуска) мы получаем правильный код уведомления о событии в нашей программе DirectShow VC++. Однако мы не получаем правильный код уведомления о событии при внешнем запуске камеры в режиме внешнего запуска, как описано ниже.
Чтобы получить код уведомления о событии интерфейса события IMediaEventEx *pEvent графика работающего фильтра, мы вызываем
hr = pEvent->WaitForCompletion(INFINITE, &evCode);
или же
while (hr = pEvent->GetEvent(&evCode, ¶m1, ¶m2, 0), SUCCEEDED(hr))
{
hr = pEvent->FreeEventParams(evCode, param1, param2);
if ((evCode == EC_COMPLETE))
{
break;
}
}
В режиме Master (без внешнего триггера) мы получаем код уведомления о событии EC_COMPLETE для evCode (т.е. все данные были обработаны) и собираем данные изображения с камеры, которую мы можем вызвать
hr = pSGrabber->GetCurrentBuffer(&cbBufSize, NULL);
а также
hr = pSGrabber->GetCurrentBuffer(&cbBufSize, (long*)pBuffer);
Здесь pSGrabber - это интерфейс ISampleGrabber для Sample Grabber Filter. Однако в режиме внешнего запуска для evCode мы получаем только код уведомления о событии EC_ACTIVATE и поэтому не можем получить данные изображения. Также можно отметить, что через интерфейс IAMVideoControl для неподвижного Пина мы устанавливаем флаг для внешнего запуска
hr = pAMVidControl->SetMode(pPinStill, VideoControlFlag_ExternalTriggerEnable);
где IPin *pPinStill - указатель на неподвижный Пин.
Мы знаем, что внешние импульсы запуска, которые мы используем, достаточны для запуска камеры, потому что с коммерческим программным обеспечением нам удается запускать камеру извне. Поэтому я считаю, что проблема связана с программированием DirectShow. У кого-нибудь есть опыт захвата данных изображения в DirectShow при использовании внешнего запуска камеры? Или указать на какой-то источник информации?
Большое спасибо.