[{"id":28461,"web_url":"https://patchwork.libcamera.org/comment/28461/","msgid":"<170518727677.3418233.13565842497829934563@ping.linuxembedded.co.uk>","date":"2024-01-13T23:07:56","subject":"Re: [libcamera-devel] [PATCH v2 14/18] libcamera: pipeline: simple:\n\trename converterBuffers_ and related vars","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Hans de Goede via libcamera-devel (2024-01-13 14:22:14)\n> From: Andrey Konovalov <andrey.konovalov@linaro.org>\n> \n> The converterBuffers_ and the converterQueue_ are not that specific\n> to the Converter, and could be used by another entity doing the format\n> conversion.\n> \n> Rename converterBuffers_, converterQueue_, and useConverter_ to\n> conversionBuffers_, conversionQueue_ and useConversion_ to\n> disassociate them from the Converter.\n\nOne day I'd love to see processing blocks that could be constructed and\nchained together here. Not a full reimplementation of gstreamer of\ncourse ... but I suspect we could end up with other chained reusable\ncomponents through out libcamera that may not always be 'convertors'.\n\nAnyway, that's likely a long way off - and I think in the context of\nthis series - given the preceeding patches this makes sense so I'll\nalready put this one here:\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> \n> Signed-off-by: Andrey Konovalov <andrey.konovalov@linaro.org>\n> Signed-off-by: Hans de Goede <hdegoede@redhat.com>\n> Tested-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> # sc8280xp Lenovo x13s\n> Tested-by: Pavel Machek <pavel@ucw.cz>\n> ---\n>  src/libcamera/pipeline/simple/simple.cpp | 63 ++++++++++++------------\n>  1 file changed, 32 insertions(+), 31 deletions(-)\n> \n> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> index 4d0e7255..fa298746 100644\n> --- a/src/libcamera/pipeline/simple/simple.cpp\n> +++ b/src/libcamera/pipeline/simple/simple.cpp\n> @@ -269,17 +269,18 @@ public:\n>         std::vector<Configuration> configs_;\n>         std::map<PixelFormat, std::vector<const Configuration *>> formats_;\n>  \n> +       std::vector<std::unique_ptr<FrameBuffer>> conversionBuffers_;\n> +       std::queue<std::map<unsigned int, FrameBuffer *>> conversionQueue_;\n> +       bool useConversion_;\n> +\n>         std::unique_ptr<Converter> converter_;\n> -       std::vector<std::unique_ptr<FrameBuffer>> converterBuffers_;\n> -       bool useConverter_;\n> -       std::queue<std::map<unsigned int, FrameBuffer *>> converterQueue_;\n>  \n>  private:\n>         void tryPipeline(unsigned int code, const Size &size);\n>         static std::vector<const MediaPad *> routedSourcePads(MediaPad *sink);\n>  \n> -       void converterInputDone(FrameBuffer *buffer);\n> -       void converterOutputDone(FrameBuffer *buffer);\n> +       void conversionInputDone(FrameBuffer *buffer);\n> +       void conversionOutputDone(FrameBuffer *buffer);\n>  };\n>  \n>  class SimpleCameraConfiguration : public CameraConfiguration\n> @@ -503,8 +504,8 @@ int SimpleCameraData::init()\n>                                 << \"Failed to create converter, disabling format conversion\";\n>                         converter_.reset();\n>                 } else {\n> -                       converter_->inputBufferReady.connect(this, &SimpleCameraData::converterInputDone);\n> -                       converter_->outputBufferReady.connect(this, &SimpleCameraData::converterOutputDone);\n> +                       converter_->inputBufferReady.connect(this, &SimpleCameraData::conversionInputDone);\n> +                       converter_->outputBufferReady.connect(this, &SimpleCameraData::conversionOutputDone);\n>                 }\n>         }\n>  \n> @@ -740,7 +741,7 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)\n>          * point converting an erroneous buffer.\n>          */\n>         if (buffer->metadata().status != FrameMetadata::FrameSuccess) {\n> -               if (!useConverter_) {\n> +               if (!useConversion_) {\n>                         /* No conversion, just complete the request. */\n>                         Request *request = buffer->request();\n>                         pipe->completeBuffer(request, buffer);\n> @@ -756,16 +757,16 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)\n>                 if (buffer->metadata().status != FrameMetadata::FrameCancelled)\n>                         video_->queueBuffer(buffer);\n>  \n> -               if (converterQueue_.empty())\n> +               if (conversionQueue_.empty())\n>                         return;\n>  \n>                 Request *request = nullptr;\n> -               for (auto &item : converterQueue_.front()) {\n> +               for (auto &item : conversionQueue_.front()) {\n>                         FrameBuffer *outputBuffer = item.second;\n>                         request = outputBuffer->request();\n>                         pipe->completeBuffer(request, outputBuffer);\n>                 }\n> -               converterQueue_.pop();\n> +               conversionQueue_.pop();\n>  \n>                 if (request)\n>                         pipe->completeRequest(request);\n> @@ -782,9 +783,9 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)\n>          */\n>         Request *request = buffer->request();\n>  \n> -       if (useConverter_ && !converterQueue_.empty()) {\n> +       if (useConversion_ && !conversionQueue_.empty()) {\n>                 const std::map<unsigned int, FrameBuffer *> &outputs =\n> -                       converterQueue_.front();\n> +                       conversionQueue_.front();\n>                 if (!outputs.empty()) {\n>                         FrameBuffer *outputBuffer = outputs.begin()->second;\n>                         if (outputBuffer)\n> @@ -801,14 +802,14 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)\n>          * conversion is needed. If there's no queued request, just requeue the\n>          * captured buffer for capture.\n>          */\n> -       if (useConverter_) {\n> -               if (converterQueue_.empty()) {\n> +       if (useConversion_) {\n> +               if (conversionQueue_.empty()) {\n>                         video_->queueBuffer(buffer);\n>                         return;\n>                 }\n>  \n> -               converter_->queueBuffers(buffer, converterQueue_.front());\n> -               converterQueue_.pop();\n> +               converter_->queueBuffers(buffer, conversionQueue_.front());\n> +               conversionQueue_.pop();\n>                 return;\n>         }\n>  \n> @@ -817,13 +818,13 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)\n>         pipe->completeRequest(request);\n>  }\n>  \n> -void SimpleCameraData::converterInputDone(FrameBuffer *buffer)\n> +void SimpleCameraData::conversionInputDone(FrameBuffer *buffer)\n>  {\n>         /* Queue the input buffer back for capture. */\n>         video_->queueBuffer(buffer);\n>  }\n>  \n> -void SimpleCameraData::converterOutputDone(FrameBuffer *buffer)\n> +void SimpleCameraData::conversionOutputDone(FrameBuffer *buffer)\n>  {\n>         SimplePipelineHandler *pipe = SimpleCameraData::pipe();\n>  \n> @@ -1159,14 +1160,14 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)\n>  \n>         /* Configure the converter if needed. */\n>         std::vector<std::reference_wrapper<StreamConfiguration>> outputCfgs;\n> -       data->useConverter_ = config->needConversion();\n> +       data->useConversion_ = config->needConversion();\n>  \n>         for (unsigned int i = 0; i < config->size(); ++i) {\n>                 StreamConfiguration &cfg = config->at(i);\n>  \n>                 cfg.setStream(&data->streams_[i]);\n>  \n> -               if (data->useConverter_)\n> +               if (data->useConversion_)\n>                         outputCfgs.push_back(cfg);\n>         }\n>  \n> @@ -1192,7 +1193,7 @@ int SimplePipelineHandler::exportFrameBuffers(Camera *camera, Stream *stream,\n>          * Export buffers on the converter or capture video node, depending on\n>          * whether the converter is used or not.\n>          */\n> -       if (data->useConverter_)\n> +       if (data->useConversion_)\n>                 return data->converter_->exportBuffers(data->streamIndex(stream),\n>                                                        count, buffers);\n>         else\n> @@ -1213,13 +1214,13 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlL\n>                 return -EBUSY;\n>         }\n>  \n> -       if (data->useConverter_) {\n> +       if (data->useConversion_) {\n>                 /*\n>                  * When using the converter allocate a fixed number of internal\n>                  * buffers.\n>                  */\n>                 ret = video->allocateBuffers(kNumInternalBuffers,\n> -                                            &data->converterBuffers_);\n> +                                            &data->conversionBuffers_);\n>         } else {\n>                 /* Otherwise, prepare for using buffers from the only stream. */\n>                 Stream *stream = &data->streams_[0];\n> @@ -1238,7 +1239,7 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlL\n>                 return ret;\n>         }\n>  \n> -       if (data->useConverter_) {\n> +       if (data->useConversion_) {\n>                 ret = data->converter_->start();\n>                 if (ret < 0) {\n>                         stop(camera);\n> @@ -1246,7 +1247,7 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlL\n>                 }\n>  \n>                 /* Queue all internal buffers for capture. */\n> -               for (std::unique_ptr<FrameBuffer> &buffer : data->converterBuffers_)\n> +               for (std::unique_ptr<FrameBuffer> &buffer : data->conversionBuffers_)\n>                         video->queueBuffer(buffer.get());\n>         }\n>  \n> @@ -1258,7 +1259,7 @@ void SimplePipelineHandler::stopDevice(Camera *camera)\n>         SimpleCameraData *data = cameraData(camera);\n>         V4L2VideoDevice *video = data->video_;\n>  \n> -       if (data->useConverter_)\n> +       if (data->useConversion_)\n>                 data->converter_->stop();\n>  \n>         video->streamOff();\n> @@ -1266,7 +1267,7 @@ void SimplePipelineHandler::stopDevice(Camera *camera)\n>  \n>         video->bufferReady.disconnect(data, &SimpleCameraData::bufferReady);\n>  \n> -       data->converterBuffers_.clear();\n> +       data->conversionBuffers_.clear();\n>  \n>         releasePipeline(data);\n>  }\n> @@ -1284,7 +1285,7 @@ int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)\n>                  * queue, it will be handed to the converter in the capture\n>                  * completion handler.\n>                  */\n> -               if (data->useConverter_) {\n> +               if (data->useConversion_) {\n>                         buffers.emplace(data->streamIndex(stream), buffer);\n>                 } else {\n>                         ret = data->video_->queueBuffer(buffer);\n> @@ -1293,8 +1294,8 @@ int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)\n>                 }\n>         }\n>  \n> -       if (data->useConverter_)\n> -               data->converterQueue_.push(std::move(buffers));\n> +       if (data->useConversion_)\n> +               data->conversionQueue_.push(std::move(buffers));\n>  \n>         return 0;\n>  }\n> -- \n> 2.43.0\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 417ACC323E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat, 13 Jan 2024 23:08:02 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 792B8627E7;\n\tSun, 14 Jan 2024 00:08:01 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 7AFC561E17\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 14 Jan 2024 00:07:59 +0100 (CET)","from pendragon.ideasonboard.com\n\t(aztw-30-b2-v4wan-166917-cust845.vm26.cable.virginm.net\n\t[82.37.23.78])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 0AB3A45B;\n\tSun, 14 Jan 2024 00:06:52 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1705187281;\n\tbh=qOcgFLSltMtQKnfr+O78QMR3+LgsLpg1/LGZ632droE=;\n\th=In-Reply-To:References:To:Date:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=hZCgrGRbZLf4LPu/nmp/nThijCqCvcmKOwL7CFiWmYMuD0b2RlWi/mhw5kvEP4O86\n\tZrfi4PB4hEyhXMthFtKqtjRO0bg+ZB6JJYlud3b7cokFQNP3n2FLivtNNKChehDYcp\n\tzpEZPn5yfQYr7gO7qfDNhYDy90k5nnOq266ls3bDIeuAQzc+GyAL1oCQLnxjBDnveq\n\tVL06hiAeOzI4yEGlO06zADODrnP7rk4XLeYC5MMFrCb5BnYJrQCdOohqbeSwg1CTJu\n\tHWAhX+Mg6bntDJcoYHG1X5erZpniDafEunkLpz9bYjM7NFwb850Ubui6n6ZojEDvdT\n\tXKUttLyr+50kA==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1705187212;\n\tbh=qOcgFLSltMtQKnfr+O78QMR3+LgsLpg1/LGZ632droE=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=Ppb0KN/XVcKONjsKGNe2Jvpa76M5xKrWNXyLanyQSVeCZzyrCiXB03IO3r3K52gF7\n\tP6+tZnZzgGHJYHZN3i51CThQFgRz62Hdmv6nhKOWOUfC53sIE4cHxW10YPSYlNaRWX\n\tnPNgNYWye3RokTdqgishmUKkXMSya+rs+gPnp1jY="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"Ppb0KN/X\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20240113142218.28063-15-hdegoede@redhat.com>","References":"<20240113142218.28063-1-hdegoede@redhat.com>\n\t<20240113142218.28063-15-hdegoede@redhat.com>","To":"Andrey Konovalov <andrey.konovalov.ynk@gmail.com>,\n\tHans de Goede <hdegoede@redhat.com>, libcamera-devel@lists.libcamera.org","Date":"Sat, 13 Jan 2024 23:07:56 +0000","Message-ID":"<170518727677.3418233.13565842497829934563@ping.linuxembedded.co.uk>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH v2 14/18] libcamera: pipeline: simple:\n\trename converterBuffers_ and related vars","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":"Kieran Bingham via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Maxime Ripard <mripard@redhat.com>, g.martti@gmail.com,\n\tt.langendam@gmail.com, srinivas.kandagatla@linaro.org,\n\tPavel Machek <pavel@ucw.cz>,\n\tBryan O'Donoghue <bryan.odonoghue@linaro.org>, admin@dennisbonke.com","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]