[libcamera-devel] [PATCH v2] android: camera_mode: Reserve 'data' vectors
Kieran Bingham
kieran.bingham at ideasonboard.com
Tue Dec 1 17:03:17 CET 2020
Hi Jacopo,
On 01/12/2020 15:59, Jacopo Mondi wrote:
> The CameraDevice::getStaticMetadata() function populates the
> entries for Android's static metadata by walking the ControlInfo
> supported values reported by the libcamera pipeline.
>
> The number of entries to be passed to Android is computed using the
> vector's size which is initialized at vector creation time to the
> maximum number of available entries.
>
> In order to report the correct number of metadata do not create the
> vector with the largest possible number of elements but only reserve
> space for them using std::vector::reserve() which does not modify the
> vector's size.
>
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> ---
> This patch fixes cros_camera_test:
> Camera3DeviceTest/Camera3DeviceDefaultSettings.ConstructDefaultSettings/1
> ---
Be careful about removing the extra '---' when applying, but this looks
good now.
I still wish we could automate the overall sizing of the metadata
components, but that's quite different to this patch (but it reminds me
of it...)
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> src/android/camera_device.cpp | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index 4690346e05cb..4eb05df0fdc2 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -596,7 +596,8 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
>
> /* Color correction static metadata. */
> {
> - std::vector<uint8_t> data(3);
> + std::vector<uint8_t> data;
> + data.reserve(3);
> const auto &infoMap = controlsInfo.find(&controls::draft::ColorCorrectionAberrationMode);
> if (infoMap != controlsInfo.end()) {
> for (const auto &value : infoMap->second.values())
> @@ -782,7 +783,8 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
> &maxFaceCount, 1);
>
> {
> - std::vector<uint8_t> data(2);
> + std::vector<uint8_t> data;
> + data.reserve(2);
> const auto &infoMap = controlsInfo.find(&controls::draft::LensShadingMapMode);
> if (infoMap != controlsInfo.end()) {
> for (const auto &value : infoMap->second.values())
> @@ -850,7 +852,8 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
>
> /* Noise reduction modes. */
> {
> - std::vector<uint8_t> data(5);
> + std::vector<uint8_t> data;
> + data.reserve(5);
> const auto &infoMap = controlsInfo.find(&controls::draft::NoiseReductionMode);
> if (infoMap != controlsInfo.end()) {
> for (const auto &value : infoMap->second.values())
> --
> 2.29.1
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list