[libcamera-devel,v2,1/4] ipa: vimc: Add configure() function
diff mbox series

Message ID 20210813144437.138005-2-umang.jain@ideasonboard.com
State Superseded
Delegated to: Umang Jain
Headers show
Series
  • Pass buffers to VIMC IPA
Related show

Commit Message

Umang Jain Aug. 13, 2021, 2:44 p.m. UTC
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

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>
---
 include/libcamera/ipa/vimc.mojom     |  5 +++++
 src/ipa/vimc/vimc.cpp                | 13 +++++++++++++
 src/libcamera/pipeline/vimc/vimc.cpp | 16 ++++++++++++++++
 3 files changed, 34 insertions(+)

Patch
diff mbox series

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..0535c740 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;
 }