{"id":16155,"url":"https://patchwork.libcamera.org/api/1.1/covers/16155/?format=json","web_url":"https://patchwork.libcamera.org/cover/16155/","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":"<20220604185939.29163-1-laurent.pinchart@ideasonboard.com>","date":"2022-06-04T18:59:25","name":"[libcamera-devel,RFC,v2,00/14] Replace boost JSON parser with libyaml in Raspberry Pi IPA","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/1.1/people/2/?format=json","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"mbox":"https://patchwork.libcamera.org/cover/16155/mbox/","series":[{"id":3161,"url":"https://patchwork.libcamera.org/api/1.1/series/3161/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=3161","date":"2022-06-04T18:59:25","name":"Replace boost JSON parser with libyaml in Raspberry Pi IPA","version":2,"mbox":"https://patchwork.libcamera.org/series/3161/mbox/"}],"comments":"https://patchwork.libcamera.org/api/covers/16155/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 36D42BD161\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat,  4 Jun 2022 18:59:59 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 68C0765635;\n\tSat,  4 Jun 2022 20:59:58 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id CD93A633A6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat,  4 Jun 2022 20:59:56 +0200 (CEST)","from pendragon.ideasonboard.com (85-76-79-203-nat.elisa-mobile.fi\n\t[85.76.79.203])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 818D96D4;\n\tSat,  4 Jun 2022 20:59:55 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1654369198;\n\tbh=p+F5vwtkejrROtrhFEyAnfO0fdxWXx7uOpN1TnBbRqM=;\n\th=To:Date:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post:\n\tList-Help:List-Subscribe:From:Reply-To:From;\n\tb=WJPiQRm/B9tjAuCluQj56/M/ArJFDqWjGvHM6fOEaiMq1WMnGbU6XNDnZV8SViPrv\n\tqbSxOXEMFbncZWjloYBn3v/oMEsSneCe8wjyllr+2DK9NijmhlOu+rb71pNR4Tmijl\n\tK/jVKO+6/SCE8nf8GL6r+dHRcqaqVbQKiHUNAiBCcCiRjcZUAx6pa9tyLsVP8RxAm1\n\tktJ2qFvfIdn1aDnPPB2BWuSIupb+rpxxQ6el0lISE5MxCLcIGbe+dvcZ94Y2eHxKdQ\n\txpD20QsBlseujLG3IYPkIQIFGAt3zeRQnB55//uHpfFszEEVh5R9s/0oK2yFBxwIEM\n\t9LjnFjfZ1wFXQ==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1654369196;\n\tbh=p+F5vwtkejrROtrhFEyAnfO0fdxWXx7uOpN1TnBbRqM=;\n\th=From:To:Cc:Subject:Date:From;\n\tb=uGZgUeSirgNG4zzD52rMAuTiTw36ltE3pgotZSy7e5Oc2aI90U9XuaoHqTNwKiuos\n\tFIipFSRgnZeZzODNKqTZrsqSqqFdN8j/ex6HjWmKZ74smFcKU1fWWNgvk22LzGKsqd\n\tLB9Sbs22HW1EQIWsoWjscN6+5Ymv2F+SHwYiNumM="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"uGZgUeSi\"; dkim-atps=neutral","To":"libcamera-devel@lists.libcamera.org","Date":"Sat,  4 Jun 2022 21:59:25 +0300","Message-Id":"<20220604185939.29163-1-laurent.pinchart@ideasonboard.com>","X-Mailer":"git-send-email 2.35.1","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [RFC PATCH v2 00/14] Replace boost JSON parser\n\twith libyaml in Raspberry Pi IPA","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\nAs mentioned in the subject, this patch series replaces the boost JSON\nparser with the YamlParser implementation based on libyaml for the\nRaspberry Pi IPA module.\n\nThe series starts with a few cleanups and extensions in YamlParser, with\npatch 01/14 turning the enum Type into an enum class, patch 02/14\nextending the size() function to support dictionaries in addition to\nlists, and patch 03/14 moving the parser from using FILE to File for a\nbetter RAII-style management of files. Patch 04/14 continues with a\nsmall cleanup in the YamlParser unit tests.\n\nPatches 05/14 and 06/14 introduces the first important functional change\nin the series: they preserve the order of items in YAML dictionaries.\nThis is needed by the Raspberry Pi IPA, as it instantiates algorithms in\nthe same order as they are declared in the tuning file. Patch 05/14\nextends the YamlParser unit test to ensure order is preserved (which\nfails), and patch 06/14 preserves the order (which fixes the test).\n\nPatch 07/14 contains the second big change: a new iterator API for\nYamlObject. This allows iterating over the elements of a list of\ndictionaly object. Unlike the boost property_tree implementation that\niterates over a pair of std::string key and ptree value, the YamlObject\niterators differ for lists and dictionaries. This provides a more\nfamiliar API for lists, at the expense of requiring adapter objects (see\nthe asDict() and asList() functions). I'm interested in feedback on this\napproach, hence the RFC. Patch 08/14 then extends the unit tests to\ncover the iterator API, and patch 09/14 uses the API in the Android\ncamera HAL. Patch 10/14 completes that part of the series by removing\nthe then unused memberNames() function.\n\nThe series continue with two extensions to the YamlParser. In patch\n11/14 the get() function receives a fix to properly check the value\nrange for 32-bit integers, and in patch 12/14 new specializations of\nthe function are added for 16-bit integers, needed by the Raspberry Pi\nIPA.\n\nThe last part of the series converts the Raspberry Pi IPA from boost to\nYamlParser. Small changes are needed in patch 13/14 to convert tabs to\nspaces in the tuning JSON files, as they confuse the YAML parser. Patch\n14/14 then converts the IPA module, and drops the dependency on boost.\n\nWhen compiled in release mode with clang-13, the Raspberry Pi IPA module\n.text section shrank from 1317086 to 963614 bytes.\n\nI haven't been able to test the series on a Raspberry Pi yet (second\nreason for the RFC) as I don't have access to my board at the moment.\n\nLaurent Pinchart (14):\n  libcamera: yaml_object: Turn Type into an enum class\n  libcamera: yaml_parser: Extend YamlObject::size() to dictionaries\n  libcamera: yaml_parser: Switch from FILE to File\n  test: yaml-parser: Use write() instead of fwrite()\n  test: yaml-parser: Test dictionary items ordering\n  libcamera: yaml_parser: Preserve order of items in dictionary\n  libcamera: yaml_parser: Add iterator API\n  test: yaml_parser: Extend tests to cover the iterator API\n  android: Use the YamlObject iterator API\n  libcamera: yaml_parser: Remove memberNames() function\n  libcamera: yaml_parser: Fix range checks for 32-bit integers\n  libcamera: yaml_parser: Add get() specializations for 16-bit integers\n  ipa: raspberrypi: Replace tabs with spaces in tuning data files\n  ipa: raspberrypi: Use YamlParser to replace dependency on boost\n\n README.rst                                    |   6 -\n include/libcamera/internal/yaml_parser.h      | 142 +++++++++-\n src/android/camera_hal_config.cpp             |  22 +-\n src/ipa/raspberrypi/controller/algorithm.cpp  |   2 +-\n src/ipa/raspberrypi/controller/algorithm.hpp  |   6 +-\n src/ipa/raspberrypi/controller/controller.cpp |  27 +-\n src/ipa/raspberrypi/controller/pwl.cpp        |  12 +-\n src/ipa/raspberrypi/controller/pwl.hpp        |   5 +-\n src/ipa/raspberrypi/controller/rpi/agc.cpp    |  94 +++----\n src/ipa/raspberrypi/controller/rpi/agc.hpp    |  10 +-\n src/ipa/raspberrypi/controller/rpi/alsc.cpp   |  94 +++----\n src/ipa/raspberrypi/controller/rpi/alsc.hpp   |   2 +-\n src/ipa/raspberrypi/controller/rpi/awb.cpp    |  89 +++---\n src/ipa/raspberrypi/controller/rpi/awb.hpp    |   8 +-\n .../controller/rpi/black_level.cpp            |  12 +-\n .../controller/rpi/black_level.hpp            |   2 +-\n src/ipa/raspberrypi/controller/rpi/ccm.cpp    |  28 +-\n src/ipa/raspberrypi/controller/rpi/ccm.hpp    |   4 +-\n .../raspberrypi/controller/rpi/contrast.cpp   |  18 +-\n .../raspberrypi/controller/rpi/contrast.hpp   |   2 +-\n src/ipa/raspberrypi/controller/rpi/dpc.cpp    |   4 +-\n src/ipa/raspberrypi/controller/rpi/dpc.hpp    |   2 +-\n src/ipa/raspberrypi/controller/rpi/geq.cpp    |  10 +-\n src/ipa/raspberrypi/controller/rpi/geq.hpp    |   2 +-\n src/ipa/raspberrypi/controller/rpi/lux.cpp    |  12 +-\n src/ipa/raspberrypi/controller/rpi/lux.hpp    |   2 +-\n src/ipa/raspberrypi/controller/rpi/noise.cpp  |   6 +-\n src/ipa/raspberrypi/controller/rpi/noise.hpp  |   2 +-\n src/ipa/raspberrypi/controller/rpi/sdn.cpp    |   6 +-\n src/ipa/raspberrypi/controller/rpi/sdn.hpp    |   2 +-\n .../raspberrypi/controller/rpi/sharpen.cpp    |   8 +-\n .../raspberrypi/controller/rpi/sharpen.hpp    |   2 +-\n src/ipa/raspberrypi/data/imx219.json          |   8 +-\n src/ipa/raspberrypi/data/imx219_noir.json     |  10 +-\n src/ipa/raspberrypi/data/imx290.json          |  18 +-\n src/ipa/raspberrypi/data/imx477.json          |   8 +-\n src/ipa/raspberrypi/data/imx477_noir.json     |  10 +-\n src/ipa/raspberrypi/data/ov5647.json          |  10 +-\n src/ipa/raspberrypi/data/ov5647_noir.json     |  12 +-\n src/ipa/raspberrypi/data/se327m12.json        |   6 +-\n src/ipa/raspberrypi/meson.build               |   1 -\n src/ipa/raspberrypi/raspberrypi.cpp           |   1 +\n src/libcamera/yaml_parser.cpp                 | 263 +++++++++++++-----\n test/yaml-parser.cpp                          | 112 +++++---\n 44 files changed, 691 insertions(+), 411 deletions(-)\n\n\nbase-commit: 7ef83e02284715db95e3f4cd61744290baff2840"}