Desarrollo de Android El 12: Cámara principio de imagen introducción

1, las imágenes de la cámara principio introducción

diagrama de flujo de trabajo de la cámara

imagen

principio de imagen de la cámara se puede resumir de la siguiente manera:

Escena ( la SCENE ) a través de la lente ( la LENTE generado) una imagen óptica proyectada sobre el sensor de imagen (sensor) en la superficie, y luego se convierte en una señal eléctrica , después de A / D (conversión analógica-digital) después de la conversión se convierte en la señal de imagen digital , y luego enviado a una señal digital chip de procesamiento (DSP) se procesan -> datos de imagen RGB, a continuación, a través de la interfaz IO a la transmisión de la CPU de procesamiento por DISPLAY puede ver la imagen.

Un dispositivo de carga acoplada (CCD) o un semiconductor complementario de óxido metálico (CMOS) recibe la lente óptica a la imagen pasado a través del convertidor analógico / digital (A / D) convertida en una señal digital, después de que el almacenamiento de código.

El proceso es como sigue: 
. 1, la CCD / objeto a los CMOS señales ópticas en señales eléctricas - una imagen electrónica (señal analógica) 
2, por un convertidor analógico / digital (ADC) de chip a la señal analógica en una señal digital 
3, la señal digital después de la formación, la señal se comprime o codificados por la biblioteca DSP y se convierte a un formato de almacenamiento de archivos de imagen especificado

Cámara digital lente óptica con las mismas cámaras convencionales, el dispositivo de la imagen de detección para el polietileno, es decir, (luz) dispositivo de carga acoplada (CCD) . cámaras CCD que sustituye la tradicional película fotográfica posición, que es una función de la señal óptica es convertida en una señal eléctrica , la misma que la cámara de TV.

Un CCD es un dispositivo semiconductor , el núcleo de una cámara digital, que es el número de células contenidas en el dispositivo determina la cámara digital de calidad de la imagen - el píxel , los más células , es decir, un alto número de píxeles , imagen calidad es mejor , por lo general bajo de píxeles representantes una cámara digital de calidad y especificaciones técnicas .

2, marco de la cámara de Android

subsistema de la cámara de Android proporciona un marco para la toma de fotografías y grabación de vídeo.

Se aplicará a la cámara superior del marco de aplicaciones, la biblioteca de usuarios conectados en serie, y es la biblioteca de usuario comunicarse capa de hardware de la cámara y para lograr operar hardware de la cámara.

imagen

3, la estructura del código cámara Android

código de Android de la cámara se encuentra principalmente en los siguientes directorios: 
porción de la cámara de JAVA 
paquetes / aplicaciones / cámara /. Camera.java archivo que es el principal logro. En esta sección se compila en meta Camera.apk 
com.android.camera este paquete, varios archivo de clase principal de la siguiente manera: 
PhotoViewer: GalleryPicker.java (todas las imágenes set) ---> ImageGallery.java (bajo una imagen lista de carpetas ) ---> ViewImage.java (ver fotos de una imagen específica) 
VideoPlayer: GalleryPicker.java (todo el aparato de video) ---> MovieView.java (ver un vídeo) 
de la cámara: Camera.java (visor de la cámara y la cámara) 
videocámara : VideoCamera.java (visor vIDEOCÁMERA y la cámara)

 

El marco para la parte superior de la aplicación llama a la cámara

 

base / núcleo / java / androide / hardware / Camera.java

Esta parte de la meta es framework.jar

 

Cámara JNI parte de 
los marcos / base / core / JNI /  android_hardware_Camera.cpp
En esta sección se compila en meta libandroid_runtime.so.

La interfaz de usuario de la cámara sección de biblioteca 
marcos / base / libs / ui /  cámara
contenido de esta sección se compila en un libcamera_client.so biblioteca.

Cámara sección de servicios 
marcos / base / cámara / libcameraservice / 
Esta sección se compila en un libcameraservice.so biblioteca.

