Camera2 erhalten ständigen Zugriff auf die Vorschaubilder der Kamera

Ich möchte eine App je nach API von Kamera1 auf Kamera2 erweitern. Ein zentraler Mechanismus der App besteht darin, Vorschaubilder mit einer Geschwindigkeit von etwa 20 Bildern pro Sekunde aufzunehmen. Mit Camera1 habe ich festgestellt, dass durch das Erstellen eines SurfaceView, das Hinzufügen eines Callbacks zu seinem Halter und nach dem Erstellen der Oberfläche der Zugriff auf die Vorschaubilder über periodische setOneShotPreviewCallbacks erfolgt. Das war ziemlich einfach und zuverlässig.

Now, als ich Camera2 studierte, kam ich "vom Ende" und schaffte es, YUV420_888 in Bitmap umzuwandeln (siehe YUV420_888 zu Bitmap-Konvertierung). Allerdings kämpfe ich jetzt mit der "Capture-Technik". Aus dem Google-Beispiel geht hervor, dass Sie mit CameraDevice.TEMPLATE_PREVIEW eine CaptureRequest "setRepeating" ausführen müssen, um die Vorschau anzuzeigen, z. auf einer Oberflächenansicht. Das ist gut. Um jedoch ein aktuelles Bild aufzunehmen, muss ich (diesmal) eine weitere Aufnahmeanforderung mit builder.addTarget (imageReader.getSurface ()) stellen. Das heißt Die Daten sind in der onImageAvailable-Methode des imageReader verfügbar.

Das Problem: Die Erstellung des captureRequest ist ein ziemlich schwerer Vorgang, der auf meinem Gerät etwa 200 ms dauert. Daher kann die Verwendung einer Aufnahmeanforderung (ob mit Vorlage STILL_CAPTUR oder VORSCHAU) unmöglich ein praktikabler Ansatz zum Aufnehmen von 20 Bildern pro Sekunde sein, wie ich es brauche. Die Vorschläge, die ich hier auf SO gefunden habe, basieren hauptsächlich auf dem (bildungsmäßig mäßig effizienten) Google-Beispiel, das ich nicht wirklich verstehe ...

Ich bin der Meinung, dass die Lösung darin bestehen muss, den ImageReader mit einem kontinuierlichen Stream von Vorschaubildern zu versorgen, die von dort in einer bestimmten Häufigkeit ausgewählt werden können. Kann jemand bitte eine Anleitung geben, wie man dies umsetzt? Danke vielmals

Antworten auf die Frage(2)

Ihre Antwort auf die Frage