Android Camera2 API Opencamera Error -- android campo con flashlight campo con android-camera2 camp Relacionados El problema

Android camera2 api openCamera error


0
vote

problema

Español

Quiero hacer una aplicación de Flashlite simple usando la API de la cámara2. Estoy usando el siguiente código:

  public class FlashLightUtilForL { private CameraCaptureSession mSession; private CaptureRequest.Builder mBuilder; private CameraDevice mCameraDevice; private CameraManager mCameraManager;  public FlashLightUtilForL(Context context) {     try {         mCameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);         //here to judge if flash is available         CameraCharacteristics cameraCharacteristics = mCameraManager.getCameraCharacteristics("0");         boolean flashAvailable = cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);         if (flashAvailable) {             mCameraManager.openCamera("0", new MyCameraDeviceStateCallback(), null);         } else {             //todo: throw Exception         }         //mCameraManager.openCamera("0", new MyCameraDeviceStateCallback(), null);     } catch (Exception e) {         e.printStackTrace();     } }  class MyCameraDeviceStateCallback extends CameraDevice.StateCallback {      @Override     public void onOpened(CameraDevice camera) {         mCameraDevice = camera;         //get builder         try {             mBuilder = camera.createCaptureRequest(CameraDevice.TEMPLATE_MANUAL);             //flash on, default is on             mBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AF_MODE_AUTO);             mBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_TORCH);             List<Surface> list = new ArrayList<Surface>();             SurfaceTexture mSurfaceTexture = new SurfaceTexture(1);             Size size = getSmallestSize(mCameraDevice.getId());             mSurfaceTexture.setDefaultBufferSize(size.getWidth(), size.getHeight());             Surface mSurface = new Surface(mSurfaceTexture);             list.add(mSurface);             mBuilder.addTarget(mSurface);             camera.createCaptureSession(list, new MyCameraCaptureSessionStateCallback(), null);         } catch (CameraAccessException e) {             e.printStackTrace();         }     }      @Override     public void onDisconnected(CameraDevice camera) {      }      @Override     public void onError(CameraDevice camera, int error) {      } }  private Size getSmallestSize(String cameraId) throws CameraAccessException {     Size[] outputSizes = mCameraManager.getCameraCharacteristics(cameraId)             .get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP)             .getOutputSizes(SurfaceTexture.class);     if (outputSizes == null || outputSizes.length == 0) {         throw new IllegalStateException(                 "Camera " + cameraId + "doesn't support any outputSize.");     }     Size chosen = outputSizes[0];     for (Size s : outputSizes) {         if (chosen.getWidth() >= s.getWidth() && chosen.getHeight() >= s.getHeight()) {             chosen = s;         }     }     return chosen; }  /**  * session callback  */ class MyCameraCaptureSessionStateCallback extends CameraCaptureSession.StateCallback {      @Override     public void onConfigured(CameraCaptureSession session) {         mSession = session;         try {             mSession.setRepeatingRequest(mBuilder.build(), null, null);         } catch (CameraAccessException e) {             e.printStackTrace();         }     }      @Override     public void onConfigureFailed(CameraCaptureSession session) {      } }  public void turnOnFlashLight() {     try {         mBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_TORCH);         mSession.setRepeatingRequest(mBuilder.build(), null, null);     } catch (Exception e) {         e.printStackTrace();     } }  public void turnOffFlashLight() {     try {         mBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF);         mSession.setRepeatingRequest(mBuilder.build(), null, null);     } catch (Exception e) {         e.printStackTrace();     } }  private void close() {     if (mCameraDevice == null || mSession == null) {         return;     }     mSession.close();     mCameraDevice.close();     mCameraDevice = null;     mSession = null; } }   

Y aquí es cómo uso esta clase de mi actividad principal:

  FlashLightUtilForL util = new FlashLightUtilForL(getApplicationContext()); util.turnOnFlashLight();   

pero no hace nada. Descubrí que hay un error al abrir la cámara, pero no hay un indicio de lo que se causan estos erremas. Aquí está el registro:

Esto se imprime tres veces seguidas:

  11-10 15:27:32.881 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value manual 11-10 15:27:32.881 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value fullscan 11-10 15:27:32.881 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value nashville 11-10 15:27:32.882 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value hefe 11-10 15:27:32.882 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value valencia 11-10 15:27:32.882 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value xproll 11-10 15:27:32.882 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value lofi 11-10 15:27:32.882 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value sierra 11-10 15:27:32.882 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value walden 11-10 15:27:32.882 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value normal   

y luego una vez:

  11-10 15:27:32.909 11801-11801/com.flashlight I/CameraManager: Using legacy camera HAL. 11-10 15:27:32.911 11801-12695/com.flashlight W/Camera: An error occurred while connecting to camera: 0   

Ni siquiera pude encontrar nada relacionado con este error en particular en la cámara2. ¿Qué podría causar el problema? El dispositivo es REDMI Nota 2 con 5.0.2, la cámara tiene linterna, y he agregado el permiso de la cámara en el manifiesto.

Original en ingles

I want to make a simple flashlite application using camera2 api. I am using the following code:

public class FlashLightUtilForL { private CameraCaptureSession mSession; private CaptureRequest.Builder mBuilder; private CameraDevice mCameraDevice; private CameraManager mCameraManager;  public FlashLightUtilForL(Context context) {     try {         mCameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);         //here to judge if flash is available         CameraCharacteristics cameraCharacteristics = mCameraManager.getCameraCharacteristics("0");         boolean flashAvailable = cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);         if (flashAvailable) {             mCameraManager.openCamera("0", new MyCameraDeviceStateCallback(), null);         } else {             //todo: throw Exception         }         //mCameraManager.openCamera("0", new MyCameraDeviceStateCallback(), null);     } catch (Exception e) {         e.printStackTrace();     } }  class MyCameraDeviceStateCallback extends CameraDevice.StateCallback {      @Override     public void onOpened(CameraDevice camera) {         mCameraDevice = camera;         //get builder         try {             mBuilder = camera.createCaptureRequest(CameraDevice.TEMPLATE_MANUAL);             //flash on, default is on             mBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AF_MODE_AUTO);             mBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_TORCH);             List<Surface> list = new ArrayList<Surface>();             SurfaceTexture mSurfaceTexture = new SurfaceTexture(1);             Size size = getSmallestSize(mCameraDevice.getId());             mSurfaceTexture.setDefaultBufferSize(size.getWidth(), size.getHeight());             Surface mSurface = new Surface(mSurfaceTexture);             list.add(mSurface);             mBuilder.addTarget(mSurface);             camera.createCaptureSession(list, new MyCameraCaptureSessionStateCallback(), null);         } catch (CameraAccessException e) {             e.printStackTrace();         }     }      @Override     public void onDisconnected(CameraDevice camera) {      }      @Override     public void onError(CameraDevice camera, int error) {      } }  private Size getSmallestSize(String cameraId) throws CameraAccessException {     Size[] outputSizes = mCameraManager.getCameraCharacteristics(cameraId)             .get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP)             .getOutputSizes(SurfaceTexture.class);     if (outputSizes == null || outputSizes.length == 0) {         throw new IllegalStateException(                 "Camera " + cameraId + "doesn't support any outputSize.");     }     Size chosen = outputSizes[0];     for (Size s : outputSizes) {         if (chosen.getWidth() >= s.getWidth() && chosen.getHeight() >= s.getHeight()) {             chosen = s;         }     }     return chosen; }  /**  * session callback  */ class MyCameraCaptureSessionStateCallback extends CameraCaptureSession.StateCallback {      @Override     public void onConfigured(CameraCaptureSession session) {         mSession = session;         try {             mSession.setRepeatingRequest(mBuilder.build(), null, null);         } catch (CameraAccessException e) {             e.printStackTrace();         }     }      @Override     public void onConfigureFailed(CameraCaptureSession session) {      } }  public void turnOnFlashLight() {     try {         mBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_TORCH);         mSession.setRepeatingRequest(mBuilder.build(), null, null);     } catch (Exception e) {         e.printStackTrace();     } }  public void turnOffFlashLight() {     try {         mBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF);         mSession.setRepeatingRequest(mBuilder.build(), null, null);     } catch (Exception e) {         e.printStackTrace();     } }  private void close() {     if (mCameraDevice == null || mSession == null) {         return;     }     mSession.close();     mCameraDevice.close();     mCameraDevice = null;     mSession = null; } } 

And here is how I use this class from my main activity:

FlashLightUtilForL util = new FlashLightUtilForL(getApplicationContext()); util.turnOnFlashLight(); 

But it does nothing. I found that there is an error while opening camera, but there is no hint on what this erros is caused by. here is the log:

This is printed three times in a row:

11-10 15:27:32.881 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value manual 11-10 15:27:32.881 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value fullscan 11-10 15:27:32.881 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value nashville 11-10 15:27:32.882 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value hefe 11-10 15:27:32.882 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value valencia 11-10 15:27:32.882 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value xproll 11-10 15:27:32.882 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value lofi 11-10 15:27:32.882 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value sierra 11-10 15:27:32.882 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value walden 11-10 15:27:32.882 11801-11801/com.flashlight W/ArrayUtils: Ignoring invalid value normal 

and then once:

11-10 15:27:32.909 11801-11801/com.flashlight I/CameraManager: Using legacy camera HAL. 11-10 15:27:32.911 11801-12695/com.flashlight W/Camera: An error occurred while connecting to camera: 0 

I could not even find anything related to this particular error in camera2. What could cause the problem? The device is Redmi note 2 with 5.0.2, camera has flashlight, and I have added the camera permission in manifest.

        

Lista de respuestas

0
 
vote

Sospecho que su problema es de filter { csv { separator => " " columns => [ 'garbage1', 'good', 'garbage2', 'garbage3', 'garbage4' ] source => "message" } } 9 . No todos los dispositivos apoyan esto. Además, no creo que esto funcione bien cuando el dispositivo esté usando soporte heredado. Intente cambiar a good0 .

Además, no olvides liberar el good1 cuando está don con él.

 

I suspect your issue is from CameraDevice.TEMPLATE_MANUAL. Not all devices support this. Also I do not think this works well when the device is using legacy support. Try switching to CameraDevice.TEMPLATE_PREVIEW.

Also, do not forget to release the SufaceTexture when you are don with it.

 
 
 
 

Relacionados problema

2  Problema de la exposición de la cámara de Android2. La vista previa se sobreexpuesta en caso de que el uso de la cola de imágenes de Yuv  ( Android camera2 exposure issue preview is overexposed in case of yuv imagereade ) 
Problema muy extraño fundado en Nexus 5x. Tengo un conjunto ordinario de superficies para la aplicación de la cámara: - EXFIUETE DE OFICINA PARA VERDE PREVE...

2  Integración de OCR a la cámara2  ( Ocr integration to camera2 ) 
Necesito algunos consejos para mi futuro proyecto. Estoy desarrollando proyecto de OCR para algunos documentos de identificación y, para esto, ya he integrado...

1  Aplique Letterbox Blur a la vista previa de la cámara de Android  ( Apply letterbox blur to android camera preview ) 
Estoy usando la API de la cámara2 para mostrar el flujo de la cámara en un TextureView . Dado que las dimensiones de la cámara no coinciden con el dispositiv...

0  Android lanza un error cada vez que "Cámara Cámara = cámara. APEN ();" se llama  ( Android throws error everytime when camera camera camera open is called ) 
Estoy teniendo un problema usando la cámara en Android. Desarrollo en API 25 NOUGAT 7.1.1 SDK. Min Target SDK se establece en 15. Lanza el error cada vez ...

3  Sensor de control de ISO y tiempo de exposición en Android Camera2API  ( Controlling sensor iso and exposure time in android camera2api ) 
Estoy tratando de agregar en controles de cámara manual Nuevo valor de exposición y valores ISO. Estoy usando el ejemplo de la cámara2basic. El problema que e...

0  Orientación de la cámara de Android2 para la cámara emulador incorrecta  ( Android camera2 orientation for emulator camera wrong ) 
Estoy siguiendo un tutorial actualmente y tratando de configurar la cámara Android 2. Este es el código para ello. principalActividad: import android.Man...

1  Corrección de imagen simple para cámaras de Android  ( Simple image correction for older android cameras ) 
Tengo una aplicación de Android en la que estoy tratando de dejar que el usuario capture una imagen de un documento con la cámara nativa y luego envíela al se...

0  ¿Cómo mostrar solo una parte de la vista previa de la cámara de Android?  ( How to show only part of the android camera preview ) 
Necesito una forma de "recortar" la vista previa de la cámara, de modo que solo se mostrará parte de ella. Por ejemplo: Digamos que mi cámara es compatible co...

2  Implementación de la exposición automática  ( Auto exposure implementation ) 
Estoy trabajando en la implementación de AE ​​personalizada con Android Camera2 API. La idea actual es mantener el brillo medio de la imagen a un nivel gris (...

2  Cómo hacer compatibilidad en la aplicación Android  ( How to make compatibility in android app ) 
Soy un promotor de Android para principiantes. He construido una aplicación de Android simple que usa Flash desde Cámara. He construido esta aplicación para A...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos