Alternancia entre Cámaras Frontales y Traseras en Dispositivos USB

En sistemas Android con hardware Rockchip, es posible configurar cámaras USB para que se identifiquen como frontales o traseras mediante modificaciones en el software. A continuación, se describen tres métodos para lograrlo.

Método 1: Modificación del Módulo de CameraHal

Se puede editar el archivo fuente del módulo de cámara para ajustar la orientación predeterminada. Esto implica cambiar constantes en el código C++ que definen la dirección de la cámara.


// Ubicación del archivo: hardware/rockchip/camera/CameraHal/CameraHal_Module.cpp
// Cambiar los valores de las constantes para alternar la orientación
// Ejemplo modificado
if (deviceIndex == 0) {
    camInfo[deviceIndex].facing = CAMERA_FACING_FRONT;  // Cámara frontal
} else {
    camInfo[deviceIndex].facing = CAMERA_FACING_BACK;   // Cámara trasera
}

Para invertir la configuración, simplemente intercambie los valores CAMERA_FACING_FRONT y CAMERA_FACING_BACK en las asignaciones. Esto permite que la cámara USB predeterminada se registre como frontal o trasera según sea necesario.

Método 2: Ajuste en el Controlador USB

Otra forma es modificar el controlador USB para que reporte un nombre de dispositivo específico, que Android interpreta para determinar la orientación. Esto se hace cambiando el campo card en la estructura de capacidades del dispositivo.


// Archivo: drivers/media/usb/uvc/uvc_v4l2.c
// Modificación para asignar un nombre que indique la orientación
if (vendor_id == 0x058f && product_id == 0x3841) {  // Identificador del dispositivo USB
    snprintf(cap->card, sizeof(cap->card), "front-180");  // Cadena que define frontal y orientación
    pr_info("Dispositivo USB configurado como frontal\n");
}
// El sistema CameraHal de Android analizará esta cadena para aplicar la configuración adecuada

Al establecer el nombre como "front-180" o "back-0", Android puede inferir la dirección y la rotación de la cámara. Para mayor compatibilidad, se pueden encluir coincidencias de VID (Vendor ID) y PID (Product ID).

Método 3: Edición de la Interfaz de Dispositivo de Cámara Externa

En la implementación de Android para cámaras externas, se puede alterar la propiedad de orientación predeterminada. Esto se realiza en el archivo de interfaz de hardware.


// Archivo: camera/device/3.4/default/ExternalCameraDevice.cpp
// Cambiar la constante que define la orientación
// Originalmente configurado como trasero
const uint8_t lens_facing = ANDROID_LENS_FACING_FRONT;  // Modificado para usar frontal
// Actualizar la propiedad en los metadatos de la cámara
updateMetadata(ANDROID_LENS_FACING, &lens_facing, sizeof(lens_facing));

Este cambio fuerza a que todas las cámaras USB externas se traten como frontales por defecto. Se puede personalizar aún más basándose en condiciones específicas, como el modelo del dispositivo.

Etiquetas: Android Rockchip USB-Cameras Camera-HAL kernel-modules

Publicado el 7-12 17:15