Cámara porción de capa HAL 
hardware / msm7k / libcamera 

vendedor / QCOM / android-abierto /  libcamera2
fin de lograr una cámara de función particular, la capa HAL requiere una biblioteca cámara relacionados con el hardware (por ejemplo, llamando vídeo para controladores de Linux y el programa de codificación JPEG aplicar o dirigir una biblioteca privada con varios fabricantes de chips para lograr, tales como Qualcomm logra libcamera.so y libqcamera.so), implementa la interfaz CameraHardwareInterface prescrito, para llamar a la biblioteca correspondiente, drive driver-relacionado, realizar la operación de hardware de la cámara . Esta biblioteca es la biblioteca libcameraservice.so llamadas de servicio de la cámara.

Continuará

En el próximo artículo, voy a detallar dos caminos para alcanzar HAL Cámara: La base v4l2 especificaciones propias para lograr CameraHardwareInterface, la arquitectura de la cámara de Qualcomm (QualcommCameraHardware y MM-cámara / mm-todavía). Por supuesto, cuando se trata de Qualcomm sección de la biblioteca privada, con el fin de evitar problemas innecesarios, voy a estar pasando. Por favor, perdóname!

 

 

 

Qualcomm Android depuración hardware de la plataforma de la cámara

 

 

Depuración en la plataforma androide Qualcomm sensor de la cámara párrafo 2, es un sensor de OV de 5M YUV, admite los formatos JPEG a cabo, también es compatible con la FA, la depuración relativamente simple, debido a que otros proyectos que ya están en uso, sólo hay que poner en la unidad de trasplante relacionados buena, y el otro es Samsung de un relativamente nuevo sensor de 3M YUV FF, el último proyecto que se utiliza en este documento para depurar el sensor, por ejemplo, para compartir la experiencia desde la perspectiva del conductor subyacente depuración de la cámara en el Qualcomm plataforma android, en cuanto a la arquitectura de la plataforma de Qualcomm y la parte del principio de que la cámara no es demasiado introducción.
En primer lugar, los trabajos preparatorios
del proyecto visto antes de hardware (bordo) listo, la parte de software es estar preparado. Por separado de la vista inferior de la unidad, la parte de software se puede dividir en dos partes, una plataforma de paso alto-dependiente, entonces uno es práctica común a la parte de sensor del sensor relacionados se trasplanta en el bastidor se fija a una plataforma de paso alto. Por lo que necesitamos para conseguir el sensor de registro de ajuste de las especificaciones y los proveedores de sensor de archivo. propósito Spec es aparente y una plataforma de comunicaciones de sensores de paso alto (registro de escritura) y el ajuste de parámetros relacionados con la sincronización, el archivo de configuración proporcionado por el fabricante está utilizando diversas funciones de la cámara (vista previa instantánea, ...) cuando las necesidades de los sensores que se escribirá en.
En este proyecto, la plataforma Qualcomm MSM7X27, cámara Samsung es 5CA. Se conoce a partir de la especificación, el sensor de ID I2C es 0x78, la comunicación I2C se utiliza el modo de doble byte, reglas adicionales también son claras el sensor de lectura de registro, desde el punto de vista de depuración de forma suficiente. archivo proporcionado por el fabricante también establecer, de hecho, la lista de registros, a continuación, nos dice lo que el tiempo para escribir lo valores que registra, por lo general una dirección de registro más el valor del registro, pero el texto es proporcionada por Samsung PC depuración de uso, Es necesario para convertir en sí en un lenguaje bidimensional gama c. Visto desde el archivo, el registro de datos se puede dividir en varias partes: inicialización, estableciendo el coeficiente intelectual (sintonización relacionada), CLK está activada, el ajuste de vista previa, conjunto de instantáneas, hay varios de forma suficiente, como la regulación de la otra cuestión brillo, se establece un efecto especial, se proporciona un balance de blancos, etc., se puede lograr por sus especificaciones.
Sensor trasero porción de obtener algo, el siguiente paso es modificar la parte de transmisión de la cámara de paso alto, se encuentran:
piezas Kernal:
1. La configuración del sensor Compruebe la alimentación, y modificar la configuración en el software. Este proyecto utilizando 2.8 / 1.8 / 1.5 potencia de 3.
2, verificación de reajuste del sensor y modificar la configuración. Nota que la fijación de tiempo de reposición, asegúrese de especificación y consistente, si no llevará sensor no funciona.
3, controlador I2C modificado, doble byte interfaz de lectura, y la terminación de la lectura de identificación del sensor de la interfaz. Esto se utiliza para verificar si la comunicación I2C permiso
. 4, se introduce en conjunto de registros, los valores de los registros correspondientes están escritos en varias partes de la inicialización, vista previa, instantánea y similares.
Nota: Poner a cero y la sección registros de escritura debe añadir un poco de demora de acuerdo con las disposiciones de la especificación, de lo contrario, dará lugar a sensor de trabajo anormal

