Различные подходы к получению захваченных видеокадров в DirectShow

Я использовал механизм обратного вызова для захвата кадров веб-камеры в моем мультимедийном приложении. Он работал, но был медленным из-за некоторых дополнительных буферных функций, которые выполнялись в самом обратном вызове.

Сейчас я пытаюсь другой способ получить кадры. То есть вызов метода и захват кадра (вместо обратного вызова). Я использовал пример в CodeProject, который использует IVMRWindowlessControl9::GetCurrentImage.

Я столкнулся со следующими проблемами.

  1. В веб-камере Microsoft предварительный просмотр не отображался (только черный экран) в Windows 7. Но та же камера отображала предварительный просмотр в XP.

Здесь я сомневаюсь, будут ли специфические функции VMR зависеть от драйверов камер на разных платформах? Иначе, как это могло произойти?

  1. Где бы ни работал пример приложения, я наблюдал, что член biBitCount полученной структуры BITMAPINFOHEADER равен 32.

Это значение устанавливается приложением или настройкой драйвера для операций VMR? Как это настроено? И, наконец, какой лучший способ захватить рамки веб-камеры? Подход обратного вызова? Или прямой подход?

Заранее спасибо,

1 ответ

IVMRWindowlessControl9::GetCurrentImage предназначен для случайных снимков, а не для обычного захвата изображения.

Цитата из MSDN:

Этот метод может быть вызван в любое время, независимо от того, в каком состоянии находится фильтр, работает ли он, остановлен или приостановлен. Однако частые вызовы этого метода ухудшают производительность воспроизведения видео.

Этот метод считывает обратно из видеопамяти, что в первую очередь медленно. Этот метод преобразует (то есть снова медленно) в цветовое пространство RGB, поскольку этот формат наиболее подходит для приложений, не поддерживающих потоковую передачу, и дает меньше проблем с совместимостью.

В общем, вы можете использовать его для периодического захвата изображения, однако это не то, что вы должны делать. Для захвата с потоковой скоростью вам нужно использовать фильтр в конвейере или Sample Grabber с обратным вызовом.

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