[libcamera-devel] [PATCH 05/13] pipeline: raspberrypi: rpi_stream: Set invalid buffer to id == 0
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Apr 27 15:18:37 CEST 2023
Hi Naush,
Thank you for the patch.
On Wed, Apr 26, 2023 at 02:10:49PM +0100, Naushir Patuck via libcamera-devel wrote:
> At present, the RPiStream buffer ids == -1 indicates an invalid value.
> As a simplification, use id == 0 to indicate an invalid value. This
> allows for better code readability.
>
> As a consequence of this, use unsigned int for the buffer id values.
>
> Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> .../pipeline/rpi/common/rpi_stream.cpp | 10 +++++-----
> src/libcamera/pipeline/rpi/common/rpi_stream.h | 18 +++++++++---------
> src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp | 6 +++---
> 3 files changed, 17 insertions(+), 17 deletions(-)
>
> diff --git a/src/libcamera/pipeline/rpi/common/rpi_stream.cpp b/src/libcamera/pipeline/rpi/common/rpi_stream.cpp
> index 2bb10f25d6ca..3690667e9aa6 100644
> --- a/src/libcamera/pipeline/rpi/common/rpi_stream.cpp
> +++ b/src/libcamera/pipeline/rpi/common/rpi_stream.cpp
> @@ -55,17 +55,17 @@ const BufferMap &Stream::getBuffers() const
> return bufferMap_;
> }
>
> -int Stream::getBufferId(FrameBuffer *buffer) const
> +unsigned int Stream::getBufferId(FrameBuffer *buffer) const
> {
> if (importOnly_)
> - return -1;
> + return 0;
>
> /* Find the buffer in the map, and return the buffer id. */
> auto it = std::find_if(bufferMap_.begin(), bufferMap_.end(),
> [&buffer](auto const &p) { return p.second == buffer; });
>
> if (it == bufferMap_.end())
> - return -1;
> + return 0;
>
> return it->first;
> }
> @@ -77,10 +77,10 @@ void Stream::setExternalBuffer(FrameBuffer *buffer)
>
> void Stream::removeExternalBuffer(FrameBuffer *buffer)
> {
> - int id = getBufferId(buffer);
> + unsigned int id = getBufferId(buffer);
>
> /* Ensure we have this buffer in the stream, and it is marked external. */
> - ASSERT(id != -1 && (id & BufferMask::MaskExternalBuffer));
> + ASSERT(id & BufferMask::MaskExternalBuffer);
> bufferMap_.erase(id);
> }
>
> diff --git a/src/libcamera/pipeline/rpi/common/rpi_stream.h b/src/libcamera/pipeline/rpi/common/rpi_stream.h
> index b8bd79cf1535..1aae674967e1 100644
> --- a/src/libcamera/pipeline/rpi/common/rpi_stream.h
> +++ b/src/libcamera/pipeline/rpi/common/rpi_stream.h
> @@ -58,7 +58,7 @@ public:
>
> void setExportedBuffers(std::vector<std::unique_ptr<FrameBuffer>> *buffers);
> const BufferMap &getBuffers() const;
> - int getBufferId(FrameBuffer *buffer) const;
> + unsigned int getBufferId(FrameBuffer *buffer) const;
>
> void setExternalBuffer(FrameBuffer *buffer);
> void removeExternalBuffer(FrameBuffer *buffer);
> @@ -74,25 +74,25 @@ private:
> class IdGenerator
> {
> public:
> - IdGenerator(int max)
> + IdGenerator(unsigned int max)
> : max_(max), id_(0)
> {
> }
>
> - int get()
> + unsigned int get()
> {
> - int id;
> + unsigned int id;
> if (!recycle_.empty()) {
> id = recycle_.front();
> recycle_.pop();
> } else {
> - id = id_++;
> + id = ++id_;
> ASSERT(id_ <= max_);
> }
> return id;
> }
>
> - void release(int id)
> + void release(unsigned int id)
> {
> recycle_.push(id);
> }
> @@ -104,9 +104,9 @@ private:
> }
>
> private:
> - int max_;
> - int id_;
> - std::queue<int> recycle_;
> + unsigned int max_;
> + unsigned int id_;
> + std::queue<unsigned int> recycle_;
> };
>
> void clearBuffers();
> diff --git a/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp b/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp
> index cfde7f2e2229..e54bf1ef2c17 100644
> --- a/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp
> @@ -1210,7 +1210,7 @@ int PipelineHandlerRPi::queueRequestDevice(Camera *camera, Request *request)
> continue;
>
> FrameBuffer *buffer = request->findBuffer(stream);
> - if (buffer && stream->getBufferId(buffer) == -1) {
> + if (buffer && !stream->getBufferId(buffer)) {
> /*
> * This buffer is not recognised, so it must have been allocated
> * outside the v4l2 device. Store it in the stream buffer list
> @@ -2042,7 +2042,7 @@ void RPiCameraData::unicamBufferDequeue(FrameBuffer *buffer)
>
> for (RPi::Stream &s : unicam_) {
> index = s.getBufferId(buffer);
> - if (index != -1) {
> + if (index) {
> stream = &s;
> break;
> }
> @@ -2098,7 +2098,7 @@ void RPiCameraData::ispOutputDequeue(FrameBuffer *buffer)
>
> for (RPi::Stream &s : isp_) {
> index = s.getBufferId(buffer);
> - if (index != -1) {
> + if (index) {
> stream = &s;
> break;
> }
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list