application:
Processus approximatif : ouvrir, créer une session, envoyer une demande, obtenir le résultat de la capture
CameraManager, obtenir le service système CameraService, ouvrir la caméra :
1) openCamera : ouvrez la caméra
pour obtenir des informations sur la caméra : ICameraService.getCameraInfo
instancie un CameraDeviceImpl
via la méthode connectDevice de ICameraService. Les paramètres incluent CameraDevice.StateCallback, qui est transmis à CameraService
pour obtenir ICameraDeviceUser. L'
application proxy renvoie CameraDeviceImpl à l'application via le rappel et le côté application ouvre la caméra. Le processus est terminé.
2) createCaptureSession : créez une session
pour configurer le flux de données via la méthode configureStreamsChecked et
instancier un objet CameraCaptureImpl
3) createCaptureRequest : créez une requête
via la méthode CreateDefaultRequest() de ICameraDeviceUser pour créer un CameraMetadataNative par défaut
et instancier un objet CaptureRequest.Builder
à transmettre cameraMetaDataNative pour
terminer la création de la demande par défaut
4) setRepeatingCapture : défini sur Répéter
l'objet CameraDeviceImpI contiendra l'objet CameraCaptureSession.CaptureCallback
5) capture : envoyer
le submitcaptureRequest de la requête ICameraDeviceUser
6) onCaptureProcessed : analysez les résultats et post-traitez la méthode onResultReceived
d'ICameraDeviceCallback pour renvoyer les données PartialMetaData à
CameraCaptureSession. données à la méthode onCaputreProgressed de CameraCaptureSession.CaptureCallback et les renvoie à l'application 8) onImageAvailable : à ce moment, les données d'image peuvent être lues pour le traitement. Les données d'image peuvent être mises en cache via la méthode BufferQueue et la méthode queueBuffer peut être utilisé pour mettre en file d'attente le cache d'images et notifier Consume en consommation. Le côté APP peut utiliser la méthode onImageAvailable d'ImageReader pour demander à ImageReader de lire et de traiter
Service de caméra
AIDL :
ICameraService : principalement réalisé via CameraService, ouvrez le périphérique de caméra, obtenez le nombre de caméras prises en charge par le système, ajoutez une surveillance du flash ,
etc. ICameraDeviceCallback : implémenté par CameraDeviceCallback, fournit principalement des rappels pour les métadonnées et les données d'image, ainsi que des notifications d'erreur, etc.
CameraService:
mCameraProviderManager《-ProviderInfo《-DeviceInfo3
CameraDeviceClient:
mDevice<-Camera3Device<-RequestThread
mFrameProcessor<-frameProcessorBase
Démarrage de CameraService :
démarrage de main_cameraserver : méthode d'instanciation pour instancier,
énumérer
le nouvel objet ProviderManger et initialiser.
L'initialisation comprend : getService pour obtenir l'agent ICameraProvider ; instancier l'objet ProviderInfo et l'initialiser, ajouter un conteneur pour gérer l'
initialisation de ProviderInfo : enregistrer la variable ICameraProvider, réaliser l'interface ICameraProviderCallback, etc. , principalement pour
obtenir ICameraDevice via ICameraProvider, puis instancier l'objet CameraInfo3
afin que CameraService puisse gérer tous les CameraProvider et CameraDevice
CameraService est un service système qui démarre au démarrage du système. Après le démarrage, il attendra que les demandes pertinentes de l'APP soient traitées. Le processus de traitement consiste à interagir avec le processus de candidature.
Y compris : obtenir les propriétés de la caméra, ouvrir la caméra, configurer le flux de données, traiter la demande d'image, recevoir le résultat de l'image
Caméra HAL :
HIDL : Il fournit principalement certaines interfaces utilisées par CameraService, et le framework Camerahal est responsable de l'implémentation de ces interfaces.
ICameraProvider et rappel associé
ICameraDevice et rappel associé
ICameraDeviceSession
Implémentation de HAL :
Qcom et Rockchip implémentent le
framework ComX-CHI
Structure du répertoire principal :
CamX :
core : le module d'implémentation principal contient le répertoire hal à l'intérieur, réalise l'interface hal3 et chi est responsable de l'interaction avec CHI
csl : responsable de CamX et module de communication du pilote
hwl : un nœud avec une puissance de calcul indépendante, géré par csl
swl : un nœud qui doit s'appuyer sur le processeur pour réaliser
CHI-cdk :
chioveride : Implémentation de CHI. Responsable de l'interaction avec CamX et de la mise en œuvre du cadre global et de la logique métier de CHI.
bin : configuration liée à la plate-forme
actionneur : module de focus
ois
flash :
eeprom : stockage externe
fd
topologie :
nœud de cas d'utilisation :
module de nœud pour les fonctions définies par l'utilisateur : fichiers de configuration pour différents
capteurs :
capteur : informations privées du capteur et configuration du registre
Réalisez les exigences du scénario utilisateur.
usecase-"feature -"session -"pipeline -"Node (port, lien, récepteur)
Les fonctionnalités incluent : HDR, CFA, JPEG, ASD, ZSL, MFNR, SuperNight, MultiFrame, MFSR, etc.
Le processus de démarrage de Camx-Chi :
HwEnvironment
CSLModeManager
SettingsManager
Ouvrez com.qti.chi.override.so
dlsym ou chi_hal_override_entry via dlopen et entrez l'entrée.