Resuma e organize alguns pontos técnicos desenvolvidos pela Qualcomm Camera HAL3.
Faça um registro para facilitar a consulta posteriormente.
1. Diretório, portanto, arquivo de configuração
productName é o nome do projeto
- out Target路径:\out\target\product\productName\
- chi-cdk:\fornecedor\qcom\proprietário\chi-cdk\
- nó ldc:\fornecedor\qcom\proprietário\chi-cdk\oem\qcom\node\ldc\
- Então compilado por node:\vendor\lib64\camera\components\
- usecase compilado assim: \vendor\lib64\com.qti.chiusecaseselector.so (você precisa compilar usecase assim depois de modificar o xml do pipeline)
- então compilado por chi-cdk: \vendor\lib64\hw\com.qti.chi.override.so
- usecase xml文件:chi-cdk\oem\qcom\topology\titan\fillmore\fillmore_usecase.xml
- pipelines xml文件:chi-cdk\oem\qcom\topology\titan\usecase-components\usecases\UsecaseZSL\pipelines\
- arquivo vendortag: chi-cdk\oem\qcom\vendortag\chivendortagoemdefines.h
- RealTimeFeature.xml:chi-cdk\oem\qcom\topology\titan\usecase-components\segments\fillmore\RealTimeFeature.xml
- camxoverridesettings.txt: um método de depuração temporário fornecido pela Qualcomm aos desenvolvedores para controlar a impressão de log, despejo de dados, etc. Em vendor/etc/camera/ no diretório do dispositivo, os diretórios camera e camxoverridesettings.txt precisam ser criados manualmente por você mesmo.
2. Caminhos relacionados ao driver:
arquivo bin: /vendor/lib64/camera (se você excluir o arquivo bin até que reste apenas um, apenas um será instalado quando o driver for ligado e apenas esta câmera será aberta quando a câmera for ligada)
Arquivo de configuração:
- \vendor\qcom\proprietary\chi-cdk\oem\qcom\buildbins\build\android\binary_taro
- /fornecedor/qcom/proprietário/chi-cdk/oem/qcom/module
Arquivo do driver:
- \fornecedor\qcom\proprietário\chi-cdk\oem\qcom\sensor\s5khm6
3.camxsettings.xml
Pesquise camxsettings.xml em /vendor/qcom/proprietary. Depois de encontrá-lo, altere o valor da variável definida em camxsettings.xml modificando camxoverridesettings.txt.
- /vendor/etc/camera # echo enableDSM=FALSE >> camxoverridesettings.txt
- /vendor/etc/camera # cat camxoverridesettings.txt
Configurações de registro 4.camxoverridesettings.txt:
log chi: Por exemplo: CHX_LOG_ERROR(fmt, args);
adb shell "echo overrideLogLevels=0x1f >> /vendor/etc/camera/camxoverridesettings.txt"
Ou: adb shell setprop vendor.debug.camera.overrideLogLevels 0x1F (definido em camxsettings.xml, códigos diferentes podem ser diferentes)
Logs normalmente abertos (abertos conforme necessário, todos os logs serão perdidos e o desempenho será afetado):
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 TRUE
- adb shell setprop persist.vendor.camera.logLogDRQMask 0xFFFFFFFF
registro 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. Selecione o log do featuregraph:
Chifeature2graphselector.cpp:1549 SelectFeatureGraphforRequestFromTable()
Tag:"Gráfico de recurso selecionado para solicitação:"
Normalmente você precisa executar o seguinte comando primeiro para imprimir o Log:
- adb shell echo "overrideLogLevels=0x9" >>/vendor/etc/camera/camxoverridesettings.txt
- adb shell echo overrideLogLevels=8 >>echo/vendor/etc/camera/camxoverridesettings.txt
Diferentes plataformas têm detalhes diferentes:
8350:
- const estático 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 recurso selecionado para solicitação %u: %spFeature2RequestObject->GetAppFrameNumber (),requestGraph. pGraphDesc->pFeatureGraphName);
sm4350:
- adb shell "echo overrideLogLevels=4>>/vendor/etc/camera/camxoverridesettings.txt
- CHX LOG CONFIG(Feature2Mapping: Gráfico de recurso selecionado: %s"pChiFeature2GraphDesc->pFeatureGraphName);
6.Como encontrar pipeline
Pesquisa de código:
Encontre chifeature2rawhdrdescriptor.cpp
Encontre ChiFeature2PipelineDescriptor
Pesquisa de registros:
Tag: "Streaming ativado"
7.CriarPipelines()
AdvancedCameraUsecase, UsecaseMultiCamera e outros casos de uso chamarão CreatePipelines() para criar pipelines
chifeature2 também chamará CreatePipelines() para criar um pipeline
por exemplo:
No modo SAT, o modo de visualização não é recurso2 e o modo de foto é recurso2:
//Três pipelines criados: SATOfflinePreview; RealtimePreviewSATO; Merge3YuvCustomTolYuv
8. Como encontrar o arquivo de configuração do nó do pipeline:
1. Log TAG: "StreamingOn for pipeline" Verifique o pipeline atual
2. Encontre o xml do pipeline no diretório \vendor\qcom\proprietary\chi-cdk\oem\qcom\topology\titan 3.
Procure no xml do pipeline <CamxInclude segment=" xxxxxxxxx"/>
4. Encontre o xml do CamxInclude
5. Adicione o nó
9. Adicione impressão em pilha:
Adicionar impressão de pilha em \camx\src\core\hal\camxhal3stream.cpp
camx/src/lib/build/android/Android.mk 里添加 LOCAL_SHARED_LIBRARIES += libutilscallstack
No código onde você deseja imprimir a pilha, adicione: android::CallStack stackprintf("xxxxxx");
10. Adicione um VendorTag para controlar o recurso:
Para obter detalhes, consulte "Adicionar uma VendorTag"
Qualcomm Camera HAL3: Adicione um blog de VendorTag_shawn·xiao-blog CSDN
11.Arquivo de configuração de ID da câmera
chi-cdk\oem\qcom\multicamera\chimcxcameraconfig\configs\fillmore\fillmore_legacymc.xml
12. Verifique o impacto dos algoritmos no nó
Você pode simplesmente usar o nó memcopy para excluir:
13. Adicione propriedades do sistema de depuração à camada inferior:
Arquivo de cabeçalho: #include <cutils/properties.h>
Adicione em \chi-cdk\oem\qcom\node\awrawhdr\build\android\Android.mk:
LOCAL_SHARED_LIBRARIES :=
libutils\
Exemplo: if(property_get_int32("debug.vendor.camera.dumpawraw",0))
13. Visualize os registros AEC:
Olhe principalmente para o segundo
(1). 05-14 06:40:13.737 7710 7779 V CamX: [VERB][STATS_AEC] caecxcontrol.h:586: PrintFrameControl CID 1 função 0 fID 227 modo PerFrame ignorado:0 flash off lux 276,5 ISO 640 (curto seguro longo) G 13.319 13.319 13.319 ET 60000000 60000000 60000000 SI 799110720 799110720 799110720 ajustado 1 brilho ajustado 1 FL 219,9 instantâneo normal LED1 0 LED2 0 LEDAF 0 LEDFD 0 preditivo 1,0 duração do flash 0 compenDB 1 .000 compenADRC 1.000 shortBlend 1.000000 FinalFlickerMode 1
(2) Ganho:TempoExp
14. Remova o tamanho QCFA da configuração do driver
Encontre o arquivo de configurações do driver anotado
qssi12_7450/vendor/qcom/proprietary/chi-cdk/oem/qcom/sensor/s5khm6/s5khm6_sensor.xml
Encontre a definição Qcfa e remova todas elas
15. Encontre os valores de exposição máximo, médio e mínimo
\chi-cdk\core\chiframework\chimcxdevicecaps.cpp
Função de preenchimento de valor de exposição: FillExposureTime()
\camx\src\core\camximagesensordata.cpp
Obtenha a configuração do xml do sensor e calcule os valores de exposição mínimo, médio e máximo atribuídos: GetSensorStaticCapability()
/chi-cdk/oem/qcom/sensor/s5khm6/s5khm6_sensor.xml
Configurado no arquivo de configuração do driver:
<exposureControllnfo>
<verticalOffset>10<verticalOffset>
<maxLineCount>65525<maxLineCount>
16. Casos de uso e pipelines comuns
Eu listei isso em postagens anteriores do blog, então vou listá-lo novamente.
Modelos diferentes têm desempenho e posicionamento de produto diferentes, mesmo que a linha de base seja a mesma, o caso de uso, etc., pode ser diferente.
A abordagem da Qualcomm dá aos fabricantes de telefones celulares muito espaço para personalização, por exemplo, para um determinado modelo, o UseCase pode ser reutilizado em cenários, e o pipeline correspondente também pode ser usado ou reutilizado.
17. Modifique as permissões do arquivo
Os resultados da calibração são gravados no patch de calib_result, mas as permissões do arquivo 777 não são definidas com êxito, fazendo com que o arquivo calib_result gerado não tenha permissões legíveis por terceiros.
Ele pode ser visualizado através do adb shell ls -laZ calib_result como -rwx------
Modifique o patch da seguinte maneira: após a depuração, o terceiro pode ler calib_result e a permissão se torna -rwxrwxrwx:
{
mode_t pCurMask = umask(0);
......
umask(pCurMask);
}
18. Implemente dump yuv e raw configurando camxoverridesettings.txt
despejar cru:
autoImageDumpMask = 1
offlineImageDumpOnly = FALSO
reprocessDump = VERDADEIRO
autoImageDump = VERDADEIRO
autoInputImageDumpMask = 0x1
autoImageDumpIFEoutputportMask = 0xFB8
despejar yuv:
autoImageDumpMask = 1
offlineImageDumpOnly = FALSO
reprocessDump = VERDADEIRO
autoImageDump = VERDADEIRO
autoImageDumpIPEoutputportMask = 0x700