Flux de sortie, recadrage et zoom

Flux de sortie

Le sous-système de l'appareil photo fonctionne uniquement sur le pipeline ANativeWindow pour toutes les résolutions et tous les formats de sortie. Il est possible de configurer plusieurs flux pour envoyer une seule image à de nombreuses cibles, comme le GPU, la vidéo un encodeur, RenderScript ou tampons visibles par l'application (RAW Bayer, code YUV traité ou des tampons encodés en JPEG).

À des fins d'optimisation, ces flux de sortie doivent être configurés à l'avance. seul un nombre limité peut exister à la fois. Cela permet de pré-allouer des tampons de mémoire et de la configuration matérielle de l'appareil photo, de sorte que lorsque les requêtes sont envoyés avec des pipelines de sortie multiples ou différents, il n'y aura pas ou de latence lors du traitement de la requête.

Pour en savoir plus sur les combinaisons de sortie du flux garanti qui dépendent du niveau de matériel compatible, consultez createCaptureSession()

Recadrage

Recadrage de l'intégralité du tableau de pixels (pour le zoom numérique et les autres cas d'utilisation où un un champ de vision plus petit est souhaitable) est communiquée via la zone ANDROID_SCALER_CROP_REGION . Ce paramètre est défini pour chaque demande et peut être modifié à la demande. ce qui est essentiel pour bénéficier d'un zoom numérique fluide.

La région est définie comme un rectangle (x, y, largeur, hauteur), avec (x, y) décrivant l'angle supérieur gauche du rectangle. Le rectangle est défini sur la système de coordonnées du tableau de pixels actif du capteur, où (0,0) correspond au pixel en haut à gauche du tableau de pixels actif. Par conséquent, la largeur et la hauteur ne peuvent pas être supérieures à celles indiquées dans le tableau ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY d'informations statiques. La largeur et la hauteur minimales autorisées sont indiquées par le HAL. via le champ d'informations statiques ANDROID_SCALER_MAX_DIGITAL_ZOOM, qui décrit le facteur de zoom maximal accepté. Par conséquent, la largeur minimale de la zone recadrée sont les suivantes:

  {width, height} =
   { floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[0] /
       ANDROID_SCALER_MAX_DIGITAL_ZOOM),
     floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[1] /
       ANDROID_SCALER_MAX_DIGITAL_ZOOM) }

Si la zone cultivée doit répondre à des exigences spécifiques pour commencer sur des coordonnées paires, et que sa largeur/hauteur doit être égale), le HAL vous devez procéder aux arrondis nécessaires et indiquer la zone recadrée finale utilisée dans la des métadonnées de résultat de sortie. De même, si le HAL met en œuvre la stabilisation vidéo, vous devez ajuster la zone de recadrage pour décrire la région réellement incluse dans la sortie après l'application de la stabilisation vidéo. En général, un appareil photo utilisant l'application doit pouvoir déterminer le champ de vision qu'elle reçoit en fonction la zone recadrée, les dimensions du capteur d'image et la longueur focale de l'objectif.

Étant donné que la zone recadrée s'applique à tous les flux, que la zone recadrée, l'emplacement exact du capteur utilisé pour chaque flux peut être plus petite que la zone recadrée. Plus précisément, chaque flux doit conserver de pixels et son format en recadrant encore moins dans la même région. Si le format du flux est plus large que la zone recadrée, le flux doit être encore recadré verticalement, et si le format du flux est plus étroit que la zone recadrée, le flux doit être encore recadré horizontalement.

Dans tous les cas, le recadrage du flux doit être centré dans la zone recadrée complète. Chaque flux est recadré horizontalement ou verticalement une zone recadrée, jamais les deux.

