2009-08-25 13 views
0

Im Moment versuche ich eine neue GUI zu erstellen, im Wesentlichen eine Software mit DirectX (genauer, direct3D), die Streaming-Bilder von Axis IP-Kameras anzeigt .Kombination von Direct3D, Axis zur Erstellung mehrerer IP-Kameras GUI

Für die Zeit, die ich dachte, ist, dass der Fluss für das gesamte Programm so sein würde: 1. das Achsenprogramm Get Streaming Bilder 2. Pass der Bilder auf das Direct3D-Programm zu erhalten. 3. Zeigen Sie das Programm auf dem Bildschirm an.

Momentan habe ich eine etwas einfache Direct3D-App erstellt, die Videoframes aus AVI-Videos lädt und anzeigt (zum Testen). Ich weiß nicht, wie man Bilder direkt aus Videos mit DirectX lädt, also habe ich OpenCV verwendet, um Bilder aus dem Video zu speichern und DX hochzuladen. Sehr langsam.

Im Moment habe ich einige Dinge unklar: 1. Wie eine Achse Programm erhalten, die in C++ funktioniert (Gonna später Beispiele sehen, prolly keine große Sache) 2. Wie Bilder von der Axis-IP-Kamera direkt hochladen Programm.

Also Jungs, haben Sie irgendwelche Empfehlungen oder Vorschläge, wie Sie mein Programm effizienter arbeiten lassen? Alles ließ mich wissen.

Antwort

0

Nun, Sie finden es vielleicht schneller, DirectShow zu verwenden und am Ende einen benutzerdefinierten Renderer hinzuzufügen, der direkt die dekomprimierten Videodaten direkt in eine Direct3D-Textur kopiert.

Es lohnt sich, diese Textur doppelt zu puffern. Dh wenn Textur 0 angezeigt wird und Textur 1 ebenfalls hochgeladen wird, dann tauschen Sie die 2 aus, wenn ein neuer Frame verfügbar ist (dh Textur 1 wird beim Hochladen auf Textur 0 angezeigt).

Auf diese Weise können Sie die Videobildrate von der Rendering-Bildrate trennen, wodurch verworfene Bilder ein wenig einfacher zu handhaben sind.

+0

Gute Idee. Ich denke darüber nach, DirectShow zu verwenden, aber ich bevorzuge Just direct3D und das Axis-Programm. Ich werde DirectShow auch nur für den Fall lernen. – Sodrohu

0

Ich benutze in-Place-Update von Direct3D Texturen (mit IDirect3DTexture9::LockRect) und es funktioniert sehr schnell. Welcher Teil Ihres Programms arbeitet langsam?

+0

Ich bin mir nicht sicher, aber ich vermute, es ist der Teil, wo der OpenCV den Rahmen in ein Bild speichert und die D3D später das Bild hochlädt und rendert. Trotzdem ist es wahrscheinlich langsam, weil ich Software-Rendering verwende, nicht Hardware, weil ich keine Grafikkarte habe. – Sodrohu

0

Für die Aufnahmen von Axis Nocken Sie IPSI C++ Bibliothek verwenden: http://sourceforge.net/projects/ipsi/

Es kann für die Aufnahme von Bildern und Steuer Kamera-Zoom und Rotation (falls vorhanden) verwendet werden.

+0

Eigentlich bevorzuge ich das SDK von Axis, um die Bilder zu extrahieren. Ich habe einige der Dokumentationen gelesen und laufe durch die Beispiele in VC++, da mit etwas mehr Arbeit es in der Lage sein sollte, es laufen zu lassen. Ich habe auch ein MFC-Programm von einem Kollegen bekommen, der Axis-Kameras in einem Dialogfenster anzeigt. Ich werde es konvertieren müssen, um mit meinem Programm kompatibel zu sein. Aber trotzdem danke. Für den Fall, dass die Dinge nicht meinen Weg gehen, gibt es immer dein Backup. – Sodrohu