Chapitre 1 : Bienvenue dans Android Camera2
Découvrez pourquoi Android Camera2 est important, comment il se compare à Camera1 et CameraX, ce qu'il permet de faire et ce que vous allez construire dans cette série.
Chapitre 2 : Comprendre les caméras des smartphones
Explorez le matériel du module caméra à l'intérieur de chaque smartphone : l'objectif, le capteur d'image, le processeur ISP, la différence entre RAW et JPEG, les conceptions multi-caméras et le voyage complet des photons à une photo stockée.
Chapitre 3 : La photographie moderne sur smartphone
Un tour d'horizon des fonctionnalités computationnelles et optiques des téléphones modernes : HDR, portrait bokeh, nuit mode, ralenti, ultra-grand angle, téléobjectif, macro, et comment la photographie computationnelle fusionne matériel et logiciel.
Chapitre 4 : Explorez votre propre téléphone
Utilisez l'application compagnon Android Camera Parameters pour inspecter votre propre appareil. Apprenez à lire les ID de caméra, à vérifier les niveaux matériels, à énumérer les caméras, à inspecter les formats pris en charge, les fréquences d'images, les plages de zoom et les capacités RAW.
Chapitre 5 : Créer votre premier projet Camera2
Configurez un projet Android Camera2 complet à partir de zéro. Apprenez-en plus sur les autorisations de caméra, l'initialisation de CameraManager, le threading en arrière-plan avec HandlerThread et la configuration du projet nécessaire pour l'accélération matérielle de TextureView.
Chapitre 6 : Découvrir les caméras
Énumérez et interrogez chaque caméra sur un appareil Android en utilisant CameraCharacteristics. Apprenez la sémantique des ID de caméra, les directions de face de l'objectif (avant/arrière/externe), les caméras USB OTG externes et la hiérarchie des niveaux matériels de LEGACY à LEVEL_3.
Chapitre 7 : Ouvrir une caméra
Établissez une connexion en direct à un appareil photo en utilisant openCamera(). Maîtrisez le cycle de vie de CameraDevice, implémentez StateCallback avec onOpened/onDisconnected/onError, intégrez l'ouverture/fermeture avec onPause/onResume de l'Activity, et gérez chaque code d'erreur CameraAccessException avec un contrôle de concurrence basé sur un Sémaphore.
Chapitre 8 : Afficher l'aperçu de la caméra
Rendre les images de la caméra en direct sur l'écran en utilisant TextureView, SurfaceTexture, Surface et CameraCaptureSession. Implémentez SurfaceTextureListener, corrigez le rapport hauteur/largeur avec des transformations de matrice dans configureTransform, construisez une CaptureRequest TEMPLATE_PREVIEW et démarrez le flux d'aperçu avec setRepeatingRequest.
Chapitre 10 : Les types de capture
Comprenez les quatre primitives de capture fondamentales dans Android Camera2. Apprenez la différence entre capture() pour les clichés uniques, setRepeatingRequest() pour l'aperçu, captureBurst() pour les rafales atomiques et setRepeatingBurst() pour les séquences de mesure complexes.
Chapitre 10 : Le pipeline Camera2
Plongée au cœur de l'architecture du pipeline Camera2 — CaptureRequest, CaptureResult, files d'attente de requêtes, rappels de résultats et flux de bout en bout, de la soumission de la requête au traitement par le HAL et aux résultats.
Chapitre 11 : Prendre des photos
Guide complet pour capturer des photos JPEG haute résolution avec Camera2. Apprenez à configurer ImageReader, à gérer les rotations de capteur, à traiter les plans d'image et à enregistrer des fichiers via MediaStore pour Android 10+.
Chapitre 12 : Plongée au cœur des CameraCharacteristics
Maîtrisez les CameraCharacteristics — les métadonnées statiques immuables qui décrivent chaque caméra avant même de l'ouvrir. Niveaux matériels (LEGACY, LIMITED, FULL, LEVEL_3, EXTERNAL), indicateurs de capacités, organisation des clés de métadonnées et requêtes de capacités à l'exécution.
Chapitre 13 : L'exposition
Maîtrisez les fondamentaux de l'exposition photographique — le triangle de l'exposition composé de l'ISO, de la vitesse d'obturation et de l'ouverture. Comprenez les paliers EV, la règle du Sunny 16 et comment différentes combinaisons créent la même exposition avec des compromis créatifs.
Chapitre 14 : L'exposition manuelle dans Camera2
Prenez le contrôle créatif total de l'exposition avec l'API Android Camera2. Apprenez à désactiver l'exposition automatique, à régler l'ISO manuel via SENSOR_SENSITIVITY, à contrôler la vitesse d'obturation en nanosecondes avec SENSOR_EXPOSURE_TIME, et créez des exemples Kotlin fonctionnels pour les timelapses, les expositions longues et le bracketing.
Chapitre 15 : La mise au point
Maîtrisez la mise au point automatique et manuelle dans Android Camera2. Comprenez les modes AF, la machine à états AF, les séquences de déclenchement et de capture, la mise au point manuelle avec les dioptries LENS_FOCUS_DISTANCE, la distance hyperfocale et la création d'un curseur SeekBar de mise au point en Kotlin.
Chapitre 16 : Balance des blancs et couleur
Contrôlez la couleur dans Android Camera2 avec les préréglages de balance des blancs automatique et la correction manuelle des couleurs. Apprenez les modes AWB, la température de couleur (2000K–10000K), les transformations de couleur 3x3, COLOR_CORRECTION_GAINS et le code Kotlin fonctionnel pour les préréglages de coucher de soleil aux tons chauds et la balance des blancs manuelle complète.
Chapitre 17 : Le pipeline 3A
Orchestrez l'exposition automatique (AE), la mise au point automatique (AF) et la balance des blancs automatique (AWB) dans une séquence de capture fiable pour la photographie fixe. Apprenez le pré-déclenchement, les modes de flash, les machines à états AE/AF, et créez un code Kotlin de qualité production qui coordonne les trois A avant chaque prise de vue.
Chapitre 18 : La photographie RAW
Maîtrisez le format RAW_SENSOR, la création de fichiers DNG avec DngCreator, les matrices de Bayer et la capture simultanée RAW+JPEG dans l'API Android Camera2
Chapitre 19 : Vidéo haute vitesse
Construisez des captures au ralenti à 120 fps et 240 fps avec CameraConstrainedHighSpeedCaptureSession, createHighSpeedRequestList et les plages de FPS de StreamConfigurationMap dans l'API Android Camera2
Chapitre 20 : Le multi-caméra
Explorez les appareils multi-caméra logiques d'Android 9+, les ID de caméra physiques, la synchronisation des capteurs APPROXIMATE vs CALIBRATED, le basculement de zoom fluide et la capture physique double simultanée via OutputConfiguration.setPhysicalCameraId() dans l'API Camera2
Chapitre 21 : HDR et Ultra HDR
Implémentez la vidéo HDR10 et HLG via DynamicRangeProfiles, et les captures fixes Android 14 JPEG_R (Ultra HDR ISO 21496-1) avec une architecture SDR-primaire + carte de gain pour des photos à plage dynamique élevée rétrocompatibles
Chapitre 22 : Les extensions de caméra
Utilisez CameraExtensionSession pour la photographie computationnelle accélérée par l'OEM : mode Nuit, mode portrait Bokeh, extension HDR, retouche faciale et mode automatique. Interrogez CameraExtensionCharacteristics, gérez la latence et comparez l'architecture des sessions standard et d'extension.
Chapitre 23 : Zero Shutter Lag et retraitement
Construisez le Zero Shutter Lag (ZSL) avec mise en tampon YUV/PRIVATE circulaire, CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG, sessions de capture retraitables via InputConfiguration, réinjection d'image ImageWriter et createReprocessCaptureRequest pour un traitement ISP lourd après capture. Couvre également switchToOffline() pour la continuité du traitement en arrière-plan.
Chapitre 24 : CameraX
Maîtrisez CameraX, la bibliothèque de caméra de Jetpack respectueuse du cycle de vie qui enveloppe Camera2. Apprenez l'architecture UseCase, Camera2Interop pour injecter des paramètres manuels, et un cadre de décision pour choisir entre CameraX et Camera2.
Chapitre 25 : Développement natif de la caméra
Passez en natif avec la pile de caméra NDK d'Android. Utilisez ACameraManager pour ouvrir les caméras depuis le C++, liez la mémoire AHardwareBuffer directement comme des textures Vulkan pour une RA sans copie, et comprenez l'interopérabilité OpenGL/Vulkan pour les pipelines à 60 fps. Inclut le contexte de migration EVS pour l'automobile.
Chapitre 26 : Programmation asynchrone de la caméra
Apprivoisez l'enfer des rappels (callback hell) de Camera2 en utilisant les coroutines Kotlin et Flow. Apprenez suspendCancellableCoroutine pour les opérations ponctuelles (openCamera, createCaptureSession, capture), callbackFlow pour les flux continus d'ImageReader et de CaptureResult, les opérateurs de combinaison pour les interfaces réactives, et les modèles de sécurité des threads pour prévenir les ANR et les blocages.
Chapitre 27 : Tester la caméra
Élaborez une stratégie de test robuste pour Camera2. Apprenez à utiliser Camera ITS pour la validation HAL, le CTS Verifier pour la conformité OEM, et écrivez des tests d'instrumentation Espresso/AndroidJUnit4 utilisant des mocks de caméra pour tester l'UI sans matériel physique.
Chapitre 28 : Architecture de Camera2
Le grand final de l'architecture de Camera2. Voyagez à travers toute la pile, de votre application Kotlin jusqu'à l'IPC Binder, le Framework, CameraService en natif, Camera3Device, HAL3 avec camera3_device_t, le pilote de noyau V4L2, et enfin le capteur physique, l'ISP, l'objectif VCM et le matériel flash. Comprend l'exigence Treble HAL, le wrapper LEGACY HAL1 et CameraDeviceSetup d'Android 15. Carte complète du voyage du lecteur à travers les couches.
Encyclopédie des métadonnées de la caméra
Guide de référence complet pour toutes les clés de métadonnées CameraCharacteristics essentielles, incluant les catégories Sensor, Lens, Control, Scaler, Request, Flash, JPEG, Statistics et Info.