[libcamera-devel] [PATCH v2 1/3] android: CameraDevice: Validate crop_rotate_scale_degrees in configuration
Hirokazu Honda
hiroh at chromium.org
Mon Mar 29 00:45:26 CEST 2021
Libcamera doesn't handle |crop_rotate_scale_degrees| in
camera3_stream at all. This adds the validation of the requested
|crop_rotate_scale_degrees| in configuration, but still not
handle the specified values.
Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
---
src/android/camera_device.cpp | 39 +++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index ae693664..c5e55a18 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -256,6 +256,39 @@ void sortCamera3StreamConfigs(std::vector<Camera3StreamConfig> &unsortedConfigs,
unsortedConfigs = sortedConfigs;
}
+/*
+ * Returns where crop_rotate_scale_degrees in all camera3_stream in stream_list
+ * are valid.
+ */
+bool validateCropRotate(const camera3_stream_configuration_t &stream_list)
+{
+ ASSERT(stream_list.num_streams > 0);
+
+ const int cropRotateScaleDegrees =
+ stream_list.streams[0]->crop_rotate_scale_degrees;
+ for (unsigned int i = 0; i < stream_list.num_streams; ++i) {
+ const camera3_stream_t &stream = *stream_list.streams[i];
+ if (CAMERA3_STREAM_ROTATION_0 > stream.crop_rotate_scale_degrees ||
+ CAMERA3_STREAM_ROTATION_270 < stream.crop_rotate_scale_degrees) {
+ LOG(HAL, Error) << "Invalid crop_rotate_scale_degrees: "
+ << stream.crop_rotate_scale_degrees;
+ return false;
+ }
+ if (stream.crop_rotate_scale_degrees == CAMERA3_STREAM_ROTATION_180) {
+ LOG(HAL, Error) << "crop_rotate_scale_degrees should "
+ << "not be CAMERA3_STREAM_ROTATION_180";
+ return false;
+ }
+ if (cropRotateScaleDegrees != stream.crop_rotate_scale_degrees) {
+ LOG(HAL, Error) << "crop_rotate_scale_degrees in all "
+ << "streams are not identical";
+ return false;
+ }
+ }
+
+ return true;
+}
+
} /* namespace */
/*
@@ -1552,6 +1585,12 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
running_ = false;
}
+ if (stream_list->num_streams == 0)
+ return -EINVAL;
+
+ if (!validateCropRotate(*stream_list))
+ return -EINVAL;
+
/*
* Generate an empty configuration, and construct a StreamConfiguration
* for each camera3_stream to add to it.
--
2.31.0.291.g576ba9dcdaf-goog
More information about the libcamera-devel
mailing list