[{"id":30549,"web_url":"https://patchwork.libcamera.org/comment/30549/","msgid":"<20240802203845.GB3295@pendragon.ideasonboard.com>","date":"2024-08-02T20:38:45","subject":"Re: [PATCH v6 3/5] libcamera: rkisp1: Prepare for additional camera\n\tcontrols","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Umang,\n\nThank you for the patch.\n\nOn Fri, Jul 26, 2024 at 05:17:13PM +0530, Umang Jain wrote:\n> Currently the rkisp1 pipeline handler only registers controls that are\n> related to the IPA. This patch prepares the rkisp1 pipeline-handler to\n> register camera controls which are not related to the IPA.\n> \n> Hence, introduce a additional ControlInfoMap for IPA controls. These\n\ns/a additional/an additional/\n\n> controls will be merged together with the controls in the pipeline\n> handler (introduced subsequently) as part of updateControls() and\n> together will be registered during the registration of the camera.\n> This is similar to what IPU3 pipeline handler handles its controls.\n> \n> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n> ---\n>  src/libcamera/pipeline/rkisp1/rkisp1.cpp | 28 +++++++++++++++++++++---\n>  1 file changed, 25 insertions(+), 3 deletions(-)\n> \n> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> index 5f94f422..25f2cc97 100644\n> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> @@ -109,6 +109,8 @@ public:\n>  \n>  \tstd::unique_ptr<ipa::rkisp1::IPAProxyRkISP1> ipa_;\n>  \n> +\tControlInfoMap ipaControls_;\n> +\n>  private:\n>  \tvoid paramFilled(unsigned int frame);\n>  \tvoid setSensorControls(unsigned int frame,\n> @@ -184,6 +186,8 @@ private:\n>  \tint allocateBuffers(Camera *camera);\n>  \tint freeBuffers(Camera *camera);\n>  \n> +\tint updateControls(RkISP1CameraData *data);\n> +\n>  \tMediaDevice *media_;\n>  \tstd::unique_ptr<V4L2Subdevice> isp_;\n>  \tstd::unique_ptr<V4L2VideoDevice> param_;\n> @@ -370,7 +374,7 @@ int RkISP1CameraData::loadIPA(unsigned int hwRevision)\n>  \t}\n>  \n>  \tret = ipa_->init({ ipaTuningFile, sensor_->model() }, hwRevision,\n> -\t\t\t sensorInfo, sensor_->controls(), &controlInfo_);\n> +\t\t\t sensorInfo, sensor_->controls(), &ipaControls_);\n>  \tif (ret < 0) {\n>  \t\tLOG(RkISP1, Error) << \"IPA initialization failure\";\n>  \t\treturn ret;\n> @@ -820,12 +824,13 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)\n>  \n>  \tipaConfig.sensorControls = data->sensor_->controls();\n>  \n> -\tret = data->ipa_->configure(ipaConfig, streamConfig, &data->controlInfo_);\n> +\tret = data->ipa_->configure(ipaConfig, streamConfig, &data->ipaControls_);\n>  \tif (ret) {\n>  \t\tLOG(RkISP1, Error) << \"failed configuring IPA (\" << ret << \")\";\n>  \t\treturn ret;\n>  \t}\n> -\treturn 0;\n> +\n> +\treturn updateControls(data);\n>  }\n>  \n>  int PipelineHandlerRkISP1::exportFrameBuffers([[maybe_unused]] Camera *camera, Stream *stream,\n> @@ -1101,8 +1106,23 @@ int PipelineHandlerRkISP1::initLinks(Camera *camera,\n>  \treturn 0;\n>  }\n>  \n\nYou may want to copy the documentation from\nPipelineHandlerIPU3::updateControls().\n\n> +int PipelineHandlerRkISP1::updateControls(RkISP1CameraData *data)\n> +{\n> +\tControlInfoMap::Map rkisp1Controls;\n\ns/rkisp1Controls/controls/\n\n> +\n> +\t/* Add the IPA registered controls to list of camera controls. */\n> +\tfor (const auto &ipaControl : data->ipaControls_)\n> +\t\trkisp1Controls[ipaControl.first] = ipaControl.second;\n> +\n> +\tdata->controlInfo_ = ControlInfoMap(std::move(rkisp1Controls),\n> +\t\t\t\t\t    controls::controls);\n> +\n> +\treturn 0;\n> +}\n> +\n>  int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)\n>  {\n> +\tControlInfoMap::Map rkisp1Controls;\n\nUnused ?\n\n>  \tint ret;\n>  \n>  \tstd::unique_ptr<RkISP1CameraData> data =\n> @@ -1137,6 +1157,8 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)\n>  \tif (ret)\n>  \t\treturn ret;\n>  \n> +\tupdateControls(data.get());\n> +\n>  \tstd::set<Stream *> streams{\n>  \t\t&data->mainPathStream_,\n>  \t\t&data->selfPathStream_,","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 CFFD4C323E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  2 Aug 2024 20:39:09 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B8D3E63381;\n\tFri,  2 Aug 2024 22:39:08 +0200 (CEST)","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 0735F6336B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  2 Aug 2024 22:39:06 +0200 (CEST)","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 1D4612D5;\n\tFri,  2 Aug 2024 22:38:17 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"sYegWUrD\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1722631097;\n\tbh=le9g+9yotAX4JeFYPVwFZxpz7Sh0q4FS0TOsXB5to+E=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=sYegWUrDXvDHF35G4eQVnECFPhiTEgFgYQfI5m36cyt+jLyad/e430sRI5TYoJU8O\n\tordG+wkPo7c2WEiv509YhsLuMbKWWW7cmB9ZmnSN5Eng/SNjQ+6N/x0lqLjbZ0P6Tj\n\toODCgukV9IPOk8JhmEOqr56Pk6AB8zr09r40VAtc=","Date":"Fri, 2 Aug 2024 23:38:45 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Umang Jain <umang.jain@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org,\n\tPaul Elder <paul.elder@ideasonboard.com>","Subject":"Re: [PATCH v6 3/5] libcamera: rkisp1: Prepare for additional camera\n\tcontrols","Message-ID":"<20240802203845.GB3295@pendragon.ideasonboard.com>","References":"<20240726114715.226468-1-umang.jain@ideasonboard.com>\n\t<20240726114715.226468-4-umang.jain@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20240726114715.226468-4-umang.jain@ideasonboard.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>"}}]