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: (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 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)
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)
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
.
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)
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)
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)
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
.