Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cámara Android 2 api BufferQueue ha sido abandonada

Estoy probando con la nueva API de camera2 de Android y quiero controlar cada fotograma de la cámara. Lo que hago para esto es crear un ImageReader y configurar la resolución y el formato de imagen.

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); 

Después de eso, creo nuevo CaptureRequest con el parámetro TEMPLATE_PREVIEW y le agrego el target imageReader . Para cameraCaptureSession creo nuevo setRepeatingRequest con esta solicitud

  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(); } 

Cuando abrí la cámara y empezar a ver lo que tengo con la vista previa me sale la excepción. Pero antes de la excepción que tengo una imagen de vista previa y después de que tengo excepción

 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) 

¿¿Cómo puedo arreglar esto??

Estoy usando un Samsung Galaxy S5 y Android API 21

  • ¿Dónde está la resolución de vídeo almacenada en android?
  • Configuración de la API de la cámara Android en ISO?
  • Problema de orientación de la cámara en Android
  • Cámara: la función setDisplayOrientation no funciona para Samsung Galaxy ACE con Android 2.3.6
  • ¿Cómo mostrar la vista previa de 2 cámaras una al lado de la otra?
  • Android setFocusArea y enfoque automático
  • 2 Solutions collect form web for “Cámara Android 2 api BufferQueue ha sido abandonada”

    Asegúrese de mantener una referencia al ImageReader que cree, probablemente donde quiera que haya definido mSession.

    La Superficie que obtiene del ImageReader es aproximadamente equivalente a un puntero débil – no impedirá que ImageReader se recoja la basura. Así que lo más probable (basado en su nombre) el ImageReader se está destruyendo y el error de abandono se produce entonces.

    Tuve el mismo problema al cambiar entre las actividades en mi aplicación y que fue después de llamar onSurfaceTextureDestroyed() que sólo estaba volviendo falso, Pero lo que hice fue cambiarlo a

     public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { Log.e(TAG, "onSurfaceTextureDestroyed"); if(cameraDevice != null){ closeCamera(); cameraDevice = null; } return false; } 

    Y eso funcionó para mí.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.