[libcamera-devel] [RFC PATCH v3 0/4] Replace boost JSON parser with libyaml in Raspberry Pi IPA
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Jul 11 22:18:12 CEST 2022
Hi Naush,
Would you be able to review this ? And could I volunteer you to handle
the items listed below to make this a non-RFC series ? :-) That would be
- Adding support for a new tuning data format that doesn't rely on YAML
mapping ordering (it's really just about turning the mapping into a
list of single-entry mappings, and while at it, adding a top-level
version number element).
- Update ctt to generate the new format.
- Add a tool (Python seems to be the best option) to convert tuning
files from the existing format to the new format.
On Thu, Jun 16, 2022 at 06:05:31PM +0300, Laurent Pinchart via libcamera-devel wrote:
> Hello,
>
> As mentioned in the subject, this patch series replaces the boost JSON
> parser with the YamlParser implementation based on libyaml for the
> Raspberry Pi IPA module.
>
> Compared to v2, the base work that introduces the iterator API has been
> sent separately in "[PATCH 0/7] libcamera: yaml_parser: Add iterator
> API". This series then addresses the specific needs of the Raspberry Pi
> IPA module.
>
> The Raspberry Pi IPA tuning data contains a list of algorithms stored in
> a mapping. Both the JSON and the YAML specifications explicitly state
> that mappings are not ordered, but the IPA relies on the JSON data order
> being preserved by the parser. This is an implementation-specific
> behaviour that happens to be match the boost JSON parser implementation,
> but not the YamlParser class.
>
> While in a perfect world we would update the tuning data format to avoid
> this problem, we don't want to break every tuning file out there, and
> thus need to ensure backward compatibility. This is why patches 1/4 and
> 2/4 update the parser and iterator implementation to preserve the data
> order, and patches 3/4 and 4/4 then move the Raspberry Pi IPA from boost
> to YamlParser.
>
> If this approach is deemed reasonable, then the next non-RFC version of
> the series should also include a new format for the Raspberry Pi IPA
> tuning data that would be compliant with the JSON specification, an
> update to the camera tuning tool to generate tuning files in that
> format, and possibly a Python script to convert existing files to the
> new format.
>
> Laurent Pinchart (4):
> test: yaml-parser: Test dictionary items ordering
> libcamera: yaml_parser: Preserve order of items in dictionary
> ipa: raspberrypi: Replace tabs with spaces in tuning data files
> ipa: raspberrypi: Use YamlParser to replace dependency on boost
>
> README.rst | 6 --
> include/libcamera/internal/yaml_parser.h | 37 +++++---
> src/ipa/raspberrypi/controller/algorithm.cpp | 2 +-
> src/ipa/raspberrypi/controller/algorithm.hpp | 6 +-
> src/ipa/raspberrypi/controller/controller.cpp | 27 ++++--
> src/ipa/raspberrypi/controller/pwl.cpp | 12 ++-
> src/ipa/raspberrypi/controller/pwl.hpp | 5 +-
> src/ipa/raspberrypi/controller/rpi/agc.cpp | 94 +++++++++----------
> src/ipa/raspberrypi/controller/rpi/agc.hpp | 10 +-
> src/ipa/raspberrypi/controller/rpi/alsc.cpp | 94 +++++++++----------
> src/ipa/raspberrypi/controller/rpi/alsc.hpp | 2 +-
> src/ipa/raspberrypi/controller/rpi/awb.cpp | 89 +++++++++---------
> src/ipa/raspberrypi/controller/rpi/awb.hpp | 8 +-
> .../controller/rpi/black_level.cpp | 12 +--
> .../controller/rpi/black_level.hpp | 2 +-
> src/ipa/raspberrypi/controller/rpi/ccm.cpp | 28 +++---
> src/ipa/raspberrypi/controller/rpi/ccm.hpp | 4 +-
> .../raspberrypi/controller/rpi/contrast.cpp | 18 ++--
> .../raspberrypi/controller/rpi/contrast.hpp | 2 +-
> src/ipa/raspberrypi/controller/rpi/dpc.cpp | 4 +-
> src/ipa/raspberrypi/controller/rpi/dpc.hpp | 2 +-
> src/ipa/raspberrypi/controller/rpi/geq.cpp | 10 +-
> src/ipa/raspberrypi/controller/rpi/geq.hpp | 2 +-
> src/ipa/raspberrypi/controller/rpi/lux.cpp | 12 +--
> src/ipa/raspberrypi/controller/rpi/lux.hpp | 2 +-
> src/ipa/raspberrypi/controller/rpi/noise.cpp | 6 +-
> src/ipa/raspberrypi/controller/rpi/noise.hpp | 2 +-
> src/ipa/raspberrypi/controller/rpi/sdn.cpp | 6 +-
> src/ipa/raspberrypi/controller/rpi/sdn.hpp | 2 +-
> .../raspberrypi/controller/rpi/sharpen.cpp | 8 +-
> .../raspberrypi/controller/rpi/sharpen.hpp | 2 +-
> src/ipa/raspberrypi/data/imx219.json | 8 +-
> src/ipa/raspberrypi/data/imx219_noir.json | 10 +-
> src/ipa/raspberrypi/data/imx290.json | 18 ++--
> src/ipa/raspberrypi/data/imx477.json | 8 +-
> src/ipa/raspberrypi/data/imx477_noir.json | 10 +-
> src/ipa/raspberrypi/data/ov5647.json | 10 +-
> src/ipa/raspberrypi/data/ov5647_noir.json | 12 +--
> src/ipa/raspberrypi/data/se327m12.json | 6 +-
> src/ipa/raspberrypi/meson.build | 1 -
> src/ipa/raspberrypi/raspberrypi.cpp | 1 +
> src/libcamera/yaml_parser.cpp | 35 ++++---
> test/yaml-parser.cpp | 17 ++--
> 43 files changed, 334 insertions(+), 318 deletions(-)
>
>
> base-commit: c5ab0f3b64280733a10b2da39e522fe87d0d51f0
> --
> Regards,
>
> Laurent Pinchart
>
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list