kostenloser Webspace werbefrei: lima-city


Java Fehler ...

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    sonok

    Moderator Kostenloser Webspace von sonok

    sonok hat kostenlosen Webspace.

    Huhu!

    Also, ich versuche mich gerade in "processing", einem Java-Aufsatz oder so ... http://processing.org/. Da lade ich gerade zwei Videos hinein und verarbeite nebenbei Webcam-Daten.
    Das geht auch relativ gut, nur daß ich da hin und wieder einer Fehlermeldung bekomme. der Fehler kommt relativ exakt aller 26-27 Sekunden, egal ob die geladenene Filme nun 10 Sekunden oder 2 Sekunden lang sind (meine Testvideolängen).

    Erfaßt werden insgesamt die Farbwerte aller einzelnen Pixels sowohl der beiden Videos als auch der Webcam. Dann - eben aller 26 Sekunden bei einer eingestellten Framerate von 24 bei 800 x 600 pixeln) kommt häufiger einer Fehlermeldung á la:

    quicktime.std.StdQTException[QTJava:7.6.6g],-8961=noCodecErr,QT.vers:7668000
    	at quicktime.std.StdQTException.checkError(StdQTException.java:40)
    	at quicktime.qd.Pict.fromMovie(Pict.java:106)
    	at quicktime.std.movies.Movie.getPict(Movie.java:797)
    	at processing.video.Movie.read(Movie.java:423)
    	at video_schatten_mit_video_fehler_a.draw(video_schatten_mit_video_fehler_a.java:74)
    	at processing.core.PApplet.handleDraw(PApplet.java:1631)
    	at processing.core.PApplet.run(PApplet.java:1530)
    	at java.lang.Thread.run(Thread.java:680)
    java(82681,0xd1a9c000) malloc: *** mmap(size=33554432) failed (error code=12)
    *** error: can't allocate region
    *** set a breakpoint in malloc_error_break to debug
    java(82681,0xd1a9c000) malloc: *** mmap(size=33554432) failed (error code=12)
    *** error: can't allocate region
    *** set a breakpoint in malloc_error_break to debug
    quicktime.std.StdQTException[QTJava:7.6.6g],-8961=noCodecErr,QT.vers:7668000
    	at quicktime.std.StdQTException.checkError(StdQTException.java:40)
    	at quicktime.qd.Pict.fromMovie(Pict.java:106)
    	at quicktime.std.movies.Movie.getPict(Movie.java:797)
    	at processing.video.Movie.read(Movie.java:423)
    	at processing.video.Movie.run(Movie.java:679)
    	at java.lang.Thread.run(Thread.java:680)
    java(82681,0xd1117000) malloc: *** mmap(size=33554432) failed (error code=12)
    *** error: can't allocate region
    *** set a breakpoint in malloc_error_break to debug
    java(82681,0xd1117000) malloc: *** mmap(size=33554432) failed (error code=12)
    *** error: can't allocate region
    *** set a breakpoint in malloc_error_break to debug
    quicktime.std.StdQTException[QTJava:7.6.6g],-8961=noCodecErr,QT.vers:7668000
    	at quicktime.std.StdQTException.checkError(StdQTException.java:40)
    	at quicktime.qd.Pict.fromMovie(Pict.java:106)
    	at quicktime.std.movies.Movie.getPict(Movie.java:797)
    	at processing.video.Movie.read(Movie.java:423)
    	at processing.video.Movie.run(Movie.java:679)
    	at java.lang.Thread.run(Thread.java:680)
    java(82681,0xd1a9c000) malloc: *** mmap(size=33554432) failed (error code=12)
    *** error: can't allocate region
    *** set a breakpoint in malloc_error_break to debug
    java(82681,0xd1a9c000) malloc: *** mmap(size=33554432) failed (error code=12)
    *** error: can't allocate region
    *** set a breakpoint in malloc_error_break to debug
    quicktime.std.StdQTException[QTJava:7.6.6g],-8961=noCodecErr,QT.vers:7668000
    	at quicktime.std.StdQTException.checkError(StdQTException.java:40)
    	at quicktime.qd.Pict.fromMovie(Pict.java:106)
    	at quicktime.std.movies.Movie.getPict(Movie.java:797)
    	at processing.video.Movie.read(Movie.java:423)
    	at processing.video.Movie.run(Movie.java:679)
    	at java.lang.Thread.run(Thread.java:680)
    java(82681,0xd1117000) malloc: *** mmap(size=33554432) failed (error code=12)
    *** error: can't allocate region
    *** set a breakpoint in malloc_error_break to debug
    java(82681,0xd1117000) malloc: *** mmap(size=33554432) failed (error code=12)
    *** error: can't allocate region
    *** set a breakpoint in malloc_error_break to debug
    quicktime.std.StdQTException[QTJava:7.6.6g],-8961=noCodecErr,QT.vers:7668000
    	at quicktime.std.StdQTException.checkError(StdQTException.java:40)
    	at quicktime.qd.Pict.fromMovie(Pict.java:106)
    	at quicktime.std.movies.Movie.getPict(Movie.java:797)
    	at processing.video.Movie.read(Movie.java:423)
    	at processing.video.Movie.run(Movie.java:679)
    	at java.lang.Thread.run(Thread.java:680)
    java(82681,0xd1a9c000) malloc: *** mmap(size=33554432) failed (error code=12)
    *** error: can't allocate region
    *** set a breakpoint in malloc_error_break to debug
    java(82681,0xd1a9c000) malloc: *** mmap(size=33554432) failed (error code=12)
    *** error: can't allocate region
    *** set a breakpoint in malloc_error_break to debug


    (ein ausschnitt)
    Danach laufen die Videos wieder 26-27 Sekunden lang und der Vorgang wiederholt sich.


    Jetzt also 2 Anliegen:
    1) Wie kann ich eine try {} - catch {} - Geschichte einbauen, die den gesamten Block einfach ausspart? Diese Radikalkur würde ich verwenden in der Hoffung, das die Frames ja irgendwann wieder fehlerlos wieder durchlaufen. Inwiefern ich das mit meinen Zielen verbinden kann (oder ob das optisch merde wird) muß ich herausfinden, aber an sich ist alles insgesamt eher eine gröbere Geschichte ...

    2) Was ist das für ein Fehler und wie kann ich den umgehen? An sich ist der Code extrem überschaubar ...
    void draw() {
      maus = mouseY;
      if (cam.available() == true) {
        // framerate neu schreiben, weil man das gespeicherte hintergrundbild auch anzeigen lassen kann und dazu der frame-wert auf 1 gesetzt wird
        frameRate(24);
        // pixelverarbeitung der filme
        filma.read();
        filma.loadPixels();
        filmb.read();
        filmb.loadPixels();    
        // pixelverarbeitung der kamera
        cam.read();
        cam.loadPixels();
        image(cam, cam_breite, cam_hoehe);
        loadPixels();
        // helligkeitswertvariablen zum wandabgleich vorbereiten
      [...] // lauter sachen mit dem rechnen mit den Pixeln
        // malen der ausgabe
        updatePixels();
        tmp++;
        println(tmp);
      } 
    }


    Manchmal bricht das alles auch ab und liefert einen Fehler bei filma_read() oder filmb_read() - stimmt da eventuell etwas nicht? Gibt es eine event-Geschichte, die den Codeabarbeitung so lange bremst, bis beide Filme vollständig geladen (oder was auch immer) sind?

    Vielen dank fürs lesen und eventuelle helfen,

    Bernhard
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ich kenne Processing nur durch Arduino und auch wenn es ein Java Aufsatz ist, so ist es schwer hier den Fehler zu finden.
    Die Fehlermeldung und der Quelltext sind leider so garnicht aussagekräftig. Ich kann dir nur sagen, dass es ein Speicherfehler ist. Hast du genug RAM oder muss er zwischendurch swappen (RAM auf Festplatte schreiben)? Der Fehler liegt nicht so sehr an dem Programm, sondern an der Laufzeitumgebung zu liegen, oder einer eingebundenen nativen Bibliothek für Quicktime.
    So richtig schlau werde ich aus dem Programm leider aber nicht, da ich Processing eben nciht so gut kenne.
  4. Autor dieses Themas

    sonok

    Moderator Kostenloser Webspace von sonok

    sonok hat kostenlosen Webspace.

    Der RAM sollte ausreichend sein. Ich hab inzwischen mit einem Dozenten geredet, der das gleiche meinte - irgendein Problem in irgendeiner Bibliothek. Der Programmcode ist nicht viel umfangreicher als das da abgebildete. Ein sehr kurzes Programm!

    Der Dozent guckt sich das am Wochenende an - so seine Aussage, vielleicht kommt was herum.

    Trotzdem - wenn auch eine dreckige Lösung - wäre ein try- catch - Block wohl vorerst das sinnigste, um einen kleinen durchlauf zu erhalten, glaub ich. Ich weiß, das es keine Lösung ist.
  5. Allerdings müsstest du das um alles drumherum machen, da der genaue Punkt an dem die Exception auftritt nicht so richtig klar ist.
    So sollte das funktionieren, wenn draw() automatisch aufgerufen wird, wie ich das vermute.:
    void draw() {
      try {
      maus = mouseY;
      if (cam.available() == true) {
        // framerate neu schreiben, weil man das gespeicherte hintergrundbild auch anzeigen lassen kann und dazu der frame-wert auf 1 gesetzt wird
        frameRate(24);
        // pixelverarbeitung der filme
        filma.read();
        filma.loadPixels();
        filmb.read();
        filmb.loadPixels();    
        // pixelverarbeitung der kamera
        cam.read();
        cam.loadPixels();
        image(cam, cam_breite, cam_hoehe);
        loadPixels();
        // helligkeitswertvariablen zum wandabgleich vorbereiten
      [...] // lauter sachen mit dem rechnen mit den Pixeln
        // malen der ausgabe
        updatePixels();
        tmp++;
        println(tmp);
      }
      } 
      catch( quicktime.std.StdQTException ex ) { } // einfach überspringen
    }


    Weiß eben nicht wie das mit dem importieren bei Processing funktioniert, deshalb einfach der vollständige Name.

    Beitrag zuletzt geändert: 21.10.2011 17:48:54 von reimann
  6. Hallo sonok,

    dem Stacktrace nach tritt der Fehler bei filma.read() und/oder bei filmb.read() auf.
    Allerdings scheint das ein Bug in der Quicktime-Bibliothek zu sein.
    Hier ist der gleiche Fehler:
    http://stackoverflow.com/questions/6178879/overall-memory-bytes-limited
    Evtl. kannst Du ja versuchen QuickTime zu deinstallieren und die aktuelle Version zu installieren.
    Laut der Processing FAQ sollte da QuickTime For Java dabei sein.
  7. Autor dieses Themas

    sonok

    Moderator Kostenloser Webspace von sonok

    sonok hat kostenlosen Webspace.

    darkpandemic schrieb:
    Laut der Processing FAQ sollte da QuickTime For Java dabei sein.


    Ich kränkel wahrhaftig immernoch an dem Fehler ...
    Naja, ich kenn mich nun wirklich damit dann gar nicht mehr aus. Wenn ich diese Quicktime-Bibliothek überschreiben will, dann muß ich ja irgendwas in den Processing-App-Ordner kopieren. Wo bekomme ich allerdings eine solche (aktuelle) Bibliothek genau her? Und wo genau muß die hin? Ich seh da nicht wirklich etwas wie "quicktime", nur zB "serial" oder "video" ...

    Könnte es andererseits jedoch auch an mir liegen? Muß ich (irgendwie) dem filma irgendeinen Speicherplatz zuweisen, der dann immer überschrieben wird? Aufgefallen ist mir inzwischen nämlich auch, daß (nicht immer, aber häufig) der belegte RAM beim Ausführen auf ca 750 MB wächst, dann kommen ein paar errors, dann fällt er auf ca 300 MB und steigt wieder stetig bis zu den 750 MB ... auch wenn noch RAM frei ist (laut MAC-Aktivitätsanzeige) ...

    Vielen Dank aber schonmal bis hierher ...
  8. Hallo sonok,

    soweit ich das sehe, musst Du nichts in irgendeinen Processing-Ordner verschieben. Die Quicktime-Bibliotheken müssen irgendwo auf Deinem System sein, wo Dein Betriebssystem bzw. die Java-VM sie findet. D.h. alles was Du versuchen kannst ist Quicktime vollständig deinstallieren und wieder neu installieren.
    Wenn das Problem bei Dir liegen würde, dann würde der Fehler sofort und dauerhaft auftretten (NullPointerException oder ähnliches) und nicht erst nach 26 Sekunden.
  9. Autor dieses Themas

    sonok

    Moderator Kostenloser Webspace von sonok

    sonok hat kostenlosen Webspace.

    Um das Quicktime-Zeugs zu Umgehen ... wenn ich diese Bibliothek verwende (http://ubaa.net/shared/processing/opencv/), umgehe ich dann auch das Problem, weil es nicht mehr die Quicktime-Bibliothek verwendet? Oder wird da im Endeffekt wieder auf Quicktime zugegriffen?
    Also kann ich damit das Problem umgehen, weil es eine echte Alternative zur Quicktime-Bibliothek ist?
  10. Was du versuchen kannst ist System.gc() bei jedem durchlauf aufzurufen, wäre auch wieder sehr dreckig.
    Kann nämlich sein das die quicktime Bibliothek irgendeinen Fehler abfängt und dafür einen anderen wirft, laut deiner Beschreibung vom Speicherverbrauch könnte das durchaus an sowas liegen, manchmal hat Java da ein komisches verhalten.

    Ansonsten versuch doch eifnach das ganze in einen try{

    }catch(Exception e){
    }
    - Block zu packen, der sollte das dann einfach alles aussparen

    EDIT: sehe grade, dass das Thema schon nen bisschen alt ist, naja vllt hilfts....

    Beitrag zuletzt geändert: 8.1.2012 19:15:30 von sadweb
  11. Diese OpenCV Bibliothek scheint kein Quicktime zu verwenden, sondern Techniken von Intel.
    Das heißt es sollte funktionieren. Ich bezweilfe, dass Intel dort Quicktime mit drin hat.
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!