[{"id":25852,"web_url":"https://patchwork.libcamera.org/comment/25852/","msgid":"<Y30oyeoHB5FoaTqp@pendragon.ideasonboard.com>","date":"2022-11-22T19:53:45","subject":"Re: [libcamera-devel] [PATCH v1] pipeline: raspberrypi: Remove enum\n\tBuffferMask from the mojom interface","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Naush,\n\nThank you for the patch.\n\nOn Tue, Nov 22, 2022 at 03:42:35PM +0000, Naushir Patuck via libcamera-devel wrote:\n> The BufferMask enum provides a way of identifying which stream a frame buffer\n> belongs to. This enum is defined in the raspberrypi.mojom interface file.\n> However, the IPA does not need these enum definitions to mmap buffers that it\n> uses.\n> \n> Move this enum out of the raspberrypi.mojom interface file and put it into\n> the RPi namespace visible only to the pipeline handler. This removes the\n> need to include the auto-generated IPA interface header in the RPi::Stream\n> definition.\n> \n> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n\nSeems reasonable.\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> ---\n>  include/libcamera/ipa/raspberrypi.mojom       |  8 --------\n>  src/ipa/raspberrypi/raspberrypi.cpp           |  6 +++---\n>  .../pipeline/raspberrypi/raspberrypi.cpp      | 20 +++++++++----------\n>  .../pipeline/raspberrypi/rpi_stream.cpp       |  6 ++----\n>  .../pipeline/raspberrypi/rpi_stream.h         | 13 +++++++++---\n>  5 files changed, 25 insertions(+), 28 deletions(-)\n> \n> diff --git a/include/libcamera/ipa/raspberrypi.mojom b/include/libcamera/ipa/raspberrypi.mojom\n> index 40f78d9e3b3f..d53644fe296c 100644\n> --- a/include/libcamera/ipa/raspberrypi.mojom\n> +++ b/include/libcamera/ipa/raspberrypi.mojom\n> @@ -8,14 +8,6 @@ module ipa.RPi;\n>  \n>  import \"include/libcamera/ipa/core.mojom\";\n>  \n> -enum BufferMask {\n> -\tMaskID\t\t\t= 0x00ffff,\n> -\tMaskStats\t\t= 0x010000,\n> -\tMaskEmbeddedData\t= 0x020000,\n> -\tMaskBayerData\t\t= 0x040000,\n> -\tMaskExternalBuffer\t= 0x100000,\n> -};\n> -\n>  /* Size of the LS grid allocation. */\n>  const uint32 MaxLsGridSize = 0x8000;\n>  \n> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp\n> index beb076dc4909..4e10c57d7f87 100644\n> --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n> @@ -515,7 +515,7 @@ void IPARPi::signalStatReady(uint32_t bufferId)\n>  \n>  \treportMetadata();\n>  \n> -\tstatsMetadataComplete.emit(bufferId & MaskID, libcameraMetadata_);\n> +\tstatsMetadataComplete.emit(bufferId, libcameraMetadata_);\n>  }\n>  \n>  void IPARPi::signalQueueRequest(const ControlList &controls)\n> @@ -534,7 +534,7 @@ void IPARPi::signalIspPrepare(const ISPConfig &data)\n>  \tframeCount_++;\n>  \n>  \t/* Ready to push the input buffer into the ISP. */\n> -\trunIsp.emit(data.bayerBufferId & MaskID);\n> +\trunIsp.emit(data.bayerBufferId);\n>  }\n>  \n>  void IPARPi::reportMetadata()\n> @@ -1001,7 +1001,7 @@ void IPARPi::queueRequest(const ControlList &controls)\n>  \n>  void IPARPi::returnEmbeddedBuffer(unsigned int bufferId)\n>  {\n> -\tembeddedComplete.emit(bufferId & MaskID);\n> +\tembeddedComplete.emit(bufferId);\n>  }\n>  \n>  void IPARPi::prepareISP(const ISPConfig &data)\n> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> index 087c71b65700..0e0b71945640 100644\n> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> @@ -1484,10 +1484,10 @@ int PipelineHandlerRPi::prepareBuffers(Camera *camera)\n>  \t * Pass the stats and embedded data buffers to the IPA. No other\n>  \t * buffers need to be passed.\n>  \t */\n> -\tmapBuffers(camera, data->isp_[Isp::Stats].getBuffers(), ipa::RPi::MaskStats);\n> +\tmapBuffers(camera, data->isp_[Isp::Stats].getBuffers(), RPi::MaskStats);\n>  \tif (data->sensorMetadata_)\n>  \t\tmapBuffers(camera, data->unicam_[Unicam::Embedded].getBuffers(),\n> -\t\t\t   ipa::RPi::MaskEmbeddedData);\n> +\t\t\t   RPi::MaskEmbeddedData);\n>  \n>  \treturn 0;\n>  }\n> @@ -1727,7 +1727,7 @@ void RPiCameraData::statsMetadataComplete(uint32_t bufferId, const ControlList &\n>  \tif (!isRunning())\n>  \t\treturn;\n>  \n> -\tFrameBuffer *buffer = isp_[Isp::Stats].getBuffers().at(bufferId);\n> +\tFrameBuffer *buffer = isp_[Isp::Stats].getBuffers().at(bufferId & RPi::MaskID);\n>  \n>  \thandleStreamBuffer(buffer, &isp_[Isp::Stats]);\n>  \n> @@ -1763,9 +1763,9 @@ void RPiCameraData::runIsp(uint32_t bufferId)\n>  \tif (!isRunning())\n>  \t\treturn;\n>  \n> -\tFrameBuffer *buffer = unicam_[Unicam::Image].getBuffers().at(bufferId);\n> +\tFrameBuffer *buffer = unicam_[Unicam::Image].getBuffers().at(bufferId & RPi::MaskID);\n>  \n> -\tLOG(RPI, Debug) << \"Input re-queue to ISP, buffer id \" << bufferId\n> +\tLOG(RPI, Debug) << \"Input re-queue to ISP, buffer id \" << (bufferId & RPi::MaskID)\n>  \t\t\t<< \", timestamp: \" << buffer->metadata().timestamp;\n>  \n>  \tisp_[Isp::Input].queueBuffer(buffer);\n> @@ -1778,7 +1778,7 @@ void RPiCameraData::embeddedComplete(uint32_t bufferId)\n>  \tif (!isRunning())\n>  \t\treturn;\n>  \n> -\tFrameBuffer *buffer = unicam_[Unicam::Embedded].getBuffers().at(bufferId);\n> +\tFrameBuffer *buffer = unicam_[Unicam::Embedded].getBuffers().at(bufferId & RPi::MaskID);\n>  \thandleStreamBuffer(buffer, &unicam_[Unicam::Embedded]);\n>  \thandleState();\n>  }\n> @@ -1931,7 +1931,7 @@ void RPiCameraData::ispOutputDequeue(FrameBuffer *buffer)\n>  \t * application until after the IPA signals so.\n>  \t */\n>  \tif (stream == &isp_[Isp::Stats]) {\n> -\t\tipa_->signalStatReady(ipa::RPi::MaskStats | static_cast<unsigned int>(index));\n> +\t\tipa_->signalStatReady(RPi::MaskStats | static_cast<unsigned int>(index));\n>  \t} else {\n>  \t\t/* Any other ISP output can be handed back to the application now. */\n>  \t\thandleStreamBuffer(buffer, stream);\n> @@ -2006,7 +2006,7 @@ void RPiCameraData::handleExternalBuffer(FrameBuffer *buffer, RPi::Stream *strea\n>  {\n>  \tunsigned int id = stream->getBufferId(buffer);\n>  \n> -\tif (!(id & ipa::RPi::MaskExternalBuffer))\n> +\tif (!(id & RPi::MaskExternalBuffer))\n>  \t\treturn;\n>  \n>  \t/* Stop the Stream object from tracking the buffer. */\n> @@ -2174,13 +2174,13 @@ void RPiCameraData::tryRunPipeline()\n>  \t\t\t<< \" Bayer buffer id: \" << bayerId;\n>  \n>  \tipa::RPi::ISPConfig ispPrepare;\n> -\tispPrepare.bayerBufferId = ipa::RPi::MaskBayerData | bayerId;\n> +\tispPrepare.bayerBufferId = RPi::MaskBayerData | bayerId;\n>  \tispPrepare.controls = std::move(bayerFrame.controls);\n>  \n>  \tif (embeddedBuffer) {\n>  \t\tunsigned int embeddedId = unicam_[Unicam::Embedded].getBufferId(embeddedBuffer);\n>  \n> -\t\tispPrepare.embeddedBufferId = ipa::RPi::MaskEmbeddedData | embeddedId;\n> +\t\tispPrepare.embeddedBufferId = RPi::MaskEmbeddedData | embeddedId;\n>  \t\tispPrepare.embeddedBufferPresent = true;\n>  \n>  \t\tLOG(RPI, Debug) << \"Signalling signalIspPrepare:\"\n> diff --git a/src/libcamera/pipeline/raspberrypi/rpi_stream.cpp b/src/libcamera/pipeline/raspberrypi/rpi_stream.cpp\n> index 79f7be130ed4..2bb10f25d6ca 100644\n> --- a/src/libcamera/pipeline/raspberrypi/rpi_stream.cpp\n> +++ b/src/libcamera/pipeline/raspberrypi/rpi_stream.cpp\n> @@ -8,8 +8,6 @@\n>  \n>  #include <libcamera/base/log.h>\n>  \n> -#include <libcamera/ipa/raspberrypi_ipa_interface.h>\n> -\n>  namespace libcamera {\n>  \n>  LOG_DEFINE_CATEGORY(RPISTREAM)\n> @@ -74,7 +72,7 @@ int Stream::getBufferId(FrameBuffer *buffer) const\n>  \n>  void Stream::setExternalBuffer(FrameBuffer *buffer)\n>  {\n> -\tbufferMap_.emplace(ipa::RPi::MaskExternalBuffer | id_.get(), buffer);\n> +\tbufferMap_.emplace(BufferMask::MaskExternalBuffer | id_.get(), buffer);\n>  }\n>  \n>  void Stream::removeExternalBuffer(FrameBuffer *buffer)\n> @@ -82,7 +80,7 @@ void Stream::removeExternalBuffer(FrameBuffer *buffer)\n>  \tint id = getBufferId(buffer);\n>  \n>  \t/* Ensure we have this buffer in the stream, and it is marked external. */\n> -\tASSERT(id != -1 && (id & ipa::RPi::MaskExternalBuffer));\n> +\tASSERT(id != -1 && (id & BufferMask::MaskExternalBuffer));\n>  \tbufferMap_.erase(id);\n>  }\n>  \n> diff --git a/src/libcamera/pipeline/raspberrypi/rpi_stream.h b/src/libcamera/pipeline/raspberrypi/rpi_stream.h\n> index 3c0b5c8ebab4..b8bd79cf1535 100644\n> --- a/src/libcamera/pipeline/raspberrypi/rpi_stream.h\n> +++ b/src/libcamera/pipeline/raspberrypi/rpi_stream.h\n> @@ -12,7 +12,6 @@\n>  #include <unordered_map>\n>  #include <vector>\n>  \n> -#include <libcamera/ipa/raspberrypi_ipa_interface.h>\n>  #include <libcamera/stream.h>\n>  \n>  #include \"libcamera/internal/v4l2_videodevice.h\"\n> @@ -23,6 +22,14 @@ namespace RPi {\n>  \n>  using BufferMap = std::unordered_map<unsigned int, FrameBuffer *>;\n>  \n> +enum BufferMask {\n> +\tMaskID\t\t\t= 0x00ffff,\n> +\tMaskStats\t\t= 0x010000,\n> +\tMaskEmbeddedData\t= 0x020000,\n> +\tMaskBayerData\t\t= 0x040000,\n> +\tMaskExternalBuffer\t= 0x100000,\n> +};\n> +\n>  /*\n>   * Device stream abstraction for either an internal or external stream.\n>   * Used for both Unicam and the ISP.\n> @@ -31,13 +38,13 @@ class Stream : public libcamera::Stream\n>  {\n>  public:\n>  \tStream()\n> -\t\t: id_(ipa::RPi::MaskID)\n> +\t\t: id_(BufferMask::MaskID)\n>  \t{\n>  \t}\n>  \n>  \tStream(const char *name, MediaEntity *dev, bool importOnly = false)\n>  \t\t: external_(false), importOnly_(importOnly), name_(name),\n> -\t\t  dev_(std::make_unique<V4L2VideoDevice>(dev)), id_(ipa::RPi::MaskID)\n> +\t\t  dev_(std::make_unique<V4L2VideoDevice>(dev)), id_(BufferMask::MaskID)\n>  \t{\n>  \t}\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 69254BDE6B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 22 Nov 2022 19:54:04 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C0ECA63314;\n\tTue, 22 Nov 2022 20:54:03 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3DB2C603CE\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 22 Nov 2022 20:54:02 +0100 (CET)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 8EE6D1180;\n\tTue, 22 Nov 2022 20:54:01 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1669146843;\n\tbh=mzolaTLB0uJlKpfuPSBjZFF0+HwFyjrmz0DEvqP5DEc=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=zzm5s7U3m4QaP7lnlERf74Lh5DPV+ZSVECmVlv8ehdItOkQcOYufwd/KIh5Gz3pjn\n\tKR7pBcC95F8FJDgRPxmJeUahL/CqRZYqGH/SRh8w1NaFMFugbNOOtIr6ve/5d7UVVR\n\tbjeVZwoAvubM81/6ObIx3GOLcoFOzY3Kpcp1oDok2juXVVDzSIOim4SCEiJjttZJf1\n\t1CPVfJklyg83rYdZZmeKo1YWV55JEo1URoYX5gy/iHcoD8f09t5f6U4ln87BziuzoY\n\tuQngOrWzx4G0ANZmkoOaeTlKgojevOSdWsUx0YvTXqQiPC2gcKZWvLfHhRZQPHL/38\n\t3JbAxRillNk3Q==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1669146841;\n\tbh=mzolaTLB0uJlKpfuPSBjZFF0+HwFyjrmz0DEvqP5DEc=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=pB57fOZawM+3EYZQ0UqYsNv1dI1uwwU+fGY03U5gNSo16dJlANySPGS61pDKBoLpl\n\tXkovWjLS3F5gsBwc5OaNuFYIfX1PxW4CBMZIOXYj5u9Dl4EBC1IYcUzhSie/63q83d\n\tpXM3OcrPyaNOoFwHTDflukx3aHrjkEgwWpqYKAKg="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"pB57fOZa\"; dkim-atps=neutral","Date":"Tue, 22 Nov 2022 21:53:45 +0200","To":"Naushir Patuck <naush@raspberrypi.com>","Message-ID":"<Y30oyeoHB5FoaTqp@pendragon.ideasonboard.com>","References":"<20221122154235.4319-1-naush@raspberrypi.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20221122154235.4319-1-naush@raspberrypi.com>","Subject":"Re: [libcamera-devel] [PATCH v1] pipeline: raspberrypi: Remove enum\n\tBuffferMask from the mojom interface","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","From":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":25871,"web_url":"https://patchwork.libcamera.org/comment/25871/","msgid":"<CAHW6GYLg_TzhrK2v3aLRv1-TH3CM9osy8RLo8erF0_ueqEPZ4A@mail.gmail.com>","date":"2022-11-23T11:42:21","subject":"Re: [libcamera-devel] [PATCH v1] pipeline: raspberrypi: Remove enum\n\tBuffferMask from the mojom interface","submitter":{"id":42,"url":"https://patchwork.libcamera.org/api/people/42/","name":"David Plowman","email":"david.plowman@raspberrypi.com"},"content":"Hi Naush\n\nThanks for this change.\n\nOn Tue, 22 Nov 2022 at 15:42, Naushir Patuck via libcamera-devel\n<libcamera-devel@lists.libcamera.org> wrote:\n>\n> The BufferMask enum provides a way of identifying which stream a frame buffer\n> belongs to. This enum is defined in the raspberrypi.mojom interface file.\n> However, the IPA does not need these enum definitions to mmap buffers that it\n> uses.\n>\n> Move this enum out of the raspberrypi.mojom interface file and put it into\n> the RPi namespace visible only to the pipeline handler. This removes the\n> need to include the auto-generated IPA interface header in the RPi::Stream\n> definition.\n>\n> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n\nReviewed-by: David Plowman <david.plowman@raspberrypi.com>\n\nThanks!\nDavid\n\n> ---\n>  include/libcamera/ipa/raspberrypi.mojom       |  8 --------\n>  src/ipa/raspberrypi/raspberrypi.cpp           |  6 +++---\n>  .../pipeline/raspberrypi/raspberrypi.cpp      | 20 +++++++++----------\n>  .../pipeline/raspberrypi/rpi_stream.cpp       |  6 ++----\n>  .../pipeline/raspberrypi/rpi_stream.h         | 13 +++++++++---\n>  5 files changed, 25 insertions(+), 28 deletions(-)\n>\n> diff --git a/include/libcamera/ipa/raspberrypi.mojom b/include/libcamera/ipa/raspberrypi.mojom\n> index 40f78d9e3b3f..d53644fe296c 100644\n> --- a/include/libcamera/ipa/raspberrypi.mojom\n> +++ b/include/libcamera/ipa/raspberrypi.mojom\n> @@ -8,14 +8,6 @@ module ipa.RPi;\n>\n>  import \"include/libcamera/ipa/core.mojom\";\n>\n> -enum BufferMask {\n> -       MaskID                  = 0x00ffff,\n> -       MaskStats               = 0x010000,\n> -       MaskEmbeddedData        = 0x020000,\n> -       MaskBayerData           = 0x040000,\n> -       MaskExternalBuffer      = 0x100000,\n> -};\n> -\n>  /* Size of the LS grid allocation. */\n>  const uint32 MaxLsGridSize = 0x8000;\n>\n> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp\n> index beb076dc4909..4e10c57d7f87 100644\n> --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n> @@ -515,7 +515,7 @@ void IPARPi::signalStatReady(uint32_t bufferId)\n>\n>         reportMetadata();\n>\n> -       statsMetadataComplete.emit(bufferId & MaskID, libcameraMetadata_);\n> +       statsMetadataComplete.emit(bufferId, libcameraMetadata_);\n>  }\n>\n>  void IPARPi::signalQueueRequest(const ControlList &controls)\n> @@ -534,7 +534,7 @@ void IPARPi::signalIspPrepare(const ISPConfig &data)\n>         frameCount_++;\n>\n>         /* Ready to push the input buffer into the ISP. */\n> -       runIsp.emit(data.bayerBufferId & MaskID);\n> +       runIsp.emit(data.bayerBufferId);\n>  }\n>\n>  void IPARPi::reportMetadata()\n> @@ -1001,7 +1001,7 @@ void IPARPi::queueRequest(const ControlList &controls)\n>\n>  void IPARPi::returnEmbeddedBuffer(unsigned int bufferId)\n>  {\n> -       embeddedComplete.emit(bufferId & MaskID);\n> +       embeddedComplete.emit(bufferId);\n>  }\n>\n>  void IPARPi::prepareISP(const ISPConfig &data)\n> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> index 087c71b65700..0e0b71945640 100644\n> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> @@ -1484,10 +1484,10 @@ int PipelineHandlerRPi::prepareBuffers(Camera *camera)\n>          * Pass the stats and embedded data buffers to the IPA. No other\n>          * buffers need to be passed.\n>          */\n> -       mapBuffers(camera, data->isp_[Isp::Stats].getBuffers(), ipa::RPi::MaskStats);\n> +       mapBuffers(camera, data->isp_[Isp::Stats].getBuffers(), RPi::MaskStats);\n>         if (data->sensorMetadata_)\n>                 mapBuffers(camera, data->unicam_[Unicam::Embedded].getBuffers(),\n> -                          ipa::RPi::MaskEmbeddedData);\n> +                          RPi::MaskEmbeddedData);\n>\n>         return 0;\n>  }\n> @@ -1727,7 +1727,7 @@ void RPiCameraData::statsMetadataComplete(uint32_t bufferId, const ControlList &\n>         if (!isRunning())\n>                 return;\n>\n> -       FrameBuffer *buffer = isp_[Isp::Stats].getBuffers().at(bufferId);\n> +       FrameBuffer *buffer = isp_[Isp::Stats].getBuffers().at(bufferId & RPi::MaskID);\n>\n>         handleStreamBuffer(buffer, &isp_[Isp::Stats]);\n>\n> @@ -1763,9 +1763,9 @@ void RPiCameraData::runIsp(uint32_t bufferId)\n>         if (!isRunning())\n>                 return;\n>\n> -       FrameBuffer *buffer = unicam_[Unicam::Image].getBuffers().at(bufferId);\n> +       FrameBuffer *buffer = unicam_[Unicam::Image].getBuffers().at(bufferId & RPi::MaskID);\n>\n> -       LOG(RPI, Debug) << \"Input re-queue to ISP, buffer id \" << bufferId\n> +       LOG(RPI, Debug) << \"Input re-queue to ISP, buffer id \" << (bufferId & RPi::MaskID)\n>                         << \", timestamp: \" << buffer->metadata().timestamp;\n>\n>         isp_[Isp::Input].queueBuffer(buffer);\n> @@ -1778,7 +1778,7 @@ void RPiCameraData::embeddedComplete(uint32_t bufferId)\n>         if (!isRunning())\n>                 return;\n>\n> -       FrameBuffer *buffer = unicam_[Unicam::Embedded].getBuffers().at(bufferId);\n> +       FrameBuffer *buffer = unicam_[Unicam::Embedded].getBuffers().at(bufferId & RPi::MaskID);\n>         handleStreamBuffer(buffer, &unicam_[Unicam::Embedded]);\n>         handleState();\n>  }\n> @@ -1931,7 +1931,7 @@ void RPiCameraData::ispOutputDequeue(FrameBuffer *buffer)\n>          * application until after the IPA signals so.\n>          */\n>         if (stream == &isp_[Isp::Stats]) {\n> -               ipa_->signalStatReady(ipa::RPi::MaskStats | static_cast<unsigned int>(index));\n> +               ipa_->signalStatReady(RPi::MaskStats | static_cast<unsigned int>(index));\n>         } else {\n>                 /* Any other ISP output can be handed back to the application now. */\n>                 handleStreamBuffer(buffer, stream);\n> @@ -2006,7 +2006,7 @@ void RPiCameraData::handleExternalBuffer(FrameBuffer *buffer, RPi::Stream *strea\n>  {\n>         unsigned int id = stream->getBufferId(buffer);\n>\n> -       if (!(id & ipa::RPi::MaskExternalBuffer))\n> +       if (!(id & RPi::MaskExternalBuffer))\n>                 return;\n>\n>         /* Stop the Stream object from tracking the buffer. */\n> @@ -2174,13 +2174,13 @@ void RPiCameraData::tryRunPipeline()\n>                         << \" Bayer buffer id: \" << bayerId;\n>\n>         ipa::RPi::ISPConfig ispPrepare;\n> -       ispPrepare.bayerBufferId = ipa::RPi::MaskBayerData | bayerId;\n> +       ispPrepare.bayerBufferId = RPi::MaskBayerData | bayerId;\n>         ispPrepare.controls = std::move(bayerFrame.controls);\n>\n>         if (embeddedBuffer) {\n>                 unsigned int embeddedId = unicam_[Unicam::Embedded].getBufferId(embeddedBuffer);\n>\n> -               ispPrepare.embeddedBufferId = ipa::RPi::MaskEmbeddedData | embeddedId;\n> +               ispPrepare.embeddedBufferId = RPi::MaskEmbeddedData | embeddedId;\n>                 ispPrepare.embeddedBufferPresent = true;\n>\n>                 LOG(RPI, Debug) << \"Signalling signalIspPrepare:\"\n> diff --git a/src/libcamera/pipeline/raspberrypi/rpi_stream.cpp b/src/libcamera/pipeline/raspberrypi/rpi_stream.cpp\n> index 79f7be130ed4..2bb10f25d6ca 100644\n> --- a/src/libcamera/pipeline/raspberrypi/rpi_stream.cpp\n> +++ b/src/libcamera/pipeline/raspberrypi/rpi_stream.cpp\n> @@ -8,8 +8,6 @@\n>\n>  #include <libcamera/base/log.h>\n>\n> -#include <libcamera/ipa/raspberrypi_ipa_interface.h>\n> -\n>  namespace libcamera {\n>\n>  LOG_DEFINE_CATEGORY(RPISTREAM)\n> @@ -74,7 +72,7 @@ int Stream::getBufferId(FrameBuffer *buffer) const\n>\n>  void Stream::setExternalBuffer(FrameBuffer *buffer)\n>  {\n> -       bufferMap_.emplace(ipa::RPi::MaskExternalBuffer | id_.get(), buffer);\n> +       bufferMap_.emplace(BufferMask::MaskExternalBuffer | id_.get(), buffer);\n>  }\n>\n>  void Stream::removeExternalBuffer(FrameBuffer *buffer)\n> @@ -82,7 +80,7 @@ void Stream::removeExternalBuffer(FrameBuffer *buffer)\n>         int id = getBufferId(buffer);\n>\n>         /* Ensure we have this buffer in the stream, and it is marked external. */\n> -       ASSERT(id != -1 && (id & ipa::RPi::MaskExternalBuffer));\n> +       ASSERT(id != -1 && (id & BufferMask::MaskExternalBuffer));\n>         bufferMap_.erase(id);\n>  }\n>\n> diff --git a/src/libcamera/pipeline/raspberrypi/rpi_stream.h b/src/libcamera/pipeline/raspberrypi/rpi_stream.h\n> index 3c0b5c8ebab4..b8bd79cf1535 100644\n> --- a/src/libcamera/pipeline/raspberrypi/rpi_stream.h\n> +++ b/src/libcamera/pipeline/raspberrypi/rpi_stream.h\n> @@ -12,7 +12,6 @@\n>  #include <unordered_map>\n>  #include <vector>\n>\n> -#include <libcamera/ipa/raspberrypi_ipa_interface.h>\n>  #include <libcamera/stream.h>\n>\n>  #include \"libcamera/internal/v4l2_videodevice.h\"\n> @@ -23,6 +22,14 @@ namespace RPi {\n>\n>  using BufferMap = std::unordered_map<unsigned int, FrameBuffer *>;\n>\n> +enum BufferMask {\n> +       MaskID                  = 0x00ffff,\n> +       MaskStats               = 0x010000,\n> +       MaskEmbeddedData        = 0x020000,\n> +       MaskBayerData           = 0x040000,\n> +       MaskExternalBuffer      = 0x100000,\n> +};\n> +\n>  /*\n>   * Device stream abstraction for either an internal or external stream.\n>   * Used for both Unicam and the ISP.\n> @@ -31,13 +38,13 @@ class Stream : public libcamera::Stream\n>  {\n>  public:\n>         Stream()\n> -               : id_(ipa::RPi::MaskID)\n> +               : id_(BufferMask::MaskID)\n>         {\n>         }\n>\n>         Stream(const char *name, MediaEntity *dev, bool importOnly = false)\n>                 : external_(false), importOnly_(importOnly), name_(name),\n> -                 dev_(std::make_unique<V4L2VideoDevice>(dev)), id_(ipa::RPi::MaskID)\n> +                 dev_(std::make_unique<V4L2VideoDevice>(dev)), id_(BufferMask::MaskID)\n>         {\n>         }\n>\n> --\n> 2.25.1\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 9C31FBE08B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 23 Nov 2022 11:42:36 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0645D63311;\n\tWed, 23 Nov 2022 12:42:36 +0100 (CET)","from mail-pl1-x630.google.com (mail-pl1-x630.google.com\n\t[IPv6:2607:f8b0:4864:20::630])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4A8FD63311\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 23 Nov 2022 12:42:34 +0100 (CET)","by mail-pl1-x630.google.com with SMTP id io19so16391131plb.8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 23 Nov 2022 03:42:34 -0800 (PST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1669203756;\n\tbh=AbqeAFtaO4JwbEKwqjT+urdUN/h9vhgkkxruvFKm/bs=;\n\th=References:In-Reply-To:Date:To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=p9LJX6Yoo4lzGkbQm5qweyqRpT1bTrRdmdIl4UOFJ1OVYTtc/eEzC2mHE6wXbZ3Gy\n\tOIo6iX5QTA/e8R6W+4tBNDzUjrkty3lkSkLcifrz7aTCO/yMgF0ogzNx5CyWreAdEe\n\tmNFSFe9T9XX2V4O6W4sEDOgqsPPsB//0lS7lUU890fU31YvvsFy3OvBiGbfcnlFCyd\n\tUF5iXkVWMs0ESYZURIgqKg6TNRGJWxyeeU70uW/Ia34WcAl590uOX1S0rLZ2laWIhr\n\t2Hv2NK4P5gwEDzV2tKXeLus70Kdm0GQVFNYOXuNBIws7AyFcQMV3TySTgZUID2Z5DV\n\tPIaMNmtlzsdsA==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:from:to:cc:subject:date:message-id:reply-to;\n\tbh=HCztEQZj/rIUejS/Vu5TNIkLO/Z3PJPfuj2mXz9uUkQ=;\n\tb=lFNhWQfDkRcHNOopaOBx49SD4kVglh2ZrgTWtgynskqA0S04c0kruV4sJkGWGPTqtq\n\tIJ5Mc2wDGfF8u+qgYSoKqTi05PQJXLezE2muIgSs+xbSHHWiWRPTmDB0/2gKQtkrTzub\n\tnCFlE2p7tk1frd92AyRh0Cj7tujdEaGm0/n3FdfP7USyuGLqLPtlpCMSKQGAStbgOLaC\n\t3r4TD/TD/7/sBjXC8JR/sd/ZVOKkWuQNWHXoR18Dm2zw1XTekWMvTWkCvqPtXchSWr2l\n\tvLDwFvNCW+JNvAPvV1hyNN96Rt4GmICsYbGn64qpinX9qxxE4NOFexCKHfuTtSscDJTC\n\ty8rw=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"lFNhWQfD\"; dkim-atps=neutral","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=HCztEQZj/rIUejS/Vu5TNIkLO/Z3PJPfuj2mXz9uUkQ=;\n\tb=xWHa6nDC+AalddJCMyDr7CaIqMwJ+oYYk6n+e3gFc2rkJB2soqDC29zQ6I50qS91e+\n\tHb31GLK+nci/almh5UzDorXWjh/BJgAyaFKcGq0FAfTT497sJrys6KnjY5vHONEP/4cQ\n\tz8AR0f9A26NQpFMKpKf8RoVAzITpFXXm9MNEd25bqUMGqinPj7mbXtlBFsWTLm1fKt6i\n\t79hyIXiqlSiZfE6pBJHsqVE7rZuEB+gl5Ju2mUF5ugwILM/pdjQtwcNj+7FOqE/zTyKs\n\tZFBj/WAG7CtdCQ3XsB4GL+9xuGEZDYK0tou5Ykby8k76r/Q3uQ1XI31BVHNF+Yrk/+gZ\n\tkzpA==","X-Gm-Message-State":"ANoB5plqbVeblubYrxih93lDXELEJ6pQoMC4aMPn18iLVrSZPw6Z11ka\n\tb1PQQg1YEePKGF/qnWFsqavKeOCjKDhOOlpAKl2jhRv9DvQ=","X-Google-Smtp-Source":"AA0mqf5ebwCA7UIQCo/CEqpH+7+4sJ/IpNr4pXsUbQJC71sLgGl50yJzbR9illcH0s3t6txVwZsd52aIKpnyYQM6CHs=","X-Received":"by 2002:a17:90a:a588:b0:218:8eb8:8502 with SMTP id\n\tb8-20020a17090aa58800b002188eb88502mr23291903pjq.179.1669203752612;\n\tWed, 23 Nov 2022 03:42:32 -0800 (PST)","MIME-Version":"1.0","References":"<20221122154235.4319-1-naush@raspberrypi.com>","In-Reply-To":"<20221122154235.4319-1-naush@raspberrypi.com>","Date":"Wed, 23 Nov 2022 11:42:21 +0000","Message-ID":"<CAHW6GYLg_TzhrK2v3aLRv1-TH3CM9osy8RLo8erF0_ueqEPZ4A@mail.gmail.com>","To":"Naushir Patuck <naush@raspberrypi.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH v1] pipeline: raspberrypi: Remove enum\n\tBuffferMask from the mojom interface","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","From":"David Plowman via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"David Plowman <david.plowman@raspberrypi.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]