summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Semkowicz <dse@thaumatec.com>2023-01-19 09:41:05 +0100
committerJacopo Mondi <jacopo.mondi@ideasonboard.com>2023-09-04 14:08:50 +0200
commit446647fb1d8161a74a59a7c6d127017ccdbeb3a5 (patch)
tree2dd819cad3597d9e3dfc8e9cd6fadc21c6798319
parentae9bcb2155957da3b6324676d706a901acb8343f (diff)
rkisp1: Add camera lens to PH and expose it to the IPA
Check in pipeline handler if camera lens exists, add expose its controls to the IPA. Signed-off-by: Daniel Semkowicz <dse@thaumatec.com>
-rw-r--r--include/libcamera/ipa/rkisp1.mojom1
-rw-r--r--src/ipa/rkisp1/rkisp1.cpp5
-rw-r--r--src/libcamera/pipeline/rkisp1/rkisp1.cpp5
3 files changed, 11 insertions, 0 deletions
diff --git a/include/libcamera/ipa/rkisp1.mojom b/include/libcamera/ipa/rkisp1.mojom
index 1009e970..bf6e9141 100644
--- a/include/libcamera/ipa/rkisp1.mojom
+++ b/include/libcamera/ipa/rkisp1.mojom
@@ -11,6 +11,7 @@ import "include/libcamera/ipa/core.mojom";
struct IPAConfigInfo {
libcamera.IPACameraSensorInfo sensorInfo;
libcamera.ControlInfoMap sensorControls;
+ libcamera.ControlInfoMap lensControls;
};
interface IPARkISP1Interface {
diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
index 6544c925..9e861fc0 100644
--- a/src/ipa/rkisp1/rkisp1.cpp
+++ b/src/ipa/rkisp1/rkisp1.cpp
@@ -7,6 +7,7 @@
#include <algorithm>
#include <math.h>
+#include <optional>
#include <queue>
#include <stdint.h>
#include <string.h>
@@ -80,6 +81,7 @@ private:
std::map<unsigned int, MappedFrameBuffer> mappedBuffers_;
ControlInfoMap sensorControls_;
+ std::optional<ControlInfoMap> lensControls_;
/* revision-specific data */
rkisp1_cif_isp_version hwRevision_;
@@ -215,6 +217,9 @@ int IPARkISP1::configure(const IPAConfigInfo &ipaConfig,
{
sensorControls_ = ipaConfig.sensorControls;
+ if (!ipaConfig.lensControls.empty())
+ lensControls_ = ipaConfig.lensControls;
+
const auto itExp = sensorControls_.find(V4L2_CID_EXPOSURE);
int32_t minExposure = itExp->second.min().get<int32_t>();
int32_t maxExposure = itExp->second.max().get<int32_t>();
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 6efa79f2..e13d249b 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -32,6 +32,7 @@
#include <libcamera/ipa/rkisp1_ipa_proxy.h>
#include "libcamera/internal/camera.h"
+#include "libcamera/internal/camera_lens.h"
#include "libcamera/internal/camera_sensor.h"
#include "libcamera/internal/delayed_controls.h"
#include "libcamera/internal/device_enumerator.h"
@@ -822,6 +823,10 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
ipaConfig.sensorControls = data->sensor_->controls();
+ CameraLens *lens = data->sensor_->focusLens();
+ if (lens)
+ ipaConfig.lensControls = lens->controls();
+
ret = data->ipa_->configure(ipaConfig, streamConfig, &data->controlInfo_);
if (ret) {
LOG(RkISP1, Error) << "failed configuring IPA (" << ret << ")";