Ich teste mit neuen Android camera2 API und ich möchte jedes Bild von der Kamera steuern. Was ich dafür mache, ist ein ImageReader erstellen und Auflösung und Bildformat einrichten.Android Kamera 2 api BufferQueue wurde aufgegeben
ImageReader imageReader = ImageReader.newInstance(1280,720,ImageFormat.YUV_420_888,1);
imageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image image = reader.acquireLatestImage();
Log.i(MainActivity.LOG_TAG,"imageReader: "+System.currentTimeMillis());
image.close();
}
},null);
Danach habe ich schaffen neue CaptureRequest mit dem Parameter TEMPLATE_PREVIEW und fügen Ziel ihm imageReader
. Für cameraCaptureSession ich neu erstellen setRepeatingRequest mit dieser Anfrage
try {
final CaptureRequest.Builder builder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
builder.addTarget(imageReader.getSurface());
mCameraDevice.createCaptureSession(
Arrays.asList(imageReader.getSurface()),
new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(CameraCaptureSession session) {
mSession = session;
try {
mSession.setRepeatingRequest(builder.build(),null,null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void onConfigureFailed(CameraCaptureSession session) {
}
},
null
);
} catch (CameraAccessException e) {
e.printStackTrace();
}
Als ich die Kamera geöffnet und Ansicht starten, was ich mit Vorschau habe ich Exception. Aber bevor Ausnahme ich es bekam einige Bildvorschau und nach, dass ich Ausnahme
10-30 16:00:32.850 1390-1894/.camera2tutorial E/BufferQueueProducer﹕ [unnamed-1390-1] dequeueBuffer: BufferQueue has been abandoned
10-30 16:00:32.850 1390-1894/.camera2tutorial E/Legacy-CameraDevice-JNI﹕ LegacyCameraDevice_nativeProduceFrame: Error while producing frame No such device (-19).
10-30 16:00:32.850 1390-1894/.camera2tutorial W/SurfaceTextureRenderer﹕ Surface abandoned, dropping frame.
android.hardware.camera2.legacy.LegacyExceptionUtils$BufferQueueAbandonedException
at android.hardware.camera2.legacy.LegacyExceptionUtils.throwOnError(LegacyExceptionUtils.java:64)
at android.hardware.camera2.legacy.LegacyCameraDevice.produceFrame(LegacyCameraDevice.java:516)
at android.hardware.camera2.legacy.SurfaceTextureRenderer.drawIntoSurfaces(SurfaceTextureRenderer.java:699)
at android.hardware.camera2.legacy.GLThreadManager$1.handleMessage(GLThreadManager.java:103)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:145)
at android.os.HandlerThread.run(HandlerThread.java:61)
Wie kann ich dieses Problem beheben ??
Ich bin mit einem Samsung Galaxy S5 und Android API 21
Ich entfernte lokale Variable von Methode und Problem mit Ausnahme wurde behoben. Vielen Dank! –
@ mr.leo erwägen, diese Antwort als akzeptiert zu markieren. Diese Lösung hat mir auch geholfen. Lustig ist, dass es plattformspezifisch ist - es funktionierte gut für mich auf Nexues und anderen Geräten mit Android 6, aber scheiterte mit HTC One unter Android 5. Die Schönheit der Fragmentierung von Android. – stoiczek
@stoiczek Wie haben Sie konkret einen Verweis auf den ImageReader behalten? (außer: "captureRequest.addTarget (imageReader.getSurface())") – Denis