Show a cover letter.

GET /api/covers/26270/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 26270,
    "url": "https://patchwork.libcamera.org/api/covers/26270/?format=api",
    "web_url": "https://patchwork.libcamera.org/cover/26270/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/projects/1/?format=api",
        "name": "libcamera",
        "link_name": "libcamera",
        "list_id": "libcamera_core",
        "list_email": "libcamera-devel@lists.libcamera.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20260310120106.79922-1-johannes.goede@oss.qualcomm.com>",
    "date": "2026-03-10T12:01:01",
    "name": "[v7,0/5] software_isp: debayer_cpu: Add multi-threading support",
    "submitter": {
        "id": 242,
        "url": "https://patchwork.libcamera.org/api/people/242/?format=api",
        "name": "Hans de Goede",
        "email": "johannes.goede@oss.qualcomm.com"
    },
    "mbox": "https://patchwork.libcamera.org/cover/26270/mbox/",
    "series": [
        {
            "id": 5825,
            "url": "https://patchwork.libcamera.org/api/series/5825/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5825",
            "date": "2026-03-10T12:01:01",
            "name": "software_isp: debayer_cpu: Add multi-threading support",
            "version": 7,
            "mbox": "https://patchwork.libcamera.org/series/5825/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/covers/26270/comments/",
    "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 50402BE086\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 10 Mar 2026 12:01:17 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4C77E6262F;\n\tTue, 10 Mar 2026 13:01:16 +0100 (CET)",
            "from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com\n\t[205.220.168.131])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 43DC3622F1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 10 Mar 2026 13:01:14 +0100 (CET)",
            "from pps.filterd (m0279867.ppops.net [127.0.0.1])\n\tby mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n\t62A8s5ZD2363151 for <libcamera-devel@lists.libcamera.org>;\n\tTue, 10 Mar 2026 12:01:12 GMT",
            "from mail-qt1-f197.google.com (mail-qt1-f197.google.com\n\t[209.85.160.197])\n\tby mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ct032c3cm-1\n\t(version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 10 Mar 2026 12:01:12 +0000 (GMT)",
            "by mail-qt1-f197.google.com with SMTP id\n\td75a77b69052e-5090bc4823cso119119701cf.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 10 Mar 2026 05:01:11 -0700 (PDT)",
            "from t14s\n\t(2001-1c00-0c32-7800-beb3-9058-f5fe-3f2e.cable.dynamic.v6.ziggo.nl.\n\t[2001:1c00:c32:7800:beb3:9058:f5fe:3f2e])\n\tby smtp.gmail.com with ESMTPSA id\n\t5b1f17b1804b1-48541aa7aacsm87843405e9.13.2026.03.10.05.01.08\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tTue, 10 Mar 2026 05:01:08 -0700 (PDT)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=qualcomm.com header.i=@qualcomm.com\n\theader.b=\"kjLn34lc\"; dkim=pass (2048-bit key;\n\tunprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n\theader.b=\"kZXQdc/4\"; dkim-atps=neutral",
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n\tcc:content-transfer-encoding:content-type:date:from:message-id\n\t:mime-version:subject:to; s=qcppdkim1; bh=fkbj5vjXd7DXkbS3c+I+zp\n\t+/OJXrCvScOd0mWxjJ/fI=; b=kjLn34lc8WSl0X2N+ESDxr//7EQ8GTkOHYmOMs\n\t/5lSGUvJDT9SVP5Bn92Zy+uRXspJFujdraKCH/+mD7ZnNRFbo+8vnFcyorKS0RF2\n\tzUsKViIMDVzgQ0L7j8UPikujeLPrpeRhVxKUUQxebuDi3fAVuGPYyTOH8LPnckrc\n\tff0wdw8DeoUOTV2WoaTykmb6z6c9cNaQCns8ssi7R9AK2sl9j4unK6bSjdEo7aGh\n\talPj5F+A43oWCMr2pyDIT7HdAx024GJVVPpf4NoXrZbNvbbxFgYgu2RzcJJZtHiJ\n\tAwph8vLNmOxM5oY9IHgzKRkg5104t9lMAoCGaXi7JiCefoDA==",
            "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=oss.qualcomm.com; s=google; t=1773144071; x=1773748871;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:mime-version:message-id:date:subject:cc\n\t:to:from:from:to:cc:subject:date:message-id:reply-to;\n\tbh=fkbj5vjXd7DXkbS3c+I+zp+/OJXrCvScOd0mWxjJ/fI=;\n\tb=kZXQdc/4GkT2gOldaHZa+Lu41SvCCctiAMpoMR04RF6eWs/dU5Pw2ZK6jK1dtb/dKc\n\tMKzuG5ajPWxG6YB0Vw3zD6oEWQdWRXkx9YuZYszZ0bep9PrXuVMRRP4nJGRBN8tN0bFG\n\tOTXjf/iwWGd2w4eD1ftO/xzIpg9PTXsSJDCjd0riP9ZECU08LOxOJtwvoZFZSrBpXwhf\n\tVuCPRbFqOdLQEzn2Kj6QHycDezLjTB0DRiWyBrfKw2l6KirwceHbP1eXBqTmWSeiqGl4\n\tQEMlK0O5jIy9A+EByQDsIswy/DRUDDeVMs4cRsraLblv4jhwzZKXQ3KTJjqGdnmjn3sF\n\tw9Dw=="
        ],
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1773144071; x=1773748871;\n\th=content-transfer-encoding:mime-version:message-id:date:subject:cc\n\t:to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=fkbj5vjXd7DXkbS3c+I+zp+/OJXrCvScOd0mWxjJ/fI=;\n\tb=sdAWVsLwX44M9IEEaCGsxOAacR9I0rbnixBTyAWMdtjSkXOJ0xXaNwGCkqdobwFU+e\n\t88zIgwZXFnzmy66UcpzNl5pLpwZRlCGWoPUJAbC2xvBaJfjualJA/LQ7bFUr024rtgvW\n\tHDdJHZ1xvas8Xx06vwygjM6um1dBnSu0OCHD3MB6oYdMyB8PHTj144CuA8P2y3LSPTa5\n\tOX1uOsZXh39z4rJuJaX/OaINzR+AbpNlMFs9JMm1h7Rvk8qrZ2yML7yVK6xrJSS0AA9f\n\txDgWLl3uXurbFkdjB7qGi/+FwSX9EC4LMLyL4KXCCCxLmLVHLR5rOPkdxK2pfqDdPSr5\n\tsuXA==",
        "X-Gm-Message-State": "AOJu0YyMMFCGAUmshtfXqp5b9th9Q9kofGU8HVJNDfa1jW27R4CREN/q\n\tsx0Sxzjs5evvF8/3KXEYDevxrCLSo7f49Y4ee6/rxoHsGTkKjD0XeoYRrojafQdAE8bVTaYuhAb\n\tKyVY4uX3Uf08ljZ5AD0CJTkODLiVtWGjxRDIfWrQhh/N1nRpoESbJhwcKfiHnVAoixoY/YdzPc1\n\txVJLF/0zFI",
        "X-Gm-Gg": "ATEYQzx5xKGirgdeYrqdY90AfStUVC0RFVQIp9YPzIKeNQhME93rADXGqLm3eHgMaqZ\n\tz4QtQhSIMAnLZUVrKu7O4BuiKMwPKYSZxRhQPyxeDAdOJlDy8XiQrPEBBiIcncfUR1lYWj3J0TU\n\tBZE0f84UOih+HRP5BFgMwXkXG+FCvgyhCTtuUFSDL+XuNd94q1UL8AfWidSvIWxTCAIFebpXUd8\n\t4rH9qlgdRMkAMSvMuoDolojdIjrOaiCtWiRKDZJhNFATkDP1rkuoBJIYcb7TE9gm8aNdRE+abyO\n\ts4f+VI+KswvidEhx75nbJvtTl0NpUhrejTvZnRvEENcuOHudBcSE0df9t682aYfyBtzvAeQ7Wc9\n\tw9ycAE2pjhS+BLPOafBNjPuAswwa8I5gcNkf8Ptu6kXlHESxDVyGckcPOg0fvL9Xyrj3uLOYvqL\n\t5RcqerMIyBKcPcRPcht1DCH31tPsljC/UfZw==",
        "X-Received": [
            "by 2002:ac8:5d88:0:b0:509:2b02:c1b5 with SMTP id\n\td75a77b69052e-5092b02eb3dmr18769371cf.44.1773144070665; \n\tTue, 10 Mar 2026 05:01:10 -0700 (PDT)",
            "by 2002:ac8:5d88:0:b0:509:2b02:c1b5 with SMTP id\n\td75a77b69052e-5092b02eb3dmr18768271cf.44.1773144069873; \n\tTue, 10 Mar 2026 05:01:09 -0700 (PDT)"
        ],
        "From": "Hans de Goede <johannes.goede@oss.qualcomm.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "Milan Zamazal <mzamazal@redhat.com>,\n\tHans de Goede <johannes.goede@oss.qualcomm.com>",
        "Subject": "[PATCH v7 0/5] software_isp: debayer_cpu: Add multi-threading\n\tsupport",
        "Date": "Tue, 10 Mar 2026 13:01:01 +0100",
        "Message-ID": "<20260310120106.79922-1-johannes.goede@oss.qualcomm.com>",
        "X-Mailer": "git-send-email 2.53.0",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "X-Proofpoint-Spam-Details-Enc": "AW1haW4tMjYwMzEwMDEwNCBTYWx0ZWRfX+VdU12RwIMN7\n\tiFPtW8ZjWPqwP3EizsjBpJiKirWAlWGI8Fdi3wtKQALM6/9650yOOH3m/1TtpuLcHDl2OS2JKPT\n\tVLx5Ya5sKi/jV1zzcBztJ9U+q04QJgFs13LPJobR+ORrBP+XkchI2pAyFAYCxDsTrtHfakvaDRs\n\tnaWQ/VWH80CIKlp0jJheZWWeDAMbcr6xqEr0hF71FcDr5K1ga7HN4duZ85a9D1ttV6kiOxAHnFK\n\t6ztQPgHU+HEHV0h7T6103XPtjoAqrYbHZHrFLCDFqWyazgYHt1Metw7TWZ9E9f6TlGIHHFWLin1\n\t+vCY+rGynInH8zYkT1XQhpFw6k1hzmhnit4cNVU6EC94UmD2z5phf158SNQmxYUXt2nXMLNyZu5\n\tHLI1IyZql9szbCmtwABIvcHtZcPYFNRb2Zvvxgckjtrtn3/pNB46eoDb0YAHDXrGqEZxXBq1F5l\n\tDlsXm+VjkAPaKIYrOPA==",
        "X-Proofpoint-ORIG-GUID": "I-QXAo9ScBP-kwgF0sm-hFVNTy4q0QgV",
        "X-Proofpoint-GUID": "I-QXAo9ScBP-kwgF0sm-hFVNTy4q0QgV",
        "X-Authority-Analysis": "v=2.4 cv=WtEm8Nfv c=1 sm=1 tr=0 ts=69b00808 cx=c_pps\n\ta=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10\n\ta=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22\n\ta=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22\n\ta=dOUrt2DNwn2HmY4Sk-8A:9\n\ta=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n\tengine=ICAP:2.0.293, Aquarius:18.0.1143, Hydra:6.1.51,\n\tFMLib:17.12.100.49\n\tdefinitions=2026-03-10_02,2026-03-09_02,2025-10-01_01",
        "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n\tclxscore=1015 impostorscore=0 spamscore=0 bulkscore=0\n\tpriorityscore=1501\n\tlowpriorityscore=0 malwarescore=0 phishscore=0 adultscore=0\n\tsuspectscore=0\n\tclassifier=typeunknown authscore=0 authtc= authcc= route=outbound\n\tadjust=0\n\treason=mlx scancount=1 engine=8.22.0-2602130000\n\tdefinitions=main-2603100104",
        "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": "Hi All,\n\nThe QCM2290 SoC used on the Arduino Uno-Q seems to have a weak GPU, so weak\nthat it is barely faster then a single CPU core (CPU without CCM).\n\nThis has made me code-up the long envisioned multi-threading support\nfor the CPU softISP.\n\nChanges in v7:\n- Small update to DebayerCpuThread::configure() doc\n- Add missing space between type and name for threads_ declaration\n- Add Debug message logging thread count\n- Gather various tags\n\nChanges in v6:\n- Use \"LIBCAMERA_SOFTISP_MODE, software_isp.mode\" as item title for patch 5/5\n- Send out patch 5/5 as a standalone v6 as the rest of the series looked\n  ready for merging (bad idea in hindsight)\n\nChanges in v5:\n- Extend software_isp.threads docs in runtime_configuration.rst\n- New patch: \"Documentation/runtime_configuration: Add missing\n  software_isp.mode doc\"\n\nChanges in v4:\n- Use const in for (const auto &s : stats_) {} in SwStatsCpu::finishFrame()\n- Move kMaxLineBuffers constant to DebayerCpuThread class\n- Document software_isp.threads option in runtime_configuration.rst\n- Add an use constants for min/max/default number of threads\n\nChanges in v3:\n- Use std::unique_ptr for the DebayerCpuThread pointers\n- Document new DebayerCpuThread class\n- Make DebayerCpuThread inherit from both Thread and Object\n- Use for (auto &thread : threads_)\n- Use for (auto &s : stats_) {}\n- Move input format logging from DebayerCpu::configure() to\n  SoftwareIsp::configure()\n\nChanges in v2:\n- Quite a bit of refactoring based on v1 feedback, dropped patch 3/5 and 4/5\n  from v2 since these now no longer make sense\n- Move the allocation of the vector of SwIspStats objects to inside\n  the SwStatsCpu class, controlled by a configure() arguments instead\n  of making the caller allocate the objects\n- Replace the DebayerCpuThreadData struct from v1 with a DebayerCpuThread\n  class, derived from Object to allow calling invokeMethod for thread re-use\n  in followup patches\n- As part of this also move a bunch of methods which primarily deal with\n  per thread data: setupInputMemcpy(), shiftLinePointers(), memcpyNextLine(),\n  process*() to the new DebayerCpuThread class\n- Re-use threads instead of starting new threads every frame\n- Add a new patch adding some extra DebayerCpu input format logging\n\nBenchmark results for the Uno-Q + IMX219 running at 3280x2464 -> 3272x2464\nwithout CCM:\n\n1 thread :  147ms / frame, ~6.5  fps\n2 threads:   80ms / frame, ~12.5 fps\n3 threads:   65ms / frame, ~15   fps\nGPU:        130ms / frame, ~7,5  fps\nGPU 0-copy: 110ms / frame, ~9.5  fps (requires pipeline + camss hacks)\nGPU lite:    85ms / frame, ~12   fps (CCM, contrast and gamma disabled)\n\nRegards,\n\nHans\n\n\nHans de Goede (5):\n  software_isp: swstats_cpu: Prepare for multi-threading support\n  software_isp: debayer_cpu: Add DebayerCpuThread class\n  software_isp: debayer_cpu: Add multi-threading support\n  software_isp: Log input config from configure()\n  Documentation/runtime_configuration: Add missing software_isp.mode doc\n\n Documentation/runtime_configuration.rst       |  17 ++\n .../internal/software_isp/swstats_cpu.h       |  25 +-\n src/libcamera/software_isp/debayer_cpu.cpp    | 288 ++++++++++++++----\n src/libcamera/software_isp/debayer_cpu.h      |  33 +-\n src/libcamera/software_isp/software_isp.cpp   |  12 +-\n src/libcamera/software_isp/swstats_cpu.cpp    |  54 ++--\n 6 files changed, 320 insertions(+), 109 deletions(-)"
}