android: camera_device: Initialize pixel array properties

Initialize pixel array properties in the Android camera HAL
inspecting the camera properties.

If the camera does not provide any suitable property, not static
metadata is registered to the Android framework.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
Jacopo Mondi 2020-11-06 16:08:16 +01:00
parent 8aaa41ee9b
commit 1889cdc2e9

View file

@ -593,6 +593,7 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
} }
const ControlInfoMap &controlsInfo = camera_->controls(); const ControlInfoMap &controlsInfo = camera_->controls();
const ControlList &properties = camera_->properties();
/* Color correction static metadata. */ /* Color correction static metadata. */
{ {
@ -725,17 +726,29 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
staticMetadata_->addEntry(ANDROID_JPEG_MAX_SIZE, &maxJpegBufferSize_, 1); staticMetadata_->addEntry(ANDROID_JPEG_MAX_SIZE, &maxJpegBufferSize_, 1);
/* Sensor static metadata. */ /* Sensor static metadata. */
int32_t pixelArraySize[] = { if (properties.contains(properties::PixelArraySize)) {
2592, 1944, const Size &size =
}; properties.get<Size>(properties::PixelArraySize);
staticMetadata_->addEntry(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE, std::vector<int32_t> data{
&pixelArraySize, 2); static_cast<int32_t>(size.width),
static_cast<int32_t>(size.height),
};
staticMetadata_->addEntry(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,
data.data(), data.size());
}
int32_t sensorSizes[] = { if (properties.contains(properties::PixelArrayActiveAreas)) {
0, 0, 2560, 1920, const Span<const Rectangle> &rects =
}; properties.get<Span<const Rectangle>>(properties::PixelArrayActiveAreas);
staticMetadata_->addEntry(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE, std::vector<int32_t> data{
&sensorSizes, 4); static_cast<int32_t>(rects[0].x),
static_cast<int32_t>(rects[0].y),
static_cast<int32_t>(rects[0].width),
static_cast<int32_t>(rects[0].height),
};
staticMetadata_->addEntry(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,
data.data(), data.size());
}
int32_t sensitivityRange[] = { int32_t sensitivityRange[] = {
32, 2400, 32, 2400,