Внешний аппаратный запуск камеры 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, &param1, &param2, 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 при использовании внешнего запуска камеры? Или указать на какой-то источник информации?

Большое спасибо.

0 ответов

Другие вопросы по тегам