' schrieb:VI posten wäre nicht schlecht.
Anbei einmal eine kommentierte Version. Für LabVIEW 8.6
Komme derzeit nicht in unser System, um es für eine frühere Version abzuspeichern, tut mir leid. Vielleicht kann ja trotzdem jemand helfen.
Da ist jetzt nicht alles, was ich probiert habe, auf einmal drin. Aber man sieht, wie es funktionieren sollte.
' schrieb:Wenn dll Buffer alloziert, ist das sicherlich nicht schlecht. Dann gibt es keinen Ärger mit dem LV-Speichermanager.
Ja, dachte ich auch. Nur funktioniert die nachfolgende Speicheraktivsetzung damit überaupt nicht (nichtmal mit dem ersten Durchlauf). Ich bekomme offenbar die allokierte Adresse nicht korrekt von dem einen Funktionsaufruf in den anderen. Die Adresse, die aus dem allocate-Aufruf zurückkommt und dann IM Array steht, scheint aber korrekt. Sie wächst bei jedem neuen Aufruf brav um die allokierte Bildgröße. Nur bekomme ich die eben nicht als Zeiger AUF ein Array, sondern als INHALT des Arrays heraus.
Habe alle genannten und andere Formate schon probiert.
Hier würde ich also gern das Umgekehrte erreichen: Daß ich aus dieser lesbaren Bytefolge einen Pointer mache.
Und wie gesagt, zu Debugzwecken aus der Variante "Speicher selbst allokieren per Array" gern den Array-Pointer als Adresse anzeigen. Gibt es da Möglichkeiten in LabVIEW?
Was ich bisher im Forum so gelesen habe, ja wohl nicht? :-(
Mir ist wirklich unbegreiflich, was denn in einer Schleife anders laufen kann, als in hintereinander kopierten Aufrufen. Auch das Arrayinitialisieren habe ich mit in der Schleife drin. Letzteres scheint nichtmal nötig: Wenn ich Kopien der Aufrufe mache, brauche ich sogar das Array nur einmal initialisieren und kann den erhaltenen Pointer mehrfach verwenden - es funktioniert. Also völlig verkehrte Welt...
Der Weg herauszufinden, was der Unterschied zwischen Schleife und Kopie ist, wäre eben, sich den Inhalt der "Drähte" anzugucken, also auch den der Pointer-Drähte. Aus denen bekomme ich aber leider nur den Inhalt des Arrays auf das gepointet wird. :-(
' schrieb:P.S.: IDS liefert doch eine Highlevel-LV-Schnittstelle zu µEye-Kameras. Funzt die nicht?
Ja, was sie liefern sind sehr simple VIs, in denen diese dll-Aufrufe drinstehen. Diese mitgelieferten VIs und auch die Beispielprogramme enden leider genau da, wo es interessant wird: Wenn man die eingelesenen Bilder nämlich als jpg oder gar avi abspeichern will. Dafür gibt es im gesamten paket kein funktionierendes Beispiel.
Da gibt es seiten IDS offenbar keine Lösung für. Und auch in dem "Speicher allokieren"-VI haben sie es nicht mit dem AllocImageMem-Aufruf gemacht, sondern ebenfalls mit per Array selbstallokiertem Speicher. Das fällt auf.
Und es fällt auch auf, daß in dem einen mitgelieferten Beispielprogramm, was einen Ringpuffer von 3 Frames anlegt, es ebenfalls nicht in einer Schleife gemacht wurde, sonder auch das "Speicher allokieren"-VI 3 Mal kopiert.
Insofern bin ich also ganz offensichtlich auf ein Problem gestoßen, das IDS selbst nocht nicht gelöst hat.
Aber ich lasse mich davon nicht abschrecken, solange ich noch Ideen habe, wie ich dem Problem auf die Spur kommen könnte.
Zur Not bestünde noch die Möglichkeit, ein C-Programm (oder wrapper-dll) zu schreiben, das bspw. nur einen AVI-Dateinamen und einen Start-Befehl übergeben bekommt und dann alle auf C-Ebene macht.
In C scheinen sämtliche Aufrufe zu funktionieren, wie die dafür mitgelieferten Sources zeigen.
AVI_aus_Labview___Knauer__TU_Berlin.vi (Größe: 27,93 KB / Downloads: 359)