del segmento espacial del usuario:
Esta parte es para configurar las especificaciones de hardware de VFE, como el formato, modo de interfaz, resolución, tamaño, datos de salida del sensor de señal de sincronización de patrones, etc., es relativamente simple, pero asegúrese de doble comprobación, no lleva a ninguna parte depuración de fallos.
Hasta este punto, la parte de software de la preparación ha llegado a su fin.

En segundo lugar, el entorno de depuración para preparar (la junta salió, pero no en lugar de la muestra del sensor)
En primer lugar, la preparación del punto de prueba.
Antes de la puesta tendrá que pensar bien, si el sensor no funciona, cómo depurar, que requiere para medir algunas señales, como la energía, reset, I2C, M / P CLK, H / V señales de sincronización, las señales de datos, etc., para asegurar que estos la señal puede ser medida.
En segundo lugar, hay que elegir el entorno de software de depuración, aquí optar por realizar el programa-qcamera-test mm Qualcomm en el ADB entorno de depuración, la traza correspondiente se puede imprimir.
Así que todo está listo, sólo el sensor.

En tercer lugar, la depuración (sensor finalmente consiguió)
un sensor conectado a la placa, de arranque, el BAD ejecutar el depurador, una vista previa de la imagen no salió, fallar, un poco decepcionado, pensaba que sea posible de una sola vez, pero después de todo esto es una nueva sensor, en cualquier lugar no creo que la posición de bit conducirá al fracaso. A continuación, busque las razones para ello.
1, la traza que primero, la lectura del sensor tiene I2C ID: 0x05CA, lo que puede explicar la comunicación I2C no es ningún problema
2, a continuación, comprobar la configuración de alimentación del sensor, el sensor de fuente de alimentación medido 3, es el OK.
3, la medición de la MCLK, se proporciona al sensor utilizado, normal (24MHZ)
. 4, la medición de la PCLK, la salida del sensor es normal (58MHZ, el límite superior de la 96MHz de paso alto), y los mismos registros de configuración.
señal V de sincronización 5, H medición /, la salida del sensor es normal. Y FPS y resolución por unanimidad.
6, la señal de datos de medición, la salida del sensor es normal. (Señal de datos puede ser visto en el osciloscopio)
Al parecer, el sensor tiene que trabajar, pero ¿por qué la pantalla de vista previa no salir de ella? Qualcomm continúa comprobando el lado del conjunto.
A partir del trazado de vista, Qualcomm VFE se ha restablecido y empezar, pero una vista previa dirigir ningún dato de salida, lo cual es extraño, el sensor tiene una salida clara, por qué después de VFE recibido y no hay datos escupir, hacerlo datos de la salida del sensor VFE no se reconoce? Para comprobar esto, Medí en los otros datos de forma de onda de salida del sensor tablero VO, principalmente clk M / P, la señal H / V de sincronización, y luego se usa para comparar, pero no inusual, pero el V sync / H las señales son diferentes, el nivel principal del ciclo de trabajo no es constante, por lo que la señal no será el problema es? Para más Validar, Medí simultáneamente H señal de A / V y una señal de datos, los datos de señal después encontraron salida OV sensor está en la señal de sincronización de trama de paquetes de bajo nivel V, y una señal de datos se emite desde Samsung 5CA paquete de marcos de V señales de sincronización de alto nivel, no será por ajuste de la señal V de polaridad no conduce a datos de salida VFE sensor leer en ella? Volvió a comprobar el conjunto de Qualcomm VFE, y se ha utilizado es un parámetro V para ajustar la polaridad de la señal, este parámetro por defecto Activo bajo, no estoy aquí para modificarlo. A continuación, utilice este parámetro para Activo alto, Reformado, después de la descarga, la operación de arranque, Ok una pantalla pantalla de vista previa correctamente. Hasta este punto, la depuración de hardware del sensor puede ser contado como completa, siguen otras funciones también pueden mejorarse gradualmente.

 

 

