[v1,19/33] libcamera: converter: Add dw100 converter class
diff mbox series

Message ID 20250930122726.1837524-20-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>

DW100 Dewarp engine is present on i.MX8MP SoC. This patch
provides a dedicated converter class (inherited from V4L2M2MConverter).

The DW100 dewarp engine has scaling capabilites and can be used
to set crop rectangles in the rkisp1 pipeline handler. Plumbing
in the RkISP1 pipeline-handler is done in the subsequent patch.

The ConverterDW100 class will be extended by upcoming patches to support
the dewarping by setting a dewarp vertex map as well.

Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>

---

Changes in v0.9
- Use shared_ptr in constructor
---
 .../internal/converter/converter_dw100.h      | 26 +++++++++++
 .../libcamera/internal/converter/meson.build  |  1 +
 src/libcamera/converter/converter_dw100.cpp   | 43 +++++++++++++++++++
 src/libcamera/converter/meson.build           |  1 +
 4 files changed, 71 insertions(+)
 create mode 100644 include/libcamera/internal/converter/converter_dw100.h
 create mode 100644 src/libcamera/converter/converter_dw100.cpp

Patch
diff mbox series

diff --git a/include/libcamera/internal/converter/converter_dw100.h b/include/libcamera/internal/converter/converter_dw100.h
new file mode 100644
index 000000000000..deb0125a0dbc
--- /dev/null
+++ b/include/libcamera/internal/converter/converter_dw100.h
@@ -0,0 +1,26 @@ 
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board Oy
+ *
+ * i.MX8MP Dewarp Engine integration
+ */
+
+#pragma once
+
+#include "libcamera/internal/converter/converter_v4l2_m2m.h"
+
+namespace libcamera {
+
+class MediaDevice;
+class Rectangle;
+class Stream;
+
+class ConverterDW100 : public V4L2M2MConverter
+{
+public:
+	ConverterDW100(std::shared_ptr<MediaDevice> media);
+
+	void validateSize(Size *size) const;
+};
+
+} /* namespace libcamera */
diff --git a/include/libcamera/internal/converter/meson.build b/include/libcamera/internal/converter/meson.build
index 891e79e7d493..85007a4b0f8b 100644
--- a/include/libcamera/internal/converter/meson.build
+++ b/include/libcamera/internal/converter/meson.build
@@ -1,5 +1,6 @@ 
 # SPDX-License-Identifier: CC0-1.0
 
 libcamera_internal_headers += files([
+    'converter_dw100.h',
     'converter_v4l2_m2m.h',
 ])
diff --git a/src/libcamera/converter/converter_dw100.cpp b/src/libcamera/converter/converter_dw100.cpp
new file mode 100644
index 000000000000..da1d88214a6e
--- /dev/null
+++ b/src/libcamera/converter/converter_dw100.cpp
@@ -0,0 +1,43 @@ 
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2024, Ideas On Board Oy
+ *
+ * i.MX8MP Dewarp Engine integration
+ */
+
+#include "libcamera/internal/converter/converter_dw100.h"
+
+#include <libcamera/base/log.h>
+
+#include <libcamera/geometry.h>
+
+#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/v4l2_videodevice.h"
+
+namespace libcamera {
+
+LOG_DECLARE_CATEGORY(Converter)
+
+/**
+ * \class libcamera::ConverterDW100
+ * \brief The i.MX8MP dewarp converter implements the converter interface based
+ * on V4L2 M2M device.
+*/
+
+/**
+ * \fn ConverterDW100::ConverterDW100
+ * \brief Construct a ConverterDW100 instance
+ * \param[in] media The media device implementing the converter
+ */
+ConverterDW100::ConverterDW100(std::shared_ptr<MediaDevice> media)
+	: V4L2M2MConverter(media)
+{
+}
+
+void ConverterDW100::validateSize(Size *size) const
+{
+	if (size)
+		size->alignDownTo(8, 8);
+}
+
+} /* namespace libcamera */
diff --git a/src/libcamera/converter/meson.build b/src/libcamera/converter/meson.build
index af1a80fec683..fe2dcebb67da 100644
--- a/src/libcamera/converter/meson.build
+++ b/src/libcamera/converter/meson.build
@@ -1,5 +1,6 @@ 
 # SPDX-License-Identifier: CC0-1.0
 
 libcamera_internal_sources += files([
+        'converter_dw100.cpp',
         'converter_v4l2_m2m.cpp'
 ])