{"id":26313,"url":"https://patchwork.libcamera.org/api/covers/26313/?format=json","web_url":"https://patchwork.libcamera.org/cover/26313/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/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":"<20260323102724.1385487-1-barnabas.pocze@ideasonboard.com>","date":"2026-03-23T10:27:17","name":"[RFC,v2,0/7] C++20 migration","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/?format=json","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"mbox":"https://patchwork.libcamera.org/cover/26313/mbox/","series":[{"id":5837,"url":"https://patchwork.libcamera.org/api/series/5837/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=5837","date":"2026-03-23T10:27:17","name":"C++20 migration","version":2,"mbox":"https://patchwork.libcamera.org/series/5837/mbox/"}],"comments":"https://patchwork.libcamera.org/api/covers/26313/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 9534ABE086\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 23 Mar 2026 10:27:30 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5E04E62773;\n\tMon, 23 Mar 2026 11:27:29 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4D3F762737\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 23 Mar 2026 11:27:27 +0100 (CET)","from pb-laptop.local (185.221.143.129.nat.pool.zt.hu\n\t[185.221.143.129])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E669B591\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 23 Mar 2026 11:26:10 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"KD7FOzdX\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1774261571;\n\tbh=1QORclKH+WVapbchzaJUIOjf6iOyHSARZPLeCNIDhxc=;\n\th=From:To:Subject:Date:From;\n\tb=KD7FOzdXEr6wYRjdT4mTSdY/Opeqt8SZwiYoNB122Fs6tenvj6SiU+c68JDwMKIP1\n\tvCrjGL8gPlFVyVB0NKrqH/6h+z/xXfRrFgjRi14KY+7lkDGS1tnJ2fGorecNPT1od0\n\t5jNpT1fMD5dPGwHAqV13m/z2iqZ6hI862HVay5wE=","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Subject":"[RFC PATCH v2 0/7] C++20 migration","Date":"Mon, 23 Mar 2026 11:27:17 +0100","Message-ID":"<20260323102724.1385487-1-barnabas.pocze@ideasonboard.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-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":"With gcc 16 switching C++20 by default, and it being released for more\nthan five years now, this is a proof of concept patch set containing the\nchanges needed to make the current CI jobs succeed with cpp_std=c++20.\n\nThere is still at least one issue that seemingly only appears in C++20:\nhttps://gitlab.freedesktop.org/camera/libcamera/-/issues/267\nthe cause is not known, but a potential workaround has been merged.\n\nThe last two patches drop the use of `libcamera::Span` in favor of\n`std::span`. However, gcc 9 does not have an implementation, so those\ntwo cannot be merged as is.\n\nBarnabás Pőcze (7):\n  gstreamer: Add `-Wno-volatile` for GCC\n  meson: Ignore `Wredundant-move` with GCC 11 and above\n  libcamera: base: log: Ignore deprecations\n  treewide: Use character literal instead of string in some cases\n  meson: Switch to C++20\n  treewide: Use `std::span`\n  libcamera: base: span: Deprecate it\n\n Documentation/guides/pipeline-handler.rst     |  4 +-\n include/libcamera/base/file.h                 | 10 ++--\n include/libcamera/base/span.h                 | 16 +++----\n include/libcamera/base/thread.h               |  4 +-\n include/libcamera/camera.h                    |  5 +-\n include/libcamera/controls.h                  | 22 ++++++---\n include/libcamera/framebuffer.h               | 10 ++--\n .../libcamera/internal/byte_stream_buffer.h   |  6 +--\n include/libcamera/internal/camera_sensor.h    |  6 +--\n .../converter/converter_dw100_vertexmap.h     |  5 +-\n include/libcamera/internal/egl.h              |  8 ++--\n include/libcamera/internal/framebuffer.h      |  4 +-\n .../libcamera/internal/mapped_framebuffer.h   |  4 +-\n include/libcamera/internal/matrix.h           | 26 +++++-----\n include/libcamera/internal/pipeline_handler.h |  2 +-\n include/libcamera/internal/process.h          |  6 +--\n include/libcamera/internal/pub_key.h          |  7 ++-\n .../libcamera/internal/shared_mem_object.h    |  6 +--\n include/libcamera/internal/v4l2_device.h      |  6 +--\n include/libcamera/internal/vector.h           |  4 +-\n meson.build                                   | 23 ++++-----\n src/android/camera_buffer.h                   | 11 +++--\n src/android/camera_capabilities.cpp           |  4 +-\n src/android/camera_request.cpp                |  4 +-\n src/android/jpeg/encoder.h                    |  4 +-\n src/android/jpeg/encoder_jea.cpp              |  2 +-\n src/android/jpeg/encoder_jea.h                |  2 +-\n src/android/jpeg/encoder_libjpeg.cpp          | 10 ++--\n src/android/jpeg/encoder_libjpeg.h            | 12 ++---\n src/android/jpeg/exif.cpp                     |  2 +-\n src/android/jpeg/exif.h                       |  7 ++-\n src/android/jpeg/post_processor_jpeg.cpp      |  2 +-\n src/android/mm/cros_camera_buffer.cpp         |  4 +-\n .../mm/cros_frame_buffer_allocator.cpp        |  2 +-\n src/android/mm/generic_camera_buffer.cpp      |  4 +-\n .../mm/generic_frame_buffer_allocator.cpp     |  2 +-\n src/apps/cam/capture_script.cpp               | 12 ++---\n src/apps/cam/drm.cpp                          |  6 +--\n src/apps/cam/drm.h                            |  4 +-\n src/apps/cam/file_sink.cpp                    |  2 +-\n src/apps/cam/sdl_sink.cpp                     |  4 +-\n src/apps/cam/sdl_texture.h                    |  4 +-\n src/apps/cam/sdl_texture_1plane.cpp           |  2 +-\n src/apps/cam/sdl_texture_1plane.h             |  2 +-\n src/apps/cam/sdl_texture_mjpg.cpp             |  4 +-\n src/apps/cam/sdl_texture_mjpg.h               |  4 +-\n src/apps/cam/sdl_texture_yuv.cpp              |  2 +-\n src/apps/cam/sdl_texture_yuv.h                |  2 +-\n src/apps/common/dng_writer.cpp                |  4 +-\n src/apps/common/image.cpp                     |  6 +--\n src/apps/common/image.h                       | 10 ++--\n src/apps/common/ppm_writer.cpp                |  2 +-\n src/apps/common/ppm_writer.h                  |  4 +-\n src/apps/ipa-verify/main.cpp                  |  4 +-\n src/apps/lc-compliance/helpers/capture.cpp    |  2 +-\n src/apps/lc-compliance/helpers/capture.h      |  2 +-\n src/gstreamer/gstlibcamera-controls.cpp.in    |  4 +-\n src/gstreamer/gstlibcamera-utils.cpp          | 20 ++++----\n src/gstreamer/meson.build                     |  7 +++\n src/ipa/ipu3/algorithms/af.cpp                |  8 ++--\n src/ipa/ipu3/algorithms/af.h                  |  2 +-\n src/ipa/ipu3/algorithms/agc.cpp               |  2 +-\n src/ipa/ipu3/ipu3.cpp                         |  8 ++--\n src/ipa/libipa/exposure_mode_helper.cpp       |  2 +-\n src/ipa/libipa/exposure_mode_helper.h         |  4 +-\n src/ipa/libipa/histogram.cpp                  |  4 +-\n src/ipa/libipa/histogram.h                    |  8 ++--\n src/ipa/libipa/lsc_polynomial.h               |  2 +-\n src/ipa/libipa/v4l2_params.cpp                |  2 +-\n src/ipa/libipa/v4l2_params.h                  | 20 ++++----\n src/ipa/mali-c55/algorithms/agc.cpp           | 10 ++--\n src/ipa/mali-c55/mali-c55.cpp                 |  4 +-\n src/ipa/mali-c55/params.h                     |  2 +-\n src/ipa/rkisp1/algorithms/agc.cpp             |  2 +-\n src/ipa/rkisp1/algorithms/agc.h               |  7 +--\n src/ipa/rkisp1/algorithms/awb.cpp             |  2 +-\n src/ipa/rkisp1/algorithms/lsc.cpp             | 24 +++++-----\n src/ipa/rkisp1/algorithms/lsc.h               |  4 +-\n src/ipa/rkisp1/params.cpp                     |  2 +-\n src/ipa/rkisp1/params.h                       |  8 ++--\n src/ipa/rkisp1/rkisp1.cpp                     |  2 +-\n src/ipa/rpi/cam_helper/cam_helper.cpp         |  4 +-\n src/ipa/rpi/cam_helper/cam_helper.h           |  6 +--\n src/ipa/rpi/cam_helper/cam_helper_imx477.cpp  |  4 +-\n src/ipa/rpi/cam_helper/cam_helper_imx519.cpp  |  4 +-\n src/ipa/rpi/cam_helper/cam_helper_imx708.cpp  |  4 +-\n src/ipa/rpi/cam_helper/md_parser.h            |  9 ++--\n src/ipa/rpi/cam_helper/md_parser_smia.cpp     |  4 +-\n src/ipa/rpi/common/ipa_base.cpp               | 20 ++++----\n src/ipa/rpi/common/ipa_base.h                 |  2 +-\n src/ipa/rpi/controller/af_algorithm.h         |  5 +-\n src/ipa/rpi/controller/rpi/af.cpp             |  2 +-\n src/ipa/rpi/controller/rpi/af.h               |  2 +-\n src/ipa/rpi/controller/rpi/alsc.cpp           |  2 +-\n src/ipa/rpi/pisp/pisp.cpp                     | 12 +++--\n src/ipa/rpi/vc4/vc4.cpp                       | 48 ++++++++++---------\n src/libcamera/base/backtrace.cpp              |  8 ++--\n src/libcamera/base/file.cpp                   |  6 +--\n src/libcamera/base/log.cpp                    | 17 ++++---\n src/libcamera/base/thread.cpp                 |  2 +-\n src/libcamera/byte_stream_buffer.cpp          |  4 +-\n src/libcamera/camera.cpp                      |  2 +-\n src/libcamera/control_serializer.cpp          |  2 +-\n src/libcamera/controls.cpp                    | 22 ++++-----\n src/libcamera/converter/converter_dw100.cpp   |  2 +-\n .../converter/converter_dw100_vertexmap.cpp   |  4 +-\n src/libcamera/egl.cpp                         |  6 +--\n src/libcamera/framebuffer.cpp                 |  6 +--\n src/libcamera/ipa_manager.cpp                 |  2 +-\n src/libcamera/ipa_module.cpp                  | 16 +++----\n src/libcamera/mapped_framebuffer.cpp          |  2 +-\n src/libcamera/matrix.cpp                      | 26 +++++-----\n src/libcamera/media_pipeline.cpp              |  6 +--\n src/libcamera/pipeline/imx8-isi/imx8-isi.cpp  |  4 +-\n src/libcamera/pipeline/ipu3/ipu3.cpp          |  6 +--\n src/libcamera/pipeline/mali-c55/mali-c55.cpp  |  6 +--\n src/libcamera/pipeline/rkisp1/rkisp1.cpp      |  6 +--\n src/libcamera/pipeline/rkisp1/rkisp1_path.cpp |  2 +-\n src/libcamera/pipeline/rkisp1/rkisp1_path.h   |  6 +--\n .../pipeline/rpi/common/pipeline_base.cpp     | 12 ++---\n .../pipeline/rpi/common/pipeline_base.h       |  2 +-\n src/libcamera/pipeline/rpi/pisp/pisp.cpp      |  4 +-\n src/libcamera/pipeline/rpi/vc4/vc4.cpp        |  2 +-\n src/libcamera/pipeline/simple/simple.cpp      | 10 ++--\n src/libcamera/pipeline/uvcvideo/uvcvideo.cpp  |  6 +--\n src/libcamera/pipeline/vimc/vimc.cpp          |  6 +--\n src/libcamera/pipeline/virtual/virtual.cpp    |  6 +--\n src/libcamera/process.cpp                     |  4 +-\n src/libcamera/pub_key.cpp                     |  6 +--\n src/libcamera/sensor/camera_sensor_legacy.cpp |  8 ++--\n src/libcamera/sensor/camera_sensor_raw.cpp    |  8 ++--\n src/libcamera/shared_mem_object.cpp           |  2 +-\n src/libcamera/v4l2_device.cpp                 | 14 +++---\n src/libcamera/v4l2_videodevice.cpp            |  6 +--\n src/libcamera/vector.cpp                      |  2 +-\n src/libcamera/yaml_parser.cpp                 |  2 +-\n src/py/libcamera/py_helpers.cpp               |  2 +-\n src/py/libcamera/py_main.cpp                  |  4 +-\n src/v4l2/v4l2_camera_proxy.cpp                |  2 +-\n src/v4l2/v4l2_compat_manager.cpp              |  4 +-\n test/controls/control_value.cpp               | 28 +++++------\n test/file.cpp                                 |  2 +-\n test/span.cpp                                 |  1 +\n test/utils.cpp                                |  4 +-\n test/v4l2_videodevice/controls.cpp            |  4 +-\n utils/codegen/controls.py                     |  4 +-\n utils/gen-debug-controls.py                   |  4 +-\n 147 files changed, 487 insertions(+), 461 deletions(-)\n\n--\n2.53.0"}