Resumir y organizar algunos puntos técnicos desarrollados por Qualcomm Camera HAL3.
Haga un registro para poder consultarlo fácilmente más adelante.
1. Directorio, entonces, archivo de configuración
productName es el nombre del proyecto
- out Target路径:\out\target\product\productName\
- chi-cdk:\proveedor\qcom\proprietary\chi-cdk\
- Nodo ldc:\vendor\qcom\proprietary\chi-cdk\oem\qcom\node\ldc\
- Así compilado por nodo:\vendor\lib64\camera\components\
- caso de uso compilado de la siguiente manera: \vendor\lib64\com.qti.chiusecaseselector.so (debe compilar el caso de uso después de modificar el xml de la canalización)
- compilado por chi-cdk: \vendor\lib64\hw\com.qti.chi.override.so
- Caso de uso xml: chi-cdk\oem\qcom\topology\titan\fillmore\fillmore_usecase.xml
- Pipelines xml文件: chi-cdk\oem\qcom\topology\titan\usecase-components\usecases\UsecaseZSL\pipelines\
- Archivo de etiqueta de proveedor: chi-cdk\oem\qcom\vendortag\chivendortagoemdefines.h
- RealTimeFeature.xml: chi-cdk\oem\qcom\topology\titan\usecase-components\segments\fillmore\RealTimeFeature.xml
- camxoverridesettings.txt: un método de depuración temporal proporcionado por Qualcomm a los desarrolladores para controlar la impresión de registros, el volcado de datos, etc. En proveedor/etc/camera/ en el directorio del dispositivo, usted mismo debe crear manualmente los directorios cámara y camxoverridesettings.txt.
2. Rutas relacionadas con el conductor:
archivo bin: /vendor/lib64/camera (si elimina el archivo bin hasta que solo quede uno, solo se instalará uno cuando el controlador esté encendido, y solo esta cámara se abrirá cuando la cámara esté encendida)
Archivo de configuración:
- \proveedor\qcom\proprietary\chi-cdk\oem\qcom\buildbins\build\android\binary_taro
- /proveedor/qcom/proprietary/chi-cdk/oem/qcom/module
Archivo del controlador:
- \vendor\qcom\proprietary\chi-cdk\oem\qcom\sensor\s5khm6
3.camxsettings.xml
Busque camxsettings.xml en /vendor/qcom/proprietary. Después de encontrarlo, cambie el valor de la variable definida en camxsettings.xml modificando camxoverridesettings.txt.
- /vendor/etc/camera # echo enableDSM=FALSE >> camxoverridesettings.txt
- /vendor/etc/camera # cat camxoverridesettings.txt
4.Configuración de registro de camxoverridesettings.txt:
registro de chi: Por ejemplo: CHX_LOG_ERROR(fmt, args);
adb shell "echo overrideLogLevels=0x1f >> /vendor/etc/camera/camxoverridesettings.txt"
O: adb shell setprop seller.debug.camera.overrideLogLevels 0x1F (definido en camxsettings.xml, diferentes códigos pueden ser diferentes)
Registros normalmente abiertos (ábralos según sea necesario, todos los registros se perderán y el rendimiento se verá afectado):
hal/núcleo/chi
- adb shell "echo logInfoMask=0x50080 >> /vendor/etc/camera/camxoverridesettings.txt"
- adb shell setprop persist.vendor.camera.logVerboseMask 0xFFFFFFFF
- adb shell setprop persist.vendor.camera.logEntryExitMask 0xFFFFFFFF
- adb shell setprop persist.vendor.camera.logInfoMask 0xFFFFFFFF
- adb shell setprop persist.vendor.camera.logWarningMask 0xFFFFFFFF
- adb shell setprop persist.vendor.camera.logConfigMask 0xFFFFFFFF
- adb shell setprop persist.vendor.camera.systemLogEnable VERDADERO
- adb shell setprop persist.vendor.camera.logLogDRQMask 0xFFFFFFFF
registro de camx:
- adb shell "echo overrideLogLevels=0xF >> /vendor/etc/camera/camxoverridesettings.txt"
- adb shell "echo logVerboseMask=0x1000 >> /vendor/etc/camera/camxoverridesettings.txt"
- adb shell "echo logInfoMask=0xFFFFFFFF >> /vendor/etc/camera/camxoverridesettings.txt"
5. Seleccione el registro del gráfico de características:
Chifeature2graphselector.cpp:1549 SelectFeatureGraphforRequestFromTable()
Etiqueta:"Gráfico de características seleccionadas para solicitud:"
Por lo general, primero debe ejecutar el siguiente comando para imprimir el registro:
- adb shell echo "overrideLogLevels=0x9" >>/vendor/etc/camera/camxoverridesettings.txt
- adb shell echo overrideLogLevels=8 >>echo/vendor/etc/camera/camxoverridesettings.txt
Diferentes plataformas tienen diferentes detalles:
8350:
- constante estática UINT32 CHX LOG CONFIG MASK =4:
- adb shell echo overrideLogLevels=4 >>/vendor/etc/camera/camxoverridesettings.txt
8450:
- adb shell overrideLogLevels=8 >>"echo/vendor/etc/camera/camxoverridesettings.txt
- CHX LOG INFO("Gráfico de características seleccionadas para la solicitud %u: %spFeature2RequestObject->GetAppFrameNumber (),requestGraph. pGraphDesc->pFeatureGraphName);
sm4350:
- adb shell "echo overrideLogLevels=4>>/vendor/etc/camera/camxoverridesettings.txt
- CHX LOG CONFIG(Feature2Mapping: Gráfico de características seleccionadas: %s"pChiFeature2GraphDesc->pFeatureGraphName);
6.Cómo encontrar una tubería
Búsqueda de código:
Encuentre chifeature2rawhdrdescriptor.cpp
Buscar ChiFeature2PipelineDescriptor
Búsqueda de registros:
Etiqueta: "Transmisión activada"
7.Crear canalizaciones()
AdvancedCameraUsecase, UsecaseMultiCamera y otros casos de uso llamarán a CreatePipelines() para crear canalizaciones.
chifeature2 también llamará a CreatePipelines() para crear una canalización
Por ejemplo:
En el modo SAT, el modo de vista previa no es característica2 y el modo de fotografía es característica2:
//Tres canalizaciones creadas: SATOfflinePreview; RealtimePreviewSATO; Merge3YuvCustomTolYuv
8. Cómo encontrar el archivo de configuración del nodo de canalización:
1. ETIQUETA de registro: "StreamingOn for pipeline" Verifique la canalización actual
2. Busque el xml de la canalización en el directorio \vendor\qcom\proprietary\chi-cdk\oem\qcom\topology\titan
3. Busque en el xml de la canalización <CamxInclude segment=" xxxxxxxxxx"/>
4. Encuentre el xml de CamxInclude
5. Agregue el nodo
9. Agregue impresión de pila:
Agregue impresión de pila en \camx\src\core\hal\camxhal3stream.cpp
camx/src/lib/build/android/Android.mk Configuración LOCAL_SHARED_LIBRARIES += libutilscallstack
En el código donde desea imprimir la pila, agregue: android::CallStack stackprintf("xxxxxx");
10. Agregue una VendorTag para controlar la función:
Para obtener más información, consulte "Agregar una etiqueta de proveedor".
Cámara Qualcomm HAL3: agregue un blog-CSDN de VendorTag_shawn·xiao
11.Archivo de configuración de ID de cámara
chi-cdk\oem\qcom\multicamera\chimcxcameraconfig\configs\fillmore\fillmore_legacymc.xml
12. Verifique el impacto de los algoritmos en el nodo.
Puedes usar memcopy Node para excluir:
13. Agregue propiedades del sistema de depuración a la capa inferior:
Archivo de encabezado: #include <cutils/properties.h>
Agregue en \chi-cdk\oem\qcom\node\awrawhdr\build\android\Android.mk:
LOCAL_SHARED_LIBRARIES :=
libcutils \
Ejemplo: if(property_get_int32("debug.vendor.camera.dumpawraw",0))
13. Ver registros de AEC:
Principalmente mira el segundo.
(1). 05-14 06:40:13.737 7710 7779 V CamX: [VERB][STATS_AEC] caecxcontrol.h:586: PrintFrameControl CID 1 función 0 fID 227 modo PerFrame omitido:0 flash apagado lux 276,5 ISO 640 (corto seguro largo) G 13.319 13.319 13.319 ET 60000000 60000000 60000000 SI 799110720 799110720 799110720 establecido 1 brillo establecido 1 FL 219.9 instantánea normal LED1 0 LED2 0 LEDAF 0 LEDFD 0 predictivo 1.0 duración del flash 0 compenDB 1.000 compenADRC 1.000 shortBlend 1.000000 FinalFlickerMode 1
(2) Ganancia:TiempoExp
14. Eliminar el tamaño QCFA de la configuración del controlador
Busque el archivo de configuración del controlador anotado
qssi12_7450/vendor/qcom/proprietary/chi-cdk/oem/qcom/sensor/s5khm6/s5khm6_sensor.xml
Encuentre la definición de Qcfa y elimínelas todas.
15. Encuentre los valores de exposición máximo, medio y mínimo.
\chi-cdk\core\chiframework\chimcxdevicecaps.cpp
Función de valor de exposición de relleno: FillExposureTime()
\camx\src\core\camximagesensordata.cpp
Obtenga la configuración del xml del sensor y calcule los valores de exposición mínimo, medio y máximo asignados: GetSensorStaticCapability()
/chi-cdk/oem/qcom/sensor/s5khm6/s5khm6_sensor.xml
Configurado en el archivo de configuración del controlador:
<exposureControllnfo>
<verticalOffset>10<verticalOffset>
<maxLineCount>65525<maxLineCount>
16. Casos de uso y canalizaciones comunes
Lo mencioné en publicaciones de blog anteriores, así que lo enumeraré nuevamente.
Diferentes modelos tienen diferente rendimiento y posicionamiento del producto. Incluso si la línea base es la misma, el caso de uso, etc., puede ser diferente.
El enfoque de Qualcomm ofrece a los fabricantes de teléfonos móviles mucho espacio para la personalización: por ejemplo, para un determinado modelo, UseCase se puede reutilizar en escenarios y el canal correspondiente también se puede utilizar o reutilizar.
17. Modificar los permisos de los archivos.
Los resultados de la calibración se escriben en el parche de calib_result, pero los permisos del archivo 777 no se configuran correctamente, lo que hace que el archivo calib_result generado no tenga permisos legibles por terceros.
Se puede ver a través de adb shell ls -laZ calib_result como -rwx------
Modifique el parche de la siguiente manera: después de la depuración, el tercero puede leer calib_result y el permiso se convierte en -rwxrwxrwx:
{
mode_t pCurMask = umask(0);
......
umask(pCurMask);
}
18. Implemente el volcado yuv y raw configurando camxoverridesettings.txt
volcar crudo:
autoImageDumpMask=1
offlineImageDumpOnly=FALSE
reprocessDump=TRUE
autoImageDump=TRUE
autoInputImageDumpMask=0x1
autoImageDumpIFEoutputportMask=0xFB8
volcar yuv:
autoImageDumpMask=1
offlineImageDumpOnly=FALSO
reprocessDump=TRUE
autoImageDump=TRUE
autoImageDumpIPEoutputportMask=0x700