FSL propósitos de depuración de la cámara

FSL la capa superior de la cámara hal no implementa los parámetros de configuración de la interfaz de la capa inferior, que necesita su propia implementación. Afortunadamente, a partir de la capa de aplicación para el parámetro ya Hal correr de nuevo, de lo contrario la carga de trabajo es aún mayor.
Hal parámetro de la capa llamada a la función de ajuste es status_t CameraHal :: setParameters (CameraParameters const & params). Establecer los parámetros de cada parámetro de esta función en el interior. CameraParameters parámetros de ajuste logra principalmente a través de la clase. Esta clase se encuentra mediante la observación, que tiene una función get (), los parámetros se pueden obtener, respectivamente. El
carbón de leña const * white_balance = params.get (CameraParameters :: KEY_WHITE_BALANCE); este parámetro puede ser obtenido, es decir, el valor de retorno del balance de blancos actual. El valor de retorno se determina entonces que es el caso, como
si (strcmp (white_balance, CameraParameters :: WHITE_BALANCE_AUTO) == 0) {// se determina que el balance de blancos automático
logV ( "white_balance automático a la ioctl ES / n-!");
CTL. id = V4L2_CID_AUTO_WHITE_BALANCE; // comando automático de balance de blancos, ctl como estructura v4l2_control que es útil
= ctl.value 1;.
IF (la ioctl (camera_device, VIDIOC_S_CTRL, y ctl) <0) {// por VIDIOC_S_CTRL pasar por la ctl estructura
la LOGE ( "control SET falló / n-");
// return -1;
}
} Else if (strcmp (white_balance, CameraParameters :: WHITE_BALANCE_INCANDESCENT) == 0) {// modo incandescente
logV ( "ES incandescente white_balance a la ioctl / n-!");
Ctl.id = V4L2_CID_DO_WHITE_BALANCE; // saldo de otros casos este comando
ctl.value = 2; // modo de balance de blancos de acuerdo con el número definido por el usuario de permutaciones
si la misma estructura por pase VIDIOC_S_CTRL en la ctl (ioctl (camera_device, VIDIOC_S_CTRL, y ctl) <0) {//, a continuación, de acuerdo con valorar el valor de los puntos de la discusión
el palco ( "control SET no / n");
// return -1;
}
}

