diff --git a/temp/libcamera/0001-libcamera-debayer_cpu-Add-32bits-aligned-output-form.patch b/temp/libcamera/0001-libcamera-debayer_cpu-Add-32bits-aligned-output-form.patch deleted file mode 100644 index b015cf674..000000000 --- a/temp/libcamera/0001-libcamera-debayer_cpu-Add-32bits-aligned-output-form.patch +++ /dev/null @@ -1,297 +0,0 @@ -From 437e601653e69c82f5396979d99e7b9b5bb6086b Mon Sep 17 00:00:00 2001 -From: Robert Mader -Date: Tue, 18 Jun 2024 08:31:59 +0200 -Subject: [PATCH] libcamera: debayer_cpu: Add 32bits/aligned output formats - -In order to be more compatible with modern hardware and APIs. This -notably allows GL implementations to directly import the buffers more -often and seems to be required for Wayland. - -Further more, as we already enforce a 8 byte stride, these formats work -better for clients that don't support padding - such as libwebrtc at the -time of writing. - -Tested devices: - - Librem5 - - PinePhone - - Thinkpad X13s - -Signed-off-by: Robert Mader -Tested-by: Kieran Bingham -Reviewed-by: Milan Zamazal -Reviewed-by: Kieran Bingham -Signed-off-by: Kieran Bingham ---- - src/libcamera/software_isp/debayer_cpu.cpp | 75 +++++++++++++++++----- - src/libcamera/software_isp/debayer_cpu.h | 10 +++ - 2 files changed, 69 insertions(+), 16 deletions(-) - -diff --git a/src/libcamera/software_isp/debayer_cpu.cpp b/src/libcamera/software_isp/debayer_cpu.cpp -index c038eed4..f8d2677d 100644 ---- a/src/libcamera/software_isp/debayer_cpu.cpp -+++ b/src/libcamera/software_isp/debayer_cpu.cpp -@@ -74,6 +74,8 @@ DebayerCpu::~DebayerCpu() - *dst++ = blue_[curr[x] / (div)]; \ - *dst++ = green_[(prev[x] + curr[x - p] + curr[x + n] + next[x]) / (4 * (div))]; \ - *dst++ = red_[(prev[x - p] + prev[x + n] + next[x - p] + next[x + n]) / (4 * (div))]; \ -+ if constexpr (addAlphaByte) \ -+ *dst++ = 255; \ - x++; - - /* -@@ -85,6 +87,8 @@ DebayerCpu::~DebayerCpu() - *dst++ = blue_[(prev[x] + next[x]) / (2 * (div))]; \ - *dst++ = green_[curr[x] / (div)]; \ - *dst++ = red_[(curr[x - p] + curr[x + n]) / (2 * (div))]; \ -+ if constexpr (addAlphaByte) \ -+ *dst++ = 255; \ - x++; - - /* -@@ -96,6 +100,8 @@ DebayerCpu::~DebayerCpu() - *dst++ = blue_[(curr[x - p] + curr[x + n]) / (2 * (div))]; \ - *dst++ = green_[curr[x] / (div)]; \ - *dst++ = red_[(prev[x] + next[x]) / (2 * (div))]; \ -+ if constexpr (addAlphaByte) \ -+ *dst++ = 255; \ - x++; - - /* -@@ -107,8 +113,11 @@ DebayerCpu::~DebayerCpu() - *dst++ = blue_[(prev[x - p] + prev[x + n] + next[x - p] + next[x + n]) / (4 * (div))]; \ - *dst++ = green_[(prev[x] + curr[x - p] + curr[x + n] + next[x]) / (4 * (div))]; \ - *dst++ = red_[curr[x] / (div)]; \ -+ if constexpr (addAlphaByte) \ -+ *dst++ = 255; \ - x++; - -+template - void DebayerCpu::debayer8_BGBG_BGR888(uint8_t *dst, const uint8_t *src[]) - { - DECLARE_SRC_POINTERS(uint8_t) -@@ -119,6 +128,7 @@ void DebayerCpu::debayer8_BGBG_BGR888(uint8_t *dst, const uint8_t *src[]) - } - } - -+template - void DebayerCpu::debayer8_GRGR_BGR888(uint8_t *dst, const uint8_t *src[]) - { - DECLARE_SRC_POINTERS(uint8_t) -@@ -129,6 +139,7 @@ void DebayerCpu::debayer8_GRGR_BGR888(uint8_t *dst, const uint8_t *src[]) - } - } - -+template - void DebayerCpu::debayer10_BGBG_BGR888(uint8_t *dst, const uint8_t *src[]) - { - DECLARE_SRC_POINTERS(uint16_t) -@@ -140,6 +151,7 @@ void DebayerCpu::debayer10_BGBG_BGR888(uint8_t *dst, const uint8_t *src[]) - } - } - -+template - void DebayerCpu::debayer10_GRGR_BGR888(uint8_t *dst, const uint8_t *src[]) - { - DECLARE_SRC_POINTERS(uint16_t) -@@ -151,6 +163,7 @@ void DebayerCpu::debayer10_GRGR_BGR888(uint8_t *dst, const uint8_t *src[]) - } - } - -+template - void DebayerCpu::debayer12_BGBG_BGR888(uint8_t *dst, const uint8_t *src[]) - { - DECLARE_SRC_POINTERS(uint16_t) -@@ -162,6 +175,7 @@ void DebayerCpu::debayer12_BGBG_BGR888(uint8_t *dst, const uint8_t *src[]) - } - } - -+template - void DebayerCpu::debayer12_GRGR_BGR888(uint8_t *dst, const uint8_t *src[]) - { - DECLARE_SRC_POINTERS(uint16_t) -@@ -173,6 +187,7 @@ void DebayerCpu::debayer12_GRGR_BGR888(uint8_t *dst, const uint8_t *src[]) - } - } - -+template - void DebayerCpu::debayer10P_BGBG_BGR888(uint8_t *dst, const uint8_t *src[]) - { - const int widthInBytes = window_.width * 5 / 4; -@@ -198,6 +213,7 @@ void DebayerCpu::debayer10P_BGBG_BGR888(uint8_t *dst, const uint8_t *src[]) - } - } - -+template - void DebayerCpu::debayer10P_GRGR_BGR888(uint8_t *dst, const uint8_t *src[]) - { - const int widthInBytes = window_.width * 5 / 4; -@@ -218,6 +234,7 @@ void DebayerCpu::debayer10P_GRGR_BGR888(uint8_t *dst, const uint8_t *src[]) - } - } - -+template - void DebayerCpu::debayer10P_GBGB_BGR888(uint8_t *dst, const uint8_t *src[]) - { - const int widthInBytes = window_.width * 5 / 4; -@@ -238,6 +255,7 @@ void DebayerCpu::debayer10P_GBGB_BGR888(uint8_t *dst, const uint8_t *src[]) - } - } - -+template - void DebayerCpu::debayer10P_RGRG_BGR888(uint8_t *dst, const uint8_t *src[]) - { - const int widthInBytes = window_.width * 5 / 4; -@@ -280,7 +298,12 @@ int DebayerCpu::getInputConfig(PixelFormat inputFormat, DebayerInputConfig &conf - config.bpp = (bayerFormat.bitDepth + 7) & ~7; - config.patternSize.width = 2; - config.patternSize.height = 2; -- config.outputFormats = std::vector({ formats::RGB888, formats::BGR888 }); -+ config.outputFormats = std::vector({ formats::RGB888, -+ formats::XRGB8888, -+ formats::ARGB8888, -+ formats::BGR888, -+ formats::XBGR8888, -+ formats::ABGR8888 }); - return 0; - } - -@@ -290,7 +313,12 @@ int DebayerCpu::getInputConfig(PixelFormat inputFormat, DebayerInputConfig &conf - config.bpp = 10; - config.patternSize.width = 4; /* 5 bytes per *4* pixels */ - config.patternSize.height = 2; -- config.outputFormats = std::vector({ formats::RGB888, formats::BGR888 }); -+ config.outputFormats = std::vector({ formats::RGB888, -+ formats::XRGB8888, -+ formats::ARGB8888, -+ formats::BGR888, -+ formats::XBGR8888, -+ formats::ABGR8888 }); - return 0; - } - -@@ -306,6 +334,12 @@ int DebayerCpu::getOutputConfig(PixelFormat outputFormat, DebayerOutputConfig &c - return 0; - } - -+ if (outputFormat == formats::XRGB8888 || outputFormat == formats::ARGB8888 || -+ outputFormat == formats::XBGR8888 || outputFormat == formats::ABGR8888) { -+ config.bpp = 32; -+ return 0; -+ } -+ - LOG(Debayer, Info) - << "Unsupported output format " << outputFormat.toString(); - return -EINVAL; -@@ -341,6 +375,7 @@ int DebayerCpu::setDebayerFunctions(PixelFormat inputFormat, PixelFormat outputF - { - BayerFormat bayerFormat = - BayerFormat::fromPixelFormat(inputFormat); -+ bool addAlphaByte = false; - - xShift_ = 0; - swapRedBlueGains_ = false; -@@ -351,8 +386,16 @@ int DebayerCpu::setDebayerFunctions(PixelFormat inputFormat, PixelFormat outputF - }; - - switch (outputFormat) { -+ case formats::XRGB8888: -+ case formats::ARGB8888: -+ addAlphaByte = true; -+ [[fallthrough]]; - case formats::RGB888: - break; -+ case formats::XBGR8888: -+ case formats::ABGR8888: -+ addAlphaByte = true; -+ [[fallthrough]]; - case formats::BGR888: - /* Swap R and B in bayer order to generate BGR888 instead of RGB888 */ - swapRedBlueGains_ = true; -@@ -383,16 +426,16 @@ int DebayerCpu::setDebayerFunctions(PixelFormat inputFormat, PixelFormat outputF - isStandardBayerOrder(bayerFormat.order)) { - switch (bayerFormat.bitDepth) { - case 8: -- debayer0_ = &DebayerCpu::debayer8_BGBG_BGR888; -- debayer1_ = &DebayerCpu::debayer8_GRGR_BGR888; -+ debayer0_ = addAlphaByte ? &DebayerCpu::debayer8_BGBG_BGR888 : &DebayerCpu::debayer8_BGBG_BGR888; -+ debayer1_ = addAlphaByte ? &DebayerCpu::debayer8_GRGR_BGR888 : &DebayerCpu::debayer8_GRGR_BGR888; - break; - case 10: -- debayer0_ = &DebayerCpu::debayer10_BGBG_BGR888; -- debayer1_ = &DebayerCpu::debayer10_GRGR_BGR888; -+ debayer0_ = addAlphaByte ? &DebayerCpu::debayer10_BGBG_BGR888 : &DebayerCpu::debayer10_BGBG_BGR888; -+ debayer1_ = addAlphaByte ? &DebayerCpu::debayer10_GRGR_BGR888 : &DebayerCpu::debayer10_GRGR_BGR888; - break; - case 12: -- debayer0_ = &DebayerCpu::debayer12_BGBG_BGR888; -- debayer1_ = &DebayerCpu::debayer12_GRGR_BGR888; -+ debayer0_ = addAlphaByte ? &DebayerCpu::debayer12_BGBG_BGR888 : &DebayerCpu::debayer12_BGBG_BGR888; -+ debayer1_ = addAlphaByte ? &DebayerCpu::debayer12_GRGR_BGR888 : &DebayerCpu::debayer12_GRGR_BGR888; - break; - } - setupStandardBayerOrder(bayerFormat.order); -@@ -403,20 +446,20 @@ int DebayerCpu::setDebayerFunctions(PixelFormat inputFormat, PixelFormat outputF - bayerFormat.packing == BayerFormat::Packing::CSI2) { - switch (bayerFormat.order) { - case BayerFormat::BGGR: -- debayer0_ = &DebayerCpu::debayer10P_BGBG_BGR888; -- debayer1_ = &DebayerCpu::debayer10P_GRGR_BGR888; -+ debayer0_ = addAlphaByte ? &DebayerCpu::debayer10P_BGBG_BGR888 : &DebayerCpu::debayer10P_BGBG_BGR888; -+ debayer1_ = addAlphaByte ? &DebayerCpu::debayer10P_GRGR_BGR888 : &DebayerCpu::debayer10P_GRGR_BGR888; - return 0; - case BayerFormat::GBRG: -- debayer0_ = &DebayerCpu::debayer10P_GBGB_BGR888; -- debayer1_ = &DebayerCpu::debayer10P_RGRG_BGR888; -+ debayer0_ = addAlphaByte ? &DebayerCpu::debayer10P_GBGB_BGR888 : &DebayerCpu::debayer10P_GBGB_BGR888; -+ debayer1_ = addAlphaByte ? &DebayerCpu::debayer10P_RGRG_BGR888 : &DebayerCpu::debayer10P_RGRG_BGR888; - return 0; - case BayerFormat::GRBG: -- debayer0_ = &DebayerCpu::debayer10P_GRGR_BGR888; -- debayer1_ = &DebayerCpu::debayer10P_BGBG_BGR888; -+ debayer0_ = addAlphaByte ? &DebayerCpu::debayer10P_GRGR_BGR888 : &DebayerCpu::debayer10P_GRGR_BGR888; -+ debayer1_ = addAlphaByte ? &DebayerCpu::debayer10P_BGBG_BGR888 : &DebayerCpu::debayer10P_BGBG_BGR888; - return 0; - case BayerFormat::RGGB: -- debayer0_ = &DebayerCpu::debayer10P_RGRG_BGR888; -- debayer1_ = &DebayerCpu::debayer10P_GBGB_BGR888; -+ debayer0_ = addAlphaByte ? &DebayerCpu::debayer10P_RGRG_BGR888 : &DebayerCpu::debayer10P_RGRG_BGR888; -+ debayer1_ = addAlphaByte ? &DebayerCpu::debayer10P_GBGB_BGR888 : &DebayerCpu::debayer10P_GBGB_BGR888; - return 0; - default: - break; -diff --git a/src/libcamera/software_isp/debayer_cpu.h b/src/libcamera/software_isp/debayer_cpu.h -index be7dcdca..1dac6435 100644 ---- a/src/libcamera/software_isp/debayer_cpu.h -+++ b/src/libcamera/software_isp/debayer_cpu.h -@@ -85,18 +85,28 @@ private: - using debayerFn = void (DebayerCpu::*)(uint8_t *dst, const uint8_t *src[]); - - /* 8-bit raw bayer format */ -+ template - void debayer8_BGBG_BGR888(uint8_t *dst, const uint8_t *src[]); -+ template - void debayer8_GRGR_BGR888(uint8_t *dst, const uint8_t *src[]); - /* unpacked 10-bit raw bayer format */ -+ template - void debayer10_BGBG_BGR888(uint8_t *dst, const uint8_t *src[]); -+ template - void debayer10_GRGR_BGR888(uint8_t *dst, const uint8_t *src[]); - /* unpacked 12-bit raw bayer format */ -+ template - void debayer12_BGBG_BGR888(uint8_t *dst, const uint8_t *src[]); -+ template - void debayer12_GRGR_BGR888(uint8_t *dst, const uint8_t *src[]); - /* CSI-2 packed 10-bit raw bayer format (all the 4 orders) */ -+ template - void debayer10P_BGBG_BGR888(uint8_t *dst, const uint8_t *src[]); -+ template - void debayer10P_GRGR_BGR888(uint8_t *dst, const uint8_t *src[]); -+ template - void debayer10P_GBGB_BGR888(uint8_t *dst, const uint8_t *src[]); -+ template - void debayer10P_RGRG_BGR888(uint8_t *dst, const uint8_t *src[]); - - struct DebayerInputConfig { --- -2.45.2 - diff --git a/temp/libcamera/0001-libcamera-simple-Enable-softwareISP-for-the-librem5.patch b/temp/libcamera/0001-libcamera-simple-Enable-softwareISP-for-the-librem5.patch index 5d98bad51..b7079f833 100644 --- a/temp/libcamera/0001-libcamera-simple-Enable-softwareISP-for-the-librem5.patch +++ b/temp/libcamera/0001-libcamera-simple-Enable-softwareISP-for-the-librem5.patch @@ -1,4 +1,4 @@ -From 278114dc6f3db69bacd80327516bc397dd1b881f Mon Sep 17 00:00:00 2001 +From 1fe279d7fcda1b33edd1e82a7a0763d012d1ca7d Mon Sep 17 00:00:00 2001 From: Robert Mader Date: Mon, 22 Apr 2024 23:30:31 +0200 Subject: [PATCH 1/4] libcamera: simple: Enable softwareISP for the librem5 @@ -9,18 +9,18 @@ And - in theory - on similar devices. 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp -index db3575c3..ac792b35 100644 +index c050966a..b6b8f854 100644 --- a/src/libcamera/pipeline/simple/simple.cpp +++ b/src/libcamera/pipeline/simple/simple.cpp -@@ -198,7 +198,7 @@ namespace { +@@ -197,7 +197,7 @@ namespace { static const SimplePipelineInfo supportedDevices[] = { { "dcmipp", {}, false }, - { "imx7-csi", { { "pxp", 1 } }, false }, + { "imx7-csi", { { "pxp", 1 } }, true }, - { "j721e-csi2rx", {}, false }, + { "intel-ipu6", {}, true }, + { "j721e-csi2rx", {}, true }, { "mtk-seninf", { { "mtk-mdp", 3 } }, false }, - { "mxc-isi", {}, false }, -- -2.45.1 +2.45.2 diff --git a/temp/libcamera/0002-libcamera-simple-Force-disable-softwareISP-for-milli.patch b/temp/libcamera/0002-libcamera-simple-Force-disable-softwareISP-for-milli.patch index 327817295..4b48ff322 100644 --- a/temp/libcamera/0002-libcamera-simple-Force-disable-softwareISP-for-milli.patch +++ b/temp/libcamera/0002-libcamera-simple-Force-disable-softwareISP-for-milli.patch @@ -1,4 +1,4 @@ -From f430e03c6b155d0e841db33020d53cac566a420e Mon Sep 17 00:00:00 2001 +From 2531eab53574092da0451f4f3b7e5dbc7f9ecd13 Mon Sep 17 00:00:00 2001 From: Robert Mader Date: Thu, 9 May 2024 21:07:07 +0200 Subject: [PATCH 2/4] libcamera: simple: Force-disable softwareISP for @@ -12,7 +12,7 @@ swIsp - at the same time. 1 file changed, 9 insertions(+) diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp -index ac792b35..0ccbfa90 100644 +index b6b8f854..86285bc4 100644 --- a/src/libcamera/pipeline/simple/simple.cpp +++ b/src/libcamera/pipeline/simple/simple.cpp @@ -7,6 +7,7 @@ @@ -23,7 +23,7 @@ index ac792b35..0ccbfa90 100644 #include #include #include -@@ -1546,6 +1547,14 @@ bool SimplePipelineHandler::match(DeviceEnumerator *enumerator) +@@ -1544,6 +1545,14 @@ bool SimplePipelineHandler::match(DeviceEnumerator *enumerator) swIspEnabled_ = info->swIspEnabled; @@ -39,5 +39,5 @@ index ac792b35..0ccbfa90 100644 std::vector sensors = locateSensors(); if (sensors.empty()) { -- -2.45.1 +2.45.2 diff --git a/temp/libcamera/0003-libcamera-simple-Enable-softISP-for-the-Pinephone.patch b/temp/libcamera/0003-libcamera-simple-Enable-softISP-for-the-Pinephone.patch index 0d994510e..9c29de33d 100644 --- a/temp/libcamera/0003-libcamera-simple-Enable-softISP-for-the-Pinephone.patch +++ b/temp/libcamera/0003-libcamera-simple-Enable-softISP-for-the-Pinephone.patch @@ -1,4 +1,4 @@ -From ac83a8feb2d7d9539456dd301c08f89f1cd08b7d Mon Sep 17 00:00:00 2001 +From 53e200dca1b66d2d51b1ad3546a265a9e146f6c1 Mon Sep 17 00:00:00 2001 From: Robert Mader Date: Wed, 1 May 2024 18:12:02 +0200 Subject: [PATCH 3/4] libcamera: simple: Enable softISP for the Pinephone @@ -15,7 +15,7 @@ improves, this can be dropped again. 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp -index 0ccbfa90..71a44237 100644 +index 86285bc4..c2658703 100644 --- a/src/libcamera/pipeline/simple/simple.cpp +++ b/src/libcamera/pipeline/simple/simple.cpp @@ -204,7 +204,7 @@ static const SimplePipelineInfo supportedDevices[] = { @@ -28,5 +28,5 @@ index 0ccbfa90..71a44237 100644 } /* namespace */ -- -2.45.1 +2.45.2 diff --git a/temp/libcamera/0004-libcamera-simple-Skip-hwISP-formats-if-swISP-is-acti.patch b/temp/libcamera/0004-libcamera-simple-Skip-hwISP-formats-if-swISP-is-acti.patch index 39c936ec7..36b9bdfcf 100644 --- a/temp/libcamera/0004-libcamera-simple-Skip-hwISP-formats-if-swISP-is-acti.patch +++ b/temp/libcamera/0004-libcamera-simple-Skip-hwISP-formats-if-swISP-is-acti.patch @@ -1,4 +1,4 @@ -From 0e10f1da5892156dc31445918303dc5eb80f9d0f Mon Sep 17 00:00:00 2001 +From 12d11a74d3a9bf1a3e5ecf31e15219363925bb60 Mon Sep 17 00:00:00 2001 From: Robert Mader Date: Mon, 6 May 2024 21:21:57 +0200 Subject: [PATCH 4/4] libcamera: simple: Skip hwISP formats if swISP is active @@ -13,7 +13,7 @@ ISP when the SW ISP is enabled, to ensure we use the later. 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp -index 71a44237..36604a83 100644 +index c2658703..27ac1522 100644 --- a/src/libcamera/pipeline/simple/simple.cpp +++ b/src/libcamera/pipeline/simple/simple.cpp @@ -652,9 +652,7 @@ void SimpleCameraData::tryPipeline(unsigned int code, const Size &size) @@ -28,5 +28,5 @@ index 71a44237..36604a83 100644 } else { config.outputFormats = { pixelFormat }; -- -2.45.1 +2.45.2 diff --git a/temp/libcamera/APKBUILD b/temp/libcamera/APKBUILD index b0df00d4d..c2212b423 100644 --- a/temp/libcamera/APKBUILD +++ b/temp/libcamera/APKBUILD @@ -2,8 +2,8 @@ pkgname=libcamera pkgver=9999 -_pkgver=0.3.0 -pkgrel=1 +_pkgver=0.3.1 +pkgrel=2 pkgdesc="Linux camera framework" url="https://libcamera.org/" arch="all" @@ -13,7 +13,7 @@ depends_dev=" glib-dev gnutls-dev gst-plugins-bad-dev - qt5-qtbase-dev + qt6-qtbase-dev " # upstream calls 'date' with a non-POSIX option so we pull in coreutils makedepends="$depends_dev @@ -29,7 +29,7 @@ makedepends="$depends_dev py3-ply py3-sphinx py3-yaml - qt5-qttools-dev + qt6-qttools-dev yaml-dev " subpackages=" @@ -47,7 +47,6 @@ source="https://gitlab.freedesktop.org/camera/libcamera/-/archive/v$_pkgver/libc 0002-libcamera-simple-Force-disable-softwareISP-for-milli.patch 0003-libcamera-simple-Enable-softISP-for-the-Pinephone.patch 0004-libcamera-simple-Skip-hwISP-formats-if-swISP-is-acti.patch - 0001-libcamera-debayer_cpu-Add-32bits-aligned-output-form.patch qcam.desktop 90-libcamera.rules " @@ -147,13 +146,12 @@ tools() { } sha512sums=" -d232593b6cc7f2b772e8cd0b6751fee00ddbde256328c4cf7162726d4766149afca36411075e2b55a8a009d52758f01874ff08b947b508dbe5e3059fa4a92c86 libcamera-v0.3.0.tar.gz +85f62383194ca597baab36375e7b5ee99d6a8580fd54baf2615e5854bef790ef5ae57a92347c7e8408e2b9c04330d467dc56fab1af2f1c478c679a5a05e4f562 libcamera-v0.3.1.tar.gz 69d6e29d764f752feed453b9c0f61c81cdb506eb14893d0d99d0d6834f369f1e816c2381dfab5ad1a744a3d11211af02d75dc041ecc87c7e4f73e2bd34c666c2 0001-qcam-Decrease-minimum-width-of-selector-dialog.patch -495bc434fe188d0b83c88325657946e57b0a31d34d5249d8ea02fbfb4025ff15080a5da6bf61866eeffa63dad9b2b9a7b8abb456a306da8925c39775eda339bb 0001-libcamera-simple-Enable-softwareISP-for-the-librem5.patch -26b274c32c9fc0d8220f58c7e37f6c0c9e590b2ff07adbc908b4c38ae4b7104639bb8ecf57b2faa15d2fae932d0021b51ad6a31a8762a05d3f876d55f0fef242 0002-libcamera-simple-Force-disable-softwareISP-for-milli.patch -68b66432d3e60adc7329713b1362d023244516b697fbcb67112d9aad1367d2c65a100470b1ab6747074ca2717ec18e848b3888b382f75be1646e182894c6a37c 0003-libcamera-simple-Enable-softISP-for-the-Pinephone.patch -4bfc5c35cf6bc8f1695744486a43695efa7bef5ce1c3bc93bda227832d08394f3bb0115863f7a30a8adfc4c93af293cdd5063fdb78f8d850f4d0c2ac7b1ff123 0004-libcamera-simple-Skip-hwISP-formats-if-swISP-is-acti.patch -231a355350d7bd25e997f58bf145c81cad9af852e131d005dcb75d9529ec56c5eff966fca106db1be3e3cefadc1539915340803d6d3a650d862d32fcd066fe55 0001-libcamera-debayer_cpu-Add-32bits-aligned-output-form.patch +a5809b7664685bb44ca05a722655d8b94991c90306b69be1e7b135a1ad72699ab69b0e9bf7edbee041700087b7d7bc7ae1ef704334e7672aa81e9e7c96ccf7f9 0001-libcamera-simple-Enable-softwareISP-for-the-librem5.patch +979259bb16112b1fbbec0543a1d642a65e62f24ba10b229caffe68398da343160d98c2811f923877ce5d2c9a3c8a53205feb2eb4fbaf921612bbc5419d6be1df 0002-libcamera-simple-Force-disable-softwareISP-for-milli.patch +47616a06fad66df31e29ebd9c024c95bdea542dd1f5c0ed448a242e35a6d9909f973a74332bfe084478c91ac7a2d778d7b10270cd493dba07bb8d5ad34e9544c 0003-libcamera-simple-Enable-softISP-for-the-Pinephone.patch +685b8cfae3bb9a000d95a36d9daf9d4ff8770fd877e43c69f0fc0768ebd457282f03ec6ad9bf3a33e72765665bbd642af5db66c1a82aac249ce8c2522291dee6 0004-libcamera-simple-Skip-hwISP-formats-if-swISP-is-acti.patch 22167a4eceb6d1b40b0b7c45fdf116c71684f5340de7f767535cb8e160ad9d2ae0f00cb3d461f73a344520a48a4641cf46226841d78bee06bfbfd2a91337f754 qcam.desktop 444a0a52b374751c388f807b6adcc63b36488547adaa5fb70b606dc5646132b1a893a76254236b5c80f3a6d041a4597d413e050af0323cd05626d758190838e2 90-libcamera.rules "