Объединение Direct3D и Axis для создания нескольких IP-камер с графическим интерфейсом - PullRequest
0 голосов
/ 25 августа 2009

Сейчас я пытаюсь создать новый графический интерфейс, по сути, программное обеспечение, использующее DirectX (точнее, Direct3D), которое отображает потоковые изображения с IP-камер Axis.

Пока я решил, что поток для всей программы будет выглядеть так: 1. Получить программу Axis для получения потоковых изображений 2. Передайте изображения в программу Direct3D. 3. Отобразите программу на экране.

В настоящее время я создал несколько базовое приложение Direct3D, которое загружает и отображает видеокадры из видео AVI (для тестирования). Я не знаю, как загружать изображения непосредственно из видео с помощью DirectX, поэтому я использовал OpenCV, чтобы сохранить кадры из видео и заставить DX загружать их. Очень медленно.

Прямо сейчас у меня есть некоторые неясные вещи: 1. Как получить программу Axis, которая работает на C ++ (буду искать примеры позже, и ничего особенного) 2. Как загрузить изображения непосредственно из программы IP-камеры Axis.

Итак, ребята, есть ли у вас какие-либо рекомендации или предложения о том, как сделать мою программу более эффективной? Что-нибудь, просто дайте мне знать.

Ответы [ 3 ]

0 голосов
/ 25 августа 2009

Я использую обновление текстур Direct3D на месте (используя IDirect3DTexture9::LockRect), и оно работает очень быстро. Какая часть вашей программы работает медленно?

0 голосов
/ 25 августа 2009

Для захвата изображений с камер Axis вы можете использовать библиотеку iPSi c ++: http://sourceforge.net/projects/ipsi/

Может использоваться для захвата изображений и управления масштабированием и вращением камеры (если доступно).

0 голосов
/ 25 августа 2009

Что ж, вы можете найти более быстрый способ использовать directshow и добавить пользовательский рендерер на дальнем конце, который напрямую копирует распакованные видеоданные непосредственно в текстуру Direct3D.

Это стоит двойной буферизации этой текстуры. т. е. отображать текстуру 0 и загружать текстуру 1, а затем менять местами 2, когда доступен новый кадр (т. е. отображать текстуру 1 при загрузке в текстуру 0).

Таким образом, вы можете отделить частоту кадров видео от частоты кадров рендеринга, что делает обработку пропущенных кадров немного проще.

...