Show a patch.

GET /api/1.1/patches/25007/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 25007,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/25007/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/25007/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/1.1/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": "<20251112090924.46295-2-johannes.goede@oss.qualcomm.com>",
    "date": "2025-11-12T09:09:24",
    "name": "[RFC,1/1] libcamera: debayer_cpu: Mask out unused bits from > 8bpp non packed src data",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "9a38fb995f8eb9706f9694ac5441c4e362ec5c07",
    "submitter": {
        "id": 242,
        "url": "https://patchwork.libcamera.org/api/1.1/people/242/?format=api",
        "name": "Hans de Goede",
        "email": "johannes.goede@oss.qualcomm.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/25007/mbox/",
    "series": [
        {
            "id": 5583,
            "url": "https://patchwork.libcamera.org/api/1.1/series/5583/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5583",
            "date": "2025-11-12T09:09:23",
            "name": "Fix softISP crash on 10/12bpp sparse input frames",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/5583/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/25007/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/25007/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 A74BAC32DB\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 12 Nov 2025 09:09:40 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C2E5360A80;\n\tWed, 12 Nov 2025 10:09:38 +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 20B66609D8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 12 Nov 2025 10:09:36 +0100 (CET)",
            "from pps.filterd (m0279868.ppops.net [127.0.0.1])\n\tby mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n\t5AC1iuTf4078255 for <libcamera-devel@lists.libcamera.org>;\n\tWed, 12 Nov 2025 09:09:34 GMT",
            "from mail-qt1-f200.google.com (mail-qt1-f200.google.com\n\t[209.85.160.200])\n\tby mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4acguah518-1\n\t(version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 12 Nov 2025 09:09:34 +0000 (GMT)",
            "by mail-qt1-f200.google.com with SMTP id\n\td75a77b69052e-4edb84fc9bbso15924371cf.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 12 Nov 2025 01:09:34 -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-b72bfa11367sm1530114066b.68.2025.11.12.01.09.32\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 12 Nov 2025 01:09:32 -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=\"aPBPUolI\"; dkim=pass (2048-bit key;\n\tunprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n\theader.b=\"VXvSd/Cw\"; 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=yWkX+wFbzlV\n\tIzdVuQeKrJhvTcMMtgyiYzvzYlPJBMU8=; b=aPBPUolI3xPkApUkw1rj47FFw5y\n\tkNptog/o07WA4nE39QuKusLls+V8YkzFIjXdMRNoOW4NmbFEUR7FCfjo+OF0UwQ+\n\tQUvjr4kkrfHmkivjxufpIMjczaF3HIGwM0ZPrnb9qensU1Jcv09ANQTNdjqwJ1mV\n\teG+I5aZkKYnWsaF74yhCgOud7USbP9J15BUerLEdtXU9uqPf9bPCRAMSy6X6co/G\n\t8C2BgqZ3lo4HtaxCBE6MFwbRQWCPbdvg63XAX43AaNDtnBB4yGEpjQALXi9nSiHu\n\tvLWcWpXXIsiHhD6Af0STu9WJY1HQBtexCNz14b9c8tFpBZxlbuHi+6+Gm/Q==",
            "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=oss.qualcomm.com; s=google; t=1762938573; x=1763543373;\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=yWkX+wFbzlVIzdVuQeKrJhvTcMMtgyiYzvzYlPJBMU8=;\n\tb=VXvSd/CwizG5Yetod06WCNBQs2d6AE25T39EIITeaoP/ZxsBbfecZ7HP+02mVH2nCN\n\tqC51xjTzzuf9iFsCMLFpf02sQirwyTJkG29kJ53hR7Kkb1q3IqR+cRSJ5wszXfz/nPuJ\n\tWVRv9GGh+cT1lwT91V5viLrIjOuNV0zuMriUjP4Bl1kom3vFCRigGV5WvkUONOsYrJ88\n\tCSRAktqfW6SFoDahYWXmSLPp2I/jAoH4WnwIBTCL+qxyehebp0ybA1myW0a17MfOJijv\n\tqRimTbWVCa6fefAW4dDRA+FzDYMNhdCj4oJEyMd4P74blxJFZE02gf8FlVhhXuCtNdj0\n\tQz8A=="
        ],
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1762938573; x=1763543373;\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=yWkX+wFbzlVIzdVuQeKrJhvTcMMtgyiYzvzYlPJBMU8=;\n\tb=try7f1Gk2MO4tLhV7yp0dj73ejxJunUQYYmV6cpdgTxxwkQPngm3j2yyIEfYHPqgNT\n\tkgOj7hUGVEDxxL+Iyy3Gn5yg3AmtxgvB7pbm33pfkCRXTDaSL9aqwdVgsAEW0sYRLzaF\n\thmBizRuEEiqbTiuHQnwRygBo31XiDbJ6fU4wO8t/B3WZ9D2LhkH4QlPLn2uRlzHlVFMa\n\tgTeK+nOpmEi5nJefkNzzJc7kp6nolNkUne36nrePtpg2vCkBRacGR8lPRKWpVqv/C2d3\n\tOZSw8gW7yaIieTjd9Ji8DEjswVw0pek+y4E1eaDHZDNbrCksZCREQLcuJjw4QslhqNNa\n\tR0jw==",
        "X-Gm-Message-State": "AOJu0YytooIIdCvDoARqfNPksKzZI9q1TXZ2iHftD9sEhH+0//M2h/K8\n\t95IrCFhRl1oG2DC4+DBCyCGucroY2Df5aVztjVZj0QhMa1hDq4U1TdZNhUweUM3XAuoOgOY+jxJ\n\tDg6ius8gYdtccLdDdCcL2aPsOKAVD6z8es/hlV9na/fPxWZo6LSbcGwR0pDKNEuaRfaZuOFdjB3\n\tD94XOIJhAf",
        "X-Gm-Gg": "ASbGncsrRptohnkwsZk1FfIHMfnGTGmpoMkXftPlE5ziyHXo31yuYiAZgOqUQxFeX7b\n\tA3OyllBHVFNDZohTe7TjRAgG6eUB1rYF9n2Y5z/em8NXUfN0wqrRhX1d0P1CdTq73o9fnFN4NFc\n\t5KWgML8mGnFn0W+ZzkvJU/DuB9zC4OPqbQuyDpPZstFMdsxJVIkE3fsGaojxGOoNezbBH9BHY1f\n\tpSLGeEQ3nt3g66UjycvB8zaD/RhBOahvSbL0mAU62y3oYqHG01OFSKukML+CF0G7GV6Da/RlAv4\n\t0JGjapotLOklSMUJKde5jVW06uAzv+duQp6xdWCaetJ06+fYDEmyNv2+8FIPJxa9DWNFmQ/G0uf\n\te6zHeJ/MIloc+bNUkNTcODqlwAJ6UaoKXoKQAsL6nEkOR1fy3aAwCcsIwcqT975T+NxReo6TKaj\n\tbDJRyWd1n+H0YKKw==",
        "X-Received": [
            "by 2002:ac8:5783:0:b0:4ec:ee54:b141 with SMTP id\n\td75a77b69052e-4edcab4dafamr79801831cf.26.1762938573404; \n\tWed, 12 Nov 2025 01:09:33 -0800 (PST)",
            "by 2002:ac8:5783:0:b0:4ec:ee54:b141 with SMTP id\n\td75a77b69052e-4edcab4dafamr79801551cf.26.1762938572931; \n\tWed, 12 Nov 2025 01:09:32 -0800 (PST)"
        ],
        "X-Google-Smtp-Source": "AGHT+IGe8d0FaFe7QdAJaRNml9QGzqJ2/F/EvCxAVGZpOo4PxlmzICV42GcPgVg6YUppJBfwFc+3fQ==",
        "From": "Hans de Goede <johannes.goede@oss.qualcomm.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "Hans de Goede <johannes.goede@oss.qualcomm.com>",
        "Subject": "[RFC 1/1] libcamera: debayer_cpu: Mask out unused bits from > 8bpp\n\tnon packed src data",
        "Date": "Wed, 12 Nov 2025 10:09:24 +0100",
        "Message-ID": "<20251112090924.46295-2-johannes.goede@oss.qualcomm.com>",
        "X-Mailer": "git-send-email 2.51.1",
        "In-Reply-To": "<20251112090924.46295-1-johannes.goede@oss.qualcomm.com>",
        "References": "<20251112090924.46295-1-johannes.goede@oss.qualcomm.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-Proofpoint-GUID": "n5m8rE-1LY9_65w0ZsP1QyypHie1cACk",
        "X-Authority-Analysis": "v=2.4 cv=ao2/yCZV c=1 sm=1 tr=0 ts=69144ece cx=c_pps\n\ta=JbAStetqSzwMeJznSMzCyw==:117 a=xqWC_Br6kY4A:10 a=6UeiqGixMTsA:10\n\ta=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=20KFwNOVAAAA:8\n\ta=EUspDBNiAAAA:8\n\ta=YkkIcgtYq-VEA5p9qpYA:9 a=uxP6HrT_eTzRwkO_Te1X:22",
        "X-Proofpoint-ORIG-GUID": "n5m8rE-1LY9_65w0ZsP1QyypHie1cACk",
        "X-Proofpoint-Spam-Details-Enc": "AW1haW4tMjUxMTEyMDA3MiBTYWx0ZWRfX+WMOv7hDko9z\n\txLyx+SLDw3TfR+u9kB/C/eJt3Uo3WDS4LOrV7l/V5vfGWWAlJzyHU6m89o5d+gAkRc6qdCMkXo/\n\tJTzIjNC+O6N4gnlZMjlpc/ClQ0IBuVikkB9LHaXqidK4dH10g2ZIso5FkFekfxzMvkyTIvIDLWX\n\tZ4Bx9jye6bvrXRNeHx0oFzB05gTdDM/iroN2fTM5zqVqkcC4nCb+EqrhK3J8tPKjd/fq7gDcvCQ\n\tAdg+WVlMKAul9VHomotaCvmOxi1fT4iRwtNBEvihZyWlgqzW4NV1QfFQ3oB0v98BRRqew5l7+i1\n\tc1Q6QcqkJc9bhouDB35YcflMpoctcGqezBFle0PX6ZBCB4LwQx34vQjDZGyjmwe0sz5kEwGOj4D\n\tnm1FQxNkDMK7xcKrLWoERvrJAgbUqA==",
        "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-12_03,2025-11-11_03,2025-10-01_01",
        "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n\tlowpriorityscore=0 clxscore=1015 spamscore=0 phishscore=0\n\tadultscore=0\n\tpriorityscore=1501 impostorscore=0 malwarescore=0 suspectscore=0\n\tbulkscore=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-2511120072",
        "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": "Users have been reporting invalid array access assert errors in\nstatsBGGR10Line0 inside the SWSTATS_ACCUMULATE_LINE_STATS() macro caused\nby out of bounds accesses to the yHistogram array.\n\nAnother case of the same problem is out of bounds accesses to the various\nlookup arrays used in the DebayerCpu code.\n\nBoth of these are caused by 10 bpp sparse (stored in 16 bit words) input\nframes containing pixels values > 1023 leading to out of bounds array\naccesses. IOW bits 15-10 of the 16 bit word are not 0 as they should be.\n\nThis can only happen if we somehow get a corrupt frame from the kernel.\nThe reported crashes show that this can actually happen so we will need\nto harden the software ISP code to deal with this.\n\nThe cheapest (in CPU time) way to fix this is to simply mask out the high\nunused bits of the words for sparse input formats directly after memcpy-ing\na line to one of the lineBuffers.\n\nThis also means that the software ISP must always use the memcpy path for\nsparse 10/12 bpp input data (it should never write to the input buffer).\nAdd a new forceInputMemcpy_ for the setting coming from the config file and\nset enableInputMemcpy_ to true if either forceInputMemcpy_ is set or\nthe input format is sparse 10/12 bpp.\n\nLink: https://bugzilla.redhat.com/show_bug.cgi?id=2402746#c20\nSigned-off-by: Hans de Goede <johannes.goede@oss.qualcomm.com>\n---\n src/libcamera/software_isp/debayer_cpu.cpp | 41 ++++++++++++++++++++--\n src/libcamera/software_isp/debayer_cpu.h   |  6 ++++\n 2 files changed, 45 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/src/libcamera/software_isp/debayer_cpu.cpp b/src/libcamera/software_isp/debayer_cpu.cpp\nindex 00738c56..616e4f13 100644\n--- a/src/libcamera/software_isp/debayer_cpu.cpp\n+++ b/src/libcamera/software_isp/debayer_cpu.cpp\n@@ -47,14 +47,14 @@ DebayerCpu::DebayerCpu(std::unique_ptr<SwStatsCpu> stats, const GlobalConfigurat\n \t * Reading from uncached buffers may be very slow.\n \t * In such a case, it's better to copy input buffer data to normal memory.\n \t * But in case of cached buffers, copying the data is unnecessary overhead.\n-\t * enable_input_memcpy_ makes this behavior configurable.  At the moment, we\n+\t * forceInputMemcpy_ makes this behavior configurable.  At the moment, we\n \t * always set it to true as the safer choice but this should be changed in\n \t * future.\n \t *\n \t * \\todo Make memcpy automatic based on runtime detection of platform\n \t * capabilities.\n \t */\n-\tenableInputMemcpy_ =\n+\tforceInputMemcpy_ =\n \t\tconfiguration.option<bool>({ \"software_isp\", \"copy_input_buffer\" }).value_or(true);\n }\n \n@@ -288,6 +288,30 @@ void DebayerCpu::debayer10P_RGRG_BGR888(uint8_t *dst, const uint8_t *src[])\n \t}\n }\n \n+/*\n+ * Functions to mask out high unused bits from input buffers. These bits should\n+ * already by 0, but sometimes with corrupt input frames these are not 0 causing\n+ * out-of-bounds accesses to various lookup tables. These functions explicitly\n+ * set the unused high bits to 0 to avoid corrupt frames causing crashes.\n+ */\n+void DebayerCpu::inputMask10(uint8_t *data, unsigned int len)\n+{\n+\t/* Everything is aligned to 2 16 bit pixels, mask 2 pixels at a time */\n+\tuint32_t *input, *end = (uint32_t *)(data + len);\n+\n+\tfor (input = (uint32_t *)data; input < end; input++)\n+\t\t*input &= 0x03ff03ff;\n+}\n+\n+void DebayerCpu::inputMask12(uint8_t *data, unsigned int len)\n+{\n+\t/* Everything is aligned to 2 16 bit pixels, mask 2 pixels at a time */\n+\tuint32_t *input, *end = (uint32_t *)(data + len);\n+\n+\tfor (input = (uint32_t *)data; input < end; input++)\n+\t\t*input &= 0x0fff0fff;\n+}\n+\n /*\n  * Setup the Debayer object according to the passed in parameters.\n  * Return 0 on success, a negative errno value on failure\n@@ -395,6 +419,8 @@ int DebayerCpu::setDebayerFunctions(PixelFormat inputFormat,\n \n \txShift_ = 0;\n \tswapRedBlueGains_ = false;\n+\tinputMask_ = NULL;\n+\tenableInputMemcpy_ = forceInputMemcpy_;\n \n \tauto invalidFmt = []() -> int {\n \t\tLOG(Debayer, Error) << \"Unsupported input output format combination\";\n@@ -446,12 +472,17 @@ int DebayerCpu::setDebayerFunctions(PixelFormat inputFormat,\n \t\t\tbreak;\n \t\tcase 10:\n \t\t\tSET_DEBAYER_METHODS(debayer10_BGBG_BGR888, debayer10_GRGR_BGR888)\n+\t\t\tinputMask_ = &DebayerCpu::inputMask10;\n \t\t\tbreak;\n \t\tcase 12:\n \t\t\tSET_DEBAYER_METHODS(debayer12_BGBG_BGR888, debayer12_GRGR_BGR888)\n+\t\t\tinputMask_ = &DebayerCpu::inputMask12;\n \t\t\tbreak;\n \t\t}\n \t\tsetupStandardBayerOrder(bayerFormat.order);\n+\t\tif (inputMask_)\n+\t\t\tenableInputMemcpy_ = true;\n+\n \t\treturn 0;\n \t}\n \n@@ -601,6 +632,8 @@ void DebayerCpu::setupInputMemcpy(const uint8_t *linePointers[])\n \t\tmemcpy(lineBuffers_[i].data(),\n \t\t       linePointers[i + 1] - lineBufferPadding_,\n \t\t       lineBufferLength_);\n+\t\tif (inputMask_)\n+\t\t\t(this->*inputMask_)(lineBuffers_[i].data(), lineBufferLength_);\n \t\tlinePointers[i + 1] = lineBuffers_[i].data() + lineBufferPadding_;\n \t}\n \n@@ -629,6 +662,10 @@ void DebayerCpu::memcpyNextLine(const uint8_t *linePointers[])\n \tmemcpy(lineBuffers_[lineBufferIndex_].data(),\n \t       linePointers[patternHeight] - lineBufferPadding_,\n \t       lineBufferLength_);\n+\tif (inputMask_)\n+\t\t(this->*inputMask_)(lineBuffers_[lineBufferIndex_].data(),\n+\t\t\t\t    lineBufferLength_);\n+\n \tlinePointers[patternHeight] = lineBuffers_[lineBufferIndex_].data() + lineBufferPadding_;\n \n \tlineBufferIndex_ = (lineBufferIndex_ + 1) % (patternHeight + 1);\ndiff --git a/src/libcamera/software_isp/debayer_cpu.h b/src/libcamera/software_isp/debayer_cpu.h\nindex 3bf34ac3..a5feefa2 100644\n--- a/src/libcamera/software_isp/debayer_cpu.h\n+++ b/src/libcamera/software_isp/debayer_cpu.h\n@@ -79,6 +79,8 @@ private:\n \t */\n \tusing debayerFn = void (DebayerCpu::*)(uint8_t *dst, const uint8_t *src[]);\n \n+\tusing inputMaskFn = void (DebayerCpu::*)(uint8_t *data, unsigned int len);\n+\n \t/* 8-bit raw bayer format */\n \ttemplate<bool addAlphaByte, bool ccmEnabled>\n \tvoid debayer8_BGBG_BGR888(uint8_t *dst, const uint8_t *src[]);\n@@ -89,11 +91,13 @@ private:\n \tvoid debayer10_BGBG_BGR888(uint8_t *dst, const uint8_t *src[]);\n \ttemplate<bool addAlphaByte, bool ccmEnabled>\n \tvoid debayer10_GRGR_BGR888(uint8_t *dst, const uint8_t *src[]);\n+\tvoid inputMask10(uint8_t *data, unsigned int len);\n \t/* unpacked 12-bit raw bayer format */\n \ttemplate<bool addAlphaByte, bool ccmEnabled>\n \tvoid debayer12_BGBG_BGR888(uint8_t *dst, const uint8_t *src[]);\n \ttemplate<bool addAlphaByte, bool ccmEnabled>\n \tvoid debayer12_GRGR_BGR888(uint8_t *dst, const uint8_t *src[]);\n+\tvoid inputMask12(uint8_t *data, unsigned int len);\n \t/* CSI-2 packed 10-bit raw bayer format (all the 4 orders) */\n \ttemplate<bool addAlphaByte, bool ccmEnabled>\n \tvoid debayer10P_BGBG_BGR888(uint8_t *dst, const uint8_t *src[]);\n@@ -123,6 +127,7 @@ private:\n \tdebayerFn debayer1_;\n \tdebayerFn debayer2_;\n \tdebayerFn debayer3_;\n+\tinputMaskFn inputMask_;\n \tRectangle window_;\n \tstd::unique_ptr<SwStatsCpu> stats_;\n \tstd::vector<uint8_t> lineBuffers_[kMaxLineBuffers];\n@@ -130,6 +135,7 @@ private:\n \tunsigned int lineBufferPadding_;\n \tunsigned int lineBufferIndex_;\n \tunsigned int xShift_; /* Offset of 0/1 applied to window_.x */\n+\tbool forceInputMemcpy_;\n \tbool enableInputMemcpy_;\n };\n \n",
    "prefixes": [
        "RFC",
        "1/1"
    ]
}