[libcamera-devel] [PATCH 6/6] libcamera-helpers: Provide helper library
Kieran Bingham
kieran.bingham at ideasonboard.com
Wed Jun 16 17:11:52 CEST 2021
Provide a library which build support on top of the libcamera API.
This currently implements the MappedBuffer and MappedFrameBuffer classes
which help with lifetime management of mmapping libcamera buffers.
Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
---
Documentation/Doxyfile.in | 2 +
.../buffer.h => helpers/mapped_buffer.h} | 10 +-
include/libcamera/helpers/meson.build | 10 +
include/libcamera/internal/meson.build | 1 -
include/libcamera/meson.build | 1 +
src/android/camera_device.h | 2 +-
src/android/camera_stream.h | 2 +-
src/android/jpeg/encoder_libjpeg.h | 3 +-
src/android/jpeg/post_processor_jpeg.h | 2 +-
src/android/jpeg/thumbnailer.h | 3 +-
src/android/meson.build | 1 +
src/android/mm/generic_camera_buffer.cpp | 2 +-
src/android/post_processor.h | 2 +-
src/ipa/ipu3/ipu3.cpp | 2 +-
src/ipa/ipu3/meson.build | 2 +-
src/ipa/raspberrypi/meson.build | 1 +
src/ipa/raspberrypi/raspberrypi.cpp | 2 +-
src/libcamera-helpers/mapped_buffer.cpp | 171 ++++++++++++++++++
src/libcamera/buffer.cpp | 149 ---------------
.../pipeline/raspberrypi/raspberrypi.cpp | 3 +-
src/meson.build | 1 +
test/mapped-buffer.cpp | 3 +-
test/meson.build | 14 +-
23 files changed, 220 insertions(+), 169 deletions(-)
rename include/libcamera/{internal/buffer.h => helpers/mapped_buffer.h} (81%)
create mode 100644 include/libcamera/helpers/meson.build
create mode 100644 src/libcamera-helpers/mapped_buffer.cpp
diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in
index c1b395bf0b83..e67775b99d26 100644
--- a/Documentation/Doxyfile.in
+++ b/Documentation/Doxyfile.in
@@ -791,9 +791,11 @@ WARN_LOGFILE =
INPUT = "@TOP_SRCDIR@/include/libcamera" \
"@TOP_SRCDIR@/src/ipa/libipa" \
"@TOP_SRCDIR@/src/libcamera" \
+ "@TOP_SRCDIR@/src/libcamera-helpers" \
"@TOP_SRCDIR@/src/libcamera-platform" \
"@TOP_BUILDDIR@/include/libcamera" \
"@TOP_BUILDDIR@/src/libcamera" \
+ "@TOP_BUILDDIR@/src/libcamera-helpers" \
"@TOP_BUILDDIR@/src/libcamera-platform"
# This tag can be used to specify the character encoding of the source files
diff --git a/include/libcamera/internal/buffer.h b/include/libcamera/helpers/mapped_buffer.h
similarity index 81%
rename from include/libcamera/internal/buffer.h
rename to include/libcamera/helpers/mapped_buffer.h
index 9da1fbd12c27..ece24f2ddd2c 100644
--- a/include/libcamera/internal/buffer.h
+++ b/include/libcamera/helpers/mapped_buffer.h
@@ -2,16 +2,16 @@
/*
* Copyright (C) 2020, Google Inc.
*
- * buffer.h - Internal buffer handling
+ * mapped_buffer.h - Mapped Buffer handling
*/
-#ifndef __LIBCAMERA_INTERNAL_BUFFER_H__
-#define __LIBCAMERA_INTERNAL_BUFFER_H__
+#ifndef __LIBCAMERA_HELPERS_MAPPED_BUFFER_H__
+#define __LIBCAMERA_HELPERS_MAPPED_BUFFER_H__
#include <sys/mman.h>
#include <vector>
-#include <libcamera/class.h>
#include <libcamera/buffer.h>
+#include <libcamera/class.h>
#include <libcamera/span.h>
namespace libcamera {
@@ -48,4 +48,4 @@ public:
} /* namespace libcamera */
-#endif /* __LIBCAMERA_INTERNAL_BUFFER_H__ */
+#endif /* __LIBCAMERA_HELPERS_MAPPED_BUFFER_H__ */
diff --git a/include/libcamera/helpers/meson.build b/include/libcamera/helpers/meson.build
new file mode 100644
index 000000000000..c025eb930600
--- /dev/null
+++ b/include/libcamera/helpers/meson.build
@@ -0,0 +1,10 @@
+# SPDX-License-Identifier: CC0-1.0
+
+libcamera_helpers_include_dir = libcamera_include_dir / 'helpers'
+
+libcamera_helpers_headers = files([
+ 'mapped_buffer.h',
+])
+
+install_headers(libcamera_helpers_headers,
+ subdir: libcamera_helpers_include_dir)
diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build
index 1187cc1f63e4..ecd0c8ba183e 100644
--- a/include/libcamera/internal/meson.build
+++ b/include/libcamera/internal/meson.build
@@ -11,7 +11,6 @@ libcamera_tracepoint_header = custom_target(
libcamera_internal_headers = files([
'bayer_format.h',
- 'buffer.h',
'byte_stream_buffer.h',
'camera_controls.h',
'camera_sensor.h',
diff --git a/include/libcamera/meson.build b/include/libcamera/meson.build
index 7bfcebc79c86..7c98d8744ec2 100644
--- a/include/libcamera/meson.build
+++ b/include/libcamera/meson.build
@@ -20,6 +20,7 @@ libcamera_public_headers = files([
include_dir = libcamera_include_dir / 'libcamera'
+subdir('helpers')
subdir('internal')
subdir('ipa')
subdir('platform')
diff --git a/src/android/camera_device.h b/src/android/camera_device.h
index b9be3df58084..26e5bbc0c26c 100644
--- a/src/android/camera_device.h
+++ b/src/android/camera_device.h
@@ -25,7 +25,7 @@
#include <libcamera/platform/message.h>
#include <libcamera/platform/thread.h>
-#include "libcamera/internal/buffer.h"
+#include <libcamera/helpers/mapped_buffer.h>
#include "camera_metadata.h"
#include "camera_stream.h"
diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h
index 3401672233ca..12484cb607ed 100644
--- a/src/android/camera_stream.h
+++ b/src/android/camera_stream.h
@@ -19,7 +19,7 @@
#include <libcamera/geometry.h>
#include <libcamera/pixel_format.h>
-#include "libcamera/internal/buffer.h"
+#include <libcamera/helpers/mapped_buffer.h>
class CameraDevice;
class CameraMetadata;
diff --git a/src/android/jpeg/encoder_libjpeg.h b/src/android/jpeg/encoder_libjpeg.h
index 838da7728382..ca7c1958e20e 100644
--- a/src/android/jpeg/encoder_libjpeg.h
+++ b/src/android/jpeg/encoder_libjpeg.h
@@ -9,7 +9,8 @@
#include "encoder.h"
-#include "libcamera/internal/buffer.h"
+#include <libcamera/helpers/mapped_buffer.h>
+
#include "libcamera/internal/formats.h"
#include <jpeglib.h>
diff --git a/src/android/jpeg/post_processor_jpeg.h b/src/android/jpeg/post_processor_jpeg.h
index 5d2d4ab224b1..4700a7f562a2 100644
--- a/src/android/jpeg/post_processor_jpeg.h
+++ b/src/android/jpeg/post_processor_jpeg.h
@@ -13,7 +13,7 @@
#include <libcamera/geometry.h>
-#include "libcamera/internal/buffer.h"
+#include <libcamera/helpers/mapped_buffer.h>
class CameraDevice;
diff --git a/src/android/jpeg/thumbnailer.h b/src/android/jpeg/thumbnailer.h
index 4e9226c34104..483b41dfe47d 100644
--- a/src/android/jpeg/thumbnailer.h
+++ b/src/android/jpeg/thumbnailer.h
@@ -9,7 +9,8 @@
#include <libcamera/geometry.h>
-#include "libcamera/internal/buffer.h"
+#include <libcamera/helpers/mapped_buffer.h>
+
#include "libcamera/internal/formats.h"
class Thumbnailer
diff --git a/src/android/meson.build b/src/android/meson.build
index 6edaa1185905..abde9fd2def0 100644
--- a/src/android/meson.build
+++ b/src/android/meson.build
@@ -5,6 +5,7 @@ android_deps = [
dependency('libjpeg', required : get_option('android')),
dependency('yaml-0.1', required : get_option('android')),
libcamera_dep,
+ libcamera_helpers,
]
android_enabled = true
diff --git a/src/android/mm/generic_camera_buffer.cpp b/src/android/mm/generic_camera_buffer.cpp
index f138ada14964..64c73c5716ad 100644
--- a/src/android/mm/generic_camera_buffer.cpp
+++ b/src/android/mm/generic_camera_buffer.cpp
@@ -11,7 +11,7 @@
#include <libcamera/platform/log.h>
-#include "libcamera/internal/buffer.h"
+#include <libcamera/helpers/mapped_buffer.h>
using namespace libcamera;
diff --git a/src/android/post_processor.h b/src/android/post_processor.h
index 547fda379ed8..53220edaf24d 100644
--- a/src/android/post_processor.h
+++ b/src/android/post_processor.h
@@ -10,7 +10,7 @@
#include <libcamera/buffer.h>
#include <libcamera/stream.h>
-#include "libcamera/internal/buffer.h"
+#include <libcamera/helpers/mapped_buffer.h>
#include "camera_buffer.h"
diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp
index ca1ce4dc96d0..158eb3bc49e5 100644
--- a/src/ipa/ipu3/ipu3.cpp
+++ b/src/ipa/ipu3/ipu3.cpp
@@ -20,7 +20,7 @@
#include <libcamera/platform/log.h>
-#include "libcamera/internal/buffer.h"
+#include <libcamera/helpers/mapped_buffer.h>
#include "ipu3_agc.h"
#include "ipu3_awb.h"
diff --git a/src/ipa/ipu3/meson.build b/src/ipa/ipu3/meson.build
index 0d843846acde..34620024def7 100644
--- a/src/ipa/ipu3/meson.build
+++ b/src/ipa/ipu3/meson.build
@@ -12,7 +12,7 @@ mod = shared_module(ipa_name,
[ipu3_ipa_sources, libcamera_generated_ipa_headers],
name_prefix : '',
include_directories : [ipa_includes, libipa_includes],
- dependencies : libcamera_dep,
+ dependencies : [libcamera_dep, libcamera_helpers],
link_with : libipa,
install : true,
install_dir : ipa_install_dir)
diff --git a/src/ipa/raspberrypi/meson.build b/src/ipa/raspberrypi/meson.build
index 230356d3ce3a..b2ce6f3e8618 100644
--- a/src/ipa/raspberrypi/meson.build
+++ b/src/ipa/raspberrypi/meson.build
@@ -4,6 +4,7 @@ ipa_name = 'ipa_rpi'
rpi_ipa_deps = [
libcamera_dep,
+ libcamera_helpers,
dependency('boost'),
libatomic,
]
diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
index 90f35d970fd0..b85a1e51d757 100644
--- a/src/ipa/raspberrypi/raspberrypi.cpp
+++ b/src/ipa/raspberrypi/raspberrypi.cpp
@@ -26,7 +26,7 @@
#include <libcamera/platform/log.h>
-#include "libcamera/internal/buffer.h"
+#include <libcamera/helpers/mapped_buffer.h>
#include <linux/bcm2835-isp.h>
diff --git a/src/libcamera-helpers/mapped_buffer.cpp b/src/libcamera-helpers/mapped_buffer.cpp
new file mode 100644
index 000000000000..0d4517b62f65
--- /dev/null
+++ b/src/libcamera-helpers/mapped_buffer.cpp
@@ -0,0 +1,171 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2021, Google Inc.
+ *
+ * mapped_buffer.cpp - Mapped Buffer handling
+ */
+
+#include <libcamera/helpers/mapped_buffer.h>
+
+#include <errno.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <unistd.h>
+
+#include <libcamera/platform/log.h>
+
+/**
+ * \file libcamera/helpers/mapped_buffer.h
+ * \brief Mapped Buffer handling
+ */
+
+namespace libcamera {
+
+LOG_DEFINE_CATEGORY(MappedBuffer)
+
+/**
+ * \class MappedBuffer
+ * \brief Provide an interface to support managing memory mapped buffers
+ *
+ * The MappedBuffer interface provides access to a set of MappedPlanes which
+ * are available for access by the CPU.
+ *
+ * This class is not meant to be constructed directly, but instead derived
+ * classes should be used to implement the correct mapping of a source buffer.
+ *
+ * This allows treating CPU accessible memory through a generic interface
+ * regardless of whether it originates from a libcamera FrameBuffer or other
+ * source.
+ */
+
+/**
+ * \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
+ * region.
+ */
+
+/**
+ * \brief Construct an empty MappedBuffer
+ */
+MappedBuffer::MappedBuffer()
+ : error_(0)
+{
+}
+
+/**
+ * \brief Move constructor, construct the MappedBuffer with the contents of \a
+ * other using move semantics
+ * \param[in] other The other MappedBuffer
+ *
+ * Moving a MappedBuffer moves the mappings contained in the \a other to the new
+ * MappedBuffer and invalidates the \a other.
+ *
+ * No mappings are unmapped or destroyed in this process.
+ */
+MappedBuffer::MappedBuffer(MappedBuffer &&other)
+{
+ *this = std::move(other);
+}
+
+/**
+ * \brief Move assignment operator, replace the mappings with those of \a other
+* \param[in] other The other MappedBuffer
+ *
+ * Moving a MappedBuffer moves the mappings contained in the \a other to the new
+ * MappedBuffer and invalidates the \a other.
+ *
+ * No mappings are unmapped or destroyed in this process.
+ */
+MappedBuffer &MappedBuffer::operator=(MappedBuffer &&other)
+{
+ error_ = other.error_;
+ maps_ = std::move(other.maps_);
+ other.error_ = -ENOENT;
+
+ return *this;
+}
+
+MappedBuffer::~MappedBuffer()
+{
+ for (Plane &map : maps_)
+ munmap(map.data(), map.size());
+}
+
+/**
+ * \fn MappedBuffer::isValid()
+ * \brief Check if the MappedBuffer instance is valid
+ * \return True if the MappedBuffer has valid mappings, false otherwise
+ */
+
+/**
+ * \fn MappedBuffer::error()
+ * \brief Retrieve the map error status
+ *
+ * This function retrieves the error status from the MappedBuffer.
+ * The error status is a negative number as defined by errno.h. If
+ * no error occurred, this function returns 0.
+ *
+ * \return The map error code
+ */
+
+/**
+ * \fn MappedBuffer::maps()
+ * \brief Retrieve the mapped planes
+ *
+ * This function retrieves the successfully mapped planes stored as a vector
+ * of Span<uint8_t> to provide access to the mapped memory.
+ *
+ * \return A vector of the mapped planes
+ */
+
+/**
+ * \var MappedBuffer::error_
+ * \brief Stores the error value if present
+ *
+ * MappedBuffer derived classes shall set this to a negative value as defined
+ * by errno.h if an error occured during the mapping process.
+ */
+
+/**
+ * \var MappedBuffer::maps_
+ * \brief Stores the internal mapped planes
+ *
+ * MappedBuffer derived classes shall store the mappings they create in this
+ * vector which is parsed during destruct to unmap any memory mappings which
+ * completed successfully.
+ */
+
+/**
+ * \class MappedFrameBuffer
+ * \brief Map a FrameBuffer using the MappedBuffer interface
+ */
+
+/**
+ * \brief Map all planes of a FrameBuffer
+ * \param[in] buffer FrameBuffer to be mapped
+ * \param[in] flags Protection flags to apply to map
+ *
+ * Construct an object to map a frame buffer for CPU access.
+ * The flags are passed directly to mmap and should be either PROT_READ,
+ * PROT_WRITE, or a bitwise-or combination of both.
+ */
+MappedFrameBuffer::MappedFrameBuffer(const FrameBuffer *buffer, int flags)
+{
+ maps_.reserve(buffer->planes().size());
+
+ for (const FrameBuffer::Plane &plane : buffer->planes()) {
+ void *address = mmap(nullptr, plane.length, flags,
+ MAP_SHARED, plane.fd.fd(), 0);
+ if (address == MAP_FAILED) {
+ error_ = -errno;
+ LOG(MappedBuffer, Error) << "Failed to mmap plane";
+ break;
+ }
+
+ maps_.emplace_back(static_cast<uint8_t *>(address), plane.length);
+ }
+}
+
+} /* namespace libcamera */
diff --git a/src/libcamera/buffer.cpp b/src/libcamera/buffer.cpp
index 3c862820e6e1..0a232d791fcd 100644
--- a/src/libcamera/buffer.cpp
+++ b/src/libcamera/buffer.cpp
@@ -6,7 +6,6 @@
*/
#include <libcamera/buffer.h>
-#include "libcamera/internal/buffer.h"
#include <errno.h>
#include <string.h>
@@ -18,9 +17,6 @@
/**
* \file libcamera/buffer.h
* \brief Buffer handling
- *
- * \file libcamera/internal/buffer.h
- * \brief Internal buffer handling support
*/
namespace libcamera {
@@ -235,149 +231,4 @@ FrameBuffer::FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie)
* indicate that the metadata is invalid.
*/
-/**
- * \class MappedBuffer
- * \brief Provide an interface to support managing memory mapped buffers
- *
- * The MappedBuffer interface provides access to a set of MappedPlanes which
- * are available for access by the CPU.
- *
- * This class is not meant to be constructed directly, but instead derived
- * classes should be used to implement the correct mapping of a source buffer.
- *
- * This allows treating CPU accessible memory through a generic interface
- * regardless of whether it originates from a libcamera FrameBuffer or other
- * source.
- */
-
-/**
- * \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
- * region.
- */
-
-/**
- * \brief Construct an empty MappedBuffer
- */
-MappedBuffer::MappedBuffer()
- : error_(0)
-{
-}
-
-/**
- * \brief Move constructor, construct the MappedBuffer with the contents of \a
- * other using move semantics
- * \param[in] other The other MappedBuffer
- *
- * Moving a MappedBuffer moves the mappings contained in the \a other to the new
- * MappedBuffer and invalidates the \a other.
- *
- * No mappings are unmapped or destroyed in this process.
- */
-MappedBuffer::MappedBuffer(MappedBuffer &&other)
-{
- *this = std::move(other);
-}
-
-/**
- * \brief Move assignment operator, replace the mappings with those of \a other
-* \param[in] other The other MappedBuffer
- *
- * Moving a MappedBuffer moves the mappings contained in the \a other to the new
- * MappedBuffer and invalidates the \a other.
- *
- * No mappings are unmapped or destroyed in this process.
- */
-MappedBuffer &MappedBuffer::operator=(MappedBuffer &&other)
-{
- error_ = other.error_;
- maps_ = std::move(other.maps_);
- other.error_ = -ENOENT;
-
- return *this;
-}
-
-MappedBuffer::~MappedBuffer()
-{
- for (Plane &map : maps_)
- munmap(map.data(), map.size());
-}
-
-/**
- * \fn MappedBuffer::isValid()
- * \brief Check if the MappedBuffer instance is valid
- * \return True if the MappedBuffer has valid mappings, false otherwise
- */
-
-/**
- * \fn MappedBuffer::error()
- * \brief Retrieve the map error status
- *
- * This function retrieves the error status from the MappedBuffer.
- * The error status is a negative number as defined by errno.h. If
- * no error occurred, this function returns 0.
- *
- * \return The map error code
- */
-
-/**
- * \fn MappedBuffer::maps()
- * \brief Retrieve the mapped planes
- *
- * This function retrieves the successfully mapped planes stored as a vector
- * of Span<uint8_t> to provide access to the mapped memory.
- *
- * \return A vector of the mapped planes
- */
-
-/**
- * \var MappedBuffer::error_
- * \brief Stores the error value if present
- *
- * MappedBuffer derived classes shall set this to a negative value as defined
- * by errno.h if an error occured during the mapping process.
- */
-
-/**
- * \var MappedBuffer::maps_
- * \brief Stores the internal mapped planes
- *
- * MappedBuffer derived classes shall store the mappings they create in this
- * vector which is parsed during destruct to unmap any memory mappings which
- * completed successfully.
- */
-
-/**
- * \class MappedFrameBuffer
- * \brief Map a FrameBuffer using the MappedBuffer interface
- */
-
-/**
- * \brief Map all planes of a FrameBuffer
- * \param[in] buffer FrameBuffer to be mapped
- * \param[in] flags Protection flags to apply to map
- *
- * Construct an object to map a frame buffer for CPU access.
- * The flags are passed directly to mmap and should be either PROT_READ,
- * PROT_WRITE, or a bitwise-or combination of both.
- */
-MappedFrameBuffer::MappedFrameBuffer(const FrameBuffer *buffer, int flags)
-{
- maps_.reserve(buffer->planes().size());
-
- for (const FrameBuffer::Plane &plane : buffer->planes()) {
- void *address = mmap(nullptr, plane.length, flags,
- MAP_SHARED, plane.fd.fd(), 0);
- if (address == MAP_FAILED) {
- error_ = -errno;
- LOG(Buffer, Error) << "Failed to mmap plane";
- break;
- }
-
- maps_.emplace_back(static_cast<uint8_t *>(address), plane.length);
- }
-}
-
} /* namespace libcamera */
diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index dc3fe63112d4..e6849733f979 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -29,8 +29,9 @@
#include <linux/bcm2835-isp.h>
#include <linux/videodev2.h>
+#include <libcamera/helpers/mapped_buffer.h>
+
#include "libcamera/internal/bayer_format.h"
-#include "libcamera/internal/buffer.h"
#include "libcamera/internal/camera_sensor.h"
#include "libcamera/internal/delayed_controls.h"
#include "libcamera/internal/device_enumerator.h"
diff --git a/src/meson.build b/src/meson.build
index 70e1a4618a0f..380de28d0f7a 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -31,6 +31,7 @@ libcamera_objects = []
# libcamera must be built first as a dependency to the other components.
subdir('libcamera-platform')
subdir('libcamera')
+subdir('libcamera-helpers')
subdir('android')
subdir('ipa')
diff --git a/test/mapped-buffer.cpp b/test/mapped-buffer.cpp
index 5de8201e45f6..218d700f40da 100644
--- a/test/mapped-buffer.cpp
+++ b/test/mapped-buffer.cpp
@@ -4,12 +4,11 @@
*
* libcamera internal MappedBuffer tests
*/
-
#include <iostream>
#include <libcamera/framebuffer_allocator.h>
-#include "libcamera/internal/buffer.h"
+#include <libcamera/helpers/mapped_buffer.h>
#include "camera_test.h"
#include "test.h"
diff --git a/test/meson.build b/test/meson.build
index 045ad2a2d7c9..ee0d127cf1ec 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -40,7 +40,6 @@ internal_tests = [
['file', 'file.cpp'],
['file-descriptor', 'file-descriptor.cpp'],
['hotplug-cameras', 'hotplug-cameras.cpp'],
- ['mapped-buffer', 'mapped-buffer.cpp'],
['message', 'message.cpp'],
['object', 'object.cpp'],
['object-delete', 'object-delete.cpp'],
@@ -53,6 +52,10 @@ internal_tests = [
['utils', 'utils.cpp'],
]
+helpers_tests = [
+ ['mapped-buffer', 'mapped-buffer.cpp'],
+]
+
foreach t : public_tests
exe = executable(t[0], t[1],
dependencies : libcamera_dep,
@@ -70,3 +73,12 @@ foreach t : internal_tests
test(t[0], exe)
endforeach
+
+foreach t : helpers_tests
+ exe = executable(t[0], t[1],
+ dependencies : [libcamera_dep, libcamera_helpers],
+ link_with : test_libraries,
+ include_directories : test_includes_internal)
+
+ test(t[0], exe)
+endforeach
--
2.30.2
More information about the libcamera-devel
mailing list