PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Java] JMF: Wie performant Stream lesen?


Monger
2005-07-05, 14:39:33
Der Titel trifft's irgendwie nicht ganz, aber ich weiß nicht wie ich mein Problem in kurzen Worten zusammenfassen soll...


Ich bastel grade an einem kleinen Java Programm, das mir das Bild einer Webcam anzeigen soll. Ich hab einerseits die Oberfläche, die von Zeit zu Zeit (eine Sekunde) das Bild aktualisiert, und ich hab eine Art Treiber, der mir kontinuierlich die Bilder aus der Webcam in einen "PushBufferStream" hineinschreibt, von wo ich aus lesen kann.

Mein Problem ist jetzt folgendes: ich möchte nur ein Bild pro Sekunde anzeigen, statt der typischen 12,5 Bilder, die die Kamera automatisch liefert. Aber ich weiß einfach nicht wie...
Derzeit versucht meine Oberfläche, in jedem Zyklus sich ein Bild zu greifen, und zu aktualisieren. Da mein Zyklus langsamer als 12,5 fps ist, heißt das, dass ich alles nur in Zeitlupe sehe, weil im nächsten Zyklus ja auch nur wieder das nächste Bild abgeholt wird...
Ich müsste also alle Bilder verfallen lassen die zwischendrin sind. Nur, wie mache ich das? Wie sorge ich dafür, dass sobald meine Oberfläche ein Bild will, es wirklich nur das aktuellste kriegt?

darph
2005-07-05, 14:43:25
Vielleicht einfach vor dem Bild holen den Buffer leeren. Dann stellt dein Programm die Anfrage (getbild oder wie auch immer) an den Buffer, welcher das erst liefert, wenn wieder ein Bild (das nächste, das die Kamera liefert) im Buffer ist. Sollte mit Threads ja zu machen sein.

Oder du nimmst einen one place buffer, bei dem bei einem put der existierende Wert überschrieben wird.

Monger
2005-07-05, 18:08:30
Ich hab's jetzt so gemacht, dass ich schlicht und ergreifend den Datenstrom stoppe, und nur zur Aufnahme des Frames kurz einschalte.

Insgesamt scheint es zu machen was ich will. CPU Last hält sich auf jeden Fall ziemlich in Grenzen.