2010-04-03 3 views
4

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

Еще одно требование, имеющее более низкий приоритет, но также приятный, чтобы сделать его межплатформенным (как на ПК, так и на мобильных устройствах).

Приложение построено на C++.

Теперь мой вопрос:

есть ли API, который более компактен и имеет аналогичные или лучшие характеристики, чем DirectShow? поскольку переносимость DirectShow ограничивается только устройствами на базе Windows (ПК и Windows Mobile & CE-платформы).

Также я заметил, что, например, пользовательский API-интерфейс HTC обладает гораздо лучшей производительностью, чем то, что предлагает DirectShow. Если вы хотите проверить это, попробуйте создать фильтр в DirectShow, который будет умножать каждый цвет на 2 и отображать его в режиме реального времени с камеры на экране. Затем сделайте то же самое с API HTC. По сравнению с конкретным API-интерфейсом поставщика наблюдается почти 4-5-кратное повышение производительности. Поэтому было бы очень хорошо, если бы библиотека использовала реализацию драйвера для конкретного устройства, так как производительность имеет решающее значение при выполнении этого преобразования на мобильном устройстве (около 500 МГц).

ответ

2

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

+0

Но из того, что я видел, OpenGL или OpenGL ES не предоставляет API Camera Capture. –

+2

Правда, я только предложил его для обработки. Ваш вопрос был не совсем ясен о том, чего вы хотите. К сожалению, я не знаю API кросс-платформенной камеры. – Tronic

3

Существует opencv.org, который имеет чрезвычайно простой кросс-платформенный интерфейс для подключения к видеокамерам, однако это сложная система, предназначенная для приложений обработки изображений, и не обеспечивает прямой захват. Вам нужно будет обработать ваши фреймы и передать их в файл. Кроме того, что касается производительности, когда я смотрел на openCV, кажется, что на его стороне окна используется очень старая 16-битная видеокарта на Windows :(

Вы можете попробовать фреймворк приложения Nokia QT. создавая библиотеку «QT Multimedia», которая делает то, что вы хотите. Однако в настоящее время это бета-продукт, и мой опыт (3-4 месяца назад) состоял в том, что порт Windows по-прежнему нуждается в некоторой работе. YMMV.
Вы должен будет установить QT, а затем «новый проект QIS APIS - Мобильность» из раздела «Другие загрузки» qt.nokia.com/downloads/. В зависимости от таймфрейма вашего проекта это может быть хорошим вариантом для вас ... QT определенно является хороший инструментарий ИМХО.

+0

Согласно http://doc.qt.nokia.com/qtmobility-1.2/index.html#platform-compatibility - Qt Mobility не поддерживает камеру в Windows или Mac OS на данный момент. По-видимому, в репо был некоторый код, но он был удален. Может быть, кто-то его выкопает и нести факел дальше. – Macke

+0

Qt (по состоянию на 5.4.2) по-прежнему не поддерживает захват камеры в Windows. Вы можете получить предварительный просмотр в режиме видоискателя и захватить неподвижные изображения на диск (а не в память), и вы не сможете записывать видео. По-видимому, есть план по улучшению поддержки (перепишите код для использования WMF, а не DirectShow), но это еще должно произойти. – Timmmm

+0

Я считаю, что OpenCV также использует DirectShow, а не WMF, что означает, что он не будет работать в Windows 8 или более поздней версии. – Timmmm

 Смежные вопросы

  • Нет связанных вопросов^_^