summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-08-14 10:39:09 +0530
committerUmang Jain <umang.jain@ideasonboard.com>2021-08-16 12:01:18 +0530
commit568c4049bc281a8a187789ec28717176f903f571 (patch)
tree5d92bfb23e90ed995f93b520e0e04e83d3e98d1a
parent25462474f8bb56153995f44f2f2996673321f871 (diff)
ipa: vimc: Add configure() function
As part of an effort to make the vimc IPA usable for testing, extend it with a configure function. The configuration is currently ignored by the IPA. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
-rw-r--r--include/libcamera/ipa/vimc.mojom5
-rw-r--r--src/ipa/vimc/vimc.cpp13
-rw-r--r--src/libcamera/pipeline/vimc/vimc.cpp16
3 files changed, 34 insertions, 0 deletions
diff --git a/include/libcamera/ipa/vimc.mojom b/include/libcamera/ipa/vimc.mojom
index 86bc318a..ee66353d 100644
--- a/include/libcamera/ipa/vimc.mojom
+++ b/include/libcamera/ipa/vimc.mojom
@@ -19,6 +19,11 @@ enum IPAOperationCode {
interface IPAVimcInterface {
init(libcamera.IPASettings settings) => (int32 ret);
+
+ configure(libcamera.IPACameraSensorInfo sensorInfo,
+ map<uint32, libcamera.IPAStream> streamConfig,
+ map<uint32, libcamera.ControlInfoMap> entityControls) => (int32 ret);
+
start() => (int32 ret);
stop();
};
diff --git a/src/ipa/vimc/vimc.cpp b/src/ipa/vimc/vimc.cpp
index 0c0ee006..fb134084 100644
--- a/src/ipa/vimc/vimc.cpp
+++ b/src/ipa/vimc/vimc.cpp
@@ -34,6 +34,10 @@ public:
int start() override;
void stop() override;
+ int configure(const IPACameraSensorInfo &sensorInfo,
+ const std::map<unsigned int, IPAStream> &streamConfig,
+ const std::map<unsigned int, ControlInfoMap> &entityControls) override;
+
private:
void initTrace();
void trace(enum ipa::vimc::IPAOperationCode operation);
@@ -86,6 +90,15 @@ void IPAVimc::stop()
LOG(IPAVimc, Debug) << "stop vimc IPA!";
}
+int IPAVimc::configure([[maybe_unused]] const IPACameraSensorInfo &sensorInfo,
+ [[maybe_unused]] const std::map<unsigned int, IPAStream> &streamConfig,
+ [[maybe_unused]] const std::map<unsigned int, ControlInfoMap> &entityControls)
+{
+ LOG(IPAVimc, Debug) << "configure()";
+
+ return 0;
+}
+
void IPAVimc::initTrace()
{
struct stat fifoStat;
diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
index d4b041d3..4c92729d 100644
--- a/src/libcamera/pipeline/vimc/vimc.cpp
+++ b/src/libcamera/pipeline/vimc/vimc.cpp
@@ -295,6 +295,22 @@ int PipelineHandlerVimc::configure(Camera *camera, CameraConfiguration *config)
cfg.setStream(&data->stream_);
+ if (data->ipa_) {
+ /* Inform IPA of stream configuration and sensor controls. */
+ std::map<unsigned int, IPAStream> streamConfig;
+ streamConfig.emplace(std::piecewise_construct,
+ std::forward_as_tuple(0),
+ std::forward_as_tuple(cfg.pixelFormat, cfg.size));
+
+ std::map<unsigned int, ControlInfoMap> entityControls;
+ entityControls.emplace(0, data->sensor_->controls());
+
+ IPACameraSensorInfo sensorInfo;
+ data->sensor_->sensorInfo(&sensorInfo);
+
+ data->ipa_->configure(sensorInfo, streamConfig, entityControls);
+ }
+
return 0;
}