about summary refs log tree commit diff
path: root/users/flokli/ipu6-softisp/libcamera/0013-libcamera-swstats_cpu-Add-support-for-8-10-and-12-bp.patch
diff options
context:
space:
mode:
Diffstat (limited to 'users/flokli/ipu6-softisp/libcamera/0013-libcamera-swstats_cpu-Add-support-for-8-10-and-12-bp.patch')
-rw-r--r--users/flokli/ipu6-softisp/libcamera/0013-libcamera-swstats_cpu-Add-support-for-8-10-and-12-bp.patch203
1 files changed, 0 insertions, 203 deletions
diff --git a/users/flokli/ipu6-softisp/libcamera/0013-libcamera-swstats_cpu-Add-support-for-8-10-and-12-bp.patch b/users/flokli/ipu6-softisp/libcamera/0013-libcamera-swstats_cpu-Add-support-for-8-10-and-12-bp.patch
deleted file mode 100644
index 1a57d690ff91..000000000000
--- a/users/flokli/ipu6-softisp/libcamera/0013-libcamera-swstats_cpu-Add-support-for-8-10-and-12-bp.patch
+++ /dev/null
@@ -1,203 +0,0 @@
-From aabc53453d542495d9da25411f57308c01f2bc28 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Mon, 11 Mar 2024 15:15:17 +0100
-Subject: [PATCH 13/21] libcamera: swstats_cpu: Add support for 8, 10 and 12
- bpp unpacked bayer input
-
-Add support for 8, 10 and 12 bpp unpacked bayer input for all 4 standard
-bayer orders.
-
-Tested-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> # sc8280xp Lenovo x13s
-Tested-by: Pavel Machek <pavel@ucw.cz>
-Reviewed-by: Pavel Machek <pavel@ucw.cz>
-Reviewed-by: Milan Zamazal <mzamazal@redhat.com>
-Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- src/libcamera/software_isp/swstats_cpu.cpp | 128 +++++++++++++++++++++
- src/libcamera/software_isp/swstats_cpu.h   |   9 ++
- 2 files changed, 137 insertions(+)
-
-diff --git a/src/libcamera/software_isp/swstats_cpu.cpp b/src/libcamera/software_isp/swstats_cpu.cpp
-index 448d0e4c..be310f56 100644
---- a/src/libcamera/software_isp/swstats_cpu.cpp
-+++ b/src/libcamera/software_isp/swstats_cpu.cpp
-@@ -71,6 +71,83 @@ static const unsigned int kBlueYMul = 29; /* 0.114 * 256 */
- 	stats_.sumG_ += sumG;       \
- 	stats_.sumB_ += sumB;
- 
-+void SwStatsCpu::statsBGGR8Line0(const uint8_t *src[])
-+{
-+	const uint8_t *src0 = src[1] + window_.x;
-+	const uint8_t *src1 = src[2] + window_.x;
-+
-+	SWSTATS_START_LINE_STATS(uint8_t)
-+
-+	if (swapLines_)
-+		std::swap(src0, src1);
-+
-+	/* x += 4 sample every other 2x2 block */
-+	for (int x = 0; x < (int)window_.width; x += 4) {
-+		b = src0[x];
-+		g = src0[x + 1];
-+		g2 = src1[x];
-+		r = src1[x + 1];
-+
-+		g = (g + g2) / 2;
-+
-+		SWSTATS_ACCUMULATE_LINE_STATS(1)
-+	}
-+
-+	SWSTATS_FINISH_LINE_STATS()
-+}
-+
-+void SwStatsCpu::statsBGGR10Line0(const uint8_t *src[])
-+{
-+	const uint16_t *src0 = (const uint16_t *)src[1] + window_.x;
-+	const uint16_t *src1 = (const uint16_t *)src[2] + window_.x;
-+
-+	SWSTATS_START_LINE_STATS(uint16_t)
-+
-+	if (swapLines_)
-+		std::swap(src0, src1);
-+
-+	/* x += 4 sample every other 2x2 block */
-+	for (int x = 0; x < (int)window_.width; x += 4) {
-+		b = src0[x];
-+		g = src0[x + 1];
-+		g2 = src1[x];
-+		r = src1[x + 1];
-+
-+		g = (g + g2) / 2;
-+
-+		/* divide Y by 4 for 10 -> 8 bpp value */
-+		SWSTATS_ACCUMULATE_LINE_STATS(4)
-+	}
-+
-+	SWSTATS_FINISH_LINE_STATS()
-+}
-+
-+void SwStatsCpu::statsBGGR12Line0(const uint8_t *src[])
-+{
-+	const uint16_t *src0 = (const uint16_t *)src[1] + window_.x;
-+	const uint16_t *src1 = (const uint16_t *)src[2] + window_.x;
-+
-+	SWSTATS_START_LINE_STATS(uint16_t)
-+
-+	if (swapLines_)
-+		std::swap(src0, src1);
-+
-+	/* x += 4 sample every other 2x2 block */
-+	for (int x = 0; x < (int)window_.width; x += 4) {
-+		b = src0[x];
-+		g = src0[x + 1];
-+		g2 = src1[x];
-+		r = src1[x + 1];
-+
-+		g = (g + g2) / 2;
-+
-+		/* divide Y by 16 for 12 -> 8 bpp value */
-+		SWSTATS_ACCUMULATE_LINE_STATS(16)
-+	}
-+
-+	SWSTATS_FINISH_LINE_STATS()
-+}
-+
- void SwStatsCpu::statsBGGR10PLine0(const uint8_t *src[])
- {
- 	const uint8_t *src0 = src[1] + window_.x * 5 / 4;
-@@ -147,6 +224,42 @@ void SwStatsCpu::finishFrame(void)
- 	statsReady.emit(0);
- }
- 
-+/**
-+ * \brief Setup SwStatsCpu object for standard Bayer orders
-+ * \param[in] order The Bayer order
-+ *
-+ * Check if order is a standard Bayer order and setup xShift_ and swapLines_
-+ * so that a single BGGR stats function can be used for all 4 standard orders.
-+ */
-+int SwStatsCpu::setupStandardBayerOrder(BayerFormat::Order order)
-+{
-+	switch (order) {
-+	case BayerFormat::BGGR:
-+		xShift_ = 0;
-+		swapLines_ = false;
-+		break;
-+	case BayerFormat::GBRG:
-+		xShift_ = 1; /* BGGR -> GBRG */
-+		swapLines_ = false;
-+		break;
-+	case BayerFormat::GRBG:
-+		xShift_ = 0;
-+		swapLines_ = true; /* BGGR -> GRBG */
-+		break;
-+	case BayerFormat::RGGB:
-+		xShift_ = 1; /* BGGR -> GBRG */
-+		swapLines_ = true; /* GBRG -> RGGB */
-+		break;
-+	default:
-+		return -EINVAL;
-+	}
-+
-+	patternSize_.height = 2;
-+	patternSize_.width = 2;
-+	ySkipMask_ = 0x02; /* Skip every 3th and 4th line */
-+	return 0;
-+}
-+
- /**
-  * \brief Configure the statistics object for the passed in input format.
-  * \param[in] inputCfg The input format
-@@ -158,6 +271,21 @@ int SwStatsCpu::configure(const StreamConfiguration &inputCfg)
- 	BayerFormat bayerFormat =
- 		BayerFormat::fromPixelFormat(inputCfg.pixelFormat);
- 
-+	if (bayerFormat.packing == BayerFormat::Packing::None &&
-+	    setupStandardBayerOrder(bayerFormat.order) == 0) {
-+		switch (bayerFormat.bitDepth) {
-+		case 8:
-+			stats0_ = &SwStatsCpu::statsBGGR8Line0;
-+			return 0;
-+		case 10:
-+			stats0_ = &SwStatsCpu::statsBGGR10Line0;
-+			return 0;
-+		case 12:
-+			stats0_ = &SwStatsCpu::statsBGGR12Line0;
-+			return 0;
-+		}
-+	}
-+
- 	if (bayerFormat.bitDepth == 10 &&
- 	    bayerFormat.packing == BayerFormat::Packing::CSI2) {
- 		patternSize_.height = 2;
-diff --git a/src/libcamera/software_isp/swstats_cpu.h b/src/libcamera/software_isp/swstats_cpu.h
-index 0ac9ae71..bbbcf69b 100644
---- a/src/libcamera/software_isp/swstats_cpu.h
-+++ b/src/libcamera/software_isp/swstats_cpu.h
-@@ -17,6 +17,7 @@
- 
- #include <libcamera/geometry.h>
- 
-+#include "libcamera/internal/bayer_format.h"
- #include "libcamera/internal/shared_mem_object.h"
- #include "libcamera/internal/software_isp/swisp_stats.h"
- 
-@@ -120,6 +121,14 @@ private:
- 	 */
- 	using statsProcessFn = void (SwStatsCpu::*)(const uint8_t *src[]);
- 
-+	int setupStandardBayerOrder(BayerFormat::Order order);
-+	/* Bayer 8 bpp unpacked */
-+	void statsBGGR8Line0(const uint8_t *src[]);
-+	/* Bayer 10 bpp unpacked */
-+	void statsBGGR10Line0(const uint8_t *src[]);
-+	/* Bayer 12 bpp unpacked */
-+	void statsBGGR12Line0(const uint8_t *src[]);
-+	/* Bayer 10 bpp packed */
- 	void statsBGGR10PLine0(const uint8_t *src[]);
- 	void statsGBRG10PLine0(const uint8_t *src[]);
- 
--- 
-2.43.2
-