{"id":25154,"url":"https://patchwork.libcamera.org/api/1.1/patches/25154/?format=json","web_url":"https://patchwork.libcamera.org/patch/25154/","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":"<20251122205507.37387-3-johannes.goede@oss.qualcomm.com>","date":"2025-11-22T20:55:06","name":"[2/3] libcamera: software_isp: debayer_egl: Fix input sampling when width != stride","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"ba73cc2972d4a81d03afaa8fac109a5391586742","submitter":{"id":242,"url":"https://patchwork.libcamera.org/api/1.1/people/242/?format=json","name":"Hans de Goede","email":"johannes.goede@oss.qualcomm.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/25154/mbox/","series":[{"id":5605,"url":"https://patchwork.libcamera.org/api/1.1/series/5605/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=5605","date":"2025-11-22T20:55:04","name":"GPUISP fixes","version":1,"mbox":"https://patchwork.libcamera.org/series/5605/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/25154/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/25154/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 E3908C0F1B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat, 22 Nov 2025 20:55:19 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 92BAC60AA4;\n\tSat, 22 Nov 2025 21:55:19 +0100 (CET)","from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com\n\t[205.220.180.131])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 38994609E0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 22 Nov 2025 21:55:16 +0100 (CET)","from pps.filterd (m0279873.ppops.net [127.0.0.1])\n\tby mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n\t5AMGcAiE3253455 for <libcamera-devel@lists.libcamera.org>;\n\tSat, 22 Nov 2025 20:55:15 GMT","from mail-qt1-f198.google.com (mail-qt1-f198.google.com\n\t[209.85.160.198])\n\tby mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ak6a51amk-1\n\t(version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 22 Nov 2025 20:55:15 +0000 (GMT)","by mail-qt1-f198.google.com with SMTP id\n\td75a77b69052e-4ee416413a8so30264471cf.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 22 Nov 2025 12:55:14 -0800 (PST)","from shalem\n\t(2001-1c00-0c32-7800-5bfa-a036-83f0-f9ec.cable.dynamic.v6.ziggo.nl.\n\t[2001:1c00:c32:7800:5bfa:a036:83f0:f9ec])\n\tby smtp.gmail.com with ESMTPSA id\n\ta640c23a62f3a-b7655050c53sm822745966b.68.2025.11.22.12.55.12\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tSat, 22 Nov 2025 12:55:12 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=qualcomm.com header.i=@qualcomm.com\n\theader.b=\"ffgG9U6x\"; dkim=pass (2048-bit key;\n\tunprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n\theader.b=\"XVEcgC/F\"; dkim-atps=neutral","DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n\tcc:content-transfer-encoding:date:from:in-reply-to:message-id\n\t:mime-version:references:subject:to; s=qcppdkim1; bh=xAZhZamYdPv\n\tmuJpD7wA18v7dx3lZ5EUv1YVdXphtjbs=; b=ffgG9U6xKRtGt9bwkHODVxBfLoZ\n\t7VEmGpJSGzkWxsB3dCIbuO+bbdKp2VPozvtBWCXG8lw2lM4Z4fXgA5Z1Cuqcl1Ac\n\tbzLatwDCEpqdzz1As1xKj85fycNKf6wfX737FSR1fUMvDitQNTlrDcHHalskLwHl\n\tePX8gXg9E2zN+zfyh2/Hn8T65nHCoK90/KNsf8b98gJ1v/fb58B/UzMnWfZpCpHa\n\tvxMH0Dife3j5zkoVq8AvOR7YhxaxrCRwiKCqh/5c6XACzBQ0TUMhX2KMTvlSvKNO\n\tPid2x6qCOGkFcO/tuJ+mkGaDmLahfsli0Iv+U1zSdRV/noEBYE+1zL5tvSg==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=oss.qualcomm.com; s=google; t=1763844914; x=1764449714;\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=xAZhZamYdPvmuJpD7wA18v7dx3lZ5EUv1YVdXphtjbs=;\n\tb=XVEcgC/FVAoQUPG19bDavHuGHF/BGLn/O7wQ+9s0qAB8IB9sRSgZ87Jb8jTkUpq8BM\n\t7AKzRNHOy1iotgQ+JNHamwSqi34vswyTg6Gdw3RHd3TYh2z6giwH6s/O4UNMNQS1nJx1\n\tLVVkTwiF0EkwcFvdI3iJ8FZxXdw8YO43k3RDiZk7TbN1P8zteWQLBwwq1iMUT52PBzzC\n\tF/qqeAnmR6aDghHtVS/qXiaF80LCbLcKQXUJ9pOFpoSDg+SWh4G6H8o6QLDji06TmPM1\n\tdRUe2W2D6EonuprlLz4hLhrKPraHRyCnh+p4aT1uFFhQYrdEDnpJ8vW1DBqKOboIzrfh\n\tBT/A=="],"X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1763844914; x=1764449714;\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=xAZhZamYdPvmuJpD7wA18v7dx3lZ5EUv1YVdXphtjbs=;\n\tb=FDDBsSW21QPvHjszfDd4Je5uN+9U0C3rCwXvHJrtJmz5ae0VHLKhJD51EKLUe7bGYE\n\tcsZaKqaVdf5T5JJHr8SxaCAX7YxV6s5pd8JghTUUh+zyEZvwiPRwth1QnBozmBFzRK/Q\n\tZvwYpO+H6QdGFdEpPjH6w0s0O5EKC2vxsoAUfIDPuEUI46Toxd5hufR77hg0twUbxSjD\n\ts5EwXWyv3lUFBqcD6x2POalaguU03umNXpI6GTbkfef4/6/5BQ76Tvc7Mp8CivpV4/tj\n\t6HjsiJTy1BdWHimVMoKgF08ujg02ZJyawhybwZ2O4zdT3s6oj0XayM/7EOjOIxX6qG0i\n\tJ6jQ==","X-Gm-Message-State":"AOJu0YwmL0KAlYoXhAhy3x9kt4GNHeThibGie3FzX5ne9MpFO7IAW6jD\n\tg9spMQ010LMMx9MZ5WdbBfbiS1E3cYsEEhmCygSUUVnhOZEr2aaPftP2xb6raU5AkIkNGDM532a\n\tJpb1HylQa2SG6w+nyGO3TT0/0NE8oKh1vptbryNdVNpA9ohUMitatHpf3UNbU8HLMC9weJUT3NA\n\tFxUM7ad2R6","X-Gm-Gg":"ASbGncvY2xEGZiJGmFWTmnPyfm0HatEVbvWqXzAYWe19sh2ti9ie2L7jzVnawZEqpsl\n\tzXFlNzqDM1QmFjPcOuU9Q8S6lFtRg1q/BvW3HPDpQOUEj9Ru4Po/DdSWTqyVDtBGyVs7ObColPw\n\t1YBaCdVE6hl06E4BcScqeSdcmw5YWs4k6EmeI7byp2eS/NVYNCBTiKI2sJd64IJGBhYGfAGSKtn\n\tQY2+/dlUae+Jt/TwnLvhtGXgV0H+FIuugrvao2FHevT23Amfab/h07pyh6I0OkLh1jLE5nMbV0k\n\tx5oNUJipLtxEMuVVJzMeGDVd2MaHMP1hePLIt0/p+YZu/KIb4/LhZXCxbu1ixSrvyDLVNZJjjzD\n\t7zC/QqfSq/hmIQSxxg3vijCC8XZrgZs/zbSTSdse2cWvCeNLCUJvKUACkxzHThoPLvM5+8QXuVe\n\tQfhRDtFSl05zBf7CRBJrjDk+6n","X-Received":["by 2002:a05:622a:24f:b0:4d8:531e:f896 with SMTP id\n\td75a77b69052e-4ee58862e12mr90266511cf.27.1763844914101; \n\tSat, 22 Nov 2025 12:55:14 -0800 (PST)","by 2002:a05:622a:24f:b0:4d8:531e:f896 with SMTP id\n\td75a77b69052e-4ee58862e12mr90266231cf.27.1763844913536; \n\tSat, 22 Nov 2025 12:55:13 -0800 (PST)"],"X-Google-Smtp-Source":"AGHT+IE88ljn2E0f0+NPTy3gyM0DhKHfeFO8hsM/Cx15PSag34gD1bcKPU/p6VcZVPIHb1alf0N9aw==","From":"Hans de Goede <johannes.goede@oss.qualcomm.com>","To":"libcamera-devel@lists.libcamera.org,\n\tBryan O'Donoghue <bryan.odonoghue@linaro.org>","Cc":"Hans de Goede <johannes.goede@oss.qualcomm.com>","Subject":"[PATCH 2/3] libcamera: software_isp: debayer_egl: Fix input sampling\n\twhen width != stride","Date":"Sat, 22 Nov 2025 21:55:06 +0100","Message-ID":"<20251122205507.37387-3-johannes.goede@oss.qualcomm.com>","X-Mailer":"git-send-email 2.51.1","In-Reply-To":"<20251122205507.37387-1-johannes.goede@oss.qualcomm.com>","References":"<20251122205507.37387-1-johannes.goede@oss.qualcomm.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","X-Authority-Analysis":"v=2.4 cv=Hup72kTS c=1 sm=1 tr=0 ts=69222333 cx=c_pps\n\ta=mPf7EqFMSY9/WdsSgAYMbA==:117 a=xqWC_Br6kY4A:10 a=6UeiqGixMTsA:10\n\ta=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8\n\ta=ss4-n0EdsD2TUQPG-kIA:9 a=dawVfQjAaf238kedN5IG:22","X-Proofpoint-GUID":"e-IYa5thtcdumddVErsJzKxVsgQF8ryk","X-Proofpoint-ORIG-GUID":"e-IYa5thtcdumddVErsJzKxVsgQF8ryk","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjUxMTIyMDE3NCBTYWx0ZWRfXzG4fboD7BitN\n\tpO6SXqkVEnYzMlw4DwgUH34Na08CAlfl1BRXF9QEC0R6FZGpJ6yA7OUjWTW9CVXDAmL7Al8tIil\n\tGRlxMt5gVIgNX1QnUTEIIblZ4AM6rXA0Qa9pBMRNm0rbo8dqhJRhIJyBqL+DLwg2iuFjtUNsw3b\n\tweCgbZGbMTI4mWX91mM79JnXNwllSiycZmqHiLCivHsdYfrgL4ZDF3+n0ygzm/P10n1wyw3spt1\n\t7isd+3Gq+c7e+hi+fgkAmZVk8Uyrt+gFTCtrZMUa5ZbH0uSg+jsMdh9hlHD+K10ICRNHD8rmw7S\n\t1zU01E80BmEh3Duxl42d1XvseuMUQb6fCvK9yiV1M6ubV3MnWB/X4aiTbq340TmDhYe5HLIgBCd\n\trOn2uPz/ZTwVZq2Jh5VmJUGVQQFMGQ==","X-Proofpoint-Virus-Version":"vendor=baseguard\n\tengine=ICAP:2.0.293, Aquarius:18.0.1121, Hydra:6.1.9,\n\tFMLib:17.12.100.49\n\tdefinitions=2025-11-22_08,2025-11-21_01,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n\tlowpriorityscore=0 suspectscore=0 bulkscore=0 adultscore=0\n\tpriorityscore=1501\n\timpostorscore=0 phishscore=0 spamscore=0 clxscore=1015 malwarescore=0\n\tclassifier=typeunknown authscore=0 authtc= authcc= route=outbound\n\tadjust=0\n\treason=mlx scancount=1 engine=8.22.0-2510240001\n\tdefinitions=main-2511220174","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":"When bayer_unpacked.vert is calculating the center and x/yCoord values\nstride != width is taken into account for x/yCoord deltas since it is taken\ninto account by debayer_egl when setting the x part of tex_step uniform.\n\nBut it is not taken into account for the center.x which is just directly\ncopied from textureIn, leading to the input width sampling covering\nthe entire input stride instead of just covering the input width.\n\nUse the existing and currently unused stride_factor uniform to pass\nthe width/stride ratio and correct center.x for this. This fixes\nthe misrendering seen on x86 laptops which is caused by the CSI2 receiver\nthere requiring a stride which is a multiple of 32 often leading to\nstride != width.\n\nSigned-off-by: Hans de Goede <johannes.goede@oss.qualcomm.com>\n---\nBesides using stride_factor to correct center.x this also requires\ndebayer_egl to actuall set stride_factor instead of hardcoding it to 1.0,\nthis last part should be squashed into \"libcamera: software_isp:\ndebayer_egl: Add an eGL debayer class\"\n---\n include/libcamera/internal/shaders/bayer_unpacked.vert | 4 +++-\n src/libcamera/software_isp/debayer_egl.cpp             | 2 +-\n 2 files changed, 4 insertions(+), 2 deletions(-)","diff":"diff --git a/include/libcamera/internal/shaders/bayer_unpacked.vert b/include/libcamera/internal/shaders/bayer_unpacked.vert\nindex fb5109ee..1425b449 100644\n--- a/include/libcamera/internal/shaders/bayer_unpacked.vert\n+++ b/include/libcamera/internal/shaders/bayer_unpacked.vert\n@@ -40,8 +40,10 @@ varying vec4            xCoord;\n /** of the adjacent pixels.*/\n varying vec4            yCoord;\n \n+uniform float stride_factor;\n+\n void main(void) {\n-    center.xy = textureIn;\n+    center.xy = vec2(textureIn.x * stride_factor, textureIn.y);\n     center.zw = textureIn * tex_size + tex_bayer_first_red;\n \n     xCoord = center.x + vec4(-2.0 * tex_step.x,\ndiff --git a/src/libcamera/software_isp/debayer_egl.cpp b/src/libcamera/software_isp/debayer_egl.cpp\nindex cf40478f..29a8ae70 100644\n--- a/src/libcamera/software_isp/debayer_egl.cpp\n+++ b/src/libcamera/software_isp/debayer_egl.cpp\n@@ -455,7 +455,7 @@ void DebayerEGL::setShaderVariableValues(DebayerParams &params)\n \t\t\t      (GLfloat)height_ };\n \tGLfloat Step[] = { static_cast<float>(bytesPerPixel_) / (inputConfig_.stride - 1),\n \t\t\t   1.0f / (height_ - 1) };\n-\tGLfloat Stride = 1.0f;\n+\tGLfloat Stride = (GLfloat)width_ / (inputConfig_.stride / bytesPerPixel_);\n \tGLfloat scaleX = (GLfloat)window_.width / width_;\n \tGLfloat scaleY = (GLfloat)window_.height / height_;\n \tGLfloat transX = -(1.0f - scaleX);\n","prefixes":["2/3"]}