[RFC PATCH 5/6] libcamera: converter_v4l2_m2m: Add helper to apply controls

Umang Jain umang.jain at ideasonboard.com
Fri Jul 12 07:29:19 CEST 2024


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

Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
---
 .../internal/converter/converter_v4l2_m2m.h    |  5 +++++
 src/libcamera/converter/converter_v4l2_m2m.cpp | 18 ++++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/include/libcamera/internal/converter/converter_v4l2_m2m.h b/include/libcamera/internal/converter/converter_v4l2_m2m.h
index f61beef8..9d3d62d6 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;
@@ -61,6 +62,8 @@ public:
 	int setCrop(const Stream *stream, Rectangle *rect);
 	std::pair<Rectangle, Rectangle> getCropBounds(const Stream *stream);
 
+	int applyControls(const Stream *stream, ControlList &ctrls);
+
 protected:
 	class Mapping
 	{
@@ -97,6 +100,8 @@ private:
 		int start();
 		void stop();
 
+		int applyControls(ControlList &ctrls);
+
 		int queueBuffers(FrameBuffer *input, FrameBuffer *output);
 
 		int setSelection(unsigned int target, Rectangle *rect);
diff --git a/src/libcamera/converter/converter_v4l2_m2m.cpp b/src/libcamera/converter/converter_v4l2_m2m.cpp
index 9752a23e..9ff5102a 100644
--- a/src/libcamera/converter/converter_v4l2_m2m.cpp
+++ b/src/libcamera/converter/converter_v4l2_m2m.cpp
@@ -15,6 +15,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>
@@ -186,6 +187,11 @@ void V4L2M2MConverter::V4L2M2MStream::captureBufferReady(FrameBuffer *buffer)
 	converter_->outputBufferReady.emit(buffer);
 }
 
+int V4L2M2MConverter::V4L2M2MStream::applyControls(ControlList &ctrls)
+{
+	return m2m_->capture()->setControls(&ctrls);
+};
+
 /* -----------------------------------------------------------------------------
  * V4L2M2MConverter
  */
@@ -532,6 +538,18 @@ int V4L2M2MConverter::queueBuffers(FrameBuffer *input,
 	return 0;
 }
 
+/**
+ * libcamera::Converter::applyControls
+ */
+int V4L2M2MConverter::applyControls(const Stream *stream, ControlList &ctrls)
+{
+	auto iter = streams_.find(stream);
+	if (iter == streams_.end())
+		return -EINVAL;
+
+	return iter->second->applyControls(ctrls);
+}
+
 /*
  * \todo: This should be extended to include Feature::Flag to denote
  * what each converter supports feature-wise.
-- 
2.45.0



More information about the libcamera-devel mailing list