2009-08-25 7 views
0

En ce moment, j'essaie de créer une nouvelle interface graphique, essentiellement un logiciel utilisant directX (plus exact, direct3D), qui affiche des images en streaming depuis des caméras IP Axis .Combinaison de Direct3D, Axis pour créer plusieurs GUI de caméra IP

Pour le moment, j'ai pensé que le flux pour l'ensemble du programme serait comme ceci: 1. Obtenez le programme Axis pour obtenir des images en streaming 2. Passez les images au programme Direct3D. 3. Affichez le programme sur l'écran.

Actuellement, j'ai fait une application Direct3D assez basique qui charge et affiche des images vidéo à partir de vidéos avi (pour les tests). Je ne sais pas comment charger des images directement à partir de vidéos en utilisant DirectX, j'ai donc utilisé OpenCV pour enregistrer des images de la vidéo et avoir DX les télécharger. Très lent.

En ce moment, j'ai des choses peu claires: 1. Comment obtenir un programme Axis qui fonctionne en C++ (regarder des exemples va jusqu'à plus tard, prolly pas une grosse affaire) 2. Comment télécharger des images directement depuis l'appareil IP Axis programme.

Alors, les gars, avez-vous des recommandations ou des suggestions sur la façon de rendre mon programme plus efficace? Tout ce que tu me fais savoir.

Répondre

0

Eh bien, vous pouvez trouver plus rapide d'utiliser DirectShow et d'ajouter un moteur de rendu personnalisé à l'extrémité distante qui, directement, copie les données vidéo décompressées directement à une texture Direct3D.

Il vaut bien le double tampon de cette texture. c'est-à-dire que la texture 0 affiche et que la texture 1 est téléchargée aussi, puis échangez les 2 quand une nouvelle image est disponible (c.-à-d. afficher la texture 1 pendant le téléchargement vers la texture 0). De cette manière, vous pouvez découpler la fréquence d'images vidéo de la fréquence d'images de rendu, ce qui facilite le traitement des images supprimées.

+0

Bonne idée. J'envisage aussi d'utiliser DirectShow, mais je préfère utiliser Just direct3D et le programme Axis. Je vais apprendre DirectShow aussi juste au cas où. – Sodrohu

0

J'utilise la mise à jour sur place des textures Direct3D (en utilisant IDirect3DTexture9::LockRect) et cela fonctionne très rapidement. Quelle partie de votre programme fonctionne lentement?

+0

Je ne suis pas sûr, mais je suppose que c'est la partie où l'OpenCV enregistre le cadre dans une image, et le D3D télécharge et rend l'image plus tard. Encore, c'est lent probablement parce que j'utilise le rendu de logiciel, pas de matériel, parce que je n'ai aucune carte graphique. – Sodrohu

0

Pour capturer des images Axis cames vous pouvez utiliser IPSI C++ bibliothèque: http://sourceforge.net/projects/ipsi/

Il peut être utilisé pour capturer des images et zoom de la caméra de contrôle et rotation (le cas échéant).

+0

En fait, je préfère utiliser le SDK fourni par Axis pour extraire les images. J'ai lu certaines des documentations et couru à travers les échantillons dans VC++, car avec un peu plus de travail devrait être capable de le faire fonctionner. J'ai également obtenu un programme MFC d'un collègue qui affiche les caméras Axis sur une fenêtre de dialogue. Je vais devoir le convertir pour être compatible avec mon programme tho. Mais merci quand même. Au cas où les choses ne se passeraient pas, il y a toujours votre sauvegarde. – Sodrohu