[v1,13/33] libcamera: converter_v4l2_m2m: Add helper to apply controls
diff mbox series

Message ID 20250930122726.1837524-14-stefan.klug@ideasonboard.com
State New
Headers show
Series
  • Full dewarper support on imx8mp
Related show

Commit Message

Stefan Klug Sept. 30, 2025, 12:26 p.m. UTC
From: Umang Jain <umang.jain@ideasonboard.com>

Add applyControls() helper to apply controls for a stream.

Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>

---

Changes in v0.9
- Include request support in applyControls
---
 .../internal/converter/converter_v4l2_m2m.h   |  5 +++++
 .../converter/converter_v4l2_m2m.cpp          | 19 +++++++++++++++++++
 2 files changed, 24 insertions(+)

Patch
diff mbox series

diff --git a/include/libcamera/internal/converter/converter_v4l2_m2m.h b/include/libcamera/internal/converter/converter_v4l2_m2m.h
index 3b8fc5392b7d..615369c1a167 100644
--- a/include/libcamera/internal/converter/converter_v4l2_m2m.h
+++ b/include/libcamera/internal/converter/converter_v4l2_m2m.h
@@ -24,6 +24,7 @@ 
 
 namespace libcamera {
 
+class ControlList;
 class FrameBuffer;
 class MediaDevice;
 class Size;
@@ -73,6 +74,8 @@  public:
 	std::pair<Rectangle, Rectangle> inputCropBounds() override { return inputCropBounds_; }
 	std::pair<Rectangle, Rectangle> inputCropBounds(const Stream *stream) override;
 
+	int applyControls(const Stream *stream, ControlList &ctrls, const V4L2Request *request = nullptr);
+
 	int allocateRequests(unsigned int count,
 			     std::vector<std::unique_ptr<V4L2Request>> *requests);
 
@@ -94,6 +97,8 @@  protected:
 		int start();
 		void stop();
 
+		int applyControls(ControlList &ctrls, const V4L2Request *request = nullptr);
+
 		int queueBuffers(FrameBuffer *input, FrameBuffer *output,
 				 const V4L2Request *request = nullptr);
 
diff --git a/src/libcamera/converter/converter_v4l2_m2m.cpp b/src/libcamera/converter/converter_v4l2_m2m.cpp
index e57db8a438ab..82e6d56e3d5c 100644
--- a/src/libcamera/converter/converter_v4l2_m2m.cpp
+++ b/src/libcamera/converter/converter_v4l2_m2m.cpp
@@ -18,6 +18,7 @@ 
 #include <libcamera/base/signal.h>
 #include <libcamera/base/utils.h>
 
+#include <libcamera/controls.h>
 #include <libcamera/framebuffer.h>
 #include <libcamera/geometry.h>
 #include <libcamera/stream.h>
@@ -251,6 +252,12 @@  void V4L2M2MConverter::V4L2M2MStream::captureBufferReady(FrameBuffer *buffer)
 	converter_->outputBufferReady.emit(buffer);
 }
 
+int V4L2M2MConverter::V4L2M2MStream::applyControls(ControlList &ctrls,
+						   const V4L2Request *request)
+{
+	return m2m_->capture()->setControls(&ctrls, request);
+};
+
 /* -----------------------------------------------------------------------------
  * V4L2M2MConverter
  */
@@ -744,6 +751,18 @@  int V4L2M2MConverter::queueBuffers(FrameBuffer *input,
 	return 0;
 }
 
+/**
+ * libcamera::Converter::applyControls
+ */
+int V4L2M2MConverter::applyControls(const Stream *stream, ControlList &ctrls, const V4L2Request *request)
+{
+	auto iter = streams_.find(stream);
+	if (iter == streams_.end())
+		return -EINVAL;
+
+	return iter->second->applyControls(ctrls, request);
+}
+
 /**
  * \copydoc libcamera::MediaDevice::allocateRequests
  */