plugin instalar error android image-processing camera android-camera

android - error 500 al instalar plugin wordpress



error: no se puede adquirir un Buffer bloqueado, muy probablemente el cliente intente bloquear más que los búfers de maxImages (2)

Estoy usando camera2 api para capturar imágenes y mostrarlas en thumnail. Todo funciona bien en todos los dispositivos, pero cuando Micromax Q382 dispositivo Micromax Q382 , en la vista previa en miniatura aparece su imagen negra. Estoy por debajo de Issue

Unable to acquire a lockedBuffer, very likely client tries to lock more than maxImages buffers

Estoy usando el siguiente código para la captura de llamada listerner

final CameraCaptureSession.CaptureCallback captureListener = new CameraCaptureSession.CaptureCallback() { @Override public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) { super.onCaptureCompleted(session, request, result); startPreview(); } }; mCameraDevice.createCaptureSession(outputSurfaces, new CameraCaptureSession.StateCallback() { @Override public void onConfigured(CameraCaptureSession session) { try { session.capture(captureBuilder.build(), captureListener, backgroudHandler); } catch (CameraAccessException e) { AppLogger.exception(myContext, getClass().getSimpleName(), e); // e.printStackTrace(); } } @Override public void onConfigureFailed(CameraCaptureSession session) { } }, backgroudHandler); } catch (CameraAccessException e) { AppLogger.exception(myContext, getClass().getSimpleName(), e); // e.printStackTrace(); }

y debajo del código usando para OnImageAvailableListener

ImageReader.OnImageAvailableListener readerListener = new ImageReader.OnImageAvailableListener() { @Override public void onImageAvailable(ImageReader reader) { Image image = null; try { image = reader.acquireLatestImage(); // ByteBuffer buffer = image.getPlanes()[0].getBuffer(); // final byte[] bytes = new byte[buffer.capacity()]; ByteBuffer buffer = image.getPlanes()[0].getBuffer(); final byte[] bytes = new byte[buffer.remaining()]; buffer.get(bytes); save(bytes); buffer.clear(); runOnUiThread(new Runnable() { @Override public void run() { mThumbnail.setVisibility(View.VISIBLE); filePathLabel.setVisibility(View.VISIBLE); filePathValue.setText(file.getAbsolutePath()); Bitmap bmp = UtilityMethods.getScaledBitmap(CameraImageTestActivityLoliipop.this, bytes); mThumbnail.setImageBitmap(bmp); } }); } catch (FileNotFoundException e) { AppLogger.exception(myContext, getClass().getSimpleName(), e); // e.printStackTrace(); } catch (IOException e) { AppLogger.exception(myContext, getClass().getSimpleName(), e); // e.printStackTrace(); } finally { if (image != null) { image.close(); } } }


Puede proporcionar el parámetro maxImages como 1 para el método ImageReader.newInstance . acquireLatestImage llamadas a acquireNextSurfaceImage antes de cerrar el único buffer de imagen, lo que lleva a esta advertencia.

Use acquireNextImage en este caso. Si maxImages es mayor que 1 , acquireLatestImage no tiene este problema.


Después de establecer maxImages en 2 y usar acquireLatestImage, si todavía tiene problemas cuando dejó de recibir la devolución de llamada de Image disponible, lo más probable es que no libere el búfer de imagen que obtuvo de acquireLatestImage (), el búfer no estará disponible a menos que llame a Image.close () en esa imagen y permitir el mismo buffer para reutilizar.

Image raw = imageReader.acquireLatestImage(); raw.close();

Aquí está el enlace para la documentación: https://developer.android.com/reference/android/media/Image.html#close ()