Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Flujos de salida, recorte y zoom

Flujos de salida

El subsistema de la cámara opera únicamente en la canalización basada en ANativeWindow para todas las resoluciones y formatos de salida. Múltiples flujos pueden ser configurados de una sola vez de enviar un único marco para muchos objetivos, tales como la GPU, el codificador de vídeo, RenderScript , o tampones APP-visible (RAW Bayer, tampones YUV procesados, o tampones codificadas JPEG).

Como optimización, estos flujos de salida deben configurarse con anticipación y solo puede existir un número limitado a la vez. Esto permite la preasignación de búferes de memoria y la configuración del hardware de la cámara, de modo que cuando las solicitudes se envían con múltiples o variables canalizaciones de salida enumeradas, no habrá demoras ni latencia en el cumplimiento de la solicitud.

Para más información sobre las combinaciones de producción flujo garantizado que dependen del nivel de hardware compatible, consulte createCaptureSession() .

Recortar

El recorte de la matriz de píxeles completa (para el zoom digital y otros casos de uso donde se desea un campo de visión más pequeño) se comunica a través de la configuración ANDROID_SCALER_CROP_REGION. Esta es una configuración por solicitud y puede cambiar según la solicitud, lo cual es fundamental para implementar un zoom digital fluido.

La región se define como un rectángulo (x, y, ancho, alto), con (x, y) que describe la esquina superior izquierda del rectángulo. El rectángulo se define en el sistema de coordenadas de la matriz de píxeles activa del sensor, siendo (0,0) el píxel superior izquierdo de la matriz de píxeles activa. Por lo tanto, el ancho y el alto no pueden ser mayores que las dimensiones informadas en el campo de información estática ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY. El HAL informa el ancho y la altura mínimos permitidos a través del campo de información estática ANDROID_SCALER_MAX_DIGITAL_ZOOM, que describe el factor de zoom máximo admitido. Por lo tanto, el ancho y la altura mínimos de la región de cultivo son:

  {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 región de cultivo debe cumplir con requisitos específicos (por ejemplo, debe comenzar en coordenadas pares y su ancho / alto debe ser uniforme), la HAL debe realizar el redondeo necesario y escribir la región de cultivo final utilizada en la salida. metadatos de resultado. De manera similar, si HAL implementa la estabilización de video, debe ajustar la región de recorte del resultado para describir la región realmente incluida en la salida después de aplicar la estabilización de video. En general, una aplicación que utiliza una cámara debe poder determinar el campo de visión que recibe basándose en la región de recorte, las dimensiones del sensor de imagen y la distancia focal de la lente.

Dado que la región de cultivo se aplica a todas las corrientes, que pueden tener diferentes proporciones de aspecto que la región de cultivo, la región de sensor exacta utilizada para cada corriente puede ser más pequeña que la región de cultivo. Específicamente, cada flujo debe mantener píxeles cuadrados y su relación de aspecto recortando mínimamente la región de recorte definida. Si la relación de aspecto de la transmisión es más ancha que la región de recorte, la transmisión debe recortarse más verticalmente, y si la relación de aspecto de la transmisión es más estrecha que la región de recorte, la transmisión debe recortarse más horizontalmente.

En todos los casos, el cultivo del arroyo debe estar centrado dentro de la región de cultivo completo, y cada arroyo solo se recorta horizontal o verticalmente en relación con la región de cultivo completo, nunca ambos.

Por ejemplo, si se definen dos secuencias, una secuencia de 640x480 (aspecto 4: 3) y una secuencia de 1280x720 (aspecto 16: 9), a continuación se muestran las regiones de salida esperadas para cada secuencia para algunas regiones de cultivo de muestra, en un hipotético 3 Sensor MP (matriz de 2000 x 1500 píxeles).

Región de recorte: (500, 375, 1000, 750) (relación de aspecto 4: 3)
Cultivo de corriente de 640x480: (500, 375, 1000, 750) (igual a la región de cultivo)
Recorte de flujo de 1280x720: (500, 469, 1000, 562)

proporción-región-cultivo-43

Figura 1. proporción de 4: 3

Región de recorte: (500, 375, 1333, 750) (relación de aspecto 16: 9)
Cultivo de corriente 640x480: (666, 375, 1000, 750)
Recorte de corriente de 1280x720: (500, 375, 1333, 750) (igual a la región de recorte)

proporción-169-región-cultivo

Figura 2. 16: 9 relación de aspecto

Región de recorte: (500, 375, 750, 750) (relación de aspecto 1: 1)
Cultivo de corriente 640x480: (500, 469, 750, 562)
Recorte de flujo de 1280x720: (500, 543, 750, 414)

proporción-región-de-cultivo-11

Figura 3. 1: 1 relación de aspecto

Y un ejemplo final, una transmisión de relación de aspecto cuadrado de 1024x1024 en lugar de la transmisión de 480p:
Región de recorte: (500, 375, 1000, 750) (relación de aspecto 4: 3)
Recorte de flujo de 1024x1024: (625, 375, 750, 750)
Recorte de flujo de 1280x720: (500, 469, 1000, 562)

región-cultivo-relación-43-cuadrado

Figura 4. proporción de 4: 3, cuadrado

Reprocesamiento

Se proporciona soporte adicional para archivos de imágenes sin procesar mediante el reprocesamiento de datos RAW Bayer. Esta compatibilidad permite que la canalización de la cámara procese un búfer RAW y metadatos previamente capturados (un fotograma completo que se grabó anteriormente), para producir una nueva salida YUV o JPEG renderizada.

Zoom

Para los dispositivos con Android 11 o superior, una aplicación puede utilizar el zoom de una cámara (digital y óptico) a través de la ANDROID_CONTROL_ZOOM_RATIO ajuste.

La relación de zoom se define como un factor de coma flotante. En lugar de utilizar ANDROID_SCALER_CROP_REGION de sembrado y zoom, una aplicación puede utilizar ANDROID_CONTROL_ZOOM_RATIO para controlar el nivel de zoom, y el uso ANDROID_SCALER_CROP_REGION para el cultivo horizontal y vertical para lograr diferentes relaciones de aspecto que el sensor de la cámara nativa.

Un sistema multicámara puede contener más de una lente con diferentes distancias focales, y el usuario puede usar el zoom óptico cambiando entre lentes. Usando ANDROID_CONTROL_ZOOM_RATIO tiene beneficios en los escenarios siguientes:

  • Uso del zoom en entre una amplia lente para un teleobjetivo: Una relación punto flotante proporciona una mejor precisión en comparación con valores enteros de ANDROID_SCALER_CROP_REGION .
  • Uso del zoom hacia fuera de una lente de ancho a una lente ultra ancha: ANDROID_CONTROL_ZOOM_RATIO soportes zoom de alejamiento (<1.0f), mientras que ANDROID_SCALER_CROP_REGION no lo hace.

Para ilustrar, aquí hay varios escenarios de diferentes proporciones de zoom, regiones de recorte y flujos de salida, utilizando la misma cámara hipotética definida en la sección anterior.

Relación de zoom: 2.0; 1/4 del campo de visión original
Región de recorte: (0, 0, 2000, 1500) (relación de aspecto 4: 3)
Cultivo de corriente 640x480: (0, 0, 2000, 1500) (igual a la región de cultivo)
Recorte de flujo de 1280x720: (0, 187, 2000, 1125)

relación-zoom-2-recorte-43

Figura 5. 2.0 zoom, relación 4: 3 de aspecto

Relación de zoom: 2.0; 1/4 del campo de visión original
Región de recorte: (0, 187, 2000, 1125) (relación de aspecto 16: 9)
Cultivo de corriente de 640x480: (250, 187, 1500, 1125) (con pilares)
Recorte de corriente de 1280x720: (0, 187, 2000, 1125) (igual a la región de cultivo)

relación de zoom-2-recorte-169

Figura 6. 2.0 zoom, 16: 9

Relación de zoom: 0,5; 4x del campo de visión original (cambiado de lente ancha a lente ultra ancha)
Región de recorte: (250, 0, 1500, 1500) (relación de aspecto 1: 1)
Recorte de flujo de 640x480: (250, 187, 1500, 1125) (formato de pantalla ancha)
Recorte de flujo de 1280x720: (250, 328, 1500, 844) (formato de pantalla ancha)

imágenes / relación-de-zoom-0,5-recorte-11

Figura 7. 0.5 zoom, relación 1: 1 aspecto

Como se ve por los gráficos anteriores, el sistema de la región de recorte cambios en el campo efectivo después-zoom de vista de coordenadas, y está representado por el rectángulo con las siguientes dimensiones: ( 0 , 0 , activeArrayWith , activeArrayHeight ). Lo mismo se aplica a las regiones y rostros AE / AWB / AF. Este cambio sistema de coordenadas no se aplica a la captura RAW y sus metadatos relacionados, como intrinsicCalibration y lensShadingMap .

Utilizando el mismo ejemplo hipotético anterior, y asumiendo que el flujo de salida n. ° 1 (640x480) es el flujo del visor, el zoom de 2.0x se puede lograr de dos maneras:

  • zoomRatio = 2.0 , scaler.cropRegion = (0, 0, 2000, 1500)
  • zoomRatio = 1.0 (predeterminado), scaler.cropRegion = (500, 375, 1000, 750)

Para una aplicación establezca android.control.aeRegions para ser la cuarta parte superior izquierda del campo visor de vista, establecer android.control.aeRegions a (0, 0, 1000, 750) con android.control.zoomRatio conjunto a 2.0 . Alternativamente, la aplicación puede establecer android.control.aeRegions a la región equivalente de (500, 375, 1000, 750) para android.control.zoomRatio de 1.0 .