Caméra Android - Architecture 2

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.

Je suppose que tu aimes

Origine blog.csdn.net/haigand/article/details/132476787
conseillé
Classement