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: 31a1a628cd
("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>
This commit is contained in:
parent
0e39510c05
commit
8634c38675
1 changed files with 21 additions and 19 deletions
|
@ -1095,26 +1095,28 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Scaler static metadata. */
|
/* Scaler static metadata. */
|
||||||
{
|
|
||||||
/*
|
/*
|
||||||
* \todo The digital zoom factor is a property that depends
|
* \todo The digital zoom factor is a property that depends on the
|
||||||
* on the desired output configuration and the sensor frame size
|
* desired output configuration and the sensor frame size input to the
|
||||||
* input to the ISP. This information is not available to the
|
* ISP. This information is not available to the Android HAL, not at
|
||||||
* Android HAL, not at initialization time at least.
|
* initialization time at least.
|
||||||
*
|
*
|
||||||
* As a workaround rely on pipeline handlers initializing the
|
* As a workaround rely on pipeline handlers initializing the
|
||||||
* ScalerCrop control with the camera default configuration and
|
* ScalerCrop control with the camera default configuration and use the
|
||||||
* use the maximum and minimum crop rectangles to calculate the
|
* maximum and minimum crop rectangles to calculate the digital zoom
|
||||||
* digital zoom factor.
|
* factor.
|
||||||
*/
|
*/
|
||||||
const auto info = controlsInfo.find(&controls::ScalerCrop);
|
float maxZoom = 1.0f;
|
||||||
Rectangle min = info->second.min().get<Rectangle>();
|
const auto scalerCrop = controlsInfo.find(&controls::ScalerCrop);
|
||||||
Rectangle max = info->second.max().get<Rectangle>();
|
if (scalerCrop != controlsInfo.end()) {
|
||||||
float maxZoom = std::min(1.0f * max.width / min.width,
|
Rectangle min = scalerCrop->second.min().get<Rectangle>();
|
||||||
1.0f * max.height / min.height);
|
Rectangle max = scalerCrop->second.max().get<Rectangle>();
|
||||||
staticMetadata_->addEntry(ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM,
|
maxZoom = std::min(1.0f * max.width / min.width,
|
||||||
&maxZoom, 1);
|
1.0f * max.height / min.height);
|
||||||
}
|
}
|
||||||
|
staticMetadata_->addEntry(ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM,
|
||||||
|
&maxZoom, 1);
|
||||||
|
|
||||||
std::vector<uint32_t> availableStreamConfigurations;
|
std::vector<uint32_t> availableStreamConfigurations;
|
||||||
availableStreamConfigurations.reserve(streamConfigurations_.size() * 4);
|
availableStreamConfigurations.reserve(streamConfigurations_.size() * 4);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue