[libcamera-devel] [PATCH v3 2/3] libcamera: Give MappedFrameBuffer its own implementation
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Aug 9 16:28:01 CEST 2021
Hi Kieran,
Thank you for the patch.
On Mon, Aug 09, 2021 at 02:29:28PM +0100, Kieran Bingham wrote:
> The MappedFrameBuffer is a convenience feature which sits on top of the
> FrameBuffer and facilitates mapping it to CPU accessible memory with
> mmap.
>
> This implementation is internal and currently sits in the same internal
> files as the internal FrameBuffer, thus exposing those internals to
> users of the MappedFramebuffer implementation.
>
> Move the MappedFrameBuffer and MappedBuffer implementation to its own
> implementation files, and fix the sources throughout to use that
> accordingly.
>
> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> ---
> include/libcamera/internal/framebuffer.h | 36 ----
> .../libcamera/internal/mapped_framebuffer.h | 52 ++++++
> include/libcamera/internal/meson.build | 1 +
> src/android/camera_device.h | 2 -
> src/android/camera_stream.cpp | 2 +
> src/android/camera_stream.h | 2 -
> src/android/jpeg/encoder_libjpeg.cpp | 1 +
> src/android/jpeg/encoder_libjpeg.h | 1 -
> src/android/jpeg/post_processor_jpeg.h | 2 -
> src/android/jpeg/thumbnailer.cpp | 2 +
> src/android/jpeg/thumbnailer.h | 2 +-
> src/android/mm/generic_camera_buffer.cpp | 3 +-
> src/android/post_processor.h | 2 -
> src/android/yuv/post_processor_yuv.cpp | 1 +
> src/ipa/ipu3/ipu3.cpp | 2 +-
> src/ipa/raspberrypi/raspberrypi.cpp | 2 +-
> src/libcamera/framebuffer.cpp | 145 ---------------
> src/libcamera/mapped_framebuffer.cpp | 171 ++++++++++++++++++
> src/libcamera/meson.build | 1 +
> test/mapped-buffer.cpp | 2 +-
> 20 files changed, 237 insertions(+), 195 deletions(-)
> create mode 100644 include/libcamera/internal/mapped_framebuffer.h
> create mode 100644 src/libcamera/mapped_framebuffer.cpp
>
> diff --git a/include/libcamera/internal/framebuffer.h b/include/libcamera/internal/framebuffer.h
> index 8c187adf70c7..1352578a6cfb 100644
> --- a/include/libcamera/internal/framebuffer.h
> +++ b/include/libcamera/internal/framebuffer.h
> @@ -7,46 +7,10 @@
> #ifndef __LIBCAMERA_INTERNAL_FRAMEBUFFER_H__
> #define __LIBCAMERA_INTERNAL_FRAMEBUFFER_H__
>
> -#include <sys/mman.h>
> -#include <vector>
> -
> -#include <libcamera/base/class.h>
This header should be kept for Extensible::Private, used by
FrameBuffer::Private.
> -#include <libcamera/base/span.h>
> -
> #include <libcamera/framebuffer.h>
>
> namespace libcamera {
>
> -class MappedBuffer
> -{
> -public:
> - using Plane = Span<uint8_t>;
> -
> - ~MappedBuffer();
> -
> - MappedBuffer(MappedBuffer &&other);
> - MappedBuffer &operator=(MappedBuffer &&other);
> -
> - bool isValid() const { return error_ == 0; }
> - int error() const { return error_; }
> - const std::vector<Plane> &maps() const { return maps_; }
> -
> -protected:
> - MappedBuffer();
> -
> - int error_;
> - std::vector<Plane> maps_;
> -
> -private:
> - LIBCAMERA_DISABLE_COPY(MappedBuffer)
> -};
> -
> -class MappedFrameBuffer : public MappedBuffer
> -{
> -public:
> - MappedFrameBuffer(const FrameBuffer *buffer, int flags);
> -};
> -
> class FrameBuffer::Private : public Extensible::Private
> {
> LIBCAMERA_DECLARE_PUBLIC(FrameBuffer)
> diff --git a/include/libcamera/internal/mapped_framebuffer.h b/include/libcamera/internal/mapped_framebuffer.h
> new file mode 100644
> index 000000000000..41e587364260
> --- /dev/null
> +++ b/include/libcamera/internal/mapped_framebuffer.h
> @@ -0,0 +1,52 @@
> +/* SPDX-License-Identifier: LGPL-2.1-or-later */
> +/*
> + * Copyright (C) 2021, Google Inc.
> + *
> + * mapped_framebuffer.h - Frame buffer memory mapping support
> + */
> +#ifndef __LIBCAMERA_INTERNAL_MAPPED_FRAMEBUFFER_H__
> +#define __LIBCAMERA_INTERNAL_MAPPED_FRAMEBUFFER_H__
> +
> +#include <sys/mman.h>
> +#include <vector>
> +
> +#include <libcamera/base/class.h>
> +#include <libcamera/base/span.h>
> +
> +#include <libcamera/framebuffer.h>
> +
> +namespace libcamera {
> +
> +class MappedBuffer
> +{
> +public:
> + using Plane = Span<uint8_t>;
> +
> + ~MappedBuffer();
> +
> + MappedBuffer(MappedBuffer &&other);
> + MappedBuffer &operator=(MappedBuffer &&other);
> +
> + bool isValid() const { return error_ == 0; }
> + int error() const { return error_; }
> + const std::vector<Plane> &maps() const { return maps_; }
> +
> +protected:
> + MappedBuffer();
> +
> + int error_;
> + std::vector<Plane> maps_;
> +
> +private:
> + LIBCAMERA_DISABLE_COPY(MappedBuffer)
> +};
> +
> +class MappedFrameBuffer : public MappedBuffer
> +{
> +public:
> + MappedFrameBuffer(const FrameBuffer *buffer, int flags);
> +};
> +
> +} /* namespace libcamera */
> +
> +#endif /* __LIBCAMERA_INTERNAL_MAPPED_FRAMEBUFFER_H__ */
> diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build
> index dac1a2d36fa8..665fd6de4ed3 100644
> --- a/include/libcamera/internal/meson.build
> +++ b/include/libcamera/internal/meson.build
> @@ -28,6 +28,7 @@ libcamera_internal_headers = files([
> 'ipa_module.h',
> 'ipa_proxy.h',
> 'ipc_unixsocket.h',
> + 'mapped_framebuffer.h',
> 'media_device.h',
> 'media_object.h',
> 'pipeline_handler.h',
> diff --git a/src/android/camera_device.h b/src/android/camera_device.h
> index 089a6204605e..dd9aebba7553 100644
> --- a/src/android/camera_device.h
> +++ b/src/android/camera_device.h
> @@ -24,8 +24,6 @@
> #include <libcamera/request.h>
> #include <libcamera/stream.h>
>
> -#include "libcamera/internal/framebuffer.h"
> -
> #include "camera_capabilities.h"
> #include "camera_metadata.h"
> #include "camera_stream.h"
> diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp
> index bf4a7b41a70a..61b441830e18 100644
> --- a/src/android/camera_stream.cpp
> +++ b/src/android/camera_stream.cpp
> @@ -7,6 +7,8 @@
>
> #include "camera_stream.h"
>
> +#include <sys/mman.h>
> +
> #include "camera_buffer.h"
> #include "camera_device.h"
> #include "camera_metadata.h"
> diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h
> index 629d9e00e08d..2dab6c3a37d1 100644
> --- a/src/android/camera_stream.h
> +++ b/src/android/camera_stream.h
> @@ -19,8 +19,6 @@
> #include <libcamera/geometry.h>
> #include <libcamera/pixel_format.h>
>
> -#include "libcamera/internal/framebuffer.h"
> -
> class CameraDevice;
> class CameraMetadata;
> class PostProcessor;
> diff --git a/src/android/jpeg/encoder_libjpeg.cpp b/src/android/jpeg/encoder_libjpeg.cpp
> index e6358ca9466f..372018d2207f 100644
> --- a/src/android/jpeg/encoder_libjpeg.cpp
> +++ b/src/android/jpeg/encoder_libjpeg.cpp
> @@ -23,6 +23,7 @@
> #include <libcamera/pixel_format.h>
>
> #include "libcamera/internal/formats.h"
> +#include "libcamera/internal/mapped_framebuffer.h"
>
> using namespace libcamera;
>
> diff --git a/src/android/jpeg/encoder_libjpeg.h b/src/android/jpeg/encoder_libjpeg.h
> index 14bf89223982..61fbd1a69278 100644
> --- a/src/android/jpeg/encoder_libjpeg.h
> +++ b/src/android/jpeg/encoder_libjpeg.h
> @@ -10,7 +10,6 @@
> #include "encoder.h"
>
> #include "libcamera/internal/formats.h"
> -#include "libcamera/internal/framebuffer.h"
>
> #include <jpeglib.h>
>
> diff --git a/src/android/jpeg/post_processor_jpeg.h b/src/android/jpeg/post_processor_jpeg.h
> index 5c399be9eb6a..6fd3102229ab 100644
> --- a/src/android/jpeg/post_processor_jpeg.h
> +++ b/src/android/jpeg/post_processor_jpeg.h
> @@ -13,8 +13,6 @@
>
> #include <libcamera/geometry.h>
>
> -#include "libcamera/internal/framebuffer.h"
> -
> class CameraDevice;
>
> class PostProcessorJpeg : public PostProcessor
> diff --git a/src/android/jpeg/thumbnailer.cpp b/src/android/jpeg/thumbnailer.cpp
> index 5cb00744a688..535e2cece914 100644
> --- a/src/android/jpeg/thumbnailer.cpp
> +++ b/src/android/jpeg/thumbnailer.cpp
> @@ -11,6 +11,8 @@
>
> #include <libcamera/formats.h>
>
> +#include "libcamera/internal/mapped_framebuffer.h"
> +
> using namespace libcamera;
>
> LOG_DEFINE_CATEGORY(Thumbnailer)
> diff --git a/src/android/jpeg/thumbnailer.h b/src/android/jpeg/thumbnailer.h
> index 68cbf74329a9..4d086c4943b0 100644
> --- a/src/android/jpeg/thumbnailer.h
> +++ b/src/android/jpeg/thumbnailer.h
> @@ -7,10 +7,10 @@
> #ifndef __ANDROID_JPEG_THUMBNAILER_H__
> #define __ANDROID_JPEG_THUMBNAILER_H__
>
> +#include <libcamera/framebuffer.h>
> #include <libcamera/geometry.h>
>
> #include "libcamera/internal/formats.h"
> -#include "libcamera/internal/framebuffer.h"
>
> class Thumbnailer
> {
> diff --git a/src/android/mm/generic_camera_buffer.cpp b/src/android/mm/generic_camera_buffer.cpp
> index 2a4b77ea5236..b3af194c21dd 100644
> --- a/src/android/mm/generic_camera_buffer.cpp
> +++ b/src/android/mm/generic_camera_buffer.cpp
> @@ -7,11 +7,12 @@
>
> #include "../camera_buffer.h"
>
> +#include <sys/mman.h>
> #include <unistd.h>
>
> #include <libcamera/base/log.h>
>
> -#include "libcamera/internal/framebuffer.h"
> +#include "libcamera/internal/mapped_framebuffer.h"
>
> using namespace libcamera;
>
> diff --git a/src/android/post_processor.h b/src/android/post_processor.h
> index 689f85d9d3b8..ab2b2c606fd0 100644
> --- a/src/android/post_processor.h
> +++ b/src/android/post_processor.h
> @@ -10,8 +10,6 @@
> #include <libcamera/framebuffer.h>
> #include <libcamera/stream.h>
>
> -#include "libcamera/internal/framebuffer.h"
> -
> #include "camera_buffer.h"
>
> class CameraMetadata;
> diff --git a/src/android/yuv/post_processor_yuv.cpp b/src/android/yuv/post_processor_yuv.cpp
> index 772e805b32cc..509d4244d614 100644
> --- a/src/android/yuv/post_processor_yuv.cpp
> +++ b/src/android/yuv/post_processor_yuv.cpp
> @@ -16,6 +16,7 @@
> #include <libcamera/pixel_format.h>
>
> #include "libcamera/internal/formats.h"
> +#include "libcamera/internal/mapped_framebuffer.h"
>
> using namespace libcamera;
>
> diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp
> index 71698d36e50f..2647bf2f3b96 100644
> --- a/src/ipa/ipu3/ipu3.cpp
> +++ b/src/ipa/ipu3/ipu3.cpp
> @@ -20,7 +20,7 @@
> #include <libcamera/ipa/ipu3_ipa_interface.h>
> #include <libcamera/request.h>
>
> -#include "libcamera/internal/framebuffer.h"
> +#include "libcamera/internal/mapped_framebuffer.h"
>
> #include "ipu3_agc.h"
> #include "ipu3_awb.h"
> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
> index 48e11c699f29..76f67dd4567a 100644
> --- a/src/ipa/raspberrypi/raspberrypi.cpp
> +++ b/src/ipa/raspberrypi/raspberrypi.cpp
> @@ -28,7 +28,7 @@
> #include <libcamera/ipa/raspberrypi_ipa_interface.h>
> #include <libcamera/request.h>
>
> -#include "libcamera/internal/framebuffer.h"
> +#include "libcamera/internal/mapped_framebuffer.h"
>
> #include "agc_algorithm.hpp"
> #include "agc_status.h"
> diff --git a/src/libcamera/framebuffer.cpp b/src/libcamera/framebuffer.cpp
> index a59e93fbdf91..3d98affb20f9 100644
> --- a/src/libcamera/framebuffer.cpp
> +++ b/src/libcamera/framebuffer.cpp
> @@ -251,149 +251,4 @@ Request *FrameBuffer::request() const
> * 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/mapped_framebuffer.cpp b/src/libcamera/mapped_framebuffer.cpp
> new file mode 100644
> index 000000000000..0e30fc542154
> --- /dev/null
> +++ b/src/libcamera/mapped_framebuffer.cpp
> @@ -0,0 +1,171 @@
> +/* SPDX-License-Identifier: LGPL-2.1-or-later */
> +/*
> + * Copyright (C) 2021, Google Inc.
> + *
> + * mapped_framebuffer.cpp - Mapped Framebuffer support
> + */
> +
> +#include "libcamera/internal/mapped_framebuffer.h"
> +
> +#include <errno.h>
> +#include <string.h>
> +#include <sys/mman.h>
> +#include <unistd.h>
I think you can drop string.h and unistd.h.
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> +
> +#include <libcamera/base/log.h>
> +
> +/**
> + * \file libcamera/internal/mapped_framebuffer.h
> + * \brief Frame buffer memory mapping support
> + */
> +
> +namespace libcamera {
> +
> +LOG_DECLARE_CATEGORY(Buffer)
> +
> +/**
> + * \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/meson.build b/src/libcamera/meson.build
> index 4f08580157f9..e9230b983aeb 100644
> --- a/src/libcamera/meson.build
> +++ b/src/libcamera/meson.build
> @@ -28,6 +28,7 @@ libcamera_sources = files([
> 'ipc_pipe.cpp',
> 'ipc_pipe_unixsocket.cpp',
> 'ipc_unixsocket.cpp',
> + 'mapped_framebuffer.cpp',
> 'media_device.cpp',
> 'media_object.cpp',
> 'pipeline_handler.cpp',
> diff --git a/test/mapped-buffer.cpp b/test/mapped-buffer.cpp
> index c9479194cb68..a3d1511b74ce 100644
> --- a/test/mapped-buffer.cpp
> +++ b/test/mapped-buffer.cpp
> @@ -9,7 +9,7 @@
>
> #include <libcamera/framebuffer_allocator.h>
>
> -#include "libcamera/internal/framebuffer.h"
> +#include "libcamera/internal/mapped_framebuffer.h"
>
> #include "camera_test.h"
> #include "test.h"
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list