Par exemple, si deux flux sont définis, un flux de 640 x 480 (format 4:3) et un autre Flux 1 280 x 720 (format 16:9), ci-dessous montrant les régions de sortie attendues pour chaque flux de quelques zones cultivées, sur une résolution hypothétique de 3 Mpx (2 000 x (tableau de 1 500 pixels).

Zone recadrée: (500, 375, 1 000, 750) (format 4:3)
Recadrage par flux de 640 x 480: (500, 375, 1 000, 750) (égal à la zone recadrée)
Recadrage en flux continu de 1 280 x 720: (500, 469, 1 000, 562)

zone-recadrée-43-ratio

Figure 1 : Format 4:3

Zone recadrée: (500, 375, 1333, 750) (format 16:9)
Recadrage en flux continu de 640 x 480: (666, 375, 1 000, 750)
Recadrage par flux de 1 280 x 720: (500, 375, 1 333, 750) (égal à la zone recadrée)

zone-recadrage-169-ratio

Figure 2. Format 16:9

Zone recadrée: (500, 375, 750, 750) (format 1:1)
Recadrage en flux continu de 640 x 480: (500, 469, 750, 562)
Recadrage en flux continu de 1 280 x 720: (500, 543, 750, 414)

zone-recadrée-11-ratio

Figure 3. Format 1:1

Dernier exemple : un flux au format carré 1 024 x 1 024 au lieu de 480p flux:
Zone recadrée: (500, 375, 1 000, 750) (format 4:3)
Recadrage en flux continu de 1 024 x 1 024: (625, 375, 750, 750)
Recadrage en flux continu de 1 280 x 720: (500, 469, 1 000, 562)

zone-recadrée-ratio-43-carré

Figure 4. Format 4:3, carré

Nouveau traitement

Les fichiers image bruts bénéficient d'une prise en charge supplémentaire grâce au retraitement disponible pour le format RAW Bayer. données. Cette prise en charge permet au pipeline de l'appareil photo de traiter une capture d'écran un tampon RAW et des métadonnées (une image entière enregistrée précédemment). générer une nouvelle sortie YUV ou JPEG.

Zoom

Pour les appareils équipés d'Android 11 ou version ultérieure, une appli peut utiliser le zoom d'une caméra (numérique et optique) via le paramètre ANDROID_CONTROL_ZOOM_RATIO.

Le ratio de zoom est défini en tant que facteur à virgule flottante. Au lieu de avec ANDROID_SCALER_CROP_REGION pour le recadrage et le zoom, une application peut utiliser ANDROID_CONTROL_ZOOM_RATIO pour contrôler le niveau de zoom et utilisez ANDROID_SCALER_CROP_REGION pour un recadrage horizontal et vertical afin de d'obtenir des formats différents de ceux du capteur de l'appareil photo natif.

Un système multicaméra peut contenir plusieurs objectifs ayant des longueur focale. L'utilisateur peut également utiliser le zoom optique en passant d'un objectif à un autre. L'utilisation de ANDROID_CONTROL_ZOOM_RATIO présente les avantages suivants:

  • Zoom d'un objectif grand angle vers un téléobjectif: rapport à virgule flottante offre une meilleure précision par rapport aux valeurs entières de ANDROID_SCALER_CROP_REGION
  • Zoom arrière d'un objectif grand angle à un objectif ultra grand angle: ANDROID_CONTROL_ZOOM_RATIO prend en charge le zoom arrière (<1.0f), contrairement à ANDROID_SCALER_CROP_REGION.

À titre d'illustration, voici plusieurs scénarios avec différents rapports de zoom, zones de recadrage et résultats. en utilisant la même caméra fictive définie dans la section précédente.

Ratio de zoom: 2,0 1/4 du champ de vision d'origine
Zone recadrée: (0, 0, 2 000, 1 500) (format 4:3)
Recadrage par flux de 640 x 480: (0, 0, 2 000, 1 500) (égal à la zone recadrée)
Recadrage en flux continu de 1 280 x 720: (0, 187, 2 000, 1 125)

zoom-ratio-2-crop-43

Figure 5. Zoom 2.0, format 4:3

Ratio de zoom: 2,0 1/4 du champ de vision d'origine
Zone recadrée: (0, 187, 2 000, 1 125) (format 16:9)
Recadrage en flux continu de 640 x 480: (250, 187, 1 500, 1 125) (format pillarbox)
Recadrage par flux de 1 280 x 720: (0, 187, 2 000, 1 125) (égal à la zone recadrée)

zoom-ratio-2-crop-169

Figure 6. Zoom 2.0, format 16:9

Ratio de zoom: 0,5 ; Champ de vision d'origine x4 (passage de l'objectif grand angle à l'objectif ultra grand angle)
Zone recadrée: (250, 0, 1 500, 1 500) (format 1:1)
Recadrage en flux continu de 640 x 480: (250, 187, 1 500, 1 125) (format letterbox)
Recadrage en flux continu de 1 280 x 720: (250, 328, 1 500, 844) (format letterbox)

images/zoom-ratio-0.5-crop-11

Figure 7. Zoom 0.5, format 1:1

Comme le montrent les graphiques ci-dessus, le système de coordonnées de la zone recadrée devient champ de vision après zoom. Il est représenté par un rectangle aux dimensions suivantes: (0, 0, activeArrayWith, activeArrayHeight). Il en va de même pour les zones géographiques et les visages AE/AWB/AF. Ce changement du système de coordonnées ne s'applique pas La capture RAW et les métadonnées associées telles que intrinsicCalibration et lensShadingMap

Reprenons l'exemple précédent et supposons que le flux de sortie 1 (640 x 480) est du viseur, le zoom 2.0x peut être réalisé de deux manières:

  • zoomRatio = 2.0, scaler.cropRegion = (0, 0, 2000, 1500)
  • zoomRatio = 1.0 (par défaut), scaler.cropRegion = (500, 375, 1000, 750)

Pour qu'une application définisse android.control.aeRegions en haut à gauche le quart du champ de vision du viseur, android.control.aeRegions à (0, 0, 1000, 750) avec android.control.zoomRatio défini sur 2.0. Par ailleurs, l'application peut définir android.control.aeRegions sur l'équivalent région de (500, 375, 1000, 750) pour android.control.zoomRatio sur 1.0.