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