mxc_v4l_ioctl transmitida a la conducción de archivo mxc_v4l2_capture.c, mxc_v4l_ioctl llamada mxc_v4l_do_ioctl, mxc_v4l_do_ioctl siguiente explicación del comando
/ *!
* VIDIOC_S_CTRL la ioctl V4L2
* /
Case VIDIOC_S_CTRL: {
pr_debug ( "caso VIDIOC_S_CTRL / n-");
retval = mxc_v4l2_s_ctrl (CAM, Arg);
PAUSA;
}
Esto a mxc_v4l2_s_ctrl. En el caso de sub-mxc_v4l2_s_ctrl llamando ctl.id
Switch (la C-> ID) {
......
Caso V4L2_CID_AUTO_WHITE_BALANCE:
ipu_csi_enable_mclk_if (CSI_MCLK_I2C, CAM> CSI, true, true);
RET = vidioc_int_s_ctrl (CAM> Sensor, c); // esta función es accionado en corresponden v4l2 OV7670 s_ctl
ipu_csi_enable_mclk_if (CSI_MCLK_I2C, CAM> CSI, en false, false);
PAUSA;
caso V4L2_CID_DO_WHITE_BALANCE:
ipu_csi_enable_mclk_if (CSI_MCLK_I2C, CAM> CSI, true, true);
RET = vidioc_int_s_ctrl (CAM> sensor, C);
ipu_csi_enable_mclk_if (CSI_MCLK_I2C, CAM> CSI, en false, false);
PAUSA;
......
en la que vidioc_int_s_ctrl () es accionado en corresponden v4l2 OV7670 ioctl_s_ctrl, ya que el código específico correspondiente a cómo razones de espacio no se publican.
Los puntos de identificación para lograr CTL estructura de lata.
interruptor (VC> id) {
.....
V4L2_CID_AUTO_WHITE_BALANCE caso:
retval = ov7670_autowhitebalance (VC-> valor);
descanso;
caso V4L2_CID_DO_WHITE_BALANCE:
retval = ov7670_dowhitebalance (VC-> valor);
descanso;
......
下面是whitebalance函数的实现
static int ov7670_autowhitebalance (int value)
{
Char v unsigned = 0;
ret int;
printk ( "0v7670_autowhitebalance llama / n");
ret = ov7670_read (ov7670_data.i2c_client, REG_COM8, y v);
si (valor)
v | = COM8_AWB; //自动白平衡

msleep (10); / * FIXME * /
ret + = ov7670_write (ov7670_data.i2c_client, 0x01, 0x56);
ret + = ov7670_write (ov7670_data.i2c_client, 0x02, 0x44);
ret + = ov7670_write (ov7670_data.i2c_client, REG_COM8, v);

ret regresar; 
}

Static int ov7670_dowhitebalance (int value)
{
unsigned char v = 0;
ret int;
printk ( "0v7670_dowhitebalance llamado valor:% d / n", valor);
ret = ov7670_read (ov7670_data.i2c_client, REG_COM8, y v);
si (valor)
v & = ~ COM8_AWB; //关闭自动白平衡

msleep (10); / * FIXME * /
ret + = ov7670_write (ov7670_data.i2c_client, REG_COM8, v);
si (valor == 2) // // INCANDESCENCIA这个值就是ctl的valor值
{
ret + = ov7670_write (ov7670_data.i2c_client, 0x01, 0x8c);
ret + = ov7670_write (ov7670_data.i2c_client, 0x02, 0x59);
} else if (valor == 3) // FLUORESCENTE
{
+ = Ov7670_write RET (ov7670_data.i2c_client, 0x01, 0x7E);
RET = + ov7670_write (ov7670_data.i2c_client, 0x02, 0x49); 
(. Valor == 4)} la persona si la luz del día //
{
RET = + ov7670_write (ov7670_data.i2c_client, 0x01, 0x52);
RET = + ov7670_write (ov7670_data.i2c_client, 0x02, 0x66);
}

RET retorno; 
}
en el que la función ox01,0x02 son de color azul y rojo registro de ganancia de canal.

capa Hal desde arriba del sensor de final de balance de blancos para los parámetros del proceso. Otros efectos tales como el color, son el mismo proceso de modo de vista.
Ver ajuste del modo particular, se registra en función de las circunstancias, tales como el modo de noche para
el efecto de color se consigue principalmente estableciendo el valor de la UV

Publicados 377 artículos originales · ganado elogios 145 · vistas 210 000 +

Supongo que te gusta

Origin blog.csdn.net/Windgs_YF/article/details/104262321
Recomendado
Clasificación