[libcamera-devel] [PATCH v1] pipeline: raspberrypi: Remove enum BuffferMask from the mojom interface
David Plowman
david.plowman at raspberrypi.com
Wed Nov 23 12:42:21 CET 2022
Hi Naush
Thanks for this change.
On Tue, 22 Nov 2022 at 15:42, Naushir Patuck via libcamera-devel
<libcamera-devel at lists.libcamera.org> wrote:
>
> The BufferMask enum provides a way of identifying which stream a frame buffer
> belongs to. This enum is defined in the raspberrypi.mojom interface file.
> However, the IPA does not need these enum definitions to mmap buffers that it
> uses.
>
> Move this enum out of the raspberrypi.mojom interface file and put it into
> the RPi namespace visible only to the pipeline handler. This removes the
> need to include the auto-generated IPA interface header in the RPi::Stream
> definition.
>
> Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
Reviewed-by: David Plowman <david.plowman at raspberrypi.com>
Thanks!
David
> ---
> include/libcamera/ipa/raspberrypi.mojom | 8 --------
> src/ipa/raspberrypi/raspberrypi.cpp | 6 +++---
> .../pipeline/raspberrypi/raspberrypi.cpp | 20 +++++++++----------
> .../pipeline/raspberrypi/rpi_stream.cpp | 6 ++----
> .../pipeline/raspberrypi/rpi_stream.h | 13 +++++++++---
> 5 files changed, 25 insertions(+), 28 deletions(-)
>
> diff --git a/include/libcamera/ipa/raspberrypi.mojom b/include/libcamera/ipa/raspberrypi.mojom
> index 40f78d9e3b3f..d53644fe296c 100644
> --- a/include/libcamera/ipa/raspberrypi.mojom
> +++ b/include/libcamera/ipa/raspberrypi.mojom
> @@ -8,14 +8,6 @@ module ipa.RPi;
>
> import "include/libcamera/ipa/core.mojom";
>
> -enum BufferMask {
> - MaskID = 0x00ffff,
> - MaskStats = 0x010000,
> - MaskEmbeddedData = 0x020000,
> - MaskBayerData = 0x040000,
> - MaskExternalBuffer = 0x100000,
> -};
> -
> /* Size of the LS grid allocation. */
> const uint32 MaxLsGridSize = 0x8000;
>
> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
> index beb076dc4909..4e10c57d7f87 100644
> --- a/src/ipa/raspberrypi/raspberrypi.cpp
> +++ b/src/ipa/raspberrypi/raspberrypi.cpp
> @@ -515,7 +515,7 @@ void IPARPi::signalStatReady(uint32_t bufferId)
>
> reportMetadata();
>
> - statsMetadataComplete.emit(bufferId & MaskID, libcameraMetadata_);
> + statsMetadataComplete.emit(bufferId, libcameraMetadata_);
> }
>
> void IPARPi::signalQueueRequest(const ControlList &controls)
> @@ -534,7 +534,7 @@ void IPARPi::signalIspPrepare(const ISPConfig &data)
> frameCount_++;
>
> /* Ready to push the input buffer into the ISP. */
> - runIsp.emit(data.bayerBufferId & MaskID);
> + runIsp.emit(data.bayerBufferId);
> }
>
> void IPARPi::reportMetadata()
> @@ -1001,7 +1001,7 @@ void IPARPi::queueRequest(const ControlList &controls)
>
> void IPARPi::returnEmbeddedBuffer(unsigned int bufferId)
> {
> - embeddedComplete.emit(bufferId & MaskID);
> + embeddedComplete.emit(bufferId);
> }
>
> void IPARPi::prepareISP(const ISPConfig &data)
> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> index 087c71b65700..0e0b71945640 100644
> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> @@ -1484,10 +1484,10 @@ int PipelineHandlerRPi::prepareBuffers(Camera *camera)
> * Pass the stats and embedded data buffers to the IPA. No other
> * buffers need to be passed.
> */
> - mapBuffers(camera, data->isp_[Isp::Stats].getBuffers(), ipa::RPi::MaskStats);
> + mapBuffers(camera, data->isp_[Isp::Stats].getBuffers(), RPi::MaskStats);
> if (data->sensorMetadata_)
> mapBuffers(camera, data->unicam_[Unicam::Embedded].getBuffers(),
> - ipa::RPi::MaskEmbeddedData);
> + RPi::MaskEmbeddedData);
>
> return 0;
> }
> @@ -1727,7 +1727,7 @@ void RPiCameraData::statsMetadataComplete(uint32_t bufferId, const ControlList &
> if (!isRunning())
> return;
>
> - FrameBuffer *buffer = isp_[Isp::Stats].getBuffers().at(bufferId);
> + FrameBuffer *buffer = isp_[Isp::Stats].getBuffers().at(bufferId & RPi::MaskID);
>
> handleStreamBuffer(buffer, &isp_[Isp::Stats]);
>
> @@ -1763,9 +1763,9 @@ void RPiCameraData::runIsp(uint32_t bufferId)
> if (!isRunning())
> return;
>
> - FrameBuffer *buffer = unicam_[Unicam::Image].getBuffers().at(bufferId);
> + FrameBuffer *buffer = unicam_[Unicam::Image].getBuffers().at(bufferId & RPi::MaskID);
>
> - LOG(RPI, Debug) << "Input re-queue to ISP, buffer id " << bufferId
> + LOG(RPI, Debug) << "Input re-queue to ISP, buffer id " << (bufferId & RPi::MaskID)
> << ", timestamp: " << buffer->metadata().timestamp;
>
> isp_[Isp::Input].queueBuffer(buffer);
> @@ -1778,7 +1778,7 @@ void RPiCameraData::embeddedComplete(uint32_t bufferId)
> if (!isRunning())
> return;
>
> - FrameBuffer *buffer = unicam_[Unicam::Embedded].getBuffers().at(bufferId);
> + FrameBuffer *buffer = unicam_[Unicam::Embedded].getBuffers().at(bufferId & RPi::MaskID);
> handleStreamBuffer(buffer, &unicam_[Unicam::Embedded]);
> handleState();
> }
> @@ -1931,7 +1931,7 @@ void RPiCameraData::ispOutputDequeue(FrameBuffer *buffer)
> * application until after the IPA signals so.
> */
> if (stream == &isp_[Isp::Stats]) {
> - ipa_->signalStatReady(ipa::RPi::MaskStats | static_cast<unsigned int>(index));
> + ipa_->signalStatReady(RPi::MaskStats | static_cast<unsigned int>(index));
> } else {
> /* Any other ISP output can be handed back to the application now. */
> handleStreamBuffer(buffer, stream);
> @@ -2006,7 +2006,7 @@ void RPiCameraData::handleExternalBuffer(FrameBuffer *buffer, RPi::Stream *strea
> {
> unsigned int id = stream->getBufferId(buffer);
>
> - if (!(id & ipa::RPi::MaskExternalBuffer))
> + if (!(id & RPi::MaskExternalBuffer))
> return;
>
> /* Stop the Stream object from tracking the buffer. */
> @@ -2174,13 +2174,13 @@ void RPiCameraData::tryRunPipeline()
> << " Bayer buffer id: " << bayerId;
>
> ipa::RPi::ISPConfig ispPrepare;
> - ispPrepare.bayerBufferId = ipa::RPi::MaskBayerData | bayerId;
> + ispPrepare.bayerBufferId = RPi::MaskBayerData | bayerId;
> ispPrepare.controls = std::move(bayerFrame.controls);
>
> if (embeddedBuffer) {
> unsigned int embeddedId = unicam_[Unicam::Embedded].getBufferId(embeddedBuffer);
>
> - ispPrepare.embeddedBufferId = ipa::RPi::MaskEmbeddedData | embeddedId;
> + ispPrepare.embeddedBufferId = RPi::MaskEmbeddedData | embeddedId;
> ispPrepare.embeddedBufferPresent = true;
>
> LOG(RPI, Debug) << "Signalling signalIspPrepare:"
> diff --git a/src/libcamera/pipeline/raspberrypi/rpi_stream.cpp b/src/libcamera/pipeline/raspberrypi/rpi_stream.cpp
> index 79f7be130ed4..2bb10f25d6ca 100644
> --- a/src/libcamera/pipeline/raspberrypi/rpi_stream.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/rpi_stream.cpp
> @@ -8,8 +8,6 @@
>
> #include <libcamera/base/log.h>
>
> -#include <libcamera/ipa/raspberrypi_ipa_interface.h>
> -
> namespace libcamera {
>
> LOG_DEFINE_CATEGORY(RPISTREAM)
> @@ -74,7 +72,7 @@ int Stream::getBufferId(FrameBuffer *buffer) const
>
> void Stream::setExternalBuffer(FrameBuffer *buffer)
> {
> - bufferMap_.emplace(ipa::RPi::MaskExternalBuffer | id_.get(), buffer);
> + bufferMap_.emplace(BufferMask::MaskExternalBuffer | id_.get(), buffer);
> }
>
> void Stream::removeExternalBuffer(FrameBuffer *buffer)
> @@ -82,7 +80,7 @@ void Stream::removeExternalBuffer(FrameBuffer *buffer)
> int id = getBufferId(buffer);
>
> /* Ensure we have this buffer in the stream, and it is marked external. */
> - ASSERT(id != -1 && (id & ipa::RPi::MaskExternalBuffer));
> + ASSERT(id != -1 && (id & BufferMask::MaskExternalBuffer));
> bufferMap_.erase(id);
> }
>
> diff --git a/src/libcamera/pipeline/raspberrypi/rpi_stream.h b/src/libcamera/pipeline/raspberrypi/rpi_stream.h
> index 3c0b5c8ebab4..b8bd79cf1535 100644
> --- a/src/libcamera/pipeline/raspberrypi/rpi_stream.h
> +++ b/src/libcamera/pipeline/raspberrypi/rpi_stream.h
> @@ -12,7 +12,6 @@
> #include <unordered_map>
> #include <vector>
>
> -#include <libcamera/ipa/raspberrypi_ipa_interface.h>
> #include <libcamera/stream.h>
>
> #include "libcamera/internal/v4l2_videodevice.h"
> @@ -23,6 +22,14 @@ namespace RPi {
>
> using BufferMap = std::unordered_map<unsigned int, FrameBuffer *>;
>
> +enum BufferMask {
> + MaskID = 0x00ffff,
> + MaskStats = 0x010000,
> + MaskEmbeddedData = 0x020000,
> + MaskBayerData = 0x040000,
> + MaskExternalBuffer = 0x100000,
> +};
> +
> /*
> * Device stream abstraction for either an internal or external stream.
> * Used for both Unicam and the ISP.
> @@ -31,13 +38,13 @@ class Stream : public libcamera::Stream
> {
> public:
> Stream()
> - : id_(ipa::RPi::MaskID)
> + : id_(BufferMask::MaskID)
> {
> }
>
> Stream(const char *name, MediaEntity *dev, bool importOnly = false)
> : external_(false), importOnly_(importOnly), name_(name),
> - dev_(std::make_unique<V4L2VideoDevice>(dev)), id_(ipa::RPi::MaskID)
> + dev_(std::make_unique<V4L2VideoDevice>(dev)), id_(BufferMask::MaskID)
> {
> }
>
> --
> 2.25.1
>
More information about the libcamera-devel
mailing list