Los artículos sobre la introducción de la arquitectura Camx de Qualcomm siguen siendo raros. Haré todo lo posible para hablar lo más posible y dejarlo claro y claro ~
Este artículo se divide en los siguientes puntos para ampliar:
1) Diagrama de arquitectura general de Camx;
2) Componentes y conceptos básicos de Camx;
3) Estructura de directorio de código Camx;
1. Diagrama de arquitectura general de Camx
Los modelos actuales de Android, que utilizan chips Qualcomm, utilizan básicamente la arquitectura camx.
La antigua arquitectura se llamaba mm-camera La principal diferencia entre la arquitectura camx y la arquitectura anterior era la migración del código de la capa de interfaz del chip de hardware / qcom a vendor / qcom / owner /.
Veamos primero el diagrama de arquitectura general de camx:
En la figura anterior, podemos ver que en la capa hal, Qualcomm combina su propio chip hardware y agrega una capa de lógica. Esta capa de lógica se denomina internamente arquitectura camx.
Echemos un vistazo a la arquitectura de Qualcomm camx ¿Cuál es el flujo general de datos de la cámara?
En la figura anterior, podemos ver claramente que los datos de la cámara salen del sensor, primero a través de IFE, y luego se dividen en dos situaciones: vista previa / video y foto. Si es una vista previa o un video, IPE lo procesa primero y finalmente lo envía a la pantalla. Si se trata de tomar una foto, BSP la procesa primero, luego a través del codificador JPEG y finalmente se guarda como una salida de imagen.
IFE, IPE, BPS, JPEG, representan una unidad de procesamiento de hardware dentro del chip. El procesamiento de datos en estas unidades aún es relativamente complicado. En diferentes unidades de procesamiento, se llevará a cabo algún procesamiento de algoritmos complejos. Hay un entendimiento y un concepto basico.
IFE: interfaz de imagen IPE: motor de procesamiento de imágenes BPS: código de copia de la sección de procesamiento de Bayer
Dos, conceptos y componentes básicos de Camx
Una arquitectura siempre se compone de algunos componentes básicos A continuación, entendamos cuáles son los componentes básicos de la arquitectura camx.
1) UseCase
Un conjunto de transmisiones configuradas por el cliente combinado con un conjunto de propiedades estáticas que especifican el procesamiento de esas transmisiones ( un conjunto de transmisiones configuradas por el cliente combinado con un conjunto de propiedades estáticas que especifican el procesamiento de esas transmisiones ). Consulte createCaptureSession en Android CameraDevice. documentación
Ver createCaptureSession en Android CameraDevice
Luego combinamos el siguiente código para entenderlo.
Los amigos que están familiarizados con la API de Camera2 (no importa si no está familiarizado con ella, lo dejaré en claro) deben saber que el siguiente código establece tanto la superficie de vista previa como la superficie de video, y luego crea una sesión, lo que significa que se requiere una vista previa de los datos de la cámara para grabar y grabar. Suponiendo que el tamaño que configuré para la vista previa es 1080 x 720 y el video es 1080p, entonces esta vista previa 1080 x 720 + video 1080p es un caso de uso (caso de uso). Otra analogía.
// UseCase: 预览 + 录像 List <Surface> superficies = new ArrayList <> (); if (previewSurface! = null && previewSurface.isValid ()) { superficies.add (previewSurface); mPreviewBuilder.addTarget (previewSurface); } if (mMediaRecorder! = null && mMediaRecorderSurface! = null && mMediaRecorderSurface.isValid ()) { superficies.add (mMediaRecorderSurface); mPreviewBuilder.addTarget (mMediaRecorderSurface); } mCameraDevice.createCaptureSession (superficies, ..., ...); 复制 代码
UseCase tiene muchas clases derivadas en camx. Aquí es donde camx crea diferentes objetos de casos de uso para diferentes flujos para administrar y seleccionar funciones, y crear canalizaciones y sesiones.
2) Característica
Representa una función específica. Las características de Qualcomm incluyen HDR (alto rango dinámico), SuperNight (escena súper nocturna), MFNR (reducción de ruido de múltiples cuadros), etc., caso de uso para seleccionar la característica correspondiente y luego asociar un conjunto de tuberías, la capa superior envía una solicitud de solicitud, la capa hal solicitará seleccionar la característica correspondiente.
3) nodo
Node es un módulo abstracto único con funciones de procesamiento independientes, que puede ser una unidad de software o una unidad de hardware. El nodo es una clase padre muy importante en camx. Es un nodo intermedio que procesa las solicitudes de la cámara y se utiliza para procesar las solicitudes emitidas por la canalización.
El nodo Node es muy importante en la arquitectura camx chi, y el procesamiento de datos se realiza a través del nodo Node empaquetado.
4) tubería
Colección de una serie de nodos. La canalización proporciona una colección de todos los recursos para una única función específica y mantiene todos los recursos de hardware y el flujo de datos.
5) sesión
Una colección de varias canalizaciones relacionadas, que se utiliza para administrar la unidad de control abstracta de la canalización, que contiene al menos una canalización, controla todos los recursos de hardware y controla el flujo de solicitudes y la entrada y salida de datos dentro de cada canalización.
6) Enlace
Defina los puertos de conexión (puerto de entrada y puerto de salida) de diferentes puertos.
7) Puerto
Como puertos de entrada y salida de Node, utilice el archivo XML de definición de estructura SrcPort y DstPort.
8) Topologías
Una topología es un gráfico acíclico dirigido (DAG) que especifica una instanciación de un caso de uso (la topología es un gráfico acíclico dirigido (DAG) ) Definición XML de casos de uso y topologías asociadas Para CamX, este gráfico define el HW, SW y no Nodos de procesamiento de Qualcomm y el flujo de datos entre los nodos
Relación entre componentes
Finalmente, resumamos la relación entre los componentes básicos. De acuerdo con las necesidades de la capa superior, la secuencia correspondiente a la configuración se reducirá y el caso de uso correspondiente se seleccionará de acuerdo con la secuencia aplicada. Una vez completada la selección del caso de uso, se seleccionará la característica requerida y luego diferentes características se asociará con la tubería correspondiente. Sabemos que la canalización está compuesta por una serie de nodos y, finalmente, la secuencia de la configuración superior será procesada por cada nodo.
En tercer lugar, la estructura del directorio de código
El código de camx está en el directorio vendor / qcom / owner /, dividido en dos grandes directorios, camx y chi-cdk.
1) Directorio en CamX
core está dividido en directorios hal y chi: almacena el módulo de implementación central de CamX hal /: hal / directorio chi / que implementa la interfaz hal3 : chi / directory hwl / que es responsable de la interacción de CHI /: almacena su propio algoritmo con Nodo de hardware de capacidad de computación independiente: administrado por csl swl /: nodo de tienda que no tiene potencia de computación independiente y debe depender de la CPU. csl /: es responsable del módulo de comunicación entre camx y el controlador de la cámara, y proporciona un controlador de cámara unificado interfaz de control para camx
2) Directorio en chi-cdk
core /: Almacena los módulos centrales implementados por CHI, responsable de interactuar con Camx y realizar el marco general y el procesamiento comercial de CHI . oem / qcom / topolog /: almacenar información de configuración xml del caso de uso definido por el usuario oem / qcom / node /: almacenar nodos de función definidos por el usuario oem / qcom / module /: almacenar diferentes archivos de configuración del sensor, que son necesarios cuando se inicializa el sensor Usado . oem / qcom / tuning /: almacena archivos de configuración de parámetros de efectos en diferentes escenarios. oem / qcom / sensor /: almacena la única información de diferentes sensores y registra los parámetros de configuración oem / qcom / actuator /: almacena la información de configuración de diferentes módulos de enfoque. oem / qcom / ois /: almacena la información de configuración del módulo anti-vibración. oem / qcom / flash /: almacena la información de configuración del módulo flash. oem / qcom / eeprom /: almacena la información de configuración del módulo de almacenamiento externo eeprom. oem / qcom / fd /: almacena la información de configuración del módulo de reconocimiento facial. Copiar codigo
* He estado involucrado en el desarrollo relacionado con la cámara de Android durante 5 años,
* Actualmente trabajando en Shenzhen,
* Bienvenido a seguir las notas de Xiaochi de mi cuenta pública de WeChat
* Espero comunicarme y aprender con más amigos ~
-------- 2021.03.27 Shenzhen 23:54