summaryrefslogtreecommitdiff
path: root/src/android/camera_device.cpp
diff options
context:
space:
mode:
authorPhi-Bang Nguyen <pnguyen@baylibre.com>2021-03-29 19:40:46 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-03-29 23:49:33 +0300
commit8634c38675a120b3650f9226871e57166aa21b26 (patch)
tree43511b171d79e5bbf98e48ec1163973c7948f73e /src/android/camera_device.cpp
parent0e39510c05965ab56ebb9134490678ebae85c192 (diff)
android: camera_device: Add null check for ScalerCrop control
The ScalerCrop control does not contain the null check which can cause the camera HAL crash at boot. Fix it. Fixes: 31a1a628cd0e ("android: camera_device: Register MAX_DIGITAL_ZOOM") Signed-off-by: Phi-Bang Nguyen <pnguyen@baylibre.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/android/camera_device.cpp')
-rw-r--r--src/android/camera_device.cpp40
1 files changed, 21 insertions, 19 deletions
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index ae693664..eb327978 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -1095,26 +1095,28 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
}
/* Scaler static metadata. */
- {
- /*
- * \todo The digital zoom factor is a property that depends
- * on the desired output configuration and the sensor frame size
- * input to the ISP. This information is not available to the
- * Android HAL, not at initialization time at least.
- *
- * As a workaround 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(1.0f * max.width / min.width,
- 1.0f * max.height / min.height);
- staticMetadata_->addEntry(ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM,
- &maxZoom, 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. This information is not available to the Android HAL, not at
+ * initialization time at least.
+ *
+ * As a workaround 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.
+ */
+ float maxZoom = 1.0f;
+ const auto scalerCrop = controlsInfo.find(&controls::ScalerCrop);
+ if (scalerCrop != controlsInfo.end()) {
+ Rectangle min = scalerCrop->second.min().get<Rectangle>();
+ Rectangle max = scalerCrop->second.max().get<Rectangle>();
+ maxZoom = std::min(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);