Die startPreview-Funktion ist langsam. Irgendwelche Probleme?

8

Problem:

Ich mache eine Anwendung auf Android, die eine schnelle Antwort von der Kamera während der Aufnahme von Bildern erfordert, bemerkte ich ein langsames Verhalten von der Anwendung, nach der Messung der Zeit habe ich festgestellt, dass die Funktion startPreview () ist verantwortlich für das Problem.

Codevorschau:

Dies ist der notwendige Teil des Codes (bezogen auf das Problem).

PreviewGoogle-Klasse (die benutzerdefinierte Vorschau): Am Anfang der Anwendung wird der Aufruf von "surfaceChanged" aufgerufen, ich habe einige Kameraparameter festgelegt und dann startPreview

genannt %Vor%

PhotoShootActivity-Klasse: In dieser Klasse habe ich die startPreview-Funktion von rawImageCallback aufgerufen, weil ich die BitmapFactory in jpegCallback verwende (nicht notwendig)

%Vor%

Die Timer-Nummern waren wie folgt:

%Vor%

Die erste startPreview dauerte ~ 1500ms und die zweite dauerte 662 ms !!!

Gesuchte Lösung:

Die Frage, nach der ich suche, ist kein vollständiger Code (tipp mich einfach :)), ich habe gedacht, dass ich etwas in der Vorschau verpassen könnte, und ich dachte über die Verwendung von Threads in diesem Fall, aber ich bin es nicht vertraut mit Android-SDK noch (ich begann mit Android-Programmierung vor 4 Tagen)

Grüße ...

    
Ayman Kouzayha 09.09.2011, 08:35
quelle

1 Antwort

0

Von den Android-Dokumenten:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

startPreview()

Startet das Erfassen und Zeichnen von Vorschaubildern auf dem Bildschirm. Die Vorschau wird erst gestartet, wenn eine Oberfläche mit setPreviewDisplay(SurfaceHolder) oder setPreviewTexture(SurfaceTexture) bereitgestellt wird.

Wenn setPreviewCallback(Camera.PreviewCallback) , setOneShotPreviewCallback(Camera.PreviewCallback) , oder setPreviewCallbackWithBuffer(Camera.PreviewCallback) aufgerufen wurden, wird onPreviewFrame(byte[], Camera) aufgerufen, wenn Vorschaudaten verfügbar werden.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Sie haben also in Ihrem Kommentar gesagt, dass Sie sich entschieden haben, onPreviewFrame(byte[], Camera) zu verwenden, wie Sie in den Dokumenten sehen können. Es heißt, dass es nur aufgerufen wird, wenn die Vorschaudaten verfügbar sind, was einige Zeit in Anspruch nimmt. Versuchen Sie, die erste Option hinzuzufügen, indem Sie der Kamera eine Textur oder eine Vorschau anzeigen.

Dh in Ihrer surfaceChanged(SurfaceHolder holder, int format, int w, int h) -Methode:

%Vor%

Sehen Sie, ob das einen Unterschied macht.

    
Ogen 21.01.2014 23:58
quelle

Tags und Links