summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo@jmondi.org>2021-01-05 13:12:38 +0100
committerJacopo Mondi <jacopo@jmondi.org>2021-01-18 10:39:14 +0100
commitdb6a3bfa6e92081c33463ce58c51ac8fae7f854c (patch)
tree1858a24c92b20c417becbf5d943a5e281ccf8f96
parenta1a20998aca365a5835d534c49fc3cd4de7246ec (diff)
libcamera: camera_sensor: Initialize VIMC properties
The VIMC driver does not yet support all the features required for all sensor drivers. As it is the main testing platforms and the driver changes might take a long time to land in the developments and testing platforms, temporary close the gap by skipping driver validation and initializing properties with static information such as the sensor resolution. Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
-rw-r--r--include/libcamera/internal/camera_sensor.h1
-rw-r--r--src/libcamera/camera_sensor.cpp26
2 files changed, 27 insertions, 0 deletions
diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
index 86902b85..fed36bf2 100644
--- a/include/libcamera/internal/camera_sensor.h
+++ b/include/libcamera/internal/camera_sensor.h
@@ -70,6 +70,7 @@ protected:
private:
int generateId();
int validateSensorDriver();
+ void initVimcDefaultProperties();
int initProperties();
const MediaEntity *entity_;
diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
index e9c80c30..251691ae 100644
--- a/src/libcamera/camera_sensor.cpp
+++ b/src/libcamera/camera_sensor.cpp
@@ -6,6 +6,7 @@
*/
#include "libcamera/internal/camera_sensor.h"
+#include "libcamera/internal/media_device.h"
#include <algorithm>
#include <float.h>
@@ -207,6 +208,21 @@ int CameraSensor::init()
*/
resolution_ = sizes_.back();
+ /*
+ * VIMC is a bit special, as it does not yet support all the mandatory
+ * requirements regular sensors have to respect.
+ *
+ * Do not validate the driver if it's VIMC and initialize the sensor
+ * properties with static information.
+ *
+ * \todo Remove the special case once the VIMC driver has been
+ * updated in all test platforms.
+ */
+ if (entity_->device()->driver() == "vimc") {
+ initVimcDefaultProperties();
+ return initProperties();
+ }
+
ret = validateSensorDriver();
if (ret)
return ret;
@@ -304,6 +320,16 @@ int CameraSensor::validateSensorDriver()
return 0;
}
+/*
+ * \brief Initialize properties that cannot be intialized by the
+ * regular initProperties() function for VIMC
+ */
+void CameraSensor::initVimcDefaultProperties()
+{
+ pixelArraySize_ = resolution();
+ activeArea_ = Rectangle(pixelArraySize_);
+}
+
int CameraSensor::initProperties()
{
/*