From patchwork Tue Aug 25 12:34:11 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= X-Patchwork-Id: 28083 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id D0D22C3308 for ; Tue, 25 Aug 2026 12:34:21 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 7B10E68408; Tue, 25 Aug 2026 14:34:19 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="KJ83dkWM"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 5DCE5683D8 for ; Tue, 25 Aug 2026 14:34:16 +0200 (CEST) Received: from pb-laptop.local (185.221.143.32.nat.pool.zt.hu [185.221.143.32]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 0B88E6DC for ; Tue, 25 Aug 2026 14:32:51 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1787661171; bh=toGa3c0Ec8cckq2IZ2NUAOv4S7Ignn0Qn7SjFvpQtHs=; h=From:To:Subject:Date:In-Reply-To:References:From; b=KJ83dkWM6CT4FMA5QesXUZseDZkPvDET25im3MZg0kkCHq4Zr41rYSGlZJgdyuNtd KecyXr0UIzigSzwjgWIiTjwecUwGko6aFaXV2Nw4oBx/hm/chjVdkLjdzk8Py6qjlY AoQy3dpXMISwgCssG+koOx0uqLz3lEf/JcAtXmhA= From: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= To: libcamera-devel@lists.libcamera.org Subject: [PATCH v1 1/2] treewide: Use `std::span` Date: Tue, 25 Aug 2026 14:34:11 +0200 Message-ID: <20260825123412.837696-2-barnabas.pocze@ideasonboard.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260825123412.837696-1-barnabas.pocze@ideasonboard.com> References: <20260825123412.837696-1-barnabas.pocze@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Now that C++20 is used, convert everything to use `std::span` instead of `libcamera::Span`. This includes the public interfaces as well. Signed-off-by: Barnabás Pőcze --- Documentation/guides/pipeline-handler.rst | 4 +- include/libcamera/base/file.h | 10 ++-- include/libcamera/base/span.h | 12 ++--- include/libcamera/base/thread.h | 4 +- include/libcamera/camera.h | 6 +-- include/libcamera/controls.h | 22 ++++++--- include/libcamera/framebuffer.h | 10 ++-- .../libcamera/internal/byte_stream_buffer.h | 6 +-- include/libcamera/internal/camera_sensor.h | 6 +-- .../converter/converter_dw100_vertexmap.h | 5 +- include/libcamera/internal/egl.h | 14 +++--- include/libcamera/internal/framebuffer.h | 4 +- .../libcamera/internal/mapped_framebuffer.h | 4 +- include/libcamera/internal/matrix.h | 26 +++++------ include/libcamera/internal/pipeline_handler.h | 2 +- include/libcamera/internal/process.h | 6 +-- include/libcamera/internal/pub_key.h | 7 ++- .../libcamera/internal/shared_mem_object.h | 6 +-- include/libcamera/internal/v4l2_device.h | 6 +-- include/libcamera/internal/vector.h | 4 +- src/android/camera_buffer.h | 11 +++-- src/android/camera_capabilities.cpp | 3 +- src/android/camera_request.cpp | 4 +- src/android/jpeg/encoder.h | 4 +- src/android/jpeg/encoder_jea.cpp | 2 +- src/android/jpeg/encoder_jea.h | 2 +- src/android/jpeg/encoder_libjpeg.cpp | 10 ++-- src/android/jpeg/encoder_libjpeg.h | 12 ++--- src/android/jpeg/exif.cpp | 2 +- src/android/jpeg/exif.h | 7 ++- src/android/jpeg/post_processor_jpeg.cpp | 2 +- src/android/mm/cros_camera_buffer.cpp | 4 +- .../mm/cros_frame_buffer_allocator.cpp | 2 +- src/android/mm/generic_camera_buffer.cpp | 4 +- .../mm/generic_frame_buffer_allocator.cpp | 2 +- src/apps/cam/capture_script.cpp | 12 ++--- src/apps/cam/drm.cpp | 6 +-- src/apps/cam/drm.h | 4 +- src/apps/cam/file_sink.cpp | 2 +- src/apps/cam/sdl_sink.cpp | 4 +- src/apps/cam/sdl_texture.h | 4 +- src/apps/cam/sdl_texture_1plane.cpp | 2 +- src/apps/cam/sdl_texture_1plane.h | 2 +- src/apps/cam/sdl_texture_mjpg.cpp | 4 +- src/apps/cam/sdl_texture_mjpg.h | 4 +- src/apps/cam/sdl_texture_yuv.cpp | 2 +- src/apps/cam/sdl_texture_yuv.h | 2 +- src/apps/common/dng_writer.cpp | 4 +- src/apps/common/image.cpp | 6 +-- src/apps/common/image.h | 10 ++-- src/apps/common/ppm_writer.cpp | 2 +- src/apps/common/ppm_writer.h | 4 +- src/apps/ipa-verify/main.cpp | 4 +- src/apps/lc-compliance/helpers/capture.cpp | 2 +- src/apps/lc-compliance/helpers/capture.h | 3 +- src/gstreamer/gstlibcamera-controls.cpp.in | 4 +- src/gstreamer/gstlibcamera-utils.cpp | 20 ++++---- src/ipa/ipu3/algorithms/af.cpp | 6 +-- src/ipa/ipu3/algorithms/af.h | 2 +- src/ipa/ipu3/algorithms/agc.cpp | 2 +- src/ipa/ipu3/ipu3.cpp | 8 ++-- src/ipa/libipa/awb.h | 2 +- src/ipa/libipa/awb_bayes.cpp | 2 +- src/ipa/libipa/awb_bayes.h | 4 +- src/ipa/libipa/exposure_mode_helper.cpp | 2 +- src/ipa/libipa/exposure_mode_helper.h | 4 +- src/ipa/libipa/histogram.cpp | 4 +- src/ipa/libipa/histogram.h | 8 ++-- src/ipa/libipa/lsc_base.h | 2 - src/ipa/libipa/lsc_polynomial.cpp | 4 +- src/ipa/libipa/lsc_polynomial.h | 7 ++- src/ipa/libipa/lsc_table.h | 1 - src/ipa/libipa/v4l2_params.cpp | 12 ++--- src/ipa/libipa/v4l2_params.h | 18 ++++---- src/ipa/libipa/v4l2_stats.cpp | 8 ++-- src/ipa/libipa/v4l2_stats.h | 13 +++--- src/ipa/mali-c55/algorithms/agc.cpp | 10 ++-- src/ipa/mali-c55/mali-c55.cpp | 4 +- src/ipa/mali-c55/params.h | 2 +- src/ipa/rkisp1/algorithms/agc.cpp | 2 +- src/ipa/rkisp1/algorithms/agc.h | 7 +-- src/ipa/rkisp1/algorithms/lsc.cpp | 3 +- src/ipa/rkisp1/params.cpp | 2 +- src/ipa/rkisp1/params.h | 8 ++-- src/ipa/rkisp1/rkisp1.cpp | 2 +- src/ipa/rpi/cam_helper/cam_helper.cpp | 4 +- src/ipa/rpi/cam_helper/cam_helper.h | 6 +-- src/ipa/rpi/cam_helper/cam_helper_imx296.cpp | 4 +- src/ipa/rpi/cam_helper/cam_helper_imx477.cpp | 4 +- src/ipa/rpi/cam_helper/cam_helper_imx519.cpp | 4 +- src/ipa/rpi/cam_helper/cam_helper_imx708.cpp | 4 +- src/ipa/rpi/cam_helper/md_parser.h | 9 ++-- src/ipa/rpi/cam_helper/md_parser_smia.cpp | 4 +- src/ipa/rpi/common/ipa_base.cpp | 20 ++++---- src/ipa/rpi/common/ipa_base.h | 2 +- src/ipa/rpi/controller/af_algorithm.h | 5 +- src/ipa/rpi/controller/rpi/af.cpp | 2 +- src/ipa/rpi/controller/rpi/af.h | 2 +- src/ipa/rpi/controller/rpi/alsc.cpp | 2 +- src/ipa/rpi/controller/rpi/awb_nn.cpp | 3 +- src/ipa/rpi/pisp/pisp.cpp | 10 ++-- src/ipa/rpi/vc4/vc4.cpp | 46 +++++++++---------- src/libcamera/base/backtrace.cpp | 8 ++-- src/libcamera/base/file.cpp | 6 +-- src/libcamera/base/thread.cpp | 2 +- src/libcamera/byte_stream_buffer.cpp | 8 ++-- src/libcamera/camera.cpp | 2 +- src/libcamera/control_ids_rpi.yaml | 4 +- src/libcamera/control_serializer.cpp | 2 +- src/libcamera/controls.cpp | 22 ++++----- src/libcamera/converter/converter_dw100.cpp | 2 +- .../converter/converter_dw100_vertexmap.cpp | 4 +- src/libcamera/egl.cpp | 12 ++--- src/libcamera/framebuffer.cpp | 6 +-- src/libcamera/ipa_data_serializer.cpp | 2 +- src/libcamera/ipa_manager.cpp | 2 +- src/libcamera/ipa_module.cpp | 16 +++---- src/libcamera/mapped_framebuffer.cpp | 4 +- src/libcamera/matrix.cpp | 36 +++++++-------- src/libcamera/pipeline/imx8-isi/imx8-isi.cpp | 4 +- src/libcamera/pipeline/ipu3/ipu3.cpp | 6 +-- src/libcamera/pipeline/mali-c55/mali-c55.cpp | 6 +-- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 6 +-- src/libcamera/pipeline/rkisp1/rkisp1_path.cpp | 2 +- src/libcamera/pipeline/rkisp1/rkisp1_path.h | 6 +-- .../pipeline/rpi/common/pipeline_base.cpp | 12 ++--- .../pipeline/rpi/common/pipeline_base.h | 2 +- src/libcamera/pipeline/rpi/pisp/pisp.cpp | 4 +- src/libcamera/pipeline/rpi/vc4/vc4.cpp | 2 +- src/libcamera/pipeline/simple/simple.cpp | 4 +- src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 6 +-- src/libcamera/pipeline/vimc/vimc.cpp | 6 +-- src/libcamera/pipeline/virtual/virtual.cpp | 6 +-- src/libcamera/process.cpp | 4 +- src/libcamera/pub_key.cpp | 6 +-- src/libcamera/sensor/camera_sensor_legacy.cpp | 8 ++-- src/libcamera/sensor/camera_sensor_raw.cpp | 8 ++-- src/libcamera/shared_mem_object.cpp | 6 +-- src/libcamera/software_isp/debayer_egl.cpp | 6 +-- src/libcamera/v4l2_device.cpp | 14 +++--- src/libcamera/v4l2_videodevice.cpp | 6 +-- src/libcamera/value_node.cpp | 4 +- src/libcamera/vector.cpp | 2 +- src/libcamera/yaml_parser.cpp | 2 +- src/py/libcamera/py_helpers.cpp | 2 +- src/py/libcamera/py_main.cpp | 4 +- src/v4l2/v4l2_camera_proxy.cpp | 2 +- src/v4l2/v4l2_compat_manager.cpp | 2 +- test/controls/control_value.cpp | 28 +++++------ test/file.cpp | 2 +- test/utils.cpp | 4 +- test/v4l2_videodevice/controls.cpp | 4 +- utils/codegen/controls.py | 4 +- utils/gen-debug-controls.py | 6 +-- 154 files changed, 481 insertions(+), 475 deletions(-) diff --git a/Documentation/guides/pipeline-handler.rst b/Documentation/guides/pipeline-handler.rst index b33d8b8574..e630199a5f 100644 --- a/Documentation/guides/pipeline-handler.rst +++ b/Documentation/guides/pipeline-handler.rst @@ -202,7 +202,7 @@ stub implementations for the overridden class members. PipelineHandlerVivid(CameraManager *manager); std::unique_ptr - generateConfiguration(Camera *camera, Span roles) override; + generateConfiguration(Camera *camera, std::span roles) override; int configure(Camera *camera, CameraConfiguration *config) override; int exportFrameBuffers(Camera *camera, Stream *stream, @@ -223,7 +223,7 @@ stub implementations for the overridden class members. std::unique_ptr PipelineHandlerVivid::generateConfiguration(Camera *camera, - Span roles) + std::span roles) { return nullptr; } diff --git a/include/libcamera/base/file.h b/include/libcamera/base/file.h index 6d3f106d59..d99ff5f2db 100644 --- a/include/libcamera/base/file.h +++ b/include/libcamera/base/file.h @@ -8,6 +8,7 @@ #pragma once #include +#include #include #include #include @@ -16,7 +17,6 @@ #include #include -#include #include namespace libcamera { @@ -59,11 +59,11 @@ public: off_t pos() const; off_t seek(off_t pos); - ssize_t read(const Span &data); - ssize_t write(const Span &data); + ssize_t read(std::span data); + ssize_t write(std::span data); - Span map(off_t offset = 0, ssize_t size = -1, - MapFlags flags = MapFlag::NoOption); + std::span map(off_t offset = 0, ssize_t size = -1, + MapFlags flags = MapFlag::NoOption); bool unmap(uint8_t *addr); static bool exists(const std::string &name); diff --git a/include/libcamera/base/span.h b/include/libcamera/base/span.h index 806db106e8..5c7a98d8e7 100644 --- a/include/libcamera/base/span.h +++ b/include/libcamera/base/span.h @@ -30,11 +30,11 @@ struct is_array> : public std::true_type { }; template -struct is_span : public std::false_type { +struct is_libcamera_span : public std::false_type { }; template -struct is_span> : public std::true_type { +struct is_libcamera_span> : public std::true_type { }; } /* namespace details */ @@ -153,7 +153,7 @@ public: template explicit constexpr Span(Container &cont, - std::enable_if_t::value && + std::enable_if_t::value && !details::is_array::value && !std::is_array::value && std::is_convertible (*)[], @@ -165,7 +165,7 @@ public: template explicit constexpr Span(const Container &cont, - std::enable_if_t::value && + std::enable_if_t::value && !details::is_array::value && !std::is_array::value && std::is_convertible (*)[], @@ -315,7 +315,7 @@ public: template constexpr Span(Container &cont, - std::enable_if_t::value && + std::enable_if_t::value && !details::is_array::value && !std::is_array::value && std::is_convertible (*)[], @@ -327,7 +327,7 @@ public: template constexpr Span(const Container &cont, - std::enable_if_t::value && + std::enable_if_t::value && !details::is_array::value && !std::is_array::value && std::is_convertible (*)[], diff --git a/include/libcamera/base/thread.h b/include/libcamera/base/thread.h index 6aa36fa1bf..758439840d 100644 --- a/include/libcamera/base/thread.h +++ b/include/libcamera/base/thread.h @@ -8,6 +8,7 @@ #pragma once #include +#include #include #include #include @@ -17,7 +18,6 @@ #include #include #include -#include #include namespace libcamera { @@ -38,7 +38,7 @@ public: void exit(int code = 0); bool wait(utils::duration duration = utils::duration::max()); - int setThreadAffinity(const Span &cpus); + int setThreadAffinity(std::span cpus); bool isRunning(); diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h index 443116b588..c767f0f76f 100644 --- a/include/libcamera/camera.h +++ b/include/libcamera/camera.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -18,7 +19,6 @@ #include #include #include -#include #include #include @@ -136,12 +136,12 @@ public: const std::set &streams() const; std::unique_ptr - generateConfiguration(Span roles = {}); + generateConfiguration(std::span roles = {}); std::unique_ptr generateConfiguration(std::initializer_list roles) { - return generateConfiguration(Span(roles.begin(), roles.end())); + return generateConfiguration(std::span(roles.begin(), roles.end())); } int configure(CameraConfiguration *config); diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h index 44ff49647a..b3ddee29ab 100644 --- a/include/libcamera/controls.h +++ b/include/libcamera/controls.h @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -18,7 +19,6 @@ #include #include -#include #include @@ -43,6 +43,14 @@ enum ControlType { namespace details { +template +struct is_span : public std::false_type { +}; + +template +struct is_span> : public std::true_type { +}; + template struct control_type { }; @@ -120,7 +128,7 @@ struct control_type { }; template -struct control_type, std::enable_if_t>::size == 0>> : public control_type> { +struct control_type, std::enable_if_t>::size == 0>> : public control_type> { static constexpr std::size_t size = N; }; @@ -169,8 +177,8 @@ public: bool isNone() const { return type_ == ControlTypeNone; } bool isArray() const { return isArray_; } std::size_t numElements() const { return numElements_; } - Span data() const; - Span data(); + std::span data() const; + std::span data(); std::string toString() const; @@ -332,7 +340,7 @@ public: explicit ControlInfo(const ControlValue &min = {}, const ControlValue &max = {}, const ControlValue &def = {}); - explicit ControlInfo(Span values, + explicit ControlInfo(std::span values, const ControlValue &def = {}); const ControlValue &min() const { return min_; } @@ -458,13 +466,13 @@ public: } template - void set(const Control> &ctrl, const std::initializer_list &value) + void set(const Control> &ctrl, const std::initializer_list &value) { ControlValue *val = find(ctrl.id()); if (!val) return; - val->set(Span, Size>{ value.begin(), value.size() }); + val->set(std::span, Size>{ value.begin(), value.size() }); } const ControlValue &get(unsigned int id) const; diff --git a/include/libcamera/framebuffer.h b/include/libcamera/framebuffer.h index 723525d052..95da059ce2 100644 --- a/include/libcamera/framebuffer.h +++ b/include/libcamera/framebuffer.h @@ -9,12 +9,12 @@ #include #include +#include #include #include #include #include -#include namespace libcamera { @@ -37,8 +37,8 @@ struct FrameMetadata { unsigned int sequence; uint64_t timestamp; - Span planes() { return planes_; } - Span planes() const { return planes_; } + std::span planes() { return planes_; } + std::span planes() const { return planes_; } private: friend class FrameBuffer; @@ -58,11 +58,11 @@ public: unsigned int length; }; - FrameBuffer(Span planes, unsigned int cookie = 0); + FrameBuffer(std::span planes, unsigned int cookie = 0); FrameBuffer(std::unique_ptr d); virtual ~FrameBuffer() {} - Span planes() const; + std::span planes() const; Request *request() const; const FrameMetadata &metadata() const; diff --git a/include/libcamera/internal/byte_stream_buffer.h b/include/libcamera/internal/byte_stream_buffer.h index 5b1c10ab89..0ea0f37032 100644 --- a/include/libcamera/internal/byte_stream_buffer.h +++ b/include/libcamera/internal/byte_stream_buffer.h @@ -7,12 +7,12 @@ #pragma once +#include #include #include #include #include -#include namespace libcamera { @@ -39,7 +39,7 @@ public: } template - int read(const Span &data) + int read(std::span data) { return read(reinterpret_cast(data.data()), data.size_bytes()); @@ -59,7 +59,7 @@ public: } template - int write(const Span &data) + int write(std::span data) { return write(reinterpret_cast(data.data()), data.size_bytes()); diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h index e6b72d22ac..613eff5d08 100644 --- a/include/libcamera/internal/camera_sensor.h +++ b/include/libcamera/internal/camera_sensor.h @@ -8,13 +8,13 @@ #pragma once #include +#include #include #include #include #include #include -#include #include #include @@ -54,7 +54,7 @@ public: virtual Size resolution() const = 0; virtual V4L2SubdeviceFormat - getFormat(Span mbusCodes, + getFormat(std::span mbusCodes, const Size &size, const Size maxSize = Size()) const = 0; virtual int setFormat(V4L2SubdeviceFormat *format, Transform transform = Transform::Identity) = 0; @@ -76,7 +76,7 @@ public: virtual Orientation mountingOrientation() const = 0; virtual const ControlInfoMap &controls() const = 0; - virtual ControlList getControls(Span ids) = 0; + virtual ControlList getControls(std::span ids) = 0; virtual int setControls(ControlList *ctrls) = 0; virtual const std::vector & diff --git a/include/libcamera/internal/converter/converter_dw100_vertexmap.h b/include/libcamera/internal/converter/converter_dw100_vertexmap.h index 8cb86ed546..e37e8e8c1c 100644 --- a/include/libcamera/internal/converter/converter_dw100_vertexmap.h +++ b/include/libcamera/internal/converter/converter_dw100_vertexmap.h @@ -10,11 +10,10 @@ #include #include #include +#include #include #include -#include - #include #include @@ -39,7 +38,7 @@ public: { } - int setCoefficients(Span coeffs); + int setCoefficients(std::span coeffs); Matrix cm; Matrix cmNew; diff --git a/include/libcamera/internal/egl.h b/include/libcamera/internal/egl.h index 8f2ef296c3..7d062b32d6 100644 --- a/include/libcamera/internal/egl.h +++ b/include/libcamera/internal/egl.h @@ -9,11 +9,11 @@ #pragma once +#include #include #include #include -#include #include #include @@ -118,10 +118,10 @@ public: void pushEnv(std::vector &shaderEnv, const char *str); - int compileVertexShader(GLuint &shaderId, Span shaderData, - Span shaderEnv); - int compileFragmentShader(GLuint &shaderId, Span shaderData, - Span shaderEnv); + int compileVertexShader(GLuint &shaderId, std::span shaderData, + std::span shaderEnv); + int compileFragmentShader(GLuint &shaderId, std::span shaderData, + std::span shaderEnv); int linkProgram(GLuint &programId, GLuint fragmentshaderId, GLuint vertexshaderId); void dumpShaderSource(GLuint shaderId); void syncOutput(); @@ -140,8 +140,8 @@ private: EGLDisplay display_ = EGL_NO_DISPLAY; EGLContext context_ = EGL_NO_CONTEXT; - int compileShader(int shaderType, GLuint &shaderId, Span shaderData, - Span shaderEnv); + int compileShader(int shaderType, GLuint &shaderId, std::span shaderData, + std::span shaderEnv); int createDMABufTexture2D(eGLImage &eglImage, int fd, bool output); diff --git a/include/libcamera/internal/framebuffer.h b/include/libcamera/internal/framebuffer.h index 67b090fc30..66ddba9001 100644 --- a/include/libcamera/internal/framebuffer.h +++ b/include/libcamera/internal/framebuffer.h @@ -8,11 +8,11 @@ #pragma once #include +#include #include #include #include -#include #include #include @@ -24,7 +24,7 @@ class FrameBuffer::Private : public Extensible::Private LIBCAMERA_DECLARE_PUBLIC(FrameBuffer) public: - Private(Span planes, uint64_t cookie = 0); + Private(std::span planes, uint64_t cookie = 0); virtual ~Private(); void setRequest(Request *request) { request_ = request; } diff --git a/include/libcamera/internal/mapped_framebuffer.h b/include/libcamera/internal/mapped_framebuffer.h index 6aaabf5086..62d16a1fff 100644 --- a/include/libcamera/internal/mapped_framebuffer.h +++ b/include/libcamera/internal/mapped_framebuffer.h @@ -7,12 +7,12 @@ #pragma once +#include #include #include #include #include -#include #include @@ -21,7 +21,7 @@ namespace libcamera { class MappedBuffer { public: - using Plane = Span; + using Plane = std::span; ~MappedBuffer(); diff --git a/include/libcamera/internal/matrix.h b/include/libcamera/internal/matrix.h index 137eb65e0c..f74cda103c 100644 --- a/include/libcamera/internal/matrix.h +++ b/include/libcamera/internal/matrix.h @@ -7,12 +7,12 @@ #pragma once #include +#include #include #include #include #include -#include #include "libcamera/internal/value_node.h" @@ -22,8 +22,8 @@ LOG_DECLARE_CATEGORY(Matrix) #ifndef __DOXYGEN__ template -bool matrixInvert(Span dataIn, Span dataOut, unsigned int dim, - Span scratchBuffer, Span swapBuffer); +bool matrixInvert(std::span dataIn, std::span dataOut, unsigned int dim, + std::span scratchBuffer, std::span swapBuffer); #endif /* __DOXYGEN__ */ template @@ -41,7 +41,7 @@ public: std::copy(data.begin(), data.end(), data_.begin()); } - Matrix(const Span data) + Matrix(std::span data) { std::copy(data.begin(), data.end(), data_.begin()); } @@ -74,16 +74,16 @@ public: return out.str(); } - constexpr Span data() const { return data_; } + constexpr std::span data() const { return data_; } - constexpr Span operator[](size_t i) const + constexpr std::span operator[](size_t i) const { - return Span{ &data_.data()[i * Cols], Cols }; + return std::span{ &data_.data()[i * Cols], Cols }; } - constexpr Span operator[](size_t i) + constexpr std::span operator[](size_t i) { - return Span{ &data_.data()[i * Cols], Cols }; + return std::span{ &data_.data()[i * Cols], Cols }; } #ifndef __DOXYGEN__ @@ -105,11 +105,11 @@ public: Matrix inverse; std::array scratchBuffer; std::array swapBuffer; - bool res = matrixInvert(Span(data_), - Span(inverse.data_), + bool res = matrixInvert(std::span(data_), + std::span(inverse.data_), Rows, - Span(scratchBuffer), - Span(swapBuffer)); + std::span(scratchBuffer), + std::span(swapBuffer)); if (ok) *ok = res; return inverse; diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h index 2a2ba95a41..6a018fe428 100644 --- a/include/libcamera/internal/pipeline_handler.h +++ b/include/libcamera/internal/pipeline_handler.h @@ -47,7 +47,7 @@ public: void release(Camera *camera); virtual std::unique_ptr generateConfiguration(Camera *camera, - Span roles) = 0; + std::span roles) = 0; virtual int configure(Camera *camera, CameraConfiguration *config) = 0; virtual int exportFrameBuffers(Camera *camera, Stream *stream, diff --git a/include/libcamera/internal/process.h b/include/libcamera/internal/process.h index 27d4b92583..596e967de8 100644 --- a/include/libcamera/internal/process.h +++ b/include/libcamera/internal/process.h @@ -7,11 +7,11 @@ #pragma once +#include #include #include #include -#include #include namespace libcamera { @@ -31,8 +31,8 @@ public: ~Process(); int start(const std::string &path, - Span args = {}, - Span fds = {}); + std::span args = {}, + std::span fds = {}); ExitStatus exitStatus() const { return exitStatus_; } int exitCode() const { return exitCode_; } diff --git a/include/libcamera/internal/pub_key.h b/include/libcamera/internal/pub_key.h index c8cc04cb40..0e0f538199 100644 --- a/include/libcamera/internal/pub_key.h +++ b/include/libcamera/internal/pub_key.h @@ -7,10 +7,9 @@ #pragma once +#include #include -#include - #if HAVE_CRYPTO struct evp_pkey_st; #elif HAVE_GNUTLS @@ -22,11 +21,11 @@ namespace libcamera { class PubKey { public: - PubKey(Span key); + PubKey(std::span key); ~PubKey(); bool isValid() const { return valid_; } - bool verify(Span data, Span sig) const; + bool verify(std::span data, std::span sig) const; private: bool valid_; diff --git a/include/libcamera/internal/shared_mem_object.h b/include/libcamera/internal/shared_mem_object.h index 21e025513f..fcc267757f 100644 --- a/include/libcamera/internal/shared_mem_object.h +++ b/include/libcamera/internal/shared_mem_object.h @@ -8,6 +8,7 @@ */ #pragma once +#include #include #include #include @@ -16,7 +17,6 @@ #include #include -#include namespace libcamera { @@ -37,7 +37,7 @@ public: return fd_; } - Span mem() const + std::span mem() const { return mem_; } @@ -52,7 +52,7 @@ private: SharedFD fd_; - Span mem_; + std::span mem_; }; template::value>> diff --git a/include/libcamera/internal/v4l2_device.h b/include/libcamera/internal/v4l2_device.h index 8c4c59bf77..1a63fc547e 100644 --- a/include/libcamera/internal/v4l2_device.h +++ b/include/libcamera/internal/v4l2_device.h @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -17,7 +18,6 @@ #include #include -#include #include #include @@ -38,7 +38,7 @@ public: const ControlInfoMap &controls() const { return controls_; } - ControlList getControls(Span ids, const V4L2Request *request = nullptr); + ControlList getControls(std::span ids, const V4L2Request *request = nullptr); int setControls(ControlList *ctrls, const V4L2Request *request = nullptr); const struct v4l2_query_ext_ctrl *controlInfo(uint32_t id) const; @@ -78,7 +78,7 @@ private: void listControls(); void updateControls(ControlList *ctrls, - Span v4l2Ctrls); + std::span v4l2Ctrls); void eventAvailable(); diff --git a/include/libcamera/internal/vector.h b/include/libcamera/internal/vector.h index 0af629e69d..4fb610dbc0 100644 --- a/include/libcamera/internal/vector.h +++ b/include/libcamera/internal/vector.h @@ -13,10 +13,10 @@ #include #include #include +#include #include #include -#include #include "libcamera/internal/matrix.h" #include "libcamera/internal/value_node.h" @@ -46,7 +46,7 @@ public: std::copy(data.begin(), data.end(), data_.begin()); } - constexpr Vector(const Span data) + constexpr Vector(std::span data) { std::copy(data.begin(), data.end(), data_.begin()); } diff --git a/src/android/camera_buffer.h b/src/android/camera_buffer.h index 96669962b8..88946bdee8 100644 --- a/src/android/camera_buffer.h +++ b/src/android/camera_buffer.h @@ -7,10 +7,11 @@ #pragma once +#include + #include #include -#include #include #include @@ -28,8 +29,8 @@ public: unsigned int numPlanes() const; - libcamera::Span plane(unsigned int plane) const; - libcamera::Span plane(unsigned int plane); + std::span plane(unsigned int plane) const; + std::span plane(unsigned int plane); unsigned int stride(unsigned int plane) const; unsigned int offset(unsigned int plane) const; @@ -58,11 +59,11 @@ unsigned int CameraBuffer::numPlanes() const \ { \ return _d()->numPlanes(); \ } \ -Span CameraBuffer::plane(unsigned int plane) const \ +std::span CameraBuffer::plane(unsigned int plane) const \ { \ return const_cast(_d())->plane(plane); \ } \ -Span CameraBuffer::plane(unsigned int plane) \ +std::span CameraBuffer::plane(unsigned int plane) \ { \ return _d()->plane(plane); \ } \ diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp index 6b58dd5548..795abc2d03 100644 --- a/src/android/camera_capabilities.cpp +++ b/src/android/camera_capabilities.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -1083,7 +1084,7 @@ int CameraCapabilities::initializeStaticMetadata() } { - const Span rects = + const std::span rects = properties.get(properties::PixelArrayActiveAreas).value_or(utils::defopt); std::vector data{ static_cast(rects[0].x), diff --git a/src/android/camera_request.cpp b/src/android/camera_request.cpp index 0d45960d90..49059bff5c 100644 --- a/src/android/camera_request.cpp +++ b/src/android/camera_request.cpp @@ -7,7 +7,7 @@ #include "camera_request.h" -#include +#include #include "camera_buffer.h" @@ -114,7 +114,7 @@ Camera3RequestDescriptor::Camera3RequestDescriptor( frameNumber_ = camera3Request->frame_number; /* Copy the camera3 request stream information for later access. */ - const Span buffers{ + const std::span buffers{ camera3Request->output_buffers, camera3Request->num_output_buffers }; diff --git a/src/android/jpeg/encoder.h b/src/android/jpeg/encoder.h index ed033c191c..83c3924bc2 100644 --- a/src/android/jpeg/encoder.h +++ b/src/android/jpeg/encoder.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include @@ -21,6 +21,6 @@ public: virtual int configure(const libcamera::StreamConfiguration &cfg) = 0; virtual int encode(Camera3RequestDescriptor::StreamBuffer *buffer, - libcamera::Span exifData, + std::span exifData, unsigned int quality) = 0; }; diff --git a/src/android/jpeg/encoder_jea.cpp b/src/android/jpeg/encoder_jea.cpp index 25dc43173e..35687e47bc 100644 --- a/src/android/jpeg/encoder_jea.cpp +++ b/src/android/jpeg/encoder_jea.cpp @@ -34,7 +34,7 @@ int EncoderJea::configure(const libcamera::StreamConfiguration &cfg) } int EncoderJea::encode(Camera3RequestDescriptor::StreamBuffer *buffer, - libcamera::Span exifData, + std::span exifData, unsigned int quality) { if (!jpegCompressor_) diff --git a/src/android/jpeg/encoder_jea.h b/src/android/jpeg/encoder_jea.h index 91115d2e9b..a89dde2d01 100644 --- a/src/android/jpeg/encoder_jea.h +++ b/src/android/jpeg/encoder_jea.h @@ -21,7 +21,7 @@ public: int configure(const libcamera::StreamConfiguration &cfg) override; int encode(Camera3RequestDescriptor::StreamBuffer *buffer, - libcamera::Span exifData, + std::span exifData, unsigned int quality) override; private: diff --git a/src/android/jpeg/encoder_libjpeg.cpp b/src/android/jpeg/encoder_libjpeg.cpp index cb242b5ec6..e988bcd615 100644 --- a/src/android/jpeg/encoder_libjpeg.cpp +++ b/src/android/jpeg/encoder_libjpeg.cpp @@ -105,7 +105,7 @@ int EncoderLibJpeg::configure(const StreamConfiguration &cfg) return 0; } -void EncoderLibJpeg::compressRGB(const std::vector> &planes) +void EncoderLibJpeg::compressRGB(const std::vector> &planes) { unsigned char *src = const_cast(planes[0].data()); /* \todo Stride information should come from buffer configuration. */ @@ -123,7 +123,7 @@ void EncoderLibJpeg::compressRGB(const std::vector> &planes) * Compress the incoming buffer from a supported NV format. * This naively unpacks the semi-planar NV12 to a YUV888 format for libjpeg. */ -void EncoderLibJpeg::compressNV(const std::vector> &planes) +void EncoderLibJpeg::compressNV(const std::vector> &planes) { std::vector tmprowbuf(compress_.image_width * 3); @@ -181,7 +181,7 @@ void EncoderLibJpeg::compressNV(const std::vector> &planes) } int EncoderLibJpeg::encode(Camera3RequestDescriptor::StreamBuffer *buffer, - libcamera::Span exifData, + std::span exifData, unsigned int quality) { MappedFrameBuffer frame(buffer->srcBuffer, @@ -196,8 +196,8 @@ int EncoderLibJpeg::encode(Camera3RequestDescriptor::StreamBuffer *buffer, exifData, quality); } -int EncoderLibJpeg::encode(const std::vector> &src, - Span dest, Span exifData, +int EncoderLibJpeg::encode(const std::vector> &src, + std::span dest, std::span exifData, unsigned int quality) { unsigned char *destination = dest.data(); diff --git a/src/android/jpeg/encoder_libjpeg.h b/src/android/jpeg/encoder_libjpeg.h index 4ac85c22e9..8783664772 100644 --- a/src/android/jpeg/encoder_libjpeg.h +++ b/src/android/jpeg/encoder_libjpeg.h @@ -23,16 +23,16 @@ public: int configure(const libcamera::StreamConfiguration &cfg) override; int encode(Camera3RequestDescriptor::StreamBuffer *buffer, - libcamera::Span exifData, + std::span exifData, unsigned int quality) override; - int encode(const std::vector> &planes, - libcamera::Span destination, - libcamera::Span exifData, + int encode(const std::vector> &planes, + std::span destination, + std::span exifData, unsigned int quality); private: - void compressRGB(const std::vector> &planes); - void compressNV(const std::vector> &planes); + void compressRGB(const std::vector> &planes); + void compressNV(const std::vector> &planes); struct jpeg_compress_struct compress_; struct jpeg_error_mgr jerr_; diff --git a/src/android/jpeg/exif.cpp b/src/android/jpeg/exif.cpp index b8c871dfe1..c045203967 100644 --- a/src/android/jpeg/exif.cpp +++ b/src/android/jpeg/exif.cpp @@ -190,7 +190,7 @@ void Exif::setRational(ExifIfd ifd, ExifTag tag, ExifRational item) setRational(ifd, tag, { &item, 1 }); } -void Exif::setRational(ExifIfd ifd, ExifTag tag, Span items) +void Exif::setRational(ExifIfd ifd, ExifTag tag, std::span items) { ExifEntry *entry = createEntry(ifd, tag, EXIF_FORMAT_RATIONAL, items.size(), diff --git a/src/android/jpeg/exif.h b/src/android/jpeg/exif.h index 446d53f380..c58a652b79 100644 --- a/src/android/jpeg/exif.h +++ b/src/android/jpeg/exif.h @@ -8,14 +8,13 @@ #pragma once #include +#include #include #include #include #include -#include - #include class Exif @@ -76,7 +75,7 @@ public: void setFlash(Flash flash); void setWhiteBalance(WhiteBalance wb); - libcamera::Span data() const { return { exifData_, size_ }; } + std::span data() const { return { exifData_, size_ }; } [[nodiscard]] int generate(); private: @@ -92,7 +91,7 @@ private: StringEncoding encoding = NoEncoding); void setRational(ExifIfd ifd, ExifTag tag, ExifRational item); void setRational(ExifIfd ifd, ExifTag tag, - libcamera::Span items); + std::span items); std::tuple degreesToDMS(double decimalDegrees); void setGPSDMS(ExifIfd ifd, ExifTag tag, int deg, int min, int sec); diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp index 89b8a401e6..222fcdb00a 100644 --- a/src/android/jpeg/post_processor_jpeg.cpp +++ b/src/android/jpeg/post_processor_jpeg.cpp @@ -89,7 +89,7 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source, * Thumbnailer::createThumbnailer above and remove the manual * planes split from here. */ - std::vector> thumbnailPlanes; + std::vector> thumbnailPlanes; const PixelFormatInfo &formatNV12 = PixelFormatInfo::info(formats::NV12); size_t yPlaneSize = formatNV12.planeSize(targetSize, 0); size_t uvPlaneSize = formatNV12.planeSize(targetSize, 1); diff --git a/src/android/mm/cros_camera_buffer.cpp b/src/android/mm/cros_camera_buffer.cpp index e2a44a2a34..55eaa49c93 100644 --- a/src/android/mm/cros_camera_buffer.cpp +++ b/src/android/mm/cros_camera_buffer.cpp @@ -29,7 +29,7 @@ public: unsigned int numPlanes() const; - Span plane(unsigned int plane); + std::span plane(unsigned int plane); unsigned int stride(unsigned int plane) const; unsigned int offset(unsigned int plane) const; @@ -99,7 +99,7 @@ unsigned int CameraBuffer::Private::numPlanes() const return bufferManager_->GetNumPlanes(handle_); } -Span CameraBuffer::Private::plane(unsigned int plane) +std::span CameraBuffer::Private::plane(unsigned int plane) { if (!mapped_) map(); diff --git a/src/android/mm/cros_frame_buffer_allocator.cpp b/src/android/mm/cros_frame_buffer_allocator.cpp index 7ec116e150..5d524b7da0 100644 --- a/src/android/mm/cros_frame_buffer_allocator.cpp +++ b/src/android/mm/cros_frame_buffer_allocator.cpp @@ -29,7 +29,7 @@ class CrosFrameBufferData : public FrameBuffer::Private public: CrosFrameBufferData(cros::ScopedBufferHandle scopedHandle, - Span planes) + std::span planes) : FrameBuffer::Private(planes), scopedHandle_(std::move(scopedHandle)) { } diff --git a/src/android/mm/generic_camera_buffer.cpp b/src/android/mm/generic_camera_buffer.cpp index 0ffcb445c9..4aeb254749 100644 --- a/src/android/mm/generic_camera_buffer.cpp +++ b/src/android/mm/generic_camera_buffer.cpp @@ -31,7 +31,7 @@ public: unsigned int numPlanes() const; - Span plane(unsigned int plane); + std::span plane(unsigned int plane); unsigned int stride(unsigned int plane) const; unsigned int offset(unsigned int plane) const; @@ -133,7 +133,7 @@ unsigned int CameraBuffer::Private::numPlanes() const return planeInfo_.size(); } -Span CameraBuffer::Private::plane(unsigned int plane) +std::span CameraBuffer::Private::plane(unsigned int plane) { if (!mapped_) map(); diff --git a/src/android/mm/generic_frame_buffer_allocator.cpp b/src/android/mm/generic_frame_buffer_allocator.cpp index 25ad6b035e..c23d24e742 100644 --- a/src/android/mm/generic_frame_buffer_allocator.cpp +++ b/src/android/mm/generic_frame_buffer_allocator.cpp @@ -35,7 +35,7 @@ class GenericFrameBufferData : public FrameBuffer::Private public: GenericFrameBufferData(struct alloc_device_t *allocDevice, buffer_handle_t handle, - Span planes) + std::span planes) : FrameBuffer::Private(planes), allocDevice_(allocDevice), handle_(handle) { diff --git a/src/apps/cam/capture_script.cpp b/src/apps/cam/capture_script.cpp index bc4c7c3a07..caa7e630ad 100644 --- a/src/apps/cam/capture_script.cpp +++ b/src/apps/cam/capture_script.cpp @@ -355,7 +355,7 @@ ControlValue CaptureScript::parseRectangles() if (rectangles.size() == 1) controlValue.set(rectangles.at(0)); else - controlValue.set(Span(rectangles)); + controlValue.set(std::span(rectangles)); return controlValue; } @@ -537,7 +537,7 @@ ControlValue CaptureScript::parseArrayControl(const ControlId *id, } } - value = Span(values.get(), repr.size()); + value = std::span(values.get(), repr.size()); break; } case ControlTypeByte: { @@ -547,7 +547,7 @@ ControlValue CaptureScript::parseArrayControl(const ControlId *id, values.push_back(val); } - value = Span(values.data(), values.size()); + value = std::span(values.data(), values.size()); break; } case ControlTypeInteger32: { @@ -557,7 +557,7 @@ ControlValue CaptureScript::parseArrayControl(const ControlId *id, values.push_back(val); } - value = Span(values.data(), values.size()); + value = std::span(values.data(), values.size()); break; } case ControlTypeInteger64: { @@ -567,7 +567,7 @@ ControlValue CaptureScript::parseArrayControl(const ControlId *id, values.push_back(val); } - value = Span(values.data(), values.size()); + value = std::span(values.data(), values.size()); break; } case ControlTypeFloat: { @@ -575,7 +575,7 @@ ControlValue CaptureScript::parseArrayControl(const ControlId *id, for (const std::string &s : repr) values.push_back(strtof(s.c_str(), NULL)); - value = Span(values.data(), values.size()); + value = std::span(values.data(), values.size()); break; } default: diff --git a/src/apps/cam/drm.cpp b/src/apps/cam/drm.cpp index 8e2dfd9a64..59927af39e 100644 --- a/src/apps/cam/drm.cpp +++ b/src/apps/cam/drm.cpp @@ -104,7 +104,7 @@ Property::Property(Device *dev, drmModePropertyRes *property) enums_[property->enums[i].value] = property->enums[i].name; } -Blob::Blob(Device *dev, const libcamera::Span &data) +Blob::Blob(Device *dev, std::span data) : Object(dev, 0, Object::TypeBlob) { drmModeCreatePropertyBlob(dev->fd(), data.data(), data.size(), &id_); @@ -123,8 +123,8 @@ Mode::Mode(const drmModeModeInfo &mode) std::unique_ptr Mode::toBlob(Device *dev) const { - libcamera::Span data{ reinterpret_cast(this), - sizeof(*this) }; + std::span data{ reinterpret_cast(this), + sizeof(*this) }; return std::make_unique(dev, data); } diff --git a/src/apps/cam/drm.h b/src/apps/cam/drm.h index 30a916d7e9..69a2a8d233 100644 --- a/src/apps/cam/drm.h +++ b/src/apps/cam/drm.h @@ -11,12 +11,12 @@ #include #include #include +#include #include #include #include #include -#include #include #include @@ -129,7 +129,7 @@ private: class Blob : public Object { public: - Blob(Device *dev, const libcamera::Span &data); + Blob(Device *dev, std::span data); ~Blob(); bool isValid() const { return id() != 0; } diff --git a/src/apps/cam/file_sink.cpp b/src/apps/cam/file_sink.cpp index 65794a2f90..28827e1dd4 100644 --- a/src/apps/cam/file_sink.cpp +++ b/src/apps/cam/file_sink.cpp @@ -158,7 +158,7 @@ void FileSink::writeBuffer(const Stream *stream, FrameBuffer *buffer, */ const unsigned int bytesused = buffer->metadata().planes()[i].bytesused; - Span data = image->data(i); + std::span data = image->data(i); const unsigned int length = std::min(bytesused, data.size()); if (bytesused > data.size()) diff --git a/src/apps/cam/sdl_sink.cpp b/src/apps/cam/sdl_sink.cpp index 17a9e04b59..d16e4dc14c 100644 --- a/src/apps/cam/sdl_sink.cpp +++ b/src/apps/cam/sdl_sink.cpp @@ -230,13 +230,13 @@ void SDLSink::renderBuffer(FrameBuffer *buffer) { Image *image = mappedBuffers_[buffer].get(); - std::vector> planes; + std::vector> planes; unsigned int i = 0; planes.reserve(buffer->metadata().planes().size()); for (const FrameMetadata::Plane &meta : buffer->metadata().planes()) { - Span data = image->data(i); + std::span data = image->data(i); if (meta.bytesused > data.size()) std::cerr << "payload size " << meta.bytesused << " larger than plane size " << data.size() diff --git a/src/apps/cam/sdl_texture.h b/src/apps/cam/sdl_texture.h index 39e1c7b38a..e9669ba8c2 100644 --- a/src/apps/cam/sdl_texture.h +++ b/src/apps/cam/sdl_texture.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include @@ -19,7 +19,7 @@ public: SDLTexture(const SDL_Rect &rect, uint32_t pixelFormat, const int stride); virtual ~SDLTexture(); int create(SDL_Renderer *renderer); - virtual void update(libcamera::Span> data) = 0; + virtual void update(std::span> data) = 0; SDL_Texture *get() const { return ptr_; } protected: diff --git a/src/apps/cam/sdl_texture_1plane.cpp b/src/apps/cam/sdl_texture_1plane.cpp index b97015bc1c..421e5226c1 100644 --- a/src/apps/cam/sdl_texture_1plane.cpp +++ b/src/apps/cam/sdl_texture_1plane.cpp @@ -9,7 +9,7 @@ #include -void SDLTexture1Plane::update(libcamera::Span> data) +void SDLTexture1Plane::update(std::span> data) { assert(data.size() == 1); assert(data[0].size_bytes() == std::size_t(rect_.h) * std::size_t(stride_)); diff --git a/src/apps/cam/sdl_texture_1plane.h b/src/apps/cam/sdl_texture_1plane.h index 795e1fa4f2..1cb2c2939d 100644 --- a/src/apps/cam/sdl_texture_1plane.h +++ b/src/apps/cam/sdl_texture_1plane.h @@ -14,5 +14,5 @@ class SDLTexture1Plane final : public SDLTexture public: using SDLTexture::SDLTexture; - void update(libcamera::Span> data) override; + void update(std::span> data) override; }; diff --git a/src/apps/cam/sdl_texture_mjpg.cpp b/src/apps/cam/sdl_texture_mjpg.cpp index ca49a11429..7bb1592a3a 100644 --- a/src/apps/cam/sdl_texture_mjpg.cpp +++ b/src/apps/cam/sdl_texture_mjpg.cpp @@ -43,7 +43,7 @@ SDLTextureMJPG::SDLTextureMJPG(const SDL_Rect &rect) { } -int SDLTextureMJPG::decompress(Span data) +int SDLTextureMJPG::decompress(std::span data) { struct jpeg_decompress_struct cinfo; @@ -76,7 +76,7 @@ int SDLTextureMJPG::decompress(Span data) return 0; } -void SDLTextureMJPG::update(libcamera::Span> data) +void SDLTextureMJPG::update(std::span> data) { decompress(data[0]); SDL_UpdateTexture(ptr_, nullptr, rgb_.get(), stride_); diff --git a/src/apps/cam/sdl_texture_mjpg.h b/src/apps/cam/sdl_texture_mjpg.h index be8a55fe7f..0eaba9962b 100644 --- a/src/apps/cam/sdl_texture_mjpg.h +++ b/src/apps/cam/sdl_texture_mjpg.h @@ -14,10 +14,10 @@ class SDLTextureMJPG : public SDLTexture public: SDLTextureMJPG(const SDL_Rect &rect); - void update(libcamera::Span> data) override; + void update(std::span> data) override; private: - int decompress(libcamera::Span data); + int decompress(std::span data); std::unique_ptr rgb_; }; diff --git a/src/apps/cam/sdl_texture_yuv.cpp b/src/apps/cam/sdl_texture_yuv.cpp index 9062a0347f..42c9d2ddfb 100644 --- a/src/apps/cam/sdl_texture_yuv.cpp +++ b/src/apps/cam/sdl_texture_yuv.cpp @@ -18,7 +18,7 @@ SDLTextureNV::SDLTextureNV(const SDL_Rect &rect, uint32_t pixelFormat, unsigned assert(pixelFormat == SDL_PIXELFORMAT_NV12 || pixelFormat == SDL_PIXELFORMAT_NV21); } -void SDLTextureNV::update(libcamera::Span> data) +void SDLTextureNV::update(std::span> data) { assert(data.size() == 2); assert(data[0].size_bytes() == std::size_t(rect_.h) * std::size_t(stride_)); diff --git a/src/apps/cam/sdl_texture_yuv.h b/src/apps/cam/sdl_texture_yuv.h index a91658b3f3..5a5ac011f7 100644 --- a/src/apps/cam/sdl_texture_yuv.h +++ b/src/apps/cam/sdl_texture_yuv.h @@ -14,6 +14,6 @@ class SDLTextureNV : public SDLTexture { public: SDLTextureNV(const SDL_Rect &rect, uint32_t pixelFormat, unsigned int stride); - void update(libcamera::Span> data) override; + void update(std::span> data) override; }; #endif diff --git a/src/apps/common/dng_writer.cpp b/src/apps/common/dng_writer.cpp index 8d57023e1e..0d9b725b93 100644 --- a/src/apps/common/dng_writer.cpp +++ b/src/apps/common/dng_writer.cpp @@ -51,7 +51,7 @@ struct Matrix3d { m[6] = m6, m[7] = m7, m[8] = m8; } - Matrix3d(const Span &span) + Matrix3d(std::span span) : Matrix3d(span[0], span[1], span[2], span[3], span[4], span[5], span[6], span[7], span[8]) @@ -708,7 +708,7 @@ int DNGWriter::write(const char *filename, const Camera *camera, const auto &blackLevels = metadata.get(controls::SensorBlackLevels); if (blackLevels) { - Span levels = *blackLevels; + std::span levels = *blackLevels; /* * The black levels control is specified in R, Gr, Gb, B order. diff --git a/src/apps/common/image.cpp b/src/apps/common/image.cpp index 9a67238aa4..a705806dd7 100644 --- a/src/apps/common/image.cpp +++ b/src/apps/common/image.cpp @@ -87,7 +87,7 @@ Image::Image() = default; Image::~Image() { - for (Span &map : maps_) + for (std::span &map : maps_) munmap(map.data(), map.size()); } @@ -96,13 +96,13 @@ unsigned int Image::numPlanes() const return planes_.size(); } -Span Image::data(unsigned int plane) +std::span Image::data(unsigned int plane) { assert(plane < planes_.size()); return planes_[plane]; } -Span Image::data(unsigned int plane) const +std::span Image::data(unsigned int plane) const { assert(plane < planes_.size()); return planes_[plane]; diff --git a/src/apps/common/image.h b/src/apps/common/image.h index e47e446b19..938face9cf 100644 --- a/src/apps/common/image.h +++ b/src/apps/common/image.h @@ -8,12 +8,12 @@ #pragma once #include +#include #include #include #include #include -#include #include @@ -33,16 +33,16 @@ public: unsigned int numPlanes() const; - libcamera::Span data(unsigned int plane); - libcamera::Span data(unsigned int plane) const; + std::span data(unsigned int plane); + std::span data(unsigned int plane) const; private: LIBCAMERA_DISABLE_COPY(Image) Image(); - std::vector> maps_; - std::vector> planes_; + std::vector> maps_; + std::vector> planes_; }; namespace libcamera { diff --git a/src/apps/common/ppm_writer.cpp b/src/apps/common/ppm_writer.cpp index 6f0bbbe9ee..f6ba2302db 100644 --- a/src/apps/common/ppm_writer.cpp +++ b/src/apps/common/ppm_writer.cpp @@ -19,7 +19,7 @@ using namespace libcamera; int PPMWriter::write(const char *filename, const StreamConfiguration &config, - const Span &data) + std::span data) { struct FormatTransformation { unsigned int rPos; diff --git a/src/apps/common/ppm_writer.h b/src/apps/common/ppm_writer.h index 8c8d2e15a6..db466e7f33 100644 --- a/src/apps/common/ppm_writer.h +++ b/src/apps/common/ppm_writer.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include @@ -16,5 +16,5 @@ class PPMWriter public: static int write(const char *filename, const libcamera::StreamConfiguration &config, - const libcamera::Span &data); + std::span data); }; diff --git a/src/apps/ipa-verify/main.cpp b/src/apps/ipa-verify/main.cpp index 0903cd8512..b115cae480 100644 --- a/src/apps/ipa-verify/main.cpp +++ b/src/apps/ipa-verify/main.cpp @@ -7,9 +7,9 @@ #include #include +#include #include -#include #include "libcamera/internal/ipa_manager.h" #include "libcamera/internal/ipa_module.h" @@ -24,7 +24,7 @@ bool isSignatureValid(IPAModule *ipa) if (!file.open(File::OpenModeFlag::ReadOnly)) return false; - Span data = file.map(); + std::span data = file.map(); if (data.empty()) return false; diff --git a/src/apps/lc-compliance/helpers/capture.cpp b/src/apps/lc-compliance/helpers/capture.cpp index d83269d4a9..9ab476efa6 100644 --- a/src/apps/lc-compliance/helpers/capture.cpp +++ b/src/apps/lc-compliance/helpers/capture.cpp @@ -23,7 +23,7 @@ Capture::~Capture() stop(); } -void Capture::configure(libcamera::Span roles) +void Capture::configure(std::span roles) { assert(!roles.empty()); diff --git a/src/apps/lc-compliance/helpers/capture.h b/src/apps/lc-compliance/helpers/capture.h index ea01c11c11..17fc47bc43 100644 --- a/src/apps/lc-compliance/helpers/capture.h +++ b/src/apps/lc-compliance/helpers/capture.h @@ -9,6 +9,7 @@ #include #include +#include #include @@ -20,7 +21,7 @@ public: Capture(std::shared_ptr camera); ~Capture(); - void configure(libcamera::Span roles); + void configure(std::span roles); void run(unsigned int captureLimit, std::optional queueLimit = {}); private: diff --git a/src/gstreamer/gstlibcamera-controls.cpp.in b/src/gstreamer/gstlibcamera-controls.cpp.in index c3f0695f9b..97bfd1f918 100644 --- a/src/gstreamer/gstlibcamera-controls.cpp.in +++ b/src/gstreamer/gstlibcamera-controls.cpp.in @@ -213,9 +213,9 @@ bool GstCameraControls::setProperty(guint propId, const GValue *value, } {%- if ctrl.size == 0 %} - Span val(values.data(), size); + std::span val(values.data(), size); {%- else %} - Span val(values.data(), size); + std::span val(values.data(), size); {%- endif %} {%- else %} {%- if ctrl.is_rectangle %} diff --git a/src/gstreamer/gstlibcamera-utils.cpp b/src/gstreamer/gstlibcamera-utils.cpp index 6541d478c8..7dd8b550ad 100644 --- a/src/gstreamer/gstlibcamera-utils.cpp +++ b/src/gstreamer/gstlibcamera-utils.cpp @@ -749,7 +749,7 @@ int gst_libcamera_set_structure_field(GstStructure *structure, const ControlId * switch (value.type()) { case ControlTypeBool: if (is_array) { - for (const auto &item : value.get>()) { + for (const auto &item : value.get>()) { g_value_init(&x, type); g_value_set_boolean(&x, item); gst_value_array_append_and_take_value(&v, &x); @@ -761,7 +761,7 @@ int gst_libcamera_set_structure_field(GstStructure *structure, const ControlId * break; case ControlTypeByte: if (is_array) { - for (const auto &item : value.get>()) { + for (const auto &item : value.get>()) { g_value_init(&x, type); g_value_set_uint(&x, item); gst_value_array_append_and_take_value(&v, &x); @@ -773,7 +773,7 @@ int gst_libcamera_set_structure_field(GstStructure *structure, const ControlId * break; case ControlTypeUnsigned16: if (is_array) { - for (const auto &item : value.get>()) { + for (const auto &item : value.get>()) { g_value_init(&x, type); g_value_set_uint(&x, item); gst_value_array_append_and_take_value(&v, &x); @@ -785,7 +785,7 @@ int gst_libcamera_set_structure_field(GstStructure *structure, const ControlId * break; case ControlTypeUnsigned32: if (is_array) { - for (const auto &item : value.get>()) { + for (const auto &item : value.get>()) { g_value_init(&x, type); g_value_set_uint(&x, item); gst_value_array_append_and_take_value(&v, &x); @@ -797,7 +797,7 @@ int gst_libcamera_set_structure_field(GstStructure *structure, const ControlId * break; case ControlTypeInteger32: if (is_array) { - for (const auto &item : value.get>()) { + for (const auto &item : value.get>()) { g_value_init(&x, type); g_value_set_int(&x, item); gst_value_array_append_and_take_value(&v, &x); @@ -822,7 +822,7 @@ int gst_libcamera_set_structure_field(GstStructure *structure, const ControlId * break; case ControlTypeInteger64: if (is_array) { - for (const auto &item : value.get>()) { + for (const auto &item : value.get>()) { g_value_init(&x, type); g_value_set_int64(&x, item); gst_value_array_append_and_take_value(&v, &x); @@ -834,7 +834,7 @@ int gst_libcamera_set_structure_field(GstStructure *structure, const ControlId * break; case ControlTypeFloat: if (is_array) { - for (const auto &item : value.get>()) { + for (const auto &item : value.get>()) { g_value_init(&x, type); g_value_set_float(&x, item); gst_value_array_append_and_take_value(&v, &x); @@ -855,7 +855,7 @@ int gst_libcamera_set_structure_field(GstStructure *structure, const ControlId * break; case ControlTypeSize: if (is_array) { - for (const auto &item : value.get>()) + for (const auto &item : value.get>()) gst_libcamera_gvalue_set_size(&v, item); } else { gst_libcamera_gvalue_set_size(&v, value.get()); @@ -863,7 +863,7 @@ int gst_libcamera_set_structure_field(GstStructure *structure, const ControlId * break; case ControlTypePoint: if (is_array) { - for (const auto &item : value.get>()) + for (const auto &item : value.get>()) gst_libcamera_gvalue_set_point(&v, item); } else { gst_libcamera_gvalue_set_point(&v, value.get()); @@ -871,7 +871,7 @@ int gst_libcamera_set_structure_field(GstStructure *structure, const ControlId * break; case ControlTypeRectangle: if (is_array) { - for (const auto &item : value.get>()) + for (const auto &item : value.get>()) gst_libcamera_gvalue_set_rectangle(&v, item); } else { gst_libcamera_gvalue_set_rectangle(&v, value.get()); diff --git a/src/ipa/ipu3/algorithms/af.cpp b/src/ipa/ipu3/algorithms/af.cpp index cf68fb59c4..331e1feaa1 100644 --- a/src/ipa/ipu3/algorithms/af.cpp +++ b/src/ipa/ipu3/algorithms/af.cpp @@ -354,7 +354,7 @@ void Af::afIgnoreFrameReset() * * \return The variance of the values in the data set \a y_item selected by \a isY1 */ -double Af::afEstimateVariance(Span y_items, bool isY1) +double Af::afEstimateVariance(std::span y_items, bool isY1) { uint32_t total = 0; double mean; @@ -430,8 +430,8 @@ void Af::process(IPAContext &context, [[maybe_unused]] const uint32_t frame, ASSERT(afRawBufferLen < IPU3_UAPI_AF_Y_TABLE_MAX_SIZE); - Span y_items(reinterpret_cast(&stats->af_raw_buffer.y_table), - afRawBufferLen); + const std::span y_items(reinterpret_cast(&stats->af_raw_buffer.y_table), + afRawBufferLen); /* * Calculate the mean and the variance of AF statistics for a given grid. diff --git a/src/ipa/ipu3/algorithms/af.h b/src/ipa/ipu3/algorithms/af.h index 68126d4630..320b674962 100644 --- a/src/ipa/ipu3/algorithms/af.h +++ b/src/ipa/ipu3/algorithms/af.h @@ -46,7 +46,7 @@ private: void afReset(IPAContext &context); bool afNeedIgnoreFrame(); void afIgnoreFrameReset(); - double afEstimateVariance(Span y_items, bool isY1); + double afEstimateVariance(std::span y_items, bool isY1); bool afIsOutOfFocus(IPAContext &context); diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp index d6a7036c65..37f7e329c3 100644 --- a/src/ipa/ipu3/algorithms/agc.cpp +++ b/src/ipa/ipu3/algorithms/agc.cpp @@ -153,7 +153,7 @@ Histogram Agc::parseStatistics(const ipu3_uapi_stats_3a *stats, } } - return Histogram(Span(hist)); + return Histogram(std::span(hist)); } /** diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp index 42d475ecc6..07fae3a0c9 100644 --- a/src/ipa/ipu3/ipu3.cpp +++ b/src/ipa/ipu3/ipu3.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -20,7 +21,6 @@ #include #include -#include #include #include @@ -283,7 +283,7 @@ void IPAIPU3::updateControls(const IPACameraSensorInfo &sensorInfo, } controls[&controls::FrameDurationLimits] = ControlInfo(frameDurations[0], frameDurations[1], - Span{ { frameDurations[2], frameDurations[2] } }); + std::span{ { frameDurations[2], frameDurations[2] } }); controls.insert(context_.ctrlMap.begin(), context_.ctrlMap.end()); *ipaControls = ControlInfoMap(std::move(controls), controls::controls); @@ -546,7 +546,7 @@ void IPAIPU3::computeParams(const uint32_t frame, const uint32_t bufferId) return; } - Span mem = it->second.planes()[0]; + std::span mem = it->second.planes()[0]; ipu3_uapi_params *params = reinterpret_cast(mem.data()); @@ -590,7 +590,7 @@ void IPAIPU3::processStats(const uint32_t frame, return; } - Span mem = it->second.planes()[0]; + std::span mem = it->second.planes()[0]; const ipu3_uapi_stats_3a *stats = reinterpret_cast(mem.data()); diff --git a/src/ipa/libipa/awb.h b/src/ipa/libipa/awb.h index d35a85167c..ef9e78b1e8 100644 --- a/src/ipa/libipa/awb.h +++ b/src/ipa/libipa/awb.h @@ -122,7 +122,7 @@ public: controls_[&controls::ColourGains] = ControlInfo(gainMin_, gainMax_, - Span{ { 1.0f, 1.0f } }); + std::span{ { 1.0f, 1.0f } }); controls.insert(controls_.begin(), controls_.end()); diff --git a/src/ipa/libipa/awb_bayes.cpp b/src/ipa/libipa/awb_bayes.cpp index 2c10f9c4c8..10e05962b8 100644 --- a/src/ipa/libipa/awb_bayes.cpp +++ b/src/ipa/libipa/awb_bayes.cpp @@ -307,7 +307,7 @@ AwbBayes::calculateAwb(const AwbStats &stats, unsigned int lux, } double AwbBayes::coarseSearch(const ipa::Pwl &prior, const AwbStats &stats, - Span range) const + std::span range) const { std::vector points; size_t bestPoint = 0; diff --git a/src/ipa/libipa/awb_bayes.h b/src/ipa/libipa/awb_bayes.h index 8d4cff076d..04c18f52c7 100644 --- a/src/ipa/libipa/awb_bayes.h +++ b/src/ipa/libipa/awb_bayes.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include "libcamera/internal/value_node.h" @@ -37,7 +39,7 @@ private: void fineSearch(double &t, double &r, double &b, ipa::Pwl const &prior, const AwbStats &stats) const; double coarseSearch(const ipa::Pwl &prior, const AwbStats &stats, - Span range) const; + std::span range) const; double interpolateQuadratic(ipa::Pwl::Point const &a, ipa::Pwl::Point const &b, ipa::Pwl::Point const &c) const; diff --git a/src/ipa/libipa/exposure_mode_helper.cpp b/src/ipa/libipa/exposure_mode_helper.cpp index 01c5cba8e2..04a9403961 100644 --- a/src/ipa/libipa/exposure_mode_helper.cpp +++ b/src/ipa/libipa/exposure_mode_helper.cpp @@ -69,7 +69,7 @@ namespace ipa { * The vector of stages may be empty. In that case, the helper will simply use * the runtime limits set through setLimits() instead. */ -ExposureModeHelper::ExposureModeHelper(const Span> stages) +ExposureModeHelper::ExposureModeHelper(std::span> stages) : lineDuration_(1us), minExposureTime_(0us), maxExposureTime_(0us), minGain_(0), maxGain_(0), sensorHelper_(nullptr) { diff --git a/src/ipa/libipa/exposure_mode_helper.h b/src/ipa/libipa/exposure_mode_helper.h index 968192ddc5..dc310c0896 100644 --- a/src/ipa/libipa/exposure_mode_helper.h +++ b/src/ipa/libipa/exposure_mode_helper.h @@ -7,11 +7,11 @@ #pragma once +#include #include #include #include -#include #include #include "camera_sensor_helper.h" @@ -23,7 +23,7 @@ namespace ipa { class ExposureModeHelper { public: - ExposureModeHelper(const Span> stages); + ExposureModeHelper(std::span> stages); ~ExposureModeHelper() = default; void configure(utils::Duration lineLength, const CameraSensorHelper *sensorHelper); diff --git a/src/ipa/libipa/histogram.cpp b/src/ipa/libipa/histogram.cpp index bcf2639082..bfbadea281 100644 --- a/src/ipa/libipa/histogram.cpp +++ b/src/ipa/libipa/histogram.cpp @@ -41,7 +41,7 @@ namespace ipa { * \brief Create a cumulative histogram * \param[in] data A (non-cumulative) histogram */ -Histogram::Histogram(Span data) +Histogram::Histogram(std::span data) { cumulative_.resize(data.size() + 1); cumulative_[0] = 0; @@ -50,7 +50,7 @@ Histogram::Histogram(Span data) } /** - * \fn Histogram::Histogram(Span data, Transform transform) + * \fn Histogram::Histogram(std::span data, Transform transform) * \brief Create a cumulative histogram * \param[in] data A (non-cumulative) histogram * \param[in] transform The transformation function to apply to every bin diff --git a/src/ipa/libipa/histogram.h b/src/ipa/libipa/histogram.h index 8cf8bb6d16..1d702fd827 100644 --- a/src/ipa/libipa/histogram.h +++ b/src/ipa/libipa/histogram.h @@ -8,11 +8,11 @@ #pragma once #include +#include #include #include #include -#include #include namespace libcamera { @@ -23,11 +23,11 @@ class Histogram { public: Histogram() { cumulative_.push_back(0); } - Histogram(Span data); + Histogram(std::span data); template> * = nullptr> - Histogram(Span data, Transform transform) + Histogram(std::span data, Transform transform) { cumulative_.resize(data.size() + 1); cumulative_[0] = 0; @@ -36,7 +36,7 @@ public: } size_t bins() const { return cumulative_.size() - 1; } - Span data() const { return cumulative_; } + std::span data() const { return cumulative_; } uint64_t total() const { return cumulative_[cumulative_.size() - 1]; } uint64_t cumulativeFrequency(double bin) const; double quantile(double q, uint32_t first = 0, uint32_t last = UINT_MAX) const; diff --git a/src/ipa/libipa/lsc_base.h b/src/ipa/libipa/lsc_base.h index d53736cb71..0f417f5b92 100644 --- a/src/ipa/libipa/lsc_base.h +++ b/src/ipa/libipa/lsc_base.h @@ -12,8 +12,6 @@ #include #include -#include - #include #include "libcamera/internal/value_node.h" diff --git a/src/ipa/libipa/lsc_polynomial.cpp b/src/ipa/libipa/lsc_polynomial.cpp index 6c38c7f7ee..da1659c759 100644 --- a/src/ipa/libipa/lsc_polynomial.cpp +++ b/src/ipa/libipa/lsc_polynomial.cpp @@ -214,8 +214,8 @@ LscPolynomial::sampleForCrop(const Rectangle &cropRectangle, std::vector LscPolynomial::samplePolynomial(const lsc::Polynomial &poly, - Span xPositions, - Span yPositions, + std::span xPositions, + std::span yPositions, const Rectangle &cropRectangle) { double m = poly.getM(); diff --git a/src/ipa/libipa/lsc_polynomial.h b/src/ipa/libipa/lsc_polynomial.h index b9d3d83466..72d874f45c 100644 --- a/src/ipa/libipa/lsc_polynomial.h +++ b/src/ipa/libipa/lsc_polynomial.h @@ -8,10 +8,9 @@ #include #include +#include #include -#include - #include #include "libcamera/internal/value_node.h" @@ -66,8 +65,8 @@ public: private: std::vector samplePolynomial(const lsc::Polynomial &poly, - Span xPositions, - Span yPositions, + std::span xPositions, + std::span yPositions, const Rectangle &cropRectangle); PolynomialComponentsMap lscData_; }; diff --git a/src/ipa/libipa/lsc_table.h b/src/ipa/libipa/lsc_table.h index 9f39b38e25..5af6eec137 100644 --- a/src/ipa/libipa/lsc_table.h +++ b/src/ipa/libipa/lsc_table.h @@ -9,7 +9,6 @@ #include #include -#include #include diff --git a/src/ipa/libipa/v4l2_params.cpp b/src/ipa/libipa/v4l2_params.cpp index 4c40515a29..16632e2858 100644 --- a/src/ipa/libipa/v4l2_params.cpp +++ b/src/ipa/libipa/v4l2_params.cpp @@ -131,7 +131,7 @@ namespace ipa { * \param[in] data Reference to the v4l2-buffer memory mapped area * \param[in] version The ISP parameters version the implementation supports */ -V4L2ParamsBase::V4L2ParamsBase(Span data, unsigned int version) +V4L2ParamsBase::V4L2ParamsBase(std::span data, unsigned int version) : data_(data) { struct v4l2_isp_params_buffer *params = @@ -167,8 +167,8 @@ V4L2ParamsBase::V4L2ParamsBase(Span data, unsigned int version) * retrieve the memory area that will be used to construct a V4L2ParamsBlock * before returning it to the caller. */ -Span V4L2ParamsBase::block(uint16_t type, unsigned int blockType, - size_t blockSize) +std::span V4L2ParamsBase::block(uint16_t type, unsigned int blockType, + size_t blockSize) { /* * Look up the block in the cache first. If an algorithm @@ -182,7 +182,7 @@ Span V4L2ParamsBase::block(uint16_t type, unsigned int blockType, /* * Make sure we don't run out of space. Assert as otherwise * we get a segfault as soon as someone tries to access the - * empty Span<> returned from here. + * empty span returned from here. */ if (blockSize > data_.size() - used_) { LOG(Fatal) @@ -191,7 +191,7 @@ Span V4L2ParamsBase::block(uint16_t type, unsigned int blockType, } /* Allocate a new block, clear its memory, and initialize its header. */ - Span block = data_.subspan(used_, blockSize); + std::span block = data_.subspan(used_, blockSize); memset(block.data(), 0, block.size()); struct v4l2_isp_params_block_header *header = @@ -279,7 +279,7 @@ Span V4L2ParamsBase::block(uint16_t type, unsigned int blockType, * class MyISPParams : public V4L2Params * { * public: - * MyISPParams::MyISPParams(Span data) + * MyISPParams::MyISPParams(std::span data) * : V4L2Params(data, kVersion) * { * } diff --git a/src/ipa/libipa/v4l2_params.h b/src/ipa/libipa/v4l2_params.h index 581a8ecadd..c87dadc529 100644 --- a/src/ipa/libipa/v4l2_params.h +++ b/src/ipa/libipa/v4l2_params.h @@ -8,13 +8,13 @@ #pragma once #include +#include #include #include #include #include -#include #include namespace libcamera { @@ -27,7 +27,7 @@ template class V4L2ParamsBlock { public: - V4L2ParamsBlock(const Span data) + V4L2ParamsBlock(std::span data) : data_(data) { } @@ -66,25 +66,25 @@ public: } protected: - Span data_; + std::span data_; }; class V4L2ParamsBase { protected: - V4L2ParamsBase(Span data, unsigned int version); + V4L2ParamsBase(std::span data, unsigned int version); public: size_t bytesused() const { return used_; } protected: - Span block(uint16_t type, unsigned int blockType, - size_t blockSize); + std::span block(uint16_t type, unsigned int blockType, + size_t blockSize); - Span data_; + std::span data_; size_t used_; - std::map> blocks_; + std::map> blocks_; }; template @@ -93,7 +93,7 @@ class V4L2Params : public V4L2ParamsBase public: static_assert(std::is_same_v, uint16_t>); - V4L2Params(Span data, unsigned int version) + V4L2Params(std::span data, unsigned int version) : V4L2ParamsBase(data, version) { } diff --git a/src/ipa/libipa/v4l2_stats.cpp b/src/ipa/libipa/v4l2_stats.cpp index e3e3ab9fed..7a9a7f607c 100644 --- a/src/ipa/libipa/v4l2_stats.cpp +++ b/src/ipa/libipa/v4l2_stats.cpp @@ -54,7 +54,7 @@ LOG_DEFINE_CATEGORY(V4L2Stats) * After construction users of this class shall check the validity of the * constructed instance using operator bool(). */ -V4L2StatsBase::V4L2StatsBase(Span data, unsigned int version) +V4L2StatsBase::V4L2StatsBase(std::span data, unsigned int version) : data_(data), valid_(false) { const struct v4l2_isp_buffer *stats = @@ -116,10 +116,10 @@ V4L2StatsBase::V4L2StatsBase(Span data, unsigned int version) * Retrieve a span to the statistics block memory location by accessing the * cache built at class construction time. * - * \return The memory location of the ISP statistics block, or an empty Span + * \return The memory location of the ISP statistics block, or an empty span * if \a blockType is not supported */ -Span V4L2StatsBase::block(unsigned int blockType, size_t blockSize) const +std::span V4L2StatsBase::block(unsigned int blockType, size_t blockSize) const { const auto it = cache_.find(blockType); if (it == cache_.end()) { @@ -201,7 +201,7 @@ Span V4L2StatsBase::block(unsigned int blockType, size_t blockSiz * class MyISPStats : public V4L2Stats * { * public: - * MyISPStats::MyISPStats(Span data) + * MyISPStats::MyISPStats(std::span data) * : V4L2Stats(data, V4L2_ISP_VERSION_V1) * { * } diff --git a/src/ipa/libipa/v4l2_stats.h b/src/ipa/libipa/v4l2_stats.h index b96395e5f5..53b69c309f 100644 --- a/src/ipa/libipa/v4l2_stats.h +++ b/src/ipa/libipa/v4l2_stats.h @@ -8,12 +8,11 @@ #pragma once #include +#include #include #include -#include - namespace libcamera { namespace ipa { @@ -21,17 +20,17 @@ namespace ipa { class V4L2StatsBase { public: - V4L2StatsBase(Span data, unsigned int version); + V4L2StatsBase(std::span data, unsigned int version); - Span block(unsigned int blockType, size_t blockSize) const; + std::span block(unsigned int blockType, size_t blockSize) const; constexpr explicit operator bool() { return valid_; } private: - std::map> cache_; - Span data_; + std::map> cache_; + std::span data_; bool valid_; }; @@ -41,7 +40,7 @@ class V4L2Stats : public V4L2StatsBase public: static_assert(std::is_same_v, uint16_t>); - V4L2Stats(Span data, unsigned int version) + V4L2Stats(std::span data, unsigned int version) : V4L2StatsBase(data, version) { } diff --git a/src/ipa/mali-c55/algorithms/agc.cpp b/src/ipa/mali-c55/algorithms/agc.cpp index 83bbf69385..fc6415b311 100644 --- a/src/ipa/mali-c55/algorithms/agc.cpp +++ b/src/ipa/mali-c55/algorithms/agc.cpp @@ -120,10 +120,10 @@ void AgcStatistics::parseStatistics(const mali_c55_stats_buffer *stats) static_cast(b[i]) } }); } - rHist = Histogram(Span(r, kNumHistogramBins)); - gHist = Histogram(Span(g, kNumHistogramBins)); - bHist = Histogram(Span(b, kNumHistogramBins)); - yHist = Histogram(Span(y, kNumHistogramBins)); + rHist = Histogram(std::span(r, kNumHistogramBins)); + gHist = Histogram(std::span(g, kNumHistogramBins)); + bHist = Histogram(std::span(b, kNumHistogramBins)); + yHist = Histogram(std::span(y, kNumHistogramBins)); } Agc::Agc() @@ -298,7 +298,7 @@ void Agc::fillWeightsArrayBuffer(MaliC55Params *params, const enum MaliC55Blocks * histograms containing a true pixel count, which we can then use to * approximate colour channel averages for the image. */ - Span weights{ + std::span weights{ block->zone_weights, MALI_C55_MAX_ZONES }; diff --git a/src/ipa/mali-c55/mali-c55.cpp b/src/ipa/mali-c55/mali-c55.cpp index 37350eb28f..d4f65ce259 100644 --- a/src/ipa/mali-c55/mali-c55.cpp +++ b/src/ipa/mali-c55/mali-c55.cpp @@ -7,6 +7,7 @@ #include #include +#include #include #include @@ -15,7 +16,6 @@ #include #include -#include #include #include @@ -241,7 +241,7 @@ void IPAMaliC55::updateControls(const IPACameraSensorInfo &sensorInfo, ctrlMap[&controls::FrameDurationLimits] = ControlInfo(frameDurations[0], frameDurations[1], - Span{ { frameDurations[2], frameDurations[2] } }); + std::span{ { frameDurations[2], frameDurations[2] } }); /* * Compute exposure time limits from the V4L2_CID_EXPOSURE control diff --git a/src/ipa/mali-c55/params.h b/src/ipa/mali-c55/params.h index 2ce5526203..dc4d199402 100644 --- a/src/ipa/mali-c55/params.h +++ b/src/ipa/mali-c55/params.h @@ -70,7 +70,7 @@ struct param_traits { class MaliC55Params : public V4L2Params { public: - MaliC55Params(Span data) + MaliC55Params(std::span data) : V4L2Params(data, V4L2_ISP_PARAMS_VERSION_V1) { } diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp index aace46a8d0..16a2e88fdf 100644 --- a/src/ipa/rkisp1/algorithms/agc.cpp +++ b/src/ipa/rkisp1/algorithms/agc.cpp @@ -420,7 +420,7 @@ void Agc::prepare(IPAContext &context, const uint32_t frame, */ hstConfig->mode = RKISP1_CIF_ISP_HISTOGRAM_MODE_RGB_COMBINED; - Span weights{ + std::span weights{ hstConfig->hist_weight, context.hw.numHistogramWeights }; diff --git a/src/ipa/rkisp1/algorithms/agc.h b/src/ipa/rkisp1/algorithms/agc.h index dec79f2f39..79cdb6b5d0 100644 --- a/src/ipa/rkisp1/algorithms/agc.h +++ b/src/ipa/rkisp1/algorithms/agc.h @@ -7,9 +7,10 @@ #pragma once +#include + #include -#include #include #include @@ -54,8 +55,8 @@ private: IPAFrameContext &frameContext, utils::Duration frameDuration); - Span expMeans_; - Span weights_; + std::span expMeans_; + std::span weights_; std::map> meteringModes_; }; diff --git a/src/ipa/rkisp1/algorithms/lsc.cpp b/src/ipa/rkisp1/algorithms/lsc.cpp index f285865602..36f9a344ed 100644 --- a/src/ipa/rkisp1/algorithms/lsc.cpp +++ b/src/ipa/rkisp1/algorithms/lsc.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -68,7 +69,7 @@ std::vector parseSizes(const ValueNode &tuningData, * input: | 0.2 | 0.3 | * output: 0.0 0.2 0.5 0.8 1.0 */ -std::vector sizesListToPositions(Span sizes) +std::vector sizesListToPositions(std::span sizes) { const int half = sizes.size(); std::vector positions(half * 2 + 1); diff --git a/src/ipa/rkisp1/params.cpp b/src/ipa/rkisp1/params.cpp index 71df0a939d..441d26ad53 100644 --- a/src/ipa/rkisp1/params.cpp +++ b/src/ipa/rkisp1/params.cpp @@ -91,7 +91,7 @@ void RkISP1Params::setBlockEnabled(BlockType type, bool enabled) cfg->module_ens &= ~info.enableBit; } -Span RkISP1Params::block(BlockType type) +std::span RkISP1Params::block(BlockType type) { auto infoIt = kBlockTypeInfo.find(type); if (infoIt == kBlockTypeInfo.end()) { diff --git a/src/ipa/rkisp1/params.h b/src/ipa/rkisp1/params.h index 8e3672ca83..953c7639db 100644 --- a/src/ipa/rkisp1/params.h +++ b/src/ipa/rkisp1/params.h @@ -95,7 +95,7 @@ class RkISP1Params : public V4L2Params public: static constexpr unsigned int kVersion = RKISP1_EXT_PARAM_BUFFER_V1; - RkISP1Params(uint32_t format, Span data) + RkISP1Params(uint32_t format, std::span data) : V4L2Params(data, kVersion), format_(format) { if (format_ == V4L2_META_FMT_RK_ISP1_PARAMS) { @@ -116,7 +116,7 @@ public: void setBlockEnabled(BlockType type, bool enabled); private: - Span block(BlockType type); + std::span block(BlockType type); uint32_t format_; }; @@ -126,7 +126,7 @@ class RkISP1ParamsBlock final : public V4L2ParamsBlock { public: RkISP1ParamsBlock(RkISP1Params *params, BlockType type, - const Span data) + std::span data) : V4L2ParamsBlock(data) { params_ = params; @@ -184,7 +184,7 @@ public: private: RkISP1Params *params_; BlockType type_; - Span cifData_; + std::span cifData_; }; } /* namespace ipa::rkisp1 */ diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp index e0dde542c7..d540aace2f 100644 --- a/src/ipa/rkisp1/rkisp1.cpp +++ b/src/ipa/rkisp1/rkisp1.cpp @@ -440,7 +440,7 @@ void IPARkISP1::updateControls(const IPACameraSensorInfo &sensorInfo, /* \todo Move this (and other agc-related controls) to agc */ context_.ctrlMap[&controls::FrameDurationLimits] = ControlInfo(frameDurations[0], frameDurations[1], - ControlValue(Span{ { frameDurations[2], frameDurations[2] } })); + ControlValue(std::span{ { frameDurations[2], frameDurations[2] } })); ctrlMap.insert(context_.ctrlMap.begin(), context_.ctrlMap.end()); *ipaControls = ControlInfoMap(std::move(ctrlMap), controls::controls); diff --git a/src/ipa/rpi/cam_helper/cam_helper.cpp b/src/ipa/rpi/cam_helper/cam_helper.cpp index ce00401375..a480de0043 100644 --- a/src/ipa/rpi/cam_helper/cam_helper.cpp +++ b/src/ipa/rpi/cam_helper/cam_helper.cpp @@ -58,7 +58,7 @@ CamHelper::~CamHelper() { } -void CamHelper::prepare(Span buffer, +void CamHelper::prepare(std::span buffer, Metadata &metadata) { parseEmbeddedData(buffer, metadata); @@ -210,7 +210,7 @@ unsigned int CamHelper::getMinDebinFactor() const return 2; } -void CamHelper::parseEmbeddedData(Span buffer, +void CamHelper::parseEmbeddedData(std::span buffer, Metadata &metadata) { MdParser::RegisterMap registers; diff --git a/src/ipa/rpi/cam_helper/cam_helper.h b/src/ipa/rpi/cam_helper/cam_helper.h index 5a022d305f..bbaf57a1f2 100644 --- a/src/ipa/rpi/cam_helper/cam_helper.h +++ b/src/ipa/rpi/cam_helper/cam_helper.h @@ -7,10 +7,10 @@ #pragma once #include +#include #include #include -#include #include #include "controller/camera_mode.h" @@ -77,7 +77,7 @@ public: virtual ~CamHelper(); void setCameraMode(const CameraMode &mode); void setHwConfig(const Controller::HardwareConfig &hwConfig); - virtual void prepare(libcamera::Span buffer, + virtual void prepare(std::span buffer, Metadata &metadata); virtual void process(StatisticsPtr &stats, Metadata &metadata); virtual uint32_t exposureLines(const libcamera::utils::Duration exposure, @@ -101,7 +101,7 @@ public: virtual unsigned int getMinDebinFactor() const; protected: - void parseEmbeddedData(libcamera::Span buffer, + void parseEmbeddedData(std::span buffer, Metadata &metadata); virtual void populateMetadata(const MdParser::RegisterMap ®isters, Metadata &metadata) const; diff --git a/src/ipa/rpi/cam_helper/cam_helper_imx296.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx296.cpp index cbb10a92d4..2d193863ea 100644 --- a/src/ipa/rpi/cam_helper/cam_helper_imx296.cpp +++ b/src/ipa/rpi/cam_helper/cam_helper_imx296.cpp @@ -36,7 +36,7 @@ public: double gain(uint32_t gainCode) const override; uint32_t exposureLines(const Duration exposure, const Duration lineLength) const override; Duration exposure(uint32_t exposureLines, const Duration lineLength) const override; - void prepare(libcamera::Span buffer, Metadata &metadata) override; + void prepare(std::span buffer, Metadata &metadata) override; bool sensorEmbeddedDataPresent() const override; void populateMetadata(const MdParser::RegisterMap ®isters, Metadata &metadata) const override; @@ -83,7 +83,7 @@ Duration CamHelperImx296::exposure(uint32_t exposureLines, return std::max(minExposureLines, exposureLines) * timePerLine + 14.26us; } -void CamHelperImx296::prepare(libcamera::Span buffer, Metadata &metadata) +void CamHelperImx296::prepare(std::span buffer, Metadata &metadata) { /* * The imx296 embedded data is ahead by a single frame, i.e. embedded diff --git a/src/ipa/rpi/cam_helper/cam_helper_imx477.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx477.cpp index a72ac67d8a..dfc0f602e2 100644 --- a/src/ipa/rpi/cam_helper/cam_helper_imx477.cpp +++ b/src/ipa/rpi/cam_helper/cam_helper_imx477.cpp @@ -48,7 +48,7 @@ public: CamHelperImx477(); uint32_t gainCode(double gain) const override; double gain(uint32_t gainCode) const override; - void prepare(libcamera::Span buffer, Metadata &metadata) override; + void prepare(std::span buffer, Metadata &metadata) override; std::pair getBlanking(Duration &exposure, Duration minFrameDuration, Duration maxFrameDuration) const override; bool sensorEmbeddedDataPresent() const override; @@ -83,7 +83,7 @@ double CamHelperImx477::gain(uint32_t gainCode) const return 1024.0 / (1024 - gainCode); } -void CamHelperImx477::prepare(libcamera::Span buffer, Metadata &metadata) +void CamHelperImx477::prepare(std::span buffer, Metadata &metadata) { MdParser::RegisterMap registers; DeviceStatus deviceStatus; diff --git a/src/ipa/rpi/cam_helper/cam_helper_imx519.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx519.cpp index 10cbea4852..f722428c94 100644 --- a/src/ipa/rpi/cam_helper/cam_helper_imx519.cpp +++ b/src/ipa/rpi/cam_helper/cam_helper_imx519.cpp @@ -48,7 +48,7 @@ public: CamHelperImx519(); uint32_t gainCode(double gain) const override; double gain(uint32_t gainCode) const override; - void prepare(libcamera::Span buffer, Metadata &metadata) override; + void prepare(std::span buffer, Metadata &metadata) override; std::pair getBlanking(Duration &exposure, Duration minFrameDuration, Duration maxFrameDuration) const override; bool sensorEmbeddedDataPresent() const override; @@ -83,7 +83,7 @@ double CamHelperImx519::gain(uint32_t gainCode) const return 1024.0 / (1024 - gainCode); } -void CamHelperImx519::prepare(libcamera::Span buffer, Metadata &metadata) +void CamHelperImx519::prepare(std::span buffer, Metadata &metadata) { MdParser::RegisterMap registers; DeviceStatus deviceStatus; diff --git a/src/ipa/rpi/cam_helper/cam_helper_imx708.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx708.cpp index e7b8d67121..2b61a83011 100644 --- a/src/ipa/rpi/cam_helper/cam_helper_imx708.cpp +++ b/src/ipa/rpi/cam_helper/cam_helper_imx708.cpp @@ -50,7 +50,7 @@ public: CamHelperImx708(); uint32_t gainCode(double gain) const override; double gain(uint32_t gain_code) const override; - void prepare(libcamera::Span buffer, Metadata &metadata) override; + void prepare(std::span buffer, Metadata &metadata) override; void process(StatisticsPtr &stats, Metadata &metadata) override; std::pair getBlanking(Duration &exposure, Duration minFrameDuration, Duration maxFrameDuration) const override; @@ -104,7 +104,7 @@ double CamHelperImx708::gain(uint32_t gain_code) const return 1024.0 / (1024 - gain_code); } -void CamHelperImx708::prepare(libcamera::Span buffer, Metadata &metadata) +void CamHelperImx708::prepare(std::span buffer, Metadata &metadata) { MdParser::RegisterMap registers; DeviceStatus deviceStatus; diff --git a/src/ipa/rpi/cam_helper/md_parser.h b/src/ipa/rpi/cam_helper/md_parser.h index 227c376cea..abc69753c2 100644 --- a/src/ipa/rpi/cam_helper/md_parser.h +++ b/src/ipa/rpi/cam_helper/md_parser.h @@ -9,10 +9,9 @@ #include #include #include +#include #include -#include - /* * Camera metadata parser class. Usage as shown below. * @@ -101,7 +100,7 @@ public: lineLengthBytes_ = numBytes; } - virtual Status parse(libcamera::Span buffer, + virtual Status parse(std::span buffer, RegisterMap ®isters) = 0; protected: @@ -123,7 +122,7 @@ class MdParserSmia final : public MdParser public: MdParserSmia(std::initializer_list registerList); - MdParser::Status parse(libcamera::Span buffer, + MdParser::Status parse(std::span buffer, RegisterMap ®isters) override; private: @@ -147,7 +146,7 @@ private: BadPadding = -5 }; - ParseStatus findRegs(libcamera::Span buffer); + ParseStatus findRegs(std::span buffer); OffsetMap offsets_; }; diff --git a/src/ipa/rpi/cam_helper/md_parser_smia.cpp b/src/ipa/rpi/cam_helper/md_parser_smia.cpp index c7bdcf94f6..a877b7ebbe 100644 --- a/src/ipa/rpi/cam_helper/md_parser_smia.cpp +++ b/src/ipa/rpi/cam_helper/md_parser_smia.cpp @@ -33,7 +33,7 @@ MdParserSmia::MdParserSmia(std::initializer_list registerList) offsets_[r] = {}; } -MdParser::Status MdParserSmia::parse(libcamera::Span buffer, +MdParser::Status MdParserSmia::parse(std::span buffer, RegisterMap ®isters) { if (reset_) { @@ -72,7 +72,7 @@ MdParser::Status MdParserSmia::parse(libcamera::Span buffer, return OK; } -MdParserSmia::ParseStatus MdParserSmia::findRegs(libcamera::Span buffer) +MdParserSmia::ParseStatus MdParserSmia::findRegs(std::span buffer) { ASSERT(offsets_.size()); diff --git a/src/ipa/rpi/common/ipa_base.cpp b/src/ipa/rpi/common/ipa_base.cpp index 7e00c2799b..ab80ef64b6 100644 --- a/src/ipa/rpi/common/ipa_base.cpp +++ b/src/ipa/rpi/common/ipa_base.cpp @@ -9,9 +9,9 @@ #include #include +#include #include -#include #include #include @@ -78,8 +78,8 @@ const ControlInfoMap::Map ipaControls{ { &controls::FrameDurationLimits, ControlInfo(static_cast(defaultMinFrameDuration.get()), static_cast(defaultMaxFrameDuration.get()), - Span{ { static_cast(defaultMinFrameDuration.get()), - static_cast(defaultMinFrameDuration.get()) } }) }, + std::span{ { static_cast(defaultMinFrameDuration.get()), + static_cast(defaultMinFrameDuration.get()) } }) }, { &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) }, { &controls::rpi::StatsOutputEnable, ControlInfo(false, true, false) }, }; @@ -101,7 +101,7 @@ const ControlInfoMap::Map ipaAfControls{ { &controls::AfSpeed, ControlInfo(controls::AfSpeedValues) }, { &controls::AfMetering, ControlInfo(controls::AfMeteringValues) }, { &controls::AfWindows, ControlInfo(Rectangle{}, Rectangle(65535, 65535, 65535, 65535), - Span{ { Rectangle{} } }) }, + std::span{ { Rectangle{} } }) }, { &controls::AfTrigger, ControlInfo(controls::AfTriggerValues) }, { &controls::AfPause, ControlInfo(controls::AfPauseValues) }, { &controls::LensPosition, ControlInfo(0.0f, 32.0f, 1.0f) } @@ -250,8 +250,8 @@ int32_t IpaBase::configure(const IPACameraSensorInfo &sensorInfo, const ConfigPa ctrlMap[&controls::FrameDurationLimits] = ControlInfo(static_cast(mode_.minFrameDuration.get()), static_cast(mode_.maxFrameDuration.get()), - Span{ { static_cast(defaultMinFrameDuration.get()), - static_cast(defaultMinFrameDuration.get()) } }); + std::span{ { static_cast(defaultMinFrameDuration.get()), + static_cast(defaultMinFrameDuration.get()) } }); ctrlMap[&controls::AnalogueGain] = ControlInfo(static_cast(mode_.minAnalogueGain), @@ -417,7 +417,7 @@ void IpaBase::prepareIsp(const PrepareParams ¶ms) int64_t frameTimestamp = params.sensorControls.get(controls::SensorTimestamp).value_or(0); unsigned int ipaContext = params.ipaContext % rpiMetadata_.size(); RPiController::Metadata &rpiMetadata = rpiMetadata_[ipaContext]; - Span embeddedBuffer; + std::span embeddedBuffer; rpiMetadata.clear(); fillDeviceStatus(params.sensorControls, ipaContext); @@ -1177,7 +1177,7 @@ void IpaBase::applyControls(const ControlList &controls) if (monoSensor_) break; - auto floats = ctrl.second.get>(); + auto floats = ctrl.second.get>(); RPiController::CcmAlgorithm *ccm = dynamic_cast( controller_.getAlgorithm("ccm")); if (!ccm) { @@ -1287,7 +1287,7 @@ void IpaBase::applyControls(const ControlList &controls) } case controls::FRAME_DURATION_LIMITS: { - auto frameDurations = ctrl.second.get>(); + auto frameDurations = ctrl.second.get>(); applyFrameDurations(frameDurations[0] * 1.0us, frameDurations[1] * 1.0us); break; } @@ -1351,7 +1351,7 @@ void IpaBase::applyControls(const ControlList &controls) << "Could not set AF_WINDOWS - no AF algorithm"; break; } - af->setWindows(ctrl.second.get>()); + af->setWindows(ctrl.second.get>()); break; } diff --git a/src/ipa/rpi/common/ipa_base.h b/src/ipa/rpi/common/ipa_base.h index 90f018b28a..0d7842f1f7 100644 --- a/src/ipa/rpi/common/ipa_base.h +++ b/src/ipa/rpi/common/ipa_base.h @@ -90,7 +90,7 @@ private: virtual void platformPrepareIsp(const PrepareParams ¶ms, RPiController::Metadata &rpiMetadata) = 0; virtual void platformPrepareAgc(RPiController::Metadata &rpiMetadata) = 0; - virtual RPiController::StatisticsPtr platformProcessStats(Span mem) = 0; + virtual RPiController::StatisticsPtr platformProcessStats(std::span mem) = 0; void setMode(const IPACameraSensorInfo &sensorInfo); void setCameraTimeoutValue(); diff --git a/src/ipa/rpi/controller/af_algorithm.h b/src/ipa/rpi/controller/af_algorithm.h index 39a8de5a35..32a0774d0f 100644 --- a/src/ipa/rpi/controller/af_algorithm.h +++ b/src/ipa/rpi/controller/af_algorithm.h @@ -7,8 +7,7 @@ #pragma once #include - -#include +#include #include "algorithm.h" @@ -65,7 +64,7 @@ public: virtual void setMetering([[maybe_unused]] bool use_windows) { } - virtual void setWindows([[maybe_unused]] libcamera::Span const &wins) + virtual void setWindows([[maybe_unused]] std::span wins) { } virtual void setMode(AfMode mode) = 0; diff --git a/src/ipa/rpi/controller/rpi/af.cpp b/src/ipa/rpi/controller/rpi/af.cpp index 47c2bf9358..dd5b565140 100644 --- a/src/ipa/rpi/controller/rpi/af.cpp +++ b/src/ipa/rpi/controller/rpi/af.cpp @@ -856,7 +856,7 @@ void Af::setMetering(bool mode) } } -void Af::setWindows(libcamera::Span const &wins) +void Af::setWindows(std::span wins) { windows_.clear(); for (auto &w : wins) { diff --git a/src/ipa/rpi/controller/rpi/af.h b/src/ipa/rpi/controller/rpi/af.h index b464927ba9..c9b48f863e 100644 --- a/src/ipa/rpi/controller/rpi/af.h +++ b/src/ipa/rpi/controller/rpi/af.h @@ -59,7 +59,7 @@ public: void setRange(AfRange range) override; void setSpeed(AfSpeed speed) override; void setMetering(bool use_windows) override; - void setWindows(libcamera::Span const &wins) override; + void setWindows(std::span wins) override; void setMode(AfMode mode) override; AfMode getMode() const override; double getDefaultLensPosition() const override; diff --git a/src/ipa/rpi/controller/rpi/alsc.cpp b/src/ipa/rpi/controller/rpi/alsc.cpp index 4c852db04f..e13d6c6c28 100644 --- a/src/ipa/rpi/controller/rpi/alsc.cpp +++ b/src/ipa/rpi/controller/rpi/alsc.cpp @@ -9,10 +9,10 @@ #include #include #include +#include #include #include -#include #include "../awb_status.h" #include "alsc.h" diff --git a/src/ipa/rpi/controller/rpi/awb_nn.cpp b/src/ipa/rpi/controller/rpi/awb_nn.cpp index 6543d8cb9b..b2ccbfa64b 100644 --- a/src/ipa/rpi/controller/rpi/awb_nn.cpp +++ b/src/ipa/rpi/controller/rpi/awb_nn.cpp @@ -16,6 +16,7 @@ */ #include +#include #include #include @@ -169,7 +170,7 @@ static bool checkTensorShape(TfLiteTensor *tensor, const int *expectedDims, cons static std::string buildDimString(const int *dims, const int dimsSize) { - return "[" + utils::join(Span(dims, dimsSize), ",") + "]"; + return "[" + utils::join(std::span(dims, dimsSize), ",") + "]"; } void AwbNN::loadModel() diff --git a/src/ipa/rpi/pisp/pisp.cpp b/src/ipa/rpi/pisp/pisp.cpp index 88deccfd18..b8e5ed86e9 100644 --- a/src/ipa/rpi/pisp/pisp.cpp +++ b/src/ipa/rpi/pisp/pisp.cpp @@ -109,7 +109,7 @@ int generateLut(const ipa::Pwl &pwl, uint32_t *lut, std::size_t lutSize, return 0; } -int generateDecompandLut(const ipa::Pwl &pwl, Span lut) +int generateDecompandLut(const ipa::Pwl &pwl, std::span lut) { if (pwl.empty()) return -EINVAL; @@ -235,7 +235,7 @@ private: void platformPrepareIsp(const PrepareParams ¶ms, RPiController::Metadata &rpiMetadata) override; void platformPrepareAgc(RPiController::Metadata &rpiMetadata) override; - RPiController::StatisticsPtr platformProcessStats(Span mem) override; + RPiController::StatisticsPtr platformProcessStats(std::span mem) override; void handleControls(const ControlList &controls) override; @@ -503,7 +503,7 @@ void IpaPiSP::platformPrepareAgc(RPiController::Metadata &rpiMetadata) be_->SetGlobal(global); } -RPiController::StatisticsPtr IpaPiSP::platformProcessStats(Span mem) +RPiController::StatisticsPtr IpaPiSP::platformProcessStats(std::span mem) { using namespace RPiController; @@ -537,8 +537,8 @@ RPiController::StatisticsPtr IpaPiSP::platformProcessStats(Span mem) statistics->focusRegions.set(i, { stats->cdaf.foms[i] >> 20, 0, 0 }); if (statsMetadataOutput_) { - Span statsSpan(reinterpret_cast(stats), - sizeof(pisp_statistics)); + const std::span statsSpan(reinterpret_cast(stats), + sizeof(pisp_statistics)); libcameraMetadata_.set(controls::rpi::PispStatsOutput, statsSpan); } diff --git a/src/ipa/rpi/vc4/vc4.cpp b/src/ipa/rpi/vc4/vc4.cpp index f30eee7ff0..17d71be488 100644 --- a/src/ipa/rpi/vc4/vc4.cpp +++ b/src/ipa/rpi/vc4/vc4.cpp @@ -5,13 +5,13 @@ * Raspberry Pi VC4/BCM2835 ISP IPA. */ +#include #include #include #include #include -#include #include #include @@ -61,7 +61,7 @@ private: void platformPrepareIsp(const PrepareParams ¶ms, RPiController::Metadata &rpiMetadata) override; void platformPrepareAgc([[maybe_unused]] RPiController::Metadata &rpiMetadata) override; - RPiController::StatisticsPtr platformProcessStats(Span mem) override; + RPiController::StatisticsPtr platformProcessStats(std::span mem) override; void handleControls(const ControlList &controls) override; bool validateIspControls(); @@ -211,7 +211,7 @@ void IpaVc4::platformPrepareAgc(RPiController::Metadata &rpiMetadata) ctrls_ = ControlList(ispCtrls_); } -RPiController::StatisticsPtr IpaVc4::platformProcessStats(Span mem) +RPiController::StatisticsPtr IpaVc4::platformProcessStats(std::span mem) { using namespace RPiController; @@ -282,8 +282,8 @@ RPiController::StatisticsPtr IpaVc4::platformProcessStats(Span mem) stats->focus_stats[i].contrast_val_num[1][0] }); if (statsMetadataOutput_) { - Span statsSpan(reinterpret_cast(stats), - sizeof(bcm2835_isp_stats)); + const std::span statsSpan(reinterpret_cast(stats), + sizeof(bcm2835_isp_stats)); libcameraMetadata_.set(controls::rpi::Bcm2835StatsOutput, statsSpan); } @@ -396,8 +396,8 @@ void IpaVc4::applyCCM(const struct CcmStatus *ccmStatus, ControlList &ctrls) ccm.enabled = 1; ccm.ccm.offsets[0] = ccm.ccm.offsets[1] = ccm.ccm.offsets[2] = 0; - ControlValue c(Span{ reinterpret_cast(&ccm), - sizeof(ccm) }); + ControlValue c(std::span{ reinterpret_cast(&ccm), + sizeof(ccm) }); ctrls.set(V4L2_CID_USER_BCM2835_ISP_CC_MATRIX, c); } @@ -410,8 +410,8 @@ void IpaVc4::applyBlackLevel(const struct BlackLevelStatus *blackLevelStatus, Co blackLevel.black_level_g = blackLevelStatus->blackLevelG; blackLevel.black_level_b = blackLevelStatus->blackLevelB; - ControlValue c(Span{ reinterpret_cast(&blackLevel), - sizeof(blackLevel) }); + ControlValue c(std::span{ reinterpret_cast(&blackLevel), + sizeof(blackLevel) }); ctrls.set(V4L2_CID_USER_BCM2835_ISP_BLACK_LEVEL, c); } @@ -432,8 +432,8 @@ void IpaVc4::applyGamma(const struct ContrastStatus *contrastStatus, ControlList gamma.y[numGammaPoints - 1] = 65535; gamma.enabled = 1; - ControlValue c(Span{ reinterpret_cast(&gamma), - sizeof(gamma) }); + ControlValue c(std::span{ reinterpret_cast(&gamma), + sizeof(gamma) }); ctrls.set(V4L2_CID_USER_BCM2835_ISP_GAMMA, c); } @@ -446,8 +446,8 @@ void IpaVc4::applyGEQ(const struct GeqStatus *geqStatus, ControlList &ctrls) geq.slope.den = 1000; geq.slope.num = 1000 * geqStatus->slope; - ControlValue c(Span{ reinterpret_cast(&geq), - sizeof(geq) }); + ControlValue c(std::span{ reinterpret_cast(&geq), + sizeof(geq) }); ctrls.set(V4L2_CID_USER_BCM2835_ISP_GEQ, c); } @@ -480,12 +480,12 @@ void IpaVc4::applyDenoise(const struct DenoiseStatus *denoiseStatus, ControlList cdn.enabled = 0; } - ControlValue c(Span{ reinterpret_cast(&denoise), - sizeof(denoise) }); + ControlValue c(std::span{ reinterpret_cast(&denoise), + sizeof(denoise) }); ctrls.set(V4L2_CID_USER_BCM2835_ISP_DENOISE, c); - c = ControlValue(Span{ reinterpret_cast(&cdn), - sizeof(cdn) }); + c = ControlValue(std::span{ reinterpret_cast(&cdn), + sizeof(cdn) }); ctrls.set(V4L2_CID_USER_BCM2835_ISP_CDN, c); } @@ -501,8 +501,8 @@ void IpaVc4::applySharpen(const struct SharpenStatus *sharpenStatus, ControlList sharpen.limit.num = 1000 * sharpenStatus->limit; sharpen.limit.den = 1000; - ControlValue c(Span{ reinterpret_cast(&sharpen), - sizeof(sharpen) }); + ControlValue c(std::span{ reinterpret_cast(&sharpen), + sizeof(sharpen) }); ctrls.set(V4L2_CID_USER_BCM2835_ISP_SHARPEN, c); } @@ -513,8 +513,8 @@ void IpaVc4::applyDPC(const struct DpcStatus *dpcStatus, ControlList &ctrls) dpc.enabled = 1; dpc.strength = dpcStatus->strength; - ControlValue c(Span{ reinterpret_cast(&dpc), - sizeof(dpc) }); + ControlValue c(std::span{ reinterpret_cast(&dpc), + sizeof(dpc) }); ctrls.set(V4L2_CID_USER_BCM2835_ISP_DPC, c); } @@ -570,8 +570,8 @@ void IpaVc4::applyLS(const struct AlscStatus *lsStatus, ControlList &ctrls) resampleTable(grid + 3 * w * h, lsStatus->b, w, h); } - ControlValue c(Span{ reinterpret_cast(&ls), - sizeof(ls) }); + ControlValue c(std::span{ reinterpret_cast(&ls), + sizeof(ls) }); ctrls.set(V4L2_CID_USER_BCM2835_ISP_LENS_SHADING, c); } diff --git a/src/libcamera/base/backtrace.cpp b/src/libcamera/base/backtrace.cpp index 0b04629c93..76dfc8978a 100644 --- a/src/libcamera/base/backtrace.cpp +++ b/src/libcamera/base/backtrace.cpp @@ -27,9 +27,9 @@ #endif #include +#include #include -#include #include /** @@ -291,7 +291,7 @@ std::string Backtrace::toString(unsigned int skipLevels) const return std::string(); if (!backtraceText_.empty()) { - Span trace{ backtraceText_ }; + std::span trace{ backtraceText_ }; return utils::join(trace.subspan(skipLevels), ""); } @@ -301,7 +301,7 @@ std::string Backtrace::toString(unsigned int skipLevels) const if (dwfl.isValid()) { std::ostringstream msg; - Span trace{ backtrace_ }; + std::span trace{ backtrace_ }; for (const void *ip : trace.subspan(skipLevels)) { if (ip) msg << dwfl.stackEntry(ip) << std::endl; @@ -314,7 +314,7 @@ std::string Backtrace::toString(unsigned int skipLevels) const #endif #if HAVE_BACKTRACE - Span trace{ backtrace_ }; + std::span trace{ backtrace_ }; trace = trace.subspan(skipLevels); char **strings = backtrace_symbols(trace.data(), trace.size()); diff --git a/src/libcamera/base/file.cpp b/src/libcamera/base/file.cpp index 2b83a51775..275085c1dc 100644 --- a/src/libcamera/base/file.cpp +++ b/src/libcamera/base/file.cpp @@ -301,7 +301,7 @@ off_t File::seek(off_t pos) * \return The number of bytes read on success, or a negative error code * otherwise */ -ssize_t File::read(const Span &data) +ssize_t File::read(std::span data) { if (!isOpen()) return -EINVAL; @@ -339,7 +339,7 @@ ssize_t File::read(const Span &data) * \return The number of bytes written on success, or a negative error code * otherwise */ -ssize_t File::write(const Span &data) +ssize_t File::write(std::span data) { if (!isOpen()) return -EINVAL; @@ -384,7 +384,7 @@ ssize_t File::write(const Span &data) * * \return The mapped memory on success, or an empty span otherwise */ -Span File::map(off_t offset, ssize_t size, File::MapFlags flags) +std::span File::map(off_t offset, ssize_t size, File::MapFlags flags) { if (!isOpen()) { error_ = -EBADF; diff --git a/src/libcamera/base/thread.cpp b/src/libcamera/base/thread.cpp index bcb25ba6ee..b204355a58 100644 --- a/src/libcamera/base/thread.cpp +++ b/src/libcamera/base/thread.cpp @@ -433,7 +433,7 @@ bool Thread::wait(utils::duration duration) * * \return 0 if all indices are valid, -EINVAL otherwise */ -int Thread::setThreadAffinity(const Span &cpus) +int Thread::setThreadAffinity(std::span cpus) { const unsigned int numCpus = std::thread::hardware_concurrency(); diff --git a/src/libcamera/byte_stream_buffer.cpp b/src/libcamera/byte_stream_buffer.cpp index fba9a6f3a0..3f173f0d3e 100644 --- a/src/libcamera/byte_stream_buffer.cpp +++ b/src/libcamera/byte_stream_buffer.cpp @@ -234,9 +234,9 @@ int ByteStreamBuffer::skip(size_t size) */ /** - * \fn template int ByteStreamBuffer::read(const Span &data) - * \brief Read data from the managed memory buffer into Span \a data - * \param[out] data Span representing the destination memory + * \fn template int ByteStreamBuffer::read(std::span data) + * \brief Read data from the managed memory buffer into \a data + * \param[out] data The destination memory * \return 0 on success, a negative error code otherwise * \retval -EACCES attempting to read from a write buffer * \retval -ENOSPC no more space is available in the managed memory buffer @@ -265,7 +265,7 @@ int ByteStreamBuffer::skip(size_t size) */ /** - * \fn template int ByteStreamBuffer::write(const Span &data) + * \fn template int ByteStreamBuffer::write(std::span data) * \brief Write \a data to the managed memory buffer * \param[in] data The data to write to memory * \return 0 on success, a negative error code otherwise diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp index 93b9e603dd..9dadc91a38 100644 --- a/src/libcamera/camera.cpp +++ b/src/libcamera/camera.cpp @@ -1119,7 +1119,7 @@ const std::set &Camera::streams() const * \return A CameraConfiguration if the requested roles can be satisfied, or a * null pointer otherwise. */ -std::unique_ptr Camera::generateConfiguration(Span roles) +std::unique_ptr Camera::generateConfiguration(std::span roles) { Private *const d = _d(); diff --git a/src/libcamera/control_ids_rpi.yaml b/src/libcamera/control_ids_rpi.yaml index 0b7da5b2b7..2e6d1f4381 100644 --- a/src/libcamera/control_ids_rpi.yaml +++ b/src/libcamera/control_ids_rpi.yaml @@ -24,7 +24,7 @@ controls: size: [n] direction: out description: | - Span of the BCM2835 ISP generated statistics for the current frame. + The BCM2835 ISP generated statistics for the current frame. This is sent in the Request metadata if the StatsOutputEnable is set to true. The statistics struct definition can be found in @@ -64,7 +64,7 @@ controls: direction: out size: [n] description: | - Span of the PiSP Frontend ISP generated statistics for the current + The PiSP Frontend ISP generated statistics for the current frame. This is sent in the Request metadata if the StatsOutputEnable is set to true. The statistics struct definition can be found in https://github.com/raspberrypi/libpisp/blob/main/src/libpisp/frontend/pisp_statistics.h diff --git a/src/libcamera/control_serializer.cpp b/src/libcamera/control_serializer.cpp index c0285cc6ca..ed962d3de3 100644 --- a/src/libcamera/control_serializer.cpp +++ b/src/libcamera/control_serializer.cpp @@ -9,10 +9,10 @@ #include #include +#include #include #include -#include #include #include diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp index 1e1b49e6bd..f5581dbb88 100644 --- a/src/libcamera/controls.cpp +++ b/src/libcamera/controls.cpp @@ -112,7 +112,7 @@ ControlValue::ControlValue() * \param[in] value Initial value * * This function constructs a new instance of ControlValue and stores the \a - * value inside it. If the type \a T is equivalent to Span, the instance + * value inside it. If the type \a T is equivalent to std::span, the instance * stores an array of values of type \a R. Otherwise the instance stores a * single value of type \a T. The numElements() and type() are updated to * reflect the stored value. @@ -189,7 +189,7 @@ ControlValue &ControlValue::operator=(const ControlValue &other) * \brief Retrieve the raw data of a control value * \return The raw data of the control value as a span of uint8_t */ -Span ControlValue::data() const +std::span ControlValue::data() const { std::size_t size = numElements_ * ControlValueSize[type_]; const uint8_t *data = size > sizeof(value_) @@ -201,9 +201,9 @@ Span ControlValue::data() const /** * \copydoc ControlValue::data() const */ -Span ControlValue::data() +std::span ControlValue::data() { - Span data = const_cast(this)->data(); + std::span data = const_cast(this)->data(); return { const_cast(data.data()), data.size() }; } @@ -324,12 +324,12 @@ bool ControlValue::operator==(const ControlValue &other) const * This function returns the contained value as an instance of \a T. If the * ControlValue instance stores a single value, the type \a T shall match the * stored value type(). If the instance stores an array of values, the type - * \a T should be equal to Span, and the type \a R shall match the + * \a T should be equal to std::span, and the type \a R shall match the * stored value type(). The behaviour is undefined otherwise. * * Note that a ControlValue instance that stores a non-array value is not * equivalent to an instance that stores an array value containing a single - * element. The latter shall be accessed through a Span type, while + * element. The latter shall be accessed through a std::span type, while * the former shall be accessed through a type \a T corresponding to type(). * * \return The control value @@ -341,13 +341,13 @@ bool ControlValue::operator==(const ControlValue &other) const * \param[in] value The control value * * This function stores the \a value in the instance. If the type \a T is - * equivalent to Span, the instance stores an array of values of type \a R. + * equivalent to std::span, the instance stores an array of values of type \a R. * Otherwise the instance stores a single value of type \a T. The numElements() * and type() are updated to reflect the stored value. * * The entire content of \a value is copied to the instance, no reference to \a * value or to the data it references is retained. This may be an expensive - * operation for Span<> values that refer to large arrays. + * operation for std::span<> values that refer to large arrays. */ void ControlValue::set(ControlType type, bool isArray, const void *data, @@ -357,7 +357,7 @@ void ControlValue::set(ControlType type, bool isArray, const void *data, reserve(type, isArray, numElements); - Span storage = ControlValue::data(); + std::span storage = ControlValue::data(); memcpy(storage.data(), data, storage.size()); } @@ -613,7 +613,7 @@ ControlInfo::ControlInfo(const ControlValue &min, * values list respectively. The default value is set to \a def if provided, or * to the minimum value otherwise. */ -ControlInfo::ControlInfo(Span values, +ControlInfo::ControlInfo(std::span values, const ControlValue &def) { min_ = values.front(); @@ -1074,7 +1074,7 @@ bool ControlList::contains(unsigned int id) const */ /** - * \fn ControlList::set(const Control> &ctrl, const std::initializer_list &value) + * \fn ControlList::set(const Control> &ctrl, const std::initializer_list &value) * \copydoc ControlList::set(const Control &ctrl, const V &value) */ diff --git a/src/libcamera/converter/converter_dw100.cpp b/src/libcamera/converter/converter_dw100.cpp index 77f778c7f1..290883124d 100644 --- a/src/libcamera/converter/converter_dw100.cpp +++ b/src/libcamera/converter/converter_dw100.cpp @@ -501,7 +501,7 @@ int ConverterDW100Module::applyControls(const Stream *stream, const V4L2Request return 0; std::vector map = info.map.getVertexMap(); - auto value = Span(reinterpret_cast(&map[0]), map.size()); + auto value = std::span(reinterpret_cast(&map[0]), map.size()); ControlList ctrls; ctrls.set(V4L2_CID_DW100_DEWARPING_16x16_VERTEX_MAP, value); diff --git a/src/libcamera/converter/converter_dw100_vertexmap.cpp b/src/libcamera/converter/converter_dw100_vertexmap.cpp index d5fbfdaafd..5b81343570 100644 --- a/src/libcamera/converter/converter_dw100_vertexmap.cpp +++ b/src/libcamera/converter/converter_dw100_vertexmap.cpp @@ -10,12 +10,12 @@ #include #include #include +#include #include #include #include #include -#include #include #include @@ -255,7 +255,7 @@ int dw100VerticesForLength(const int length) * * \return 0 on success or -EINVAL if \a coeffs has the wrong size */ -int Dw100VertexMap::DewarpParams::setCoefficients(Span coeffs) +int Dw100VertexMap::DewarpParams::setCoefficients(std::span coeffs) { size_t s = coeffs.size(); if (!(s == 4 || s == 5 || s == 8 || s == 12)) diff --git a/src/libcamera/egl.cpp b/src/libcamera/egl.cpp index 92024c8e88..3cde9040a9 100644 --- a/src/libcamera/egl.cpp +++ b/src/libcamera/egl.cpp @@ -515,8 +515,8 @@ void eGL::pushEnv(std::vector &shaderEnv, const char *str) * \return 0 on success, or -EINVAL on compilation failure */ int eGL::compileVertexShader(GLuint &shaderId, - Span shaderData, - Span shaderEnv) + std::span shaderData, + std::span shaderEnv) { return compileShader(GL_VERTEX_SHADER, shaderId, shaderData, shaderEnv); } @@ -533,8 +533,8 @@ int eGL::compileVertexShader(GLuint &shaderId, * \return 0 on success, or -EINVAL on compilation failure */ int eGL::compileFragmentShader(GLuint &shaderId, - Span shaderData, - Span shaderEnv) + std::span shaderData, + std::span shaderEnv) { return compileShader(GL_FRAGMENT_SHADER, shaderId, shaderData, shaderEnv); } @@ -552,8 +552,8 @@ int eGL::compileFragmentShader(GLuint &shaderId, * \return 0 on success, or -EINVAL on compilation failure */ int eGL::compileShader(int shaderType, GLuint &shaderId, - Span shaderData, - Span shaderEnv) + std::span shaderData, + std::span shaderEnv) { GLint success; size_t i; diff --git a/src/libcamera/framebuffer.cpp b/src/libcamera/framebuffer.cpp index 6ea4d6ea21..0e9942953c 100644 --- a/src/libcamera/framebuffer.cpp +++ b/src/libcamera/framebuffer.cpp @@ -130,7 +130,7 @@ LOG_DEFINE_CATEGORY(Buffer) * \param[in] planes The frame memory planes * \param[in] cookie Cookie */ -FrameBuffer::Private::Private(Span planes, uint64_t cookie) +FrameBuffer::Private::Private(std::span planes, uint64_t cookie) : planes_(planes.begin(), planes.end()), cookie_(cookie), request_(nullptr), isContiguous_(true) { @@ -309,7 +309,7 @@ ino_t fileDescriptorInode(const SharedFD &fd) * \param[in] planes The frame memory planes * \param[in] cookie Cookie */ -FrameBuffer::FrameBuffer(Span planes, unsigned int cookie) +FrameBuffer::FrameBuffer(std::span planes, unsigned int cookie) : FrameBuffer(std::make_unique(planes, cookie)) { } @@ -359,7 +359,7 @@ FrameBuffer::FrameBuffer(std::unique_ptr d) * \brief Retrieve the static plane descriptors * \return Array of plane descriptors */ -Span FrameBuffer::planes() const +std::span FrameBuffer::planes() const { return _d()->planes_; } diff --git a/src/libcamera/ipa_data_serializer.cpp b/src/libcamera/ipa_data_serializer.cpp index 0537f785b1..f10b300c80 100644 --- a/src/libcamera/ipa_data_serializer.cpp +++ b/src/libcamera/ipa_data_serializer.cpp @@ -29,7 +29,7 @@ LOG_DEFINE_CATEGORY(IPADataSerializer) * Static template class that provides functions for serializing and * deserializing IPA data. * - * \todo Switch to Span instead of byte and fd vector + * \todo Switch to std::span instead of byte and fd vector * * \todo Harden the vector and map deserializer * diff --git a/src/libcamera/ipa_manager.cpp b/src/libcamera/ipa_manager.cpp index 845a09f107..0fd17e5818 100644 --- a/src/libcamera/ipa_manager.cpp +++ b/src/libcamera/ipa_manager.cpp @@ -300,7 +300,7 @@ bool IPAManager::isSignatureValid([[maybe_unused]] IPAModule *ipa) const if (!file.open(File::OpenModeFlag::ReadOnly)) return false; - Span data = file.map(); + std::span data = file.map(); if (data.empty()) return false; diff --git a/src/libcamera/ipa_module.cpp b/src/libcamera/ipa_module.cpp index 264bb1f2df..cc7d533c44 100644 --- a/src/libcamera/ipa_module.cpp +++ b/src/libcamera/ipa_module.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -21,7 +22,6 @@ #include #include -#include #include /** @@ -41,7 +41,7 @@ LOG_DEFINE_CATEGORY(IPAModule) namespace { template -typename std::remove_extent_t *elfPointer(Span elf, +typename std::remove_extent_t *elfPointer(std::span elf, off_t offset, size_t objSize) { size_t size = offset + objSize; @@ -53,13 +53,13 @@ typename std::remove_extent_t *elfPointer(Span elf, } template -typename std::remove_extent_t *elfPointer(Span elf, +typename std::remove_extent_t *elfPointer(std::span elf, off_t offset) { return elfPointer(elf, offset, sizeof(T)); } -int elfVerifyIdent(Span elf) +int elfVerifyIdent(std::span elf) { const char *e_ident = elfPointer(elf, 0); if (!e_ident) @@ -85,7 +85,7 @@ int elfVerifyIdent(Span elf) return 0; } -const ElfW(Shdr) *elfSection(Span elf, const ElfW(Ehdr) *eHdr, +const ElfW(Shdr) *elfSection(std::span elf, const ElfW(Ehdr) *eHdr, ElfW(Half) idx) { if (idx >= eHdr->e_shnum) @@ -104,7 +104,7 @@ const ElfW(Shdr) *elfSection(Span elf, const ElfW(Ehdr) *eHdr, * \return The memory region storing the symbol on success, or an empty span * otherwise */ -Span elfLoadSymbol(Span elf, const char *symbol) +std::span elfLoadSymbol(std::span elf, const char *symbol) { const ElfW(Ehdr) *eHdr = elfPointer(elf, 0); if (!eHdr) @@ -274,14 +274,14 @@ int IPAModule::loadIPAModuleInfo() return file.error(); } - Span data = file.map(); + std::span data = file.map(); int ret = elfVerifyIdent(data); if (ret) { LOG(IPAModule, Error) << "IPA module is not an ELF file"; return ret; } - Span info = elfLoadSymbol(data, "ipaModuleInfo"); + std::span info = elfLoadSymbol(data, "ipaModuleInfo"); if (info.size() < sizeof(info_)) { LOG(IPAModule, Error) << "IPA module has no valid info"; return -EINVAL; diff --git a/src/libcamera/mapped_framebuffer.cpp b/src/libcamera/mapped_framebuffer.cpp index f54bbf21f1..53087dc27f 100644 --- a/src/libcamera/mapped_framebuffer.cpp +++ b/src/libcamera/mapped_framebuffer.cpp @@ -43,7 +43,7 @@ LOG_DECLARE_CATEGORY(Buffer) * \typedef MappedBuffer::Plane * \brief A mapped region of memory accessible to the CPU * - * The MappedBuffer::Plane uses the Span interface to describe the mapped memory + * The MappedBuffer::Plane uses std::span to describe the mapped memory * region. */ @@ -117,7 +117,7 @@ MappedBuffer::~MappedBuffer() * \brief Retrieve the mapped planes * * This function retrieves the successfully mapped planes stored as a vector - * of Span to provide access to the mapped memory. + * of std::span to provide access to the mapped memory. * * \return A vector of the mapped planes */ diff --git a/src/libcamera/matrix.cpp b/src/libcamera/matrix.cpp index 0950408bb8..9cb0885b3b 100644 --- a/src/libcamera/matrix.cpp +++ b/src/libcamera/matrix.cpp @@ -48,11 +48,11 @@ LOG_DEFINE_CATEGORY(Matrix) */ /** - * \fn Matrix::Matrix(const Span data) + * \fn Matrix::Matrix(std::span data) * \brief Construct a matrix from supplied data * \param[in] data Data from which to construct a matrix * - * \a data is a one-dimensional Span and will be turned into a matrix in + * \a data is a one-dimensional span and will be turned into a matrix in * row-major order. The size of \a data must be equal to the product of the * number of rows and columns of the matrix (Rows x Cols). */ @@ -80,17 +80,17 @@ LOG_DEFINE_CATEGORY(Matrix) */ /** - * \fn Span Matrix::operator[](size_t i) const + * \fn std::span Matrix::operator[](size_t i) const * \brief Index to a row in the matrix * \param[in] i Index of row to retrieve * - * This operator[] returns a Span, which can then be indexed into again with + * This operator[] returns a span, which can then be indexed into again with * another operator[], allowing a convenient m[i][j] to access elements of the - * matrix. Note that the lifetime of the Span returned by this first-level + * matrix. Note that the lifetime of the span returned by this first-level * operator[] is bound to that of the Matrix itself, so it is not recommended - * to save the Span that is the result of this operator[]. + * to save the span that is the result of this operator[]. * - * \return Row \a i from the matrix, as a Span + * \return Row \a i from the matrix, as a span */ /** @@ -164,8 +164,8 @@ LOG_DEFINE_CATEGORY(Matrix) #ifndef __DOXYGEN__ template -bool matrixInvert(Span dataIn, Span dataOut, unsigned int dim, - Span scratchBuffer, Span swapBuffer) +bool matrixInvert(std::span dataIn, std::span dataOut, unsigned int dim, + std::span scratchBuffer, std::span swapBuffer) { /* * Convenience class to access matrix data, providing a row-major (i,j) @@ -175,7 +175,7 @@ bool matrixInvert(Span dataIn, Span dataOut, unsigned int dim, class MatrixAccessor { public: - MatrixAccessor(Span data, Span swapBuffer, unsigned int rows, unsigned int cols) + MatrixAccessor(std::span data, std::span swapBuffer, unsigned int rows, unsigned int cols) : data_(data), swap_(swapBuffer), rows_(rows), cols_(cols) { ASSERT(swap_.size() == rows); @@ -200,8 +200,8 @@ bool matrixInvert(Span dataIn, Span dataOut, unsigned int dim, return swap_[row] * cols_ + col; } - Span data_; - Span swap_; + std::span data_; + std::span swap_; unsigned int rows_; unsigned int cols_; }; @@ -302,12 +302,12 @@ bool matrixInvert(Span dataIn, Span dataOut, unsigned int dim, return true; } -template bool matrixInvert(Span dataIn, Span dataOut, - unsigned int dim, Span scratchBuffer, - Span swapBuffer); -template bool matrixInvert(Span data, Span dataOut, - unsigned int dim, Span scratchBuffer, - Span swapBuffer); +template bool matrixInvert(std::span dataIn, std::span dataOut, + unsigned int dim, std::span scratchBuffer, + std::span swapBuffer); +template bool matrixInvert(std::span data, std::span dataOut, + unsigned int dim, std::span scratchBuffer, + std::span swapBuffer); /* * The value node shall be a list of numerical values. Its size shall be equal diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp index c3d2695556..c907e4a609 100644 --- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp +++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp @@ -107,7 +107,7 @@ public: bool match(DeviceEnumerator *enumerator) override; std::unique_ptr - generateConfiguration(Camera *camera, Span roles) override; + generateConfiguration(Camera *camera, std::span roles) override; int configure(Camera *camera, CameraConfiguration *config) override; int exportFrameBuffers(Camera *camera, Stream *stream, @@ -742,7 +742,7 @@ StreamConfiguration PipelineHandlerISI::generateRawConfiguration(Camera *camera) std::unique_ptr PipelineHandlerISI::generateConfiguration(Camera *camera, - Span roles) + std::span roles) { ISICameraData *data = cameraData(camera); std::unique_ptr config = diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp index 0f3e169d3b..14cab9e555 100644 --- a/src/libcamera/pipeline/ipu3/ipu3.cpp +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp @@ -135,7 +135,7 @@ public: PipelineHandlerIPU3(CameraManager *manager); std::unique_ptr generateConfiguration(Camera *camera, - Span roles) override; + std::span roles) override; int configure(Camera *camera, CameraConfiguration *config) override; int exportFrameBuffers(Camera *camera, Stream *stream, @@ -390,7 +390,7 @@ PipelineHandlerIPU3::PipelineHandlerIPU3(CameraManager *manager) } std::unique_ptr -PipelineHandlerIPU3::generateConfiguration(Camera *camera, Span roles) +PipelineHandlerIPU3::generateConfiguration(Camera *camera, std::span roles) { IPU3CameraData *data = cameraData(camera); std::unique_ptr config = @@ -679,7 +679,7 @@ int PipelineHandlerIPU3::allocateBuffers(Camera *camera) auto pushBuffers = [&](const std::vector> &buffers) { for (const std::unique_ptr &buffer : buffers) { - Span planes = buffer->planes(); + std::span planes = buffer->planes(); buffer->setCookie(ipaBufferId++); ipaBuffers_.emplace_back(buffer->cookie(), diff --git a/src/libcamera/pipeline/mali-c55/mali-c55.cpp b/src/libcamera/pipeline/mali-c55/mali-c55.cpp index 599ff88b59..73a03373c8 100644 --- a/src/libcamera/pipeline/mali-c55/mali-c55.cpp +++ b/src/libcamera/pipeline/mali-c55/mali-c55.cpp @@ -679,7 +679,7 @@ public: PipelineHandlerMaliC55(CameraManager *manager); std::unique_ptr generateConfiguration(Camera *camera, - Span roles) override; + std::span roles) override; int configure(Camera *camera, CameraConfiguration *config) override; int exportFrameBuffers(Camera *camera, Stream *stream, @@ -792,7 +792,7 @@ PipelineHandlerMaliC55::PipelineHandlerMaliC55(CameraManager *manager) std::unique_ptr PipelineHandlerMaliC55::generateConfiguration(Camera *camera, - Span roles) + std::span roles) { MaliC55CameraData *data = cameraData(camera); std::unique_ptr config = @@ -1248,7 +1248,7 @@ int PipelineHandlerMaliC55::allocateBuffers(Camera *camera) std::queue &queue, std::vector &ipaBuffers) { for (const std::unique_ptr &buffer : buffers) { - Span planes = buffer->planes(); + std::span planes = buffer->planes(); buffer->setCookie(ipaBufferId++); ipaBuffers.emplace_back(buffer->cookie(), diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp index 4f9c0aa741..96382c93a4 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp @@ -187,7 +187,7 @@ public: PipelineHandlerRkISP1(CameraManager *manager); std::unique_ptr generateConfiguration(Camera *camera, - Span roles) override; + std::span roles) override; int configure(Camera *camera, CameraConfiguration *config) override; int exportFrameBuffers(Camera *camera, Stream *stream, @@ -788,7 +788,7 @@ PipelineHandlerRkISP1::PipelineHandlerRkISP1(CameraManager *manager) std::unique_ptr PipelineHandlerRkISP1::generateConfiguration(Camera *camera, - Span roles) + std::span roles) { RkISP1CameraData *data = cameraData(camera); @@ -1176,7 +1176,7 @@ int PipelineHandlerRkISP1::allocateBuffers(Camera *camera) auto pushBuffers = [&](const std::vector> &buffers, std::queue &queue) { for (const std::unique_ptr &buffer : buffers) { - Span planes = buffer->planes(); + std::span planes = buffer->planes(); buffer->setCookie(ipaBufferId++); data->ipaBuffers_.emplace_back(buffer->cookie(), diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp index ef9cfbdc32..2015733702 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp @@ -56,7 +56,7 @@ const std::map formatToMediaBus = { } /* namespace */ -RkISP1Path::RkISP1Path(const char *name, const Span &formats, +RkISP1Path::RkISP1Path(const char *name, std::span formats, const Size &minResolution, const Size &maxResolution) : name_(name), running_(false), formats_(formats), minResolution_(minResolution), maxResolution_(maxResolution), diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.h b/src/libcamera/pipeline/rkisp1/rkisp1_path.h index 0c68e9eb99..16e6890352 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1_path.h +++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.h @@ -9,11 +9,11 @@ #include #include +#include #include #include #include -#include #include #include @@ -34,7 +34,7 @@ struct V4L2SubdeviceFormat; class RkISP1Path { public: - RkISP1Path(const char *name, const Span &formats, + RkISP1Path(const char *name, std::span formats, const Size &minResolution, const Size &maxResolution); bool init(std::shared_ptr media); @@ -72,7 +72,7 @@ private: const char *name_; bool running_; - const Span formats_; + const std::span formats_; std::set streamFormats_; Size minResolution_; Size maxResolution_; diff --git a/src/libcamera/pipeline/rpi/common/pipeline_base.cpp b/src/libcamera/pipeline/rpi/common/pipeline_base.cpp index 802b2b3c7e..71f3f26a4f 100644 --- a/src/libcamera/pipeline/rpi/common/pipeline_base.cpp +++ b/src/libcamera/pipeline/rpi/common/pipeline_base.cpp @@ -388,7 +388,7 @@ V4L2DeviceFormat PipelineHandlerBase::toV4L2DeviceFormat(const V4L2VideoDevice * } std::unique_ptr -PipelineHandlerBase::generateConfiguration(Camera *camera, Span roles) +PipelineHandlerBase::generateConfiguration(Camera *camera, std::span roles) { CameraData *data = cameraData(camera); std::unique_ptr config = @@ -903,7 +903,7 @@ void PipelineHandlerBase::mapBuffers(Camera *camera, const BufferMap &buffers, u * handler and the IPA. */ for (const auto &[id, buffer] : buffers) { - Span planes = buffer.buffer->planes(); + std::span planes = buffer.buffer->planes(); bufferIds.emplace_back(mask | id, std::vector{ planes.begin(), planes.end() }); @@ -1264,7 +1264,7 @@ void CameraData::metadataReady(const ControlList &metadata) *notifyGainsUnity_, static_cast((*colourGains)[0] * *notifyGainsUnity_) }; - ctrls.set(V4L2_CID_NOTIFY_GAINS, Span{ gains }); + ctrls.set(V4L2_CID_NOTIFY_GAINS, std::span{ gains }); sensor_->setControls(&ctrls); } @@ -1322,7 +1322,7 @@ Rectangle CameraData::scaleIspCrop(const Rectangle &ispCrop) const void CameraData::applyScalerCrop(const ControlList &controls) { - const auto &scalerCropRPi = controls.get>(controls::rpi::ScalerCrops); + const auto &scalerCropRPi = controls.get>(controls::rpi::ScalerCrops); const auto &scalerCropCore = controls.get(controls::ScalerCrop); std::vector scalerCrops; @@ -1532,8 +1532,8 @@ void CameraData::fillRequestMetadata(const ControlList &bufferControls, Request request->_d()->metadata().set(controls::ScalerCrop, crops[0]); if (crops.size() > 1) { request->_d()->metadata().set(controls::rpi::ScalerCrops, - Span(crops.data(), - crops.size())); + std::span(crops.data(), + crops.size())); } } } diff --git a/src/libcamera/pipeline/rpi/common/pipeline_base.h b/src/libcamera/pipeline/rpi/common/pipeline_base.h index 758155ee0d..ca12a4875f 100644 --- a/src/libcamera/pipeline/rpi/common/pipeline_base.h +++ b/src/libcamera/pipeline/rpi/common/pipeline_base.h @@ -224,7 +224,7 @@ public: BayerFormat::Packing packingReq); std::unique_ptr - generateConfiguration(Camera *camera, Span roles) override; + generateConfiguration(Camera *camera, std::span roles) override; int configure(Camera *camera, CameraConfiguration *config) override; int exportFrameBuffers(Camera *camera, libcamera::Stream *stream, diff --git a/src/libcamera/pipeline/rpi/pisp/pisp.cpp b/src/libcamera/pipeline/rpi/pisp/pisp.cpp index 406d683dc5..159c6b05ee 100644 --- a/src/libcamera/pipeline/rpi/pisp/pisp.cpp +++ b/src/libcamera/pipeline/rpi/pisp/pisp.cpp @@ -2274,7 +2274,7 @@ void PiSPCameraData::prepareCfe() { std::scoped_lock l(*fe_); - Span configBuffer = config.mapped->planes()[0]; + std::span configBuffer = config.mapped->planes()[0]; fe_->Prepare(reinterpret_cast(configBuffer.data())); } @@ -2309,7 +2309,7 @@ void PiSPCameraData::prepareBe(uint32_t bufferId, bool stitchSwapBuffers) const RPi::BufferObject &config = isp_[Isp::Config].acquireBuffer(); ASSERT(config.mapped); - Span configBufferSpan = config.mapped->planes()[0]; + std::span configBufferSpan = config.mapped->planes()[0]; pisp_be_tiles_config *configBuffer = reinterpret_cast(configBufferSpan.data()); be_->Prepare(configBuffer); diff --git a/src/libcamera/pipeline/rpi/vc4/vc4.cpp b/src/libcamera/pipeline/rpi/vc4/vc4.cpp index 3e9a490589..200e3b5872 100644 --- a/src/libcamera/pipeline/rpi/vc4/vc4.cpp +++ b/src/libcamera/pipeline/rpi/vc4/vc4.cpp @@ -893,7 +893,7 @@ void Vc4CameraData::setIspControls(const ControlList &controls) if (ctrls.contains(V4L2_CID_USER_BCM2835_ISP_LENS_SHADING)) { ControlValue &value = const_cast(ctrls.get(V4L2_CID_USER_BCM2835_ISP_LENS_SHADING)); - Span s = value.data(); + std::span s = value.data(); bcm2835_isp_lens_shading *ls = reinterpret_cast(s.data()); ls->dmabuf = lsTable_.get(); diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp index e20f08b67d..e7e387342a 100644 --- a/src/libcamera/pipeline/simple/simple.cpp +++ b/src/libcamera/pipeline/simple/simple.cpp @@ -412,7 +412,7 @@ public: SimplePipelineHandler(CameraManager *manager); std::unique_ptr generateConfiguration(Camera *camera, - Span roles) override; + std::span roles) override; int configure(Camera *camera, CameraConfiguration *config) override; int exportFrameBuffers(Camera *camera, Stream *stream, @@ -1407,7 +1407,7 @@ SimplePipelineHandler::SimplePipelineHandler(CameraManager *manager) } std::unique_ptr -SimplePipelineHandler::generateConfiguration(Camera *camera, Span roles) +SimplePipelineHandler::generateConfiguration(Camera *camera, std::span roles) { SimpleCameraData *data = cameraData(camera); std::unique_ptr config = diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp index 3435a76046..4b09bd6e2f 100644 --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp @@ -84,7 +84,7 @@ public: PipelineHandlerUVC(CameraManager *manager); std::unique_ptr generateConfiguration(Camera *camera, - Span roles) override; + std::span roles) override; int configure(Camera *camera, CameraConfiguration *config) override; int exportFrameBuffers(Camera *camera, Stream *stream, @@ -235,7 +235,7 @@ PipelineHandlerUVC::PipelineHandlerUVC(CameraManager *manager) std::unique_ptr PipelineHandlerUVC::generateConfiguration(Camera *camera, - Span roles) + std::span roles) { UVCCameraData *data = cameraData(camera); std::unique_ptr config = @@ -830,7 +830,7 @@ void UVCCameraData::addControl(uint32_t cid, const ControlInfo &v4l2Info, return; info = ControlInfo{ - Span{ values.data(), count }, + std::span{ values.data(), count }, !lcDef ? values.front() : *lcDef, }; break; diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp index 01d8fb25a2..62bf1f03f8 100644 --- a/src/libcamera/pipeline/vimc/vimc.cpp +++ b/src/libcamera/pipeline/vimc/vimc.cpp @@ -87,7 +87,7 @@ public: PipelineHandlerVimc(CameraManager *manager); std::unique_ptr generateConfiguration(Camera *camera, - Span roles) override; + std::span roles) override; int configure(Camera *camera, CameraConfiguration *config) override; int exportFrameBuffers(Camera *camera, Stream *stream, @@ -202,7 +202,7 @@ PipelineHandlerVimc::PipelineHandlerVimc(CameraManager *manager) std::unique_ptr PipelineHandlerVimc::generateConfiguration(Camera *camera, - Span roles) + std::span roles) { VimcCameraData *data = cameraData(camera); std::unique_ptr config = @@ -362,7 +362,7 @@ int PipelineHandlerVimc::start(Camera *camera, [[maybe_unused]] const ControlLis /* Map the mock IPA buffers to VIMC IPA to exercise IPC code paths. */ std::vector ipaBuffers; for (auto [i, buffer] : utils::enumerate(data->mockIPABufs_)) { - Span planes = buffer->planes(); + std::span planes = buffer->planes(); buffer->setCookie(i + 1); ipaBuffers.emplace_back(buffer->cookie(), diff --git a/src/libcamera/pipeline/virtual/virtual.cpp b/src/libcamera/pipeline/virtual/virtual.cpp index 9d59c26e22..e25dd85a73 100644 --- a/src/libcamera/pipeline/virtual/virtual.cpp +++ b/src/libcamera/pipeline/virtual/virtual.cpp @@ -78,7 +78,7 @@ public: ~PipelineHandlerVirtual(); std::unique_ptr generateConfiguration(Camera *camera, - Span roles) override; + std::span roles) override; int configure(Camera *camera, CameraConfiguration *config) override; int exportFrameBuffers(Camera *camera, Stream *stream, @@ -141,7 +141,7 @@ void VirtualCameraData::processRequest(Request *request) fmd.sequence = streamConfig.seq++; fmd.timestamp = currentTimestamp(); - Span planes = buffer->planes(); + std::span planes = buffer->planes(); for (const auto [i, p] : utils::enumerate(planes)) fmd.planes()[i].bytesused = p.length; @@ -252,7 +252,7 @@ PipelineHandlerVirtual::~PipelineHandlerVirtual() std::unique_ptr PipelineHandlerVirtual::generateConfiguration(Camera *camera, - Span roles) + std::span roles) { VirtualCameraData *data = cameraData(camera); auto config = std::make_unique(data); diff --git a/src/libcamera/process.cpp b/src/libcamera/process.cpp index 3090d75681..eb5a363a53 100644 --- a/src/libcamera/process.cpp +++ b/src/libcamera/process.cpp @@ -139,8 +139,8 @@ Process::~Process() * or a negative error code otherwise */ int Process::start(const std::string &path, - Span args, - Span fds) + std::span args, + std::span fds) { if (pid_ > 0) return -EBUSY; diff --git a/src/libcamera/pub_key.cpp b/src/libcamera/pub_key.cpp index f1d73a5c3e..ba15c56126 100644 --- a/src/libcamera/pub_key.cpp +++ b/src/libcamera/pub_key.cpp @@ -35,7 +35,7 @@ namespace libcamera { * \brief Construct a PubKey from key data * \param[in] key Key data encoded in DER format */ -PubKey::PubKey([[maybe_unused]] Span key) +PubKey::PubKey([[maybe_unused]] std::span key) : valid_(false) { #if HAVE_CRYPTO @@ -87,8 +87,8 @@ PubKey::~PubKey() * * \return True if the signature is valid, false otherwise */ -bool PubKey::verify([[maybe_unused]] Span data, - [[maybe_unused]] Span sig) const +bool PubKey::verify([[maybe_unused]] std::span data, + [[maybe_unused]] std::span sig) const { if (!valid_) return false; diff --git a/src/libcamera/sensor/camera_sensor_legacy.cpp b/src/libcamera/sensor/camera_sensor_legacy.cpp index 4338abc523..0256a00a31 100644 --- a/src/libcamera/sensor/camera_sensor_legacy.cpp +++ b/src/libcamera/sensor/camera_sensor_legacy.cpp @@ -73,7 +73,7 @@ public: std::vector sizes(unsigned int mbusCode) const override; Size resolution() const override; - V4L2SubdeviceFormat getFormat(Span mbusCodes, + V4L2SubdeviceFormat getFormat(std::span mbusCodes, const Size &size, const Size maxSize) const override; int setFormat(V4L2SubdeviceFormat *format, @@ -91,7 +91,7 @@ public: Orientation mountingOrientation() const override { return mountingOrientation_; } const ControlInfoMap &controls() const override; - ControlList getControls(Span ids) override; + ControlList getControls(std::span ids) override; int setControls(ControlList *ctrls) override; const std::vector & @@ -706,7 +706,7 @@ Size CameraSensorLegacy::resolution() const } V4L2SubdeviceFormat -CameraSensorLegacy::getFormat(Span mbusCodes, +CameraSensorLegacy::getFormat(std::span mbusCodes, const Size &size, Size maxSize) const { unsigned int desiredArea = size.width * size.height; @@ -998,7 +998,7 @@ const ControlInfoMap &CameraSensorLegacy::controls() const return subdev_->controls(); } -ControlList CameraSensorLegacy::getControls(Span ids) +ControlList CameraSensorLegacy::getControls(std::span ids) { return subdev_->getControls(ids); } diff --git a/src/libcamera/sensor/camera_sensor_raw.cpp b/src/libcamera/sensor/camera_sensor_raw.cpp index 849423dd20..e50111f1d5 100644 --- a/src/libcamera/sensor/camera_sensor_raw.cpp +++ b/src/libcamera/sensor/camera_sensor_raw.cpp @@ -74,7 +74,7 @@ public: std::vector sizes(unsigned int mbusCode) const override; Size resolution() const override; - V4L2SubdeviceFormat getFormat(Span mbusCodes, + V4L2SubdeviceFormat getFormat(std::span mbusCodes, const Size &size, const Size maxSize) const override; int setFormat(V4L2SubdeviceFormat *format, @@ -97,7 +97,7 @@ public: Orientation mountingOrientation() const override { return mountingOrientation_; } const ControlInfoMap &controls() const override; - ControlList getControls(Span ids) override; + ControlList getControls(std::span ids) override; int setControls(ControlList *ctrls) override; const std::vector & @@ -767,7 +767,7 @@ Size CameraSensorRaw::resolution() const } V4L2SubdeviceFormat -CameraSensorRaw::getFormat(Span mbusCodes, +CameraSensorRaw::getFormat(std::span mbusCodes, const Size &size, Size maxSize) const { unsigned int desiredArea = size.width * size.height; @@ -1113,7 +1113,7 @@ const ControlInfoMap &CameraSensorRaw::controls() const return subdev_->controls(); } -ControlList CameraSensorRaw::getControls(Span ids) +ControlList CameraSensorRaw::getControls(std::span ids) { return subdev_->getControls(ids); } diff --git a/src/libcamera/shared_mem_object.cpp b/src/libcamera/shared_mem_object.cpp index 6edab045d4..0c0cd7bf41 100644 --- a/src/libcamera/shared_mem_object.cpp +++ b/src/libcamera/shared_mem_object.cpp @@ -32,7 +32,7 @@ namespace libcamera { * backed by an anonymous file, using the memfd API. * * The allocated memory is exposed by the mem() function. If memory allocation - * fails, the function returns an empty Span. This can be also checked using the + * fails, the function returns an empty span. This can be also checked using the * bool() operator. * * The file descriptor for the backing file is exposed as a SharedFD by the fd() @@ -122,9 +122,9 @@ SharedMem &SharedMem::operator=(SharedMem &&rhs) */ /** - * \fn Span SharedMem::mem() const + * \fn std::span SharedMem::mem() const * \brief Retrieve the underlying shared memory - * \return The memory buffer, or an empty Span if allocation failed + * \return The memory buffer, or an empty span if allocation failed */ /** diff --git a/src/libcamera/software_isp/debayer_egl.cpp b/src/libcamera/software_isp/debayer_egl.cpp index 97aa037935..2a20914b0c 100644 --- a/src/libcamera/software_isp/debayer_egl.cpp +++ b/src/libcamera/software_isp/debayer_egl.cpp @@ -12,12 +12,12 @@ #include #include #include +#include #include #include #include #include -#include #include #include @@ -132,9 +132,9 @@ int DebayerEGL::getShaderVariableLocations(void) int DebayerEGL::initBayerShaders(PixelFormat inputFormat, PixelFormat outputFormat) { + std::span fragmentShaderData; + std::span vertexShaderData; std::vector shaderEnv; - Span fragmentShaderData; - Span vertexShaderData; GLenum err; /* Target gles 100 glsl requires "#version x" as first directive in shader */ diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp index 786c3855a5..258c82b8d2 100644 --- a/src/libcamera/v4l2_device.cpp +++ b/src/libcamera/v4l2_device.cpp @@ -178,7 +178,7 @@ void V4L2Device::close() * \return The control values in a ControlList on success, or an empty list on * error */ -ControlList V4L2Device::getControls(Span ids, const V4L2Request *request) +ControlList V4L2Device::getControls(std::span ids, const V4L2Request *request) { if (ids.empty()) return {}; @@ -210,7 +210,7 @@ ControlList V4L2Device::getControls(Span ids, const V4L2Request if (info.flags & V4L2_CTRL_FLAG_HAS_PAYLOAD) { ControlType type; ControlValue &value = ctrl.second; - Span data; + std::span data; switch (info.type) { case V4L2_CTRL_TYPE_U8: @@ -330,7 +330,7 @@ int V4L2Device::setControls(ControlList *ctrls, const V4L2Request *request) switch (iter->first->type()) { case ControlTypeUnsigned16: { if (value.isArray()) { - Span data = value.data(); + std::span data = value.data(); v4l2Ctrl.p_u16 = reinterpret_cast(data.data()); v4l2Ctrl.size = data.size(); } else { @@ -342,7 +342,7 @@ int V4L2Device::setControls(ControlList *ctrls, const V4L2Request *request) case ControlTypeUnsigned32: { if (value.isArray()) { - Span data = value.data(); + std::span data = value.data(); v4l2Ctrl.p_u32 = reinterpret_cast(data.data()); v4l2Ctrl.size = data.size(); } else { @@ -354,7 +354,7 @@ int V4L2Device::setControls(ControlList *ctrls, const V4L2Request *request) case ControlTypeInteger32: { if (value.isArray()) { - Span data = value.data(); + std::span data = value.data(); v4l2Ctrl.p_u32 = reinterpret_cast(data.data()); v4l2Ctrl.size = data.size(); } else { @@ -376,7 +376,7 @@ int V4L2Device::setControls(ControlList *ctrls, const V4L2Request *request) return -EINVAL; } - Span data = value.data(); + std::span data = value.data(); v4l2Ctrl.p_u8 = data.data(); v4l2Ctrl.size = data.size(); @@ -805,7 +805,7 @@ void V4L2Device::updateControlInfo() * \param[in] v4l2Ctrls List of V4L2 extended controls as returned by the driver */ void V4L2Device::updateControls(ControlList *ctrls, - Span v4l2Ctrls) + std::span v4l2Ctrls) { for (const v4l2_ext_control &v4l2Ctrl : v4l2Ctrls) { const unsigned int id = v4l2Ctrl.id; diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp index ca87598309..41dc5d0f65 100644 --- a/src/libcamera/v4l2_videodevice.cpp +++ b/src/libcamera/v4l2_videodevice.cpp @@ -289,7 +289,7 @@ V4L2BufferCache::Entry::Entry(bool free, uint64_t lastUsed, const FrameBuffer &b bool V4L2BufferCache::Entry::operator==(const FrameBuffer &buffer) const { - Span planes = buffer.planes(); + std::span planes = buffer.planes(); if (planes_.size() != planes.size()) return false; @@ -1682,7 +1682,7 @@ int V4L2VideoDevice::queueBuffer(FrameBuffer *buffer, const V4L2Request *request } bool multiPlanar = V4L2_TYPE_IS_MULTIPLANAR(buf.type); - Span planes = buffer->planes(); + std::span planes = buffer->planes(); const unsigned int numV4l2Planes = format_.planesCount; /* @@ -1915,7 +1915,7 @@ FrameBuffer *V4L2VideoDevice::dequeueBuffer() } metadata.sequence -= firstFrame_.value(); - Span framebufferPlanes = buffer->planes(); + std::span framebufferPlanes = buffer->planes(); unsigned int numV4l2Planes = multiPlanar ? buf.length : 1; if (numV4l2Planes != framebufferPlanes.size()) { diff --git a/src/libcamera/value_node.cpp b/src/libcamera/value_node.cpp index bb641ab643..3ea7c60060 100644 --- a/src/libcamera/value_node.cpp +++ b/src/libcamera/value_node.cpp @@ -10,11 +10,11 @@ #include #include +#include #include #include #include -#include #include /** @@ -608,7 +608,7 @@ ValueNode *ValueNode::add(std::initializer_list path, node = node->add(std::string{ name }, obj ? std::move(obj) : std::move(child)); if (!node) { - Span pathName{ std::data(path), i + 1 }; + std::span pathName{ std::data(path), i + 1 }; LOG(ValueNode, Error) << "Failed to populate '" << utils::join(pathName, "/") << "'"; diff --git a/src/libcamera/vector.cpp b/src/libcamera/vector.cpp index a135ab498e..66b310f64c 100644 --- a/src/libcamera/vector.cpp +++ b/src/libcamera/vector.cpp @@ -45,7 +45,7 @@ LOG_DEFINE_CATEGORY(Vector) */ /** - * \fn Vector::Vector(const Span data) + * \fn Vector::Vector(std::span data) * \brief Construct vector from supplied data * \param data Data from which to construct a vector * diff --git a/src/libcamera/yaml_parser.cpp b/src/libcamera/yaml_parser.cpp index 64b743767b..de1675c3ab 100644 --- a/src/libcamera/yaml_parser.cpp +++ b/src/libcamera/yaml_parser.cpp @@ -114,7 +114,7 @@ int YamlParserContext::yamlRead(void *data, unsigned char *buffer, size_t size, { File *file = static_cast(data); - Span buf{ buffer, size }; + std::span buf{ buffer, size }; ssize_t ret = file->read(buf); if (ret < 0) return 0; diff --git a/src/py/libcamera/py_helpers.cpp b/src/py/libcamera/py_helpers.cpp index b9142225c0..45d7848b3d 100644 --- a/src/py/libcamera/py_helpers.cpp +++ b/src/py/libcamera/py_helpers.cpp @@ -66,7 +66,7 @@ static ControlValue controlValueMaybeArray(const py::object &ob) { if (py::isinstance(ob) || py::isinstance(ob)) { std::vector vec = ob.cast>(); - return ControlValue(Span(vec)); + return ControlValue(std::span(vec)); } return ControlValue(ob.cast()); diff --git a/src/py/libcamera/py_main.cpp b/src/py/libcamera/py_main.cpp index 3b101f9961..c7f113bcf7 100644 --- a/src/py/libcamera/py_main.cpp +++ b/src/py/libcamera/py_main.cpp @@ -380,7 +380,7 @@ PYBIND11_MODULE(_libcamera, m) py::arg("planes"), py::arg("cookie") = 0) .def_property_readonly("metadata", &FrameBuffer::metadata, py::return_value_policy::reference_internal) .def_property_readonly("planes", [](const FrameBuffer &self) { - /* Convert from Span<> to std::vector<> */ + /* Convert from std::span<> to std::vector<> */ /* Note: this creates copies */ auto planes = self.planes(); std::vector v(planes.begin(), planes.end()); @@ -506,7 +506,7 @@ PYBIND11_MODULE(_libcamera, m) .def_readonly("sequence", &FrameMetadata::sequence) .def_readonly("timestamp", &FrameMetadata::timestamp) .def_property_readonly("planes", [](const FrameMetadata &self) { - /* Convert from Span<> to std::vector<> */ + /* Convert from std::span<> to std::vector<> */ /* Note: this creates a copy */ auto planes = self.planes(); std::vector v(planes.begin(), planes.end()); diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp index 03cd4810cc..863dded741 100644 --- a/src/v4l2/v4l2_camera_proxy.cpp +++ b/src/v4l2/v4l2_camera_proxy.cpp @@ -200,7 +200,7 @@ void V4L2CameraProxy::setFmtFromConfig(const StreamConfiguration &streamConfig) const auto &it = controls.find(&controls::FrameDurationLimits); if (it != controls.end()) { - Span duration = it->second.def().get>(); + std::span duration = it->second.def().get>(); v4l2TimePerFrame_.numerator = duration[0]; v4l2TimePerFrame_.denominator = 1000000; diff --git a/src/v4l2/v4l2_compat_manager.cpp b/src/v4l2/v4l2_compat_manager.cpp index 1a0ba5fef3..b07f865fb2 100644 --- a/src/v4l2/v4l2_compat_manager.cpp +++ b/src/v4l2/v4l2_compat_manager.cpp @@ -115,7 +115,7 @@ int V4L2CompatManager::getCameraIndex(int fd) */ auto cameras = cm_->cameras(); for (auto [index, camera] : utils::enumerate(cameras)) { - Span devices = camera->properties() + std::span devices = camera->properties() .get(properties::SystemDevices) .value_or(utils::defopt); diff --git a/test/controls/control_value.cpp b/test/controls/control_value.cpp index 032050a778..c2f9fc4826 100644 --- a/test/controls/control_value.cpp +++ b/test/controls/control_value.cpp @@ -50,14 +50,14 @@ protected: } std::array bools{ true, false }; - value.set(Span(bools)); + value.set(std::span(bools)); if (value.isNone() || !value.isArray() || value.type() != ControlTypeBool) { cerr << "Control type mismatch after setting to bool array" << endl; return TestFail; } - Span boolsResult = value.get>(); + std::span boolsResult = value.get>(); if (bools.size() != boolsResult.size() || !std::equal(bools.begin(), bools.end(), boolsResult.begin())) { cerr << "Control value mismatch after setting to bool" << endl; @@ -90,14 +90,14 @@ protected: } std::array bytes{ 3, 14, 15, 9 }; - value.set(Span(bytes)); + value.set(std::span(bytes)); if (value.isNone() || !value.isArray() || value.type() != ControlTypeByte) { cerr << "Control type mismatch after setting to uint8_t array" << endl; return TestFail; } - Span int8sResult = value.get>(); + std::span int8sResult = value.get>(); if (bytes.size() != int8sResult.size() || !std::equal(bytes.begin(), bytes.end(), int8sResult.begin())) { cerr << "Control value mismatch after setting to uint8_t array" << endl; @@ -130,14 +130,14 @@ protected: } std::array uint16s{ 3, 14, 15, 9 }; - value.set(Span(uint16s)); + value.set(std::span(uint16s)); if (value.isNone() || !value.isArray() || value.type() != ControlTypeUnsigned16) { cerr << "Control type mismatch after setting to uint16_t array" << endl; return TestFail; } - Span uint16sResult = value.get>(); + std::span uint16sResult = value.get>(); if (uint16s.size() != uint16sResult.size() || !std::equal(uint16s.begin(), uint16s.end(), uint16sResult.begin())) { cerr << "Control value mismatch after setting to uint16_t array" << endl; @@ -170,14 +170,14 @@ protected: } std::array uint32s{ 3, 14, 15, 9 }; - value.set(Span(uint32s)); + value.set(std::span(uint32s)); if (value.isNone() || !value.isArray() || value.type() != ControlTypeUnsigned32) { cerr << "Control type mismatch after setting to uint32_t array" << endl; return TestFail; } - Span uint32sResult = value.get>(); + std::span uint32sResult = value.get>(); if (uint32s.size() != uint32sResult.size() || !std::equal(uint32s.begin(), uint32s.end(), uint32sResult.begin())) { cerr << "Control value mismatch after setting to uint32_t array" << endl; @@ -210,14 +210,14 @@ protected: } std::array int32s{ 3, 14, 15, 9 }; - value.set(Span(int32s)); + value.set(std::span(int32s)); if (value.isNone() || !value.isArray() || value.type() != ControlTypeInteger32) { cerr << "Control type mismatch after setting to int32_t array" << endl; return TestFail; } - Span int32sResult = value.get>(); + std::span int32sResult = value.get>(); if (int32s.size() != int32sResult.size() || !std::equal(int32s.begin(), int32s.end(), int32sResult.begin())) { cerr << "Control value mismatch after setting to int32_t array" << endl; @@ -250,14 +250,14 @@ protected: } std::array int64s{ 3, 14, 15, 9 }; - value.set(Span(int64s)); + value.set(std::span(int64s)); if (value.isNone() || !value.isArray() || value.type() != ControlTypeInteger64) { cerr << "Control type mismatch after setting to int64_t array" << endl; return TestFail; } - Span int64sResult = value.get>(); + std::span int64sResult = value.get>(); if (int64s.size() != int64sResult.size() || !std::equal(int64s.begin(), int64s.end(), int64sResult.begin())) { cerr << "Control value mismatch after setting to int64_t array" << endl; @@ -290,14 +290,14 @@ protected: } std::array floats{ 3.141593, 2.718282, 299792458.0 }; - value.set(Span(floats)); + value.set(std::span(floats)); if (value.isNone() || !value.isArray() || value.type() != ControlTypeFloat) { cerr << "Control type mismatch after setting to float array" << endl; return TestFail; } - Span floatsResult = value.get>(); + std::span floatsResult = value.get>(); if (floats.size() != floatsResult.size() || !std::equal(floats.begin(), floats.end(), floatsResult.begin())) { cerr << "Control value mismatch after setting to float array" << endl; diff --git a/test/file.cpp b/test/file.cpp index 170e6ccdd0..9bf67cc4a9 100644 --- a/test/file.cpp +++ b/test/file.cpp @@ -280,7 +280,7 @@ protected: file.setFileName(self()); file.open(File::OpenModeFlag::ReadOnly); - Span data = file.map(); + std::span data = file.map(); if (data.empty()) { cerr << "Mapping of complete file failed" << endl; return TestFail; diff --git a/test/utils.cpp b/test/utils.cpp index eba3ed9fbf..0c73045fcd 100644 --- a/test/utils.cpp +++ b/test/utils.cpp @@ -8,11 +8,11 @@ #include #include #include +#include #include #include #include -#include #include #include @@ -99,7 +99,7 @@ protected: return TestFail; } - Span span{ integers }; + std::span span{ integers }; i = 0; for (auto [index, value] : utils::enumerate(span)) { diff --git a/test/v4l2_videodevice/controls.cpp b/test/v4l2_videodevice/controls.cpp index 7990f37dca..7919a95c89 100644 --- a/test/v4l2_videodevice/controls.cpp +++ b/test/v4l2_videodevice/controls.cpp @@ -95,7 +95,7 @@ protected: uint8_t u8Min = u8.min().get(); uint8_t u8Max = u8.max().get(); - Span u8Span = ctrls.get(VIVID_CID_U8_4D_ARRAY).get>(); + std::span u8Span = ctrls.get(VIVID_CID_U8_4D_ARRAY).get>(); bool valid = std::all_of(u8Span.begin(), u8Span.end(), [&](uint8_t v) { return v >= u8Min && v <= u8Max; }); if (!valid) { @@ -112,7 +112,7 @@ protected: std::array u8Values; std::fill(u8Values.begin(), u8Values.end(), u8.min().get()); - ctrls.set(VIVID_CID_U8_4D_ARRAY, Span(u8Values)); + ctrls.set(VIVID_CID_U8_4D_ARRAY, std::span(u8Values)); int ret = capture_->setControls(&ctrls); if (ret) { diff --git a/utils/codegen/controls.py b/utils/codegen/controls.py index 9399727bdb..083e22f088 100644 --- a/utils/codegen/controls.py +++ b/utils/codegen/controls.py @@ -117,9 +117,9 @@ class Control(object): return typ if self.__size: - return f"Span" + return f"std::span" else: - return f"Span" + return f"std::span" @property def direction(self): diff --git a/utils/gen-debug-controls.py b/utils/gen-debug-controls.py index a1c69bbd82..faf236ba81 100755 --- a/utils/gen-debug-controls.py +++ b/utils/gen-debug-controls.py @@ -56,7 +56,7 @@ def find_debug_controls(dir): files = [p for p in dir.rglob('*') if p.suffix in extensions] # The following regex was tested on - # set>( controls::debug::something , static_cast(var) ) + # set>( controls::debug::something , static_cast(var) ) # set<>( controls::debug::something , static_cast(var) ) # set( controls::debug::something , static_cast (var) ) exp = re.compile(r'set' # set function @@ -71,10 +71,10 @@ def find_debug_controls(dir): if match: m = FoundMatch(file=p, line=idx, type=match.group(1), name=match.group(2), whole_match=match.group(0)) - if m.type is not None and m.type.startswith('Span'): + if m.type is not None and m.type.startswith('std::span'): # Simple span type detection treating the last word # inside <> as type. - r = re.match(r'Span<(?:.*\s+)(.*)>', m.type) + r = re.match(r'std::span<(?:.*\s+)(.*)>', m.type) m.type = r.group(1) m.size = '[n]' matches.append(m) From patchwork Tue Aug 25 12:34:12 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= X-Patchwork-Id: 28084 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id CE254C333D for ; Tue, 25 Aug 2026 12:34:22 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id CEC76683EA; Tue, 25 Aug 2026 14:34:20 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="FLaIL40Z"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id A47ED6834C for ; Tue, 25 Aug 2026 14:34:16 +0200 (CEST) Received: from pb-laptop.local (185.221.143.32.nat.pool.zt.hu [185.221.143.32]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 7C4652EC; Tue, 25 Aug 2026 14:32:51 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1787661171; bh=RF9CmQDpQ6mD7qYuc2T1IjMsxxSOBLA7NJhJuzVP5SM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FLaIL40ZBN7oF0d+vs2aKR7E1QGJiu59NA0RXDOhwOrdeYjlVPTOAdi/l276MvTRS DBF4Eigr+LCmx5yOuc35OapXBNJPn83hwpaJL7DevL8yhlQIL6EnoCi57h6XD+GOQ7 rL2TvMuAFVQf1rPBndexmREItoZ8J7DFbwjybwlk= From: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= To: libcamera-devel@lists.libcamera.org Cc: Laurent Pinchart Subject: [PATCH v1 2/2] libcamera: base: span: Deprecate it Date: Tue, 25 Aug 2026 14:34:12 +0200 Message-ID: <20260825123412.837696-3-barnabas.pocze@ideasonboard.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260825123412.837696-1-barnabas.pocze@ideasonboard.com> References: <20260825123412.837696-1-barnabas.pocze@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" With the switch to C++20, this type has largely become unnecessary, but since users might still depend on it, do not remove it yet, only deprecate it. The tests are also kept for now. Signed-off-by: Barnabás Pőcze Reviewed-by: Laurent Pinchart --- include/libcamera/base/span.h | 4 ++-- test/span.cpp | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/include/libcamera/base/span.h b/include/libcamera/base/span.h index 5c7a98d8e7..c8da7cfd1c 100644 --- a/include/libcamera/base/span.h +++ b/include/libcamera/base/span.h @@ -86,7 +86,7 @@ struct tuple_size>; } /* namespace utils */ template -class Span +class [[deprecated("Use `std::span` instead")]] Span { public: using element_type = T; @@ -256,7 +256,7 @@ private: }; template -class Span +class [[deprecated("Use `std::span` instead")]] Span { public: using element_type = T; diff --git a/test/span.cpp b/test/span.cpp index 4b9f3279ad..56b29512f0 100644 --- a/test/span.cpp +++ b/test/span.cpp @@ -9,6 +9,7 @@ * Include first to ensure the header is self-contained, as there's no span.cpp * in libcamera. */ +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" #include #include