about summary refs log tree commit diff
path: root/users/flokli/ipu6-softisp/libcamera/0011-libcamera-ipa-add-Soft-IPA-common-files.patch
diff options
context:
space:
mode:
authorFlorian Klink <flokli@flokli.de>2024-01-30T09·43+0200
committerflokli <flokli@flokli.de>2024-01-30T09·54+0000
commitaf9a8d372b24710bf7fc27c8e81244e1ca6d1658 (patch)
treedf8bee03b202ec5081b9bd7e7b5d7b6ecdd28e1b /users/flokli/ipu6-softisp/libcamera/0011-libcamera-ipa-add-Soft-IPA-common-files.patch
parentb38be028d96ce107439f3323026270228a871a13 (diff)
feat(users/flokli/ipu6-softisp): init r/7454
This code adds support for the ipu6 webcams via libcamera, based on the work in
https://copr.fedorainfracloud.org/coprs/jwrdegoede/ipu6-softisp/.

It's supposed to be included in your NixOS configuration imports.

Change-Id: Ifb71999ad61161fa23506b97cb449f73fb1270e3
Reviewed-on: https://cl.tvl.fyi/c/depot/+/10709
Tested-by: BuildkiteCI
Reviewed-by: flokli <flokli@flokli.de>
Autosubmit: flokli <flokli@flokli.de>
Diffstat (limited to 'users/flokli/ipu6-softisp/libcamera/0011-libcamera-ipa-add-Soft-IPA-common-files.patch')
-rw-r--r--users/flokli/ipu6-softisp/libcamera/0011-libcamera-ipa-add-Soft-IPA-common-files.patch256
1 files changed, 256 insertions, 0 deletions
diff --git a/users/flokli/ipu6-softisp/libcamera/0011-libcamera-ipa-add-Soft-IPA-common-files.patch b/users/flokli/ipu6-softisp/libcamera/0011-libcamera-ipa-add-Soft-IPA-common-files.patch
new file mode 100644
index 000000000000..d5fd94f6af37
--- /dev/null
+++ b/users/flokli/ipu6-softisp/libcamera/0011-libcamera-ipa-add-Soft-IPA-common-files.patch
@@ -0,0 +1,256 @@
+From 05b353f1e45f2af0d0989261210b4bedef5144de Mon Sep 17 00:00:00 2001
+From: Andrey Konovalov <andrey.konovalov@linaro.org>
+Date: Mon, 11 Dec 2023 23:41:58 +0300
+Subject: [PATCH 11/25] libcamera: ipa: add Soft IPA common files
+
+Define the Soft IPA main and event interfaces, add IPASoftBase
+class the Soft IPA implementation inherit from.
+
+Signed-off-by: Andrey Konovalov <andrey.konovalov@linaro.org>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Tested-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> # sc8280xp Lenovo x13s
+Tested-by: Pavel Machek <pavel@ucw.cz>
+---
+ Documentation/Doxyfile.in           |  1 +
+ include/libcamera/ipa/meson.build   |  1 +
+ include/libcamera/ipa/soft.mojom    | 29 ++++++++++++
+ src/ipa/simple/common/meson.build   | 17 +++++++
+ src/ipa/simple/common/soft_base.cpp | 73 +++++++++++++++++++++++++++++
+ src/ipa/simple/common/soft_base.h   | 50 ++++++++++++++++++++
+ src/ipa/simple/meson.build          |  3 ++
+ 7 files changed, 174 insertions(+)
+ create mode 100644 include/libcamera/ipa/soft.mojom
+ create mode 100644 src/ipa/simple/common/meson.build
+ create mode 100644 src/ipa/simple/common/soft_base.cpp
+ create mode 100644 src/ipa/simple/common/soft_base.h
+ create mode 100644 src/ipa/simple/meson.build
+
+diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in
+index a86ea6c1..2be8d47b 100644
+--- a/Documentation/Doxyfile.in
++++ b/Documentation/Doxyfile.in
+@@ -44,6 +44,7 @@ EXCLUDE                = @TOP_SRCDIR@/include/libcamera/base/span.h \
+                          @TOP_SRCDIR@/src/libcamera/pipeline/ \
+                          @TOP_SRCDIR@/src/libcamera/tracepoints.cpp \
+                          @TOP_BUILDDIR@/include/libcamera/internal/tracepoints.h \
++                         @TOP_BUILDDIR@/include/libcamera/ipa/soft_ipa_interface.h \
+                          @TOP_BUILDDIR@/src/libcamera/proxy/
+ 
+ EXCLUDE_PATTERNS       = @TOP_BUILDDIR@/include/libcamera/ipa/*_serializer.h \
+diff --git a/include/libcamera/ipa/meson.build b/include/libcamera/ipa/meson.build
+index f3b4881c..894e38a6 100644
+--- a/include/libcamera/ipa/meson.build
++++ b/include/libcamera/ipa/meson.build
+@@ -65,6 +65,7 @@ pipeline_ipa_mojom_mapping = {
+     'ipu3': 'ipu3.mojom',
+     'rkisp1': 'rkisp1.mojom',
+     'rpi/vc4': 'raspberrypi.mojom',
++    'simple/simple': 'soft.mojom',
+     'vimc': 'vimc.mojom',
+ }
+ 
+diff --git a/include/libcamera/ipa/soft.mojom b/include/libcamera/ipa/soft.mojom
+new file mode 100644
+index 00000000..2dae652b
+--- /dev/null
++++ b/include/libcamera/ipa/soft.mojom
+@@ -0,0 +1,29 @@
++/* SPDX-License-Identifier: LGPL-2.1-or-later */
++
++/*
++ * \todo Document the interface and remove the related EXCLUDE_PATTERNS entry.
++ * \todo Add a way to tell SoftIPA the list of params SoftISP accepts?
++ */
++
++module ipa.soft;
++
++import "include/libcamera/ipa/core.mojom";
++
++interface IPASoftInterface {
++	init(libcamera.IPASettings settings,
++	     libcamera.SharedFD fdStats,
++	     libcamera.SharedFD fdParams,
++	     libcamera.ControlInfoMap sensorCtrlInfoMap)
++		=> (int32 ret);
++	start() => (int32 ret);
++	stop();
++	configure(libcamera.ControlInfoMap sensorCtrlInfoMap)
++		=> (int32 ret);
++
++	[async] processStats(libcamera.ControlList sensorControls);
++};
++
++interface IPASoftEventInterface {
++	setSensorControls(libcamera.ControlList sensorControls);
++	setIspParams(int32 dummy);
++};
+diff --git a/src/ipa/simple/common/meson.build b/src/ipa/simple/common/meson.build
+new file mode 100644
+index 00000000..023e617b
+--- /dev/null
++++ b/src/ipa/simple/common/meson.build
+@@ -0,0 +1,17 @@
++# SPDX-License-Identifier: CC0-1.0
++
++soft_ipa_common_sources = files([
++    'soft_base.cpp',
++])
++
++soft_ipa_common_includes = [
++    include_directories('..'),
++]
++
++soft_ipa_common_deps = [
++    libcamera_private,
++]
++
++soft_ipa_common_lib = static_library('soft_ipa_common', soft_ipa_common_sources,
++                                     include_directories : soft_ipa_common_includes,
++                                     dependencies : soft_ipa_common_deps)
+diff --git a/src/ipa/simple/common/soft_base.cpp b/src/ipa/simple/common/soft_base.cpp
+new file mode 100644
+index 00000000..b4ed9023
+--- /dev/null
++++ b/src/ipa/simple/common/soft_base.cpp
+@@ -0,0 +1,73 @@
++/* SPDX-License-Identifier: LGPL-2.1-or-later */
++/*
++ * Copyright (C) 2023, Linaro Ltd
++ *
++ * soft-base.cpp - Software IPA base class
++ */
++
++#include "soft_base.h"
++
++#include <sys/mman.h>
++
++#include <libcamera/base/file.h>
++#include <libcamera/base/log.h>
++
++#include <libcamera/control_ids.h>
++
++namespace libcamera {
++
++LOG_DEFINE_CATEGORY(IPASoft)
++
++namespace ipa::soft {
++
++IPASoftBase::IPASoftBase()
++{
++}
++
++IPASoftBase::~IPASoftBase()
++{
++}
++
++int IPASoftBase::init([[maybe_unused]] const IPASettings &settings,
++		      const SharedFD &fdStats,
++		      const SharedFD &fdParams,
++		      const ControlInfoMap &sensorInfoMap)
++{
++	fdStats_ = std::move(fdStats);
++	if (!fdStats_.isValid()) {
++		LOG(IPASoft, Error) << "Invalid Statistics handle";
++		return -ENODEV;
++	}
++
++	fdParams_ = std::move(fdParams);
++	if (!fdParams_.isValid()) {
++		LOG(IPASoft, Error) << "Invalid Parameters handle";
++		return -ENODEV;
++	}
++
++	return platformInit(sensorInfoMap);
++}
++
++int IPASoftBase::configure(const ControlInfoMap &sensorInfoMap)
++{
++	return platformConfigure(sensorInfoMap);
++}
++
++int IPASoftBase::start()
++{
++	return platformStart();
++}
++
++void IPASoftBase::stop()
++{
++	return platformStop();
++}
++
++void IPASoftBase::processStats(const ControlList &sensorControls)
++{
++	return platformProcessStats(sensorControls);
++}
++
++} /* namespace ipa::soft */
++
++} /* namespace libcamera */
+diff --git a/src/ipa/simple/common/soft_base.h b/src/ipa/simple/common/soft_base.h
+new file mode 100644
+index 00000000..85c98702
+--- /dev/null
++++ b/src/ipa/simple/common/soft_base.h
+@@ -0,0 +1,50 @@
++/* SPDX-License-Identifier: LGPL-2.1-or-later */
++/*
++ * Copyright (C) 2023, Linaro Ltd
++ *
++ * soft-base.h - Software IPA base class
++ */
++#pragma once
++
++#include <libcamera/base/shared_fd.h>
++
++#include <libcamera/controls.h>
++
++#include <libcamera/ipa/soft_ipa_interface.h>
++
++namespace libcamera {
++
++namespace ipa::soft {
++
++class IPASoftBase : public ipa::soft::IPASoftInterface
++{
++public:
++	IPASoftBase();
++	~IPASoftBase();
++
++	int init(const IPASettings &settings,
++		 const SharedFD &fdStats,
++		 const SharedFD &fdParams,
++		 const ControlInfoMap &sensorInfoMap) override;
++	int configure(const ControlInfoMap &sensorInfoMap) override;
++
++	int start() override;
++	void stop() override;
++
++	void processStats(const ControlList &sensorControls) override;
++
++protected:
++	SharedFD fdStats_;
++	SharedFD fdParams_;
++
++private:
++	virtual int platformInit(const ControlInfoMap &sensorInfoMap) = 0;
++	virtual int platformConfigure(const ControlInfoMap &sensorInfoMap) = 0;
++	virtual int platformStart() = 0;
++	virtual void platformStop() = 0;
++	virtual void platformProcessStats(const ControlList &sensorControls) = 0;
++};
++
++} /* namespace ipa::soft */
++
++} /* namespace libcamera */
+diff --git a/src/ipa/simple/meson.build b/src/ipa/simple/meson.build
+new file mode 100644
+index 00000000..9688bbdb
+--- /dev/null
++++ b/src/ipa/simple/meson.build
+@@ -0,0 +1,3 @@
++# SPDX-License-Identifier: CC0-1.0
++
++subdir('common')
+-- 
+2.43.0
+