Show a cover letter.

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

{
    "id": 17127,
    "url": "https://patchwork.libcamera.org/api/1.1/covers/17127/?format=api",
    "web_url": "https://patchwork.libcamera.org/cover/17127/",
    "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": "<20220816015414.7462-1-laurent.pinchart@ideasonboard.com>",
    "date": "2022-08-16T01:54:05",
    "name": "[libcamera-devel,v4,0/9] Add DPF tuning support for RkISP1",
    "submitter": {
        "id": 2,
        "url": "https://patchwork.libcamera.org/api/1.1/people/2/?format=api",
        "name": "Laurent Pinchart",
        "email": "laurent.pinchart@ideasonboard.com"
    },
    "mbox": "https://patchwork.libcamera.org/cover/17127/mbox/",
    "series": [
        {
            "id": 3418,
            "url": "https://patchwork.libcamera.org/api/1.1/series/3418/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3418",
            "date": "2022-08-16T01:54:05",
            "name": "Add DPF tuning support for RkISP1",
            "version": 4,
            "mbox": "https://patchwork.libcamera.org/series/3418/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/covers/17127/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 2FE07C3272\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 16 Aug 2022 01:54:31 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2F46561FC1;\n\tTue, 16 Aug 2022 03:54:30 +0200 (CEST)",
            "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 88019603E3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 16 Aug 2022 03:54:28 +0200 (CEST)",
            "from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E6D95496;\n\tTue, 16 Aug 2022 03:54:27 +0200 (CEST)"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1660614870;\n\tbh=X1oFG4gW4FpXgNOsFOALDn/saaPmrvMVpjQ3k993bRw=;\n\th=To:Date:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post:\n\tList-Help:List-Subscribe:From:Reply-To:From;\n\tb=gpsXW2VHvhhmVExaKfygxHjMCiHESHJQyo9gBrW/9hoqb+thMiQUVNiZv/BQ10DBL\n\tnfShjf+YLBFzlkGPe0cj3TlGMTmTO3Ei32IWPFy4J7D9xCUMxgb8+/u69iBWjpsImr\n\t9QFri71gutVfmeTPvT1cU+TkTVT+Oo61lrYFP+hbwjesPGp21CZrbI+PWK+Yu/W6+J\n\tMeALRCnu8M54rFCf4HNwie9slmdBOdY1g+HEHbofzVHvWF5gO931nwsVVMXCYp+c3v\n\tfgVS7H9TWMu1hdCqu6GPacIMijNZN7cD8OQVGPYnmnHmjf3teq0HW1jckSWfUlnsSV\n\tsnIC5II9mXkaA==",
            "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1660614868;\n\tbh=X1oFG4gW4FpXgNOsFOALDn/saaPmrvMVpjQ3k993bRw=;\n\th=From:To:Cc:Subject:Date:From;\n\tb=esvD3o65gX0dc/56SPQ18r2pHLfOgDafnejbrS4voO4RpO+FavDn8UMQjnLpbX1mc\n\tfEyfcSXHe44pvKlDMa3Cdh0iP3BBgK7AjIz3CxKNAEEuqVTuI57Qattp6LuEDoN9tb\n\tDu78fuLHvBBtgt5q4M1fqO2UPY0ryo81D1Ywi42k="
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"esvD3o65\"; dkim-atps=neutral",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Tue, 16 Aug 2022 04:54:05 +0300",
        "Message-Id": "<20220816015414.7462-1-laurent.pinchart@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.35.1",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v4 0/9] Add DPF tuning support for RkISP1",
        "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>",
        "From": "Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>",
        "Reply-To": "Laurent Pinchart <laurent.pinchart@ideasonboard.com>",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "Hello,\n\nIt turned out to be one of those days where you're about to push a\nseries of patches, and the last minute compilation breakage with an\nobscure combination of compiler version and optimization flags turn 3\npatches into 9.\n\nSo, compared to v3, this series starts with 6 patches that add support\nfor 8-bit integer parsing to the YamlObject class. That could have been\ndone in a single patch (5/9), if it wasn't for the fact that the\ncorresponding unit test uncovered an issue with bounds checking when\nparsing 16-bit integers, as shown by a new unit test (3/9) and then\nfixed (4/9). I wasn't happy with the resulting code duplication, which I\nfixed for the unit tests (1/9 and 2/9) and the YamlObject class (6/9).\n\nAfter that, it's \"just\" a new version of the DPF patches. Patch 9/9 now\nuses the uint8_t version of the YamlObject::getList() function for the\ndomain filter coefficients, which fixes the aforementioned compilation\nwarning with gcc 12.1.0 in -O3 mode (OK, it's not *that* obscure).\n\nIf anyone is curious about the gcc warning, which I believe is a false\npositive and a compiler bug, here's a minimal test case:\n\n--------\n#include <algorithm>\n#include <vector>\n\nextern unsigned char dst[6];\n\nint foo(const std::vector<unsigned short> &src)\n{\n\tif (src.size() != 5 && src.size() != 6)\n\t\treturn 1;\n\n\tstd::copy_n(src.begin(), src.size(), std::begin(dst));\n\n\treturn 0;\n}\n--------\n\n$ g++-12.1.0 -Wall -Werror -std=c++17 -O3 -o stringop-overflow.o -c stringop-overflow.cpp \nIn file included from /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include/g++-v12/algorithm:60,\n                 from stringop-overflow.cpp:1:\nIn static member function ‘static _OI std::__copy_move<false, false, std::random_access_iterator_tag>::__copy_m(_II, _II, _OI) [with _II = const short unsigned int*; _OI = unsigned char*]’,\n    inlined from ‘_OI std::__copy_move_a2(_II, _II, _OI) [with bool _IsMove = false; _II = const short unsigned int*; _OI = unsigned char*]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include/g++-v12/bits/stl_algobase.h:495:30,\n    inlined from ‘_OI std::__copy_move_a1(_II, _II, _OI) [with bool _IsMove = false; _II = const short unsigned int*; _OI = unsigned char*]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include/g++-v12/bits/stl_algobase.h:522:42,\n    inlined from ‘_OI std::__copy_move_a(_II, _II, _OI) [with bool _IsMove = false; _II = __gnu_cxx::__normal_iterator<const short unsigned int*, vector<short unsigned int> >; _OI = unsigned char*]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include/g++-v12/bits/stl_algobase.h:529:31,\n    inlined from ‘_OI std::copy(_II, _II, _OI) [with _II = __gnu_cxx::__normal_iterator<const short unsigned int*, vector<short unsigned int> >; _OI = unsigned char*]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include/g++-v12/bits/stl_algobase.h:620:7,\n    inlined from ‘_OutputIterator std::__copy_n(_RandomAccessIterator, _Size, _OutputIterator, random_access_iterator_tag) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<const short unsigned int*, vector<short unsigned int> >; _Size = long unsigned int; _OutputIterator = unsigned char*]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include/g++-v12/bits/stl_algo.h:728:23,\n    inlined from ‘_OIter std::copy_n(_IIter, _Size, _OIter) [with _IIter = __gnu_cxx::__normal_iterator<const short unsigned int*, vector<short unsigned int> >; _Size = long unsigned int; _OIter = unsigned char*]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include/g++-v12/bits/stl_algo.h:760:27,\n    inlined from ‘int foo(const std::vector<short unsigned int>&)’ at stringop-overflow.cpp:11:13:\n/usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include/g++-v12/bits/stl_algobase.h:385:25: error: writing 8 bytes into a region of size 6 [-Werror=stringop-overflow=]\n  385 |               *__result = *__first;\n      |               ~~~~~~~~~~^~~~~~~~~~\nstringop-overflow.cpp: In function ‘int foo(const std::vector<short unsigned int>&)’:\nstringop-overflow.cpp:4:22: note: destination object ‘dst’ of size 6\n    4 | extern unsigned char dst[6];\n      |                      ^~~\nIn static member function ‘static _OI std::__copy_move<false, false, std::random_access_iterator_tag>::__copy_m(_II, _II, _OI) [with _II = const short unsigned int*; _OI = unsigned char*]’,\n    inlined from ‘_OI std::__copy_move_a2(_II, _II, _OI) [with bool _IsMove = false; _II = const short unsigned int*; _OI = unsigned char*]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include/g++-v12/bits/stl_algobase.h:495:30,\n    inlined from ‘_OI std::__copy_move_a1(_II, _II, _OI) [with bool _IsMove = false; _II = const short unsigned int*; _OI = unsigned char*]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include/g++-v12/bits/stl_algobase.h:522:42,\n    inlined from ‘_OI std::__copy_move_a(_II, _II, _OI) [with bool _IsMove = false; _II = __gnu_cxx::__normal_iterator<const short unsigned int*, vector<short unsigned int> >; _OI = unsigned char*]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include/g++-v12/bits/stl_algobase.h:529:31,\n    inlined from ‘_OI std::copy(_II, _II, _OI) [with _II = __gnu_cxx::__normal_iterator<const short unsigned int*, vector<short unsigned int> >; _OI = unsigned char*]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include/g++-v12/bits/stl_algobase.h:620:7,\n    inlined from ‘_OutputIterator std::__copy_n(_RandomAccessIterator, _Size, _OutputIterator, random_access_iterator_tag) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<const short unsigned int*, vector<short unsigned int> >; _Size = long unsigned int; _OutputIterator = unsigned char*]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include/g++-v12/bits/stl_algo.h:728:23,\n    inlined from ‘_OIter std::copy_n(_IIter, _Size, _OIter) [with _IIter = __gnu_cxx::__normal_iterator<const short unsigned int*, vector<short unsigned int> >; _Size = long unsigned int; _OIter = unsigned char*]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include/g++-v12/bits/stl_algo.h:760:27,\n    inlined from ‘int foo(const std::vector<short unsigned int>&)’ at stringop-overflow.cpp:11:13:\n/usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include/g++-v12/bits/stl_algobase.h:385:25: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]\n  385 |               *__result = *__first;\n      |               ~~~~~~~~~~^~~~~~~~~~\nstringop-overflow.cpp: In function ‘int foo(const std::vector<short unsigned int>&)’:\nstringop-overflow.cpp:4:22: note: at offset [22, 4611686018427387894] into destination object ‘dst’ of size 6\n    4 | extern unsigned char dst[6];\n      |                      ^~~\nstringop-overflow.cpp:4:22: note: at offset 6 into destination object ‘dst’ of size 6\nstringop-overflow.cpp:4:22: note: at offset [22, 4611686018427387894] into destination object ‘dst’ of size 6\nstringop-overflow.cpp:4:22: note: at offset 6 into destination object ‘dst’ of size 6\ncc1plus: all warnings being treated as errors\n\n\nFlorian Sylvestre (3):\n  ipa: rkisp1: Add enable field for AWB algorithm in IPA context\n  ipa: rkisp1: Add enable field for LSC algorithm in IPA context\n  ipa: rkisp1: Add support of Denoise Pre-Filter control\n\nLaurent Pinchart (6):\n  test: yaml-parser: Simplify code by centralizing parse error checks\n  test: yaml-parser: Centralize integer parse checks\n  test: yaml-parser: Test out-of-range checks on integer parsing\n  libcamera: yaml_parser: Fix bounds checking for 16-bit\n    YamlObject::get()\n  libcamera: yaml_parser: Enable YamlObject::get() for int8_t and\n    uint8_t\n  libcamera: yaml_parser: De-duplicate common code in YamlObject::get()\n\n include/libcamera/internal/yaml_parser.h |   4 +\n src/ipa/rkisp1/algorithms/awb.cpp        |   2 +\n src/ipa/rkisp1/algorithms/dpf.cpp        | 258 ++++++++++++\n src/ipa/rkisp1/algorithms/dpf.h          |  36 ++\n src/ipa/rkisp1/algorithms/lsc.cpp        |  10 +\n src/ipa/rkisp1/algorithms/lsc.h          |   1 +\n src/ipa/rkisp1/algorithms/meson.build    |   1 +\n src/ipa/rkisp1/data/ov5640.yaml          |  15 +\n src/ipa/rkisp1/ipa_context.cpp           |  22 +\n src/ipa/rkisp1/ipa_context.h             |  10 +\n src/libcamera/yaml_parser.cpp            | 157 ++++---\n test/yaml-parser.cpp                     | 504 ++++++++++++-----------\n 12 files changed, 712 insertions(+), 308 deletions(-)\n create mode 100644 src/ipa/rkisp1/algorithms/dpf.cpp\n create mode 100644 src/ipa/rkisp1/algorithms/dpf.h\n\n\nbase-commit: dfc6d711c9f7f0a9868afa5158aa2089163bded3"
}