{"id":25136,"url":"https://patchwork.libcamera.org/api/1.1/patches/25136/?format=json","web_url":"https://patchwork.libcamera.org/patch/25136/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20251120233347.5046-13-bryan.odonoghue@linaro.org>","date":"2025-11-20T23:33:36","name":"[v4,12/23] libcamera: software_isp: debayer_egl: Make DebayerEGL an environment option","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"beb2a641d0516716874a6676cf7a8821d872de37","submitter":{"id":175,"url":"https://patchwork.libcamera.org/api/1.1/people/175/?format=json","name":"Bryan O'Donoghue","email":"bryan.odonoghue@linaro.org"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/25136/mbox/","series":[{"id":5600,"url":"https://patchwork.libcamera.org/api/1.1/series/5600/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=5600","date":"2025-11-20T23:33:24","name":"Add GLES 2.0 GPUISP to libcamera","version":4,"mbox":"https://patchwork.libcamera.org/series/5600/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/25136/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/25136/checks/","tags":{},"headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 7AFFFBD80A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 20 Nov 2025 23:34:18 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2FF9460AB4;\n\tFri, 21 Nov 2025 00:34:18 +0100 (CET)","from mail-wr1-x42f.google.com (mail-wr1-x42f.google.com\n\t[IPv6:2a00:1450:4864:20::42f])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5404160A9E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 21 Nov 2025 00:34:16 +0100 (CET)","by mail-wr1-x42f.google.com with SMTP id\n\tffacd0b85a97d-42b3c965cc4so761815f8f.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 20 Nov 2025 15:34:16 -0800 (PST)","from inspiron14p-linux.ht.home (188-141-3-146.dynamic.upc.ie.\n\t[188.141.3.146]) by smtp.gmail.com with ESMTPSA id\n\tffacd0b85a97d-42cb7fa3a81sm7984139f8f.26.2025.11.20.15.34.13\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 20 Nov 2025 15:34:14 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=linaro.org header.i=@linaro.org\n\theader.b=\"Rwpz8LST\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=linaro.org; s=google; t=1763681655; x=1764286455;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=G8zMAGQq6mymklwrKMC5SwdL3ECQAZ0ptGN/pXi2LRU=;\n\tb=Rwpz8LSTz2TF1W4uS462QWUInXtNEnJ8hJ8ZSWL7Fm+pgOrOeQabHgzyGroLF7+bWm\n\tdVmixV13mHBSLGDGbvpwEXdm3n8tdfdjYPW5SfabKYv1qsjC3TqpYcV/xMmxFaDU/9kj\n\tMzyzc5cINlhSo9yOHg6+bb6Z+ayzQ4u4u/kGRKW+J6Dj0Psaa5cQcFs41qK+UBaqU8Un\n\t7pvyLxPj2Yg1l+6UjxzJbhjPxYzc4oIKpKz1JMj0dhuTPjYzxJwSVEUY52TQxNeBcSaL\n\tsDxmjze0lugCYNTuW4pjqh7Rw/cD4XNYc98WRjrH2tX0Sa4fXQyWhmOull93tSC5jx0v\n\tynMQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1763681655; x=1764286455;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n\t:to:cc:subject:date:message-id:reply-to;\n\tbh=G8zMAGQq6mymklwrKMC5SwdL3ECQAZ0ptGN/pXi2LRU=;\n\tb=qCanOI3Bh+9ZWHPF+etZodnoSgTDmmq7KjEGArryAlBX8VHzU+xI/niUtmTmJQMzXA\n\tS53NoEu4Dw0uPj1xuIqBQ7CwYiKYoajdvELuSaFrMiMp5/9Y9iSehhdO2OYBq5egwL0r\n\t2SkU3APG6rtxdxASa4AiAhH6UM/Rt1CnBvPatyciyyMQtmeX63prQNnm4J8k58nyrOX/\n\tMMnEBjHq0HjouwOxyMzgm9ZP9wwPa4h/NiWBM+ZpOEHOYl9c6bGgB0XTi4m6ryD69+MG\n\tHrg8a4nTZdelF1ZxAAVlCgyP1T2cTdRksEFoJTOaaS1aXknrtvoQ/+0rzDlXKLfUmakc\n\t2A/g==","X-Gm-Message-State":"AOJu0YzaH9EXmajoAriVGI1VXbqbS9diFdz86/tOpuYNIkMNuOGBj/8Z\n\tuPN5HmIyse5udw8EdnFSThhUHxn801xWbC3pSNORMgShGOsjALWHrGTyBR6oQTSOqSPlItwsYoW\n\tmhGKTMZw=","X-Gm-Gg":"ASbGncvsLEgnSRphvjEcBzFCgiHOKU2H8aUDFrKCnWZ7tWEtI/IfMoiCr5pU4sQ4o4d\n\t7qqy4kmEFDUxELMVjARmmAASt05HbAWCFyIw1H+LQU/+/ZDrhU2RRAb6mIbvzMOvCla58Gvv/HZ\n\te2AX515Qg/fO6NmJt75LN0fd1d5J6Eygzf/eieJijyKjy4rQydf6ehchsxwTfwpeICtxk0ZdFvk\n\tY8ZW0Djz5FzEnqM5zBZhmmg9J+4yU65I9ybwpnuq4yKEgzfOdaBdmm/tqnbuyA3SO+OxUarGIzB\n\tb7+w1pU2FKaCDcXWYYJJH0/swkXGnKIDGzDB90y30e8xBjaRwqSsPO3zWXXEvewsht/8CCGW5VT\n\t07PeIT4HG6uZQf/aBGdEPCXAkUxpb+xLZLZVCI7zA4jhMGOBa7gaFRQBnrkvWXOpfzvtN3uI/Xl\n\tsqzXsXLD/gFQGMw/zabeubGOSCjlaDuN4zh5adDlJx7gmaTTKSQvbtqGLTDnNam4eIosI=","X-Google-Smtp-Source":"AGHT+IHxbEOjEy0v74DHsvBQdcNGg4lHoqrJjhMg0Ubs1s9LpmIlhWPlJ3T3/8V0az0HruGhTY1rnw==","X-Received":"by 2002:a5d:5f88:0:b0:42b:3383:bcf4 with SMTP id\n\tffacd0b85a97d-42cba63b5bfmr5407313f8f.1.1763681655552; \n\tThu, 20 Nov 2025 15:34:15 -0800 (PST)","From":"Bryan O'Donoghue <bryan.odonoghue@linaro.org>","To":"libcamera-devel@lists.libcamera.org","Cc":"pavel@ucw.cz,\n\tBryan O'Donoghue <bryan.odonoghue@linaro.org>","Subject":"[PATCH v4 12/23] libcamera: software_isp: debayer_egl: Make\n\tDebayerEGL an environment option","Date":"Thu, 20 Nov 2025 23:33:36 +0000","Message-ID":"<20251120233347.5046-13-bryan.odonoghue@linaro.org>","X-Mailer":"git-send-email 2.51.2","In-Reply-To":"<20251120233347.5046-1-bryan.odonoghue@linaro.org>","References":"<20251120233347.5046-1-bryan.odonoghue@linaro.org>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"If GPUISP support is available make it so an environment variable can\nswitch it on.\n\nGiven we don't have full feature parity with CPUISP just yet on pixel\nformat output, we should default to CPUISP mode giving the user the option\nto switch on GPUISP by setting LIBCAMERA_SOFTISP_MODE=gpu\n\nSigned-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>\n---\n src/libcamera/software_isp/software_isp.cpp | 19 ++++++++++++++++++-\n 1 file changed, 18 insertions(+), 1 deletion(-)","diff":"diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp\nindex aa4a40cb6..7d21f191c 100644\n--- a/src/libcamera/software_isp/software_isp.cpp\n+++ b/src/libcamera/software_isp/software_isp.cpp\n@@ -15,6 +15,7 @@\n \n #include <libcamera/base/log.h>\n #include <libcamera/base/thread.h>\n+#include <libcamera/base/utils.h>\n \n #include <libcamera/controls.h>\n #include <libcamera/formats.h>\n@@ -25,6 +26,9 @@\n #include \"libcamera/internal/software_isp/debayer_params.h\"\n \n #include \"debayer_cpu.h\"\n+#if HAVE_DEBAYER_EGL\n+#include \"debayer_egl.h\"\n+#endif\n \n /**\n  * \\file software_isp.cpp\n@@ -117,7 +121,20 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor,\n \t}\n \tstats->statsReady.connect(this, &SoftwareIsp::statsReady);\n \n-\tdebayer_ = std::make_unique<DebayerCpu>(std::move(stats), configuration);\n+#if HAVE_DEBAYER_EGL\n+\tconst char *softISPMode = utils::secure_getenv(\"LIBCAMERA_SOFTISP_MODE\");\n+\n+\tif (softISPMode && !strcmp(softISPMode, \"gpu\"))\n+\t\tdebayer_ = std::make_unique<DebayerEGL>(std::move(stats), configuration);\n+#endif\n+\tif (!debayer_)\n+\t\tdebayer_ = std::make_unique<DebayerCpu>(std::move(stats), configuration);\n+\n+\tif (!debayer_) {\n+\t\tLOG(SoftwareIsp, Error) << \"Failed to create Debayer object\";\n+\t\treturn;\n+\t}\n+\n \tdebayer_->inputBufferReady.connect(this, &SoftwareIsp::inputReady);\n \tdebayer_->outputBufferReady.connect(this, &SoftwareIsp::outputReady);\n \n","prefixes":["v4","12/23"]}