diff options
author | Daniel Semkowicz <dse@thaumatec.com> | 2023-01-19 09:41:05 +0100 |
---|---|---|
committer | Jacopo Mondi <jacopo.mondi@ideasonboard.com> | 2023-09-04 14:08:50 +0200 |
commit | 446647fb1d8161a74a59a7c6d127017ccdbeb3a5 (patch) | |
tree | 2dd819cad3597d9e3dfc8e9cd6fadc21c6798319 | |
parent | ae9bcb2155957da3b6324676d706a901acb8343f (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.mojom | 1 | ||||
-rw-r--r-- | src/ipa/rkisp1/rkisp1.cpp | 5 | ||||
-rw-r--r-- | src/libcamera/pipeline/rkisp1/rkisp1.cpp | 5 |
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 << ")"; |