[libcamera-devel] [PATCH 08/12] android: camera_device: Register MAX_DIGITAL_ZOOM
Jacopo Mondi
jacopo at jmondi.org
Tue Jan 5 20:05:18 CET 2021
Register the ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM static metadata
inspecting the ScalerCrop control's limits.
Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
---
src/android/camera_device.cpp | 23 ++++++++++++++++++++---
1 file changed, 20 insertions(+), 3 deletions(-)
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index e6cee75581f2..99297270598f 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -1011,9 +1011,26 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
}
/* Scaler static metadata. */
- float maxDigitalZoom = 1;
- staticMetadata_->addEntry(ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM,
- &maxDigitalZoom, 1);
+ {
+ /*
+ * \todo The digital zoom factor is a property that depends
+ * on the desired output configuration and the sensor frame size
+ * input to the ISP. These information are not available to the
+ * Android HAL, not at initialization time at least.
+ *
+ * Rely on pipeline handlers initializing the ScalerCrop control
+ * with the camera default configuration and use the maximum
+ * and minimum crop rectangles to calculate the digital zoom
+ * factor.
+ */
+ const auto info = controlsInfo.find(&controls::ScalerCrop);
+ Rectangle min = info->second.min().get<Rectangle>();
+ Rectangle max = info->second.max().get<Rectangle>();
+ float maxZoom = std::min<float>(1.0f * max.width / min.width,
+ 1.0f * max.height / min.height);
+ staticMetadata_->addEntry(ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM,
+ &maxZoom, 1);
+ }
std::vector<uint32_t> availableStreamConfigurations;
availableStreamConfigurations.reserve(streamConfigurations_.size() * 4);
--
2.29.2
More information about the libcamera-devel
mailing list