[{"id":29102,"web_url":"https://patchwork.libcamera.org/comment/29102/","msgid":"<20240327175909.GJ4721@pendragon.ideasonboard.com>","date":"2024-03-27T17:59:09","subject":"Re: [PATCH v6 11/18] libcamera: pipeline: simple: rename\n\tconverterBuffers_ and related vars","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Milan and Andrey,\n\nThank you for the patch.\n\nOn Tue, Mar 19, 2024 at 01:35:58PM +0100, Milan Zamazal wrote:\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> \n> Tested-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> # sc8280xp Lenovo x13s\n> Tested-by: Pavel Machek <pavel@ucw.cz>\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> Reviewed-by: Pavel Machek <pavel@ucw.cz>\n> Signed-off-by: Andrey Konovalov <andrey.konovalov@linaro.org>\n> Signed-off-by: Hans de Goede <hdegoede@redhat.com>\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\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 04e77f7e..9c8f7ba3 100644\n> --- a/src/libcamera/pipeline/simple/simple.cpp\n> +++ b/src/libcamera/pipeline/simple/simple.cpp\n> @@ -270,17 +270,18 @@ public:\n>  \tstd::vector<Configuration> configs_;\n>  \tstd::map<PixelFormat, std::vector<const Configuration *>> formats_;\n>  \n> +\tstd::vector<std::unique_ptr<FrameBuffer>> conversionBuffers_;\n> +\tstd::queue<std::map<unsigned int, FrameBuffer *>> conversionQueue_;\n> +\tbool useConversion_;\n> +\n>  \tstd::unique_ptr<Converter> converter_;\n> -\tstd::vector<std::unique_ptr<FrameBuffer>> converterBuffers_;\n> -\tbool useConverter_;\n> -\tstd::queue<std::map<unsigned int, FrameBuffer *>> converterQueue_;\n>  \n>  private:\n>  \tvoid tryPipeline(unsigned int code, const Size &size);\n>  \tstatic std::vector<const MediaPad *> routedSourcePads(MediaPad *sink);\n>  \n> -\tvoid converterInputDone(FrameBuffer *buffer);\n> -\tvoid converterOutputDone(FrameBuffer *buffer);\n> +\tvoid conversionInputDone(FrameBuffer *buffer);\n> +\tvoid conversionOutputDone(FrameBuffer *buffer);\n>  };\n>  \n>  class SimpleCameraConfiguration : public CameraConfiguration\n> @@ -504,8 +505,8 @@ int SimpleCameraData::init()\n>  \t\t\t\t<< \"Failed to create converter, disabling format conversion\";\n>  \t\t\tconverter_.reset();\n>  \t\t} else {\n> -\t\t\tconverter_->inputBufferReady.connect(this, &SimpleCameraData::converterInputDone);\n> -\t\t\tconverter_->outputBufferReady.connect(this, &SimpleCameraData::converterOutputDone);\n> +\t\t\tconverter_->inputBufferReady.connect(this, &SimpleCameraData::conversionInputDone);\n> +\t\t\tconverter_->outputBufferReady.connect(this, &SimpleCameraData::conversionOutputDone);\n>  \t\t}\n>  \t}\n>  \n> @@ -741,7 +742,7 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)\n>  \t * point converting an erroneous buffer.\n>  \t */\n>  \tif (buffer->metadata().status != FrameMetadata::FrameSuccess) {\n> -\t\tif (!useConverter_) {\n> +\t\tif (!useConversion_) {\n>  \t\t\t/* No conversion, just complete the request. */\n>  \t\t\tRequest *request = buffer->request();\n>  \t\t\tpipe->completeBuffer(request, buffer);\n> @@ -757,16 +758,16 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)\n>  \t\tif (buffer->metadata().status != FrameMetadata::FrameCancelled)\n>  \t\t\tvideo_->queueBuffer(buffer);\n>  \n> -\t\tif (converterQueue_.empty())\n> +\t\tif (conversionQueue_.empty())\n>  \t\t\treturn;\n>  \n>  \t\tRequest *request = nullptr;\n> -\t\tfor (auto &item : converterQueue_.front()) {\n> +\t\tfor (auto &item : conversionQueue_.front()) {\n>  \t\t\tFrameBuffer *outputBuffer = item.second;\n>  \t\t\trequest = outputBuffer->request();\n>  \t\t\tpipe->completeBuffer(request, outputBuffer);\n>  \t\t}\n> -\t\tconverterQueue_.pop();\n> +\t\tconversionQueue_.pop();\n>  \n>  \t\tif (request)\n>  \t\t\tpipe->completeRequest(request);\n> @@ -783,9 +784,9 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)\n>  \t */\n>  \tRequest *request = buffer->request();\n>  \n> -\tif (useConverter_ && !converterQueue_.empty()) {\n> +\tif (useConversion_ && !conversionQueue_.empty()) {\n>  \t\tconst std::map<unsigned int, FrameBuffer *> &outputs =\n> -\t\t\tconverterQueue_.front();\n> +\t\t\tconversionQueue_.front();\n>  \t\tif (!outputs.empty()) {\n>  \t\t\tFrameBuffer *outputBuffer = outputs.begin()->second;\n>  \t\t\tif (outputBuffer)\n> @@ -802,14 +803,14 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)\n>  \t * conversion is needed. If there's no queued request, just requeue the\n>  \t * captured buffer for capture.\n>  \t */\n> -\tif (useConverter_) {\n> -\t\tif (converterQueue_.empty()) {\n> +\tif (useConversion_) {\n> +\t\tif (conversionQueue_.empty()) {\n>  \t\t\tvideo_->queueBuffer(buffer);\n>  \t\t\treturn;\n>  \t\t}\n>  \n> -\t\tconverter_->queueBuffers(buffer, converterQueue_.front());\n> -\t\tconverterQueue_.pop();\n> +\t\tconverter_->queueBuffers(buffer, conversionQueue_.front());\n> +\t\tconversionQueue_.pop();\n>  \t\treturn;\n>  \t}\n>  \n> @@ -818,13 +819,13 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)\n>  \tpipe->completeRequest(request);\n>  }\n>  \n> -void SimpleCameraData::converterInputDone(FrameBuffer *buffer)\n> +void SimpleCameraData::conversionInputDone(FrameBuffer *buffer)\n>  {\n>  \t/* Queue the input buffer back for capture. */\n>  \tvideo_->queueBuffer(buffer);\n>  }\n>  \n> -void SimpleCameraData::converterOutputDone(FrameBuffer *buffer)\n> +void SimpleCameraData::conversionOutputDone(FrameBuffer *buffer)\n>  {\n>  \tSimplePipelineHandler *pipe = SimpleCameraData::pipe();\n>  \n> @@ -1190,14 +1191,14 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)\n>  \n>  \t/* Configure the converter if needed. */\n>  \tstd::vector<std::reference_wrapper<StreamConfiguration>> outputCfgs;\n> -\tdata->useConverter_ = config->needConversion();\n> +\tdata->useConversion_ = config->needConversion();\n>  \n>  \tfor (unsigned int i = 0; i < config->size(); ++i) {\n>  \t\tStreamConfiguration &cfg = config->at(i);\n>  \n>  \t\tcfg.setStream(&data->streams_[i]);\n>  \n> -\t\tif (data->useConverter_)\n> +\t\tif (data->useConversion_)\n>  \t\t\toutputCfgs.push_back(cfg);\n>  \t}\n>  \n> @@ -1223,7 +1224,7 @@ int SimplePipelineHandler::exportFrameBuffers(Camera *camera, Stream *stream,\n>  \t * Export buffers on the converter or capture video node, depending on\n>  \t * whether the converter is used or not.\n>  \t */\n> -\tif (data->useConverter_)\n> +\tif (data->useConversion_)\n>  \t\treturn data->converter_->exportBuffers(data->streamIndex(stream),\n>  \t\t\t\t\t\t       count, buffers);\n>  \telse\n> @@ -1244,13 +1245,13 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlL\n>  \t\treturn -EBUSY;\n>  \t}\n>  \n> -\tif (data->useConverter_) {\n> +\tif (data->useConversion_) {\n>  \t\t/*\n>  \t\t * When using the converter allocate a fixed number of internal\n>  \t\t * buffers.\n>  \t\t */\n>  \t\tret = video->allocateBuffers(kNumInternalBuffers,\n> -\t\t\t\t\t     &data->converterBuffers_);\n> +\t\t\t\t\t     &data->conversionBuffers_);\n>  \t} else {\n>  \t\t/* Otherwise, prepare for using buffers from the only stream. */\n>  \t\tStream *stream = &data->streams_[0];\n> @@ -1269,7 +1270,7 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlL\n>  \t\treturn ret;\n>  \t}\n>  \n> -\tif (data->useConverter_) {\n> +\tif (data->useConversion_) {\n>  \t\tret = data->converter_->start();\n>  \t\tif (ret < 0) {\n>  \t\t\tstop(camera);\n> @@ -1277,7 +1278,7 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlL\n>  \t\t}\n>  \n>  \t\t/* Queue all internal buffers for capture. */\n> -\t\tfor (std::unique_ptr<FrameBuffer> &buffer : data->converterBuffers_)\n> +\t\tfor (std::unique_ptr<FrameBuffer> &buffer : data->conversionBuffers_)\n>  \t\t\tvideo->queueBuffer(buffer.get());\n>  \t}\n>  \n> @@ -1289,7 +1290,7 @@ void SimplePipelineHandler::stopDevice(Camera *camera)\n>  \tSimpleCameraData *data = cameraData(camera);\n>  \tV4L2VideoDevice *video = data->video_;\n>  \n> -\tif (data->useConverter_)\n> +\tif (data->useConversion_)\n>  \t\tdata->converter_->stop();\n>  \n>  \tvideo->streamOff();\n> @@ -1297,7 +1298,7 @@ void SimplePipelineHandler::stopDevice(Camera *camera)\n>  \n>  \tvideo->bufferReady.disconnect(data, &SimpleCameraData::bufferReady);\n>  \n> -\tdata->converterBuffers_.clear();\n> +\tdata->conversionBuffers_.clear();\n>  \n>  \treleasePipeline(data);\n>  }\n> @@ -1315,7 +1316,7 @@ int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)\n>  \t\t * queue, it will be handed to the converter in the capture\n>  \t\t * completion handler.\n>  \t\t */\n> -\t\tif (data->useConverter_) {\n> +\t\tif (data->useConversion_) {\n>  \t\t\tbuffers.emplace(data->streamIndex(stream), buffer);\n>  \t\t} else {\n>  \t\t\tret = data->video_->queueBuffer(buffer);\n> @@ -1324,8 +1325,8 @@ int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)\n>  \t\t}\n>  \t}\n>  \n> -\tif (data->useConverter_)\n> -\t\tdata->converterQueue_.push(std::move(buffers));\n> +\tif (data->useConversion_)\n> +\t\tdata->conversionQueue_.push(std::move(buffers));\n>  \n>  \treturn 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 3DB5AC0DA4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 27 Mar 2024 17:59:19 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id CC4C163331;\n\tWed, 27 Mar 2024 18:59:18 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 15A5061C35\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 27 Mar 2024 18:59:18 +0100 (CET)","from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi\n\t[81.175.209.231])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 712D91571;\n\tWed, 27 Mar 2024 18:58:45 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"fwGGjuAL\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1711562325;\n\tbh=39cElI1QdAYHsFaZBsa47aTEA4AXckMR1bPdYWz56HI=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=fwGGjuAL3QToZWDtMZr2jXNcBMADptg07rxH9dnBGmzFaw3ORITOkd1jV6Kvg5Aji\n\tBSZ/5pyWduNyJX7bvrm+6V7f3iPdcST46KmKOqTF3VbU8bjdffGdD7wg1YI7yL771/\n\th+9YcKdnmLiXRqBvf4JWJMIQCh5pEzmpCPvAr8KE=","Date":"Wed, 27 Mar 2024 19:59:09 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Milan Zamazal <mzamazal@redhat.com>","Cc":"libcamera-devel@lists.libcamera.org,\n\tAndrey Konovalov <andrey.konovalov.ynk@gmail.com>,\n\tBryan O'Donoghue <bryan.odonoghue@linaro.org>,\n\tMaxime Ripard <mripard@redhat.com>, Pavel Machek <pavel@ucw.cz>,\n\tHans de Goede <hdegoede@redhat.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>","Subject":"Re: [PATCH v6 11/18] libcamera: pipeline: simple: rename\n\tconverterBuffers_ and related vars","Message-ID":"<20240327175909.GJ4721@pendragon.ideasonboard.com>","References":"<20240319123622.675599-1-mzamazal@redhat.com>\n\t<20240319123622.675599-12-mzamazal@redhat.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20240319123622.675599-12-mzamazal@redhat.com>","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]