Câmera Qualcomm HAL3: Resumo dos pontos técnicos de desenvolvimento do projeto

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

19. Continuará e continuará a ser adicionado 

Acho que você gosta

Origin blog.csdn.net/geyichongchujianghu/article/details/131139208
Recomendado
Clasificación