[{"id":33031,"web_url":"https://patchwork.libcamera.org/comment/33031/","msgid":"<20250112220918.GB13236@pendragon.ideasonboard.com>","date":"2025-01-12T22:09:18","subject":"Re: [RFC PATCH 4/7] pipeline: rkisp1: Refactor setControls()","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Stefan,\n\nThank you for the patch.\n\nThe subject line is incorrect, this patch isn't about the pipeline\nhandler but the IPA module.\n\nOn Fri, Dec 20, 2024 at 05:26:50PM +0100, Stefan Klug wrote:\n> IPARkISP1::setControls() is called when new sensor controls shall be\n> queued in the pipeline handler. It constructs a list of sensor controls\n> and then emits the setSensorControls signal.\n> \n> To be able to return initial sensor controls from the IPARkISP1::start()\n> function, similar functionality will be needed. Prepare for that by\n> changing the setControls() function to a getSensorControls() and by moving\n> the setSensorControls.emit() out of the function.\n> \n> This patch contains no functional changes.\n> \n> Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> ---\n>  src/ipa/rkisp1/rkisp1.cpp | 22 +++++++++++-----------\n>  1 file changed, 11 insertions(+), 11 deletions(-)\n> \n> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\n> index 2ffdd99b158a..45a539a61fb1 100644\n> --- a/src/ipa/rkisp1/rkisp1.cpp\n> +++ b/src/ipa/rkisp1/rkisp1.cpp\n> @@ -76,7 +76,7 @@ private:\n>  \tvoid updateControls(const IPACameraSensorInfo &sensorInfo,\n>  \t\t\t    const ControlInfoMap &sensorControls,\n>  \t\t\t    ControlInfoMap *ipaControls);\n> -\tvoid setControls(unsigned int frame);\n> +\tControlList getSensorControls(unsigned int frame);\n>  \n>  \tstd::map<unsigned int, FrameBuffer> buffers_;\n>  \tstd::map<unsigned int, MappedFrameBuffer> mappedBuffers_;\n> @@ -211,7 +211,8 @@ int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision,\n>  \n>  int IPARkISP1::start()\n>  {\n> -\tsetControls(0);\n> +\tControlList ctrls = getSensorControls(0);\n\nWill this work fine before patch 5/7 ? Or at least with no regression\n(such as crashes) ?\n\n> +\tsetSensorControls.emit(0, ctrls);\n>  \n>  \treturn 0;\n>  }\n> @@ -378,7 +379,12 @@ void IPARkISP1::processStats(const uint32_t frame, const uint32_t bufferId,\n>  \t\talgo->process(context_, frame, frameContext, stats, metadata);\n>  \t}\n>  \n> -\tsetControls(frame);\n> +\t/*\n> +\t * \\todo: Here we should do a lookahead that takes the sensor delays\n\nThe doxygen tag is '\\todo', not '\\todo:'.\n\n> +\t * into account.\n> +\t */\n\nI'm not sure how accurate that is, but I suppose it's not worse than the\nexisting comment. I'd keep the mention of frame number though.\n\n> +\tControlList ctrls = getSensorControls(frame);\n> +\tsetSensorControls.emit(frame, ctrls);\n>  \n>  \tcontext_.debugMetadata.moveEntries(metadata);\n>  \tmetadataReady.emit(frame, metadata);\n> @@ -443,13 +449,8 @@ void IPARkISP1::updateControls(const IPACameraSensorInfo &sensorInfo,\n>  \t*ipaControls = ControlInfoMap(std::move(ctrlMap), controls::controls);\n>  }\n>  \n> -void IPARkISP1::setControls(unsigned int frame)\n> +ControlList IPARkISP1::getSensorControls(unsigned int frame)\n>  {\n> -\t/*\n> -\t * \\todo The frame number is most likely wrong here, we need to take\n> -\t * internal sensor delays and other timing parameters into account.\n> -\t */\n> -\n>  \tIPAFrameContext &frameContext = context_.frameContexts.get(frame);\n>  \tuint32_t exposure = frameContext.agc.exposure;\n>  \tuint32_t gain = context_.camHelper->gainCode(frameContext.agc.gain);\n> @@ -457,8 +458,7 @@ void IPARkISP1::setControls(unsigned int frame)\n>  \tControlList ctrls(sensorControls_);\n>  \tctrls.set(V4L2_CID_EXPOSURE, static_cast<int32_t>(exposure));\n>  \tctrls.set(V4L2_CID_ANALOGUE_GAIN, static_cast<int32_t>(gain));\n> -\n> -\tsetSensorControls.emit(frame, ctrls);\n> +\treturn ctrls;\n>  }\n>  \n>  } /* namespace ipa::rkisp1 */","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 2E28CC326C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSun, 12 Jan 2025 22:09:24 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 379D5684EA;\n\tSun, 12 Jan 2025 23:09:23 +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 70EFA61882\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 12 Jan 2025 23:09:22 +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 5973C8CC;\n\tSun, 12 Jan 2025 23:08:26 +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=\"lC2O0jPs\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1736719706;\n\tbh=PFlH1vvbVW8PpAnlm95mRfQITGhDc+nr+Lv3LrcvUlc=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=lC2O0jPsx1pgrjAuOsrSwbtym4lyh6I3hFhjwjrLP3Yoox9v+6BLE4IL2lV9xDymo\n\tHFJdk7weohiMGyykcA4wAI72Igj9IIcnFEBJiZdNjIj940njDqLAetKG52bPIRZ9tN\n\tgdnx8G6fttImy5PQX/Mt1vpJapGX5CRq71uWppyE=","Date":"Mon, 13 Jan 2025 00:09:18 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Stefan Klug <stefan.klug@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [RFC PATCH 4/7] pipeline: rkisp1: Refactor setControls()","Message-ID":"<20250112220918.GB13236@pendragon.ideasonboard.com>","References":"<20241220162724.756494-1-stefan.klug@ideasonboard.com>\n\t<20241220162724.756494-5-stefan.klug@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20241220162724.756494-5-stefan.klug@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>"}},{"id":33401,"web_url":"https://patchwork.libcamera.org/comment/33401/","msgid":"<Z7bm_H49Fdz6p4Ju@pyrite.rasen.tech>","date":"2025-02-20T08:25:32","subject":"Re: [RFC PATCH 4/7] pipeline: rkisp1: Refactor setControls()","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"On Mon, Jan 13, 2025 at 12:09:18AM +0200, Laurent Pinchart wrote:\n> Hi Stefan,\n> \n> Thank you for the patch.\n> \n> The subject line is incorrect, this patch isn't about the pipeline\n> handler but the IPA module.\n> \n> On Fri, Dec 20, 2024 at 05:26:50PM +0100, Stefan Klug wrote:\n> > IPARkISP1::setControls() is called when new sensor controls shall be\n> > queued in the pipeline handler. It constructs a list of sensor controls\n> > and then emits the setSensorControls signal.\n> > \n> > To be able to return initial sensor controls from the IPARkISP1::start()\n> > function, similar functionality will be needed. Prepare for that by\n> > changing the setControls() function to a getSensorControls() and by moving\n> > the setSensorControls.emit() out of the function.\n> > \n> > This patch contains no functional changes.\n> > \n> > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> > ---\n> >  src/ipa/rkisp1/rkisp1.cpp | 22 +++++++++++-----------\n> >  1 file changed, 11 insertions(+), 11 deletions(-)\n> > \n> > diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\n> > index 2ffdd99b158a..45a539a61fb1 100644\n> > --- a/src/ipa/rkisp1/rkisp1.cpp\n> > +++ b/src/ipa/rkisp1/rkisp1.cpp\n> > @@ -76,7 +76,7 @@ private:\n> >  \tvoid updateControls(const IPACameraSensorInfo &sensorInfo,\n> >  \t\t\t    const ControlInfoMap &sensorControls,\n> >  \t\t\t    ControlInfoMap *ipaControls);\n> > -\tvoid setControls(unsigned int frame);\n> > +\tControlList getSensorControls(unsigned int frame);\n> >  \n> >  \tstd::map<unsigned int, FrameBuffer> buffers_;\n> >  \tstd::map<unsigned int, MappedFrameBuffer> mappedBuffers_;\n> > @@ -211,7 +211,8 @@ int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision,\n> >  \n> >  int IPARkISP1::start()\n> >  {\n> > -\tsetControls(0);\n> > +\tControlList ctrls = getSensorControls(0);\n> \n> Will this work fine before patch 5/7 ? Or at least with no regression\n> (such as crashes) ?\n\nThis doesn't change functionality (when combined with the line below) so\nI expect it to be fine.\n\n\nPaul\n\n> \n> > +\tsetSensorControls.emit(0, ctrls);\n> >  \n> >  \treturn 0;\n> >  }\n> > @@ -378,7 +379,12 @@ void IPARkISP1::processStats(const uint32_t frame, const uint32_t bufferId,\n> >  \t\talgo->process(context_, frame, frameContext, stats, metadata);\n> >  \t}\n> >  \n> > -\tsetControls(frame);\n> > +\t/*\n> > +\t * \\todo: Here we should do a lookahead that takes the sensor delays\n> \n> The doxygen tag is '\\todo', not '\\todo:'.\n> \n> > +\t * into account.\n> > +\t */\n> \n> I'm not sure how accurate that is, but I suppose it's not worse than the\n> existing comment. I'd keep the mention of frame number though.\n> \n> > +\tControlList ctrls = getSensorControls(frame);\n> > +\tsetSensorControls.emit(frame, ctrls);\n> >  \n> >  \tcontext_.debugMetadata.moveEntries(metadata);\n> >  \tmetadataReady.emit(frame, metadata);\n> > @@ -443,13 +449,8 @@ void IPARkISP1::updateControls(const IPACameraSensorInfo &sensorInfo,\n> >  \t*ipaControls = ControlInfoMap(std::move(ctrlMap), controls::controls);\n> >  }\n> >  \n> > -void IPARkISP1::setControls(unsigned int frame)\n> > +ControlList IPARkISP1::getSensorControls(unsigned int frame)\n> >  {\n> > -\t/*\n> > -\t * \\todo The frame number is most likely wrong here, we need to take\n> > -\t * internal sensor delays and other timing parameters into account.\n> > -\t */\n> > -\n> >  \tIPAFrameContext &frameContext = context_.frameContexts.get(frame);\n> >  \tuint32_t exposure = frameContext.agc.exposure;\n> >  \tuint32_t gain = context_.camHelper->gainCode(frameContext.agc.gain);\n> > @@ -457,8 +458,7 @@ void IPARkISP1::setControls(unsigned int frame)\n> >  \tControlList ctrls(sensorControls_);\n> >  \tctrls.set(V4L2_CID_EXPOSURE, static_cast<int32_t>(exposure));\n> >  \tctrls.set(V4L2_CID_ANALOGUE_GAIN, static_cast<int32_t>(gain));\n> > -\n> > -\tsetSensorControls.emit(frame, ctrls);\n> > +\treturn ctrls;\n> >  }\n> >  \n> >  } /* namespace ipa::rkisp1 */\n> \n> -- \n> Regards,\n> \n> Laurent Pinchart","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 5211DBDCBF\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 20 Feb 2025 08:25:43 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B2FE468692;\n\tThu, 20 Feb 2025 09:25:42 +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 7EFC16185D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 20 Feb 2025 09:25:40 +0100 (CET)","from pyrite.rasen.tech (unknown\n\t[IPv6:2404:7a81:160:2100:4292:75df:25cd:1836])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 8E5F7E79;\n\tThu, 20 Feb 2025 09:24:15 +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=\"BQUFgtok\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1740039856;\n\tbh=2vZRlb4yOu81zmv7deikWeozDiNHQ1XroPYMCY3p6T0=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=BQUFgtokZSm61vYpEOdIVzaplcbeWIPHvn91m8MdWFcxszjQJ1yc7NlkKXc0bGB2+\n\tFJo1SQYlSGatdoGf6XcDNZCV2yT/Fp8Cp80JtbEzMNameF44kfjx4MV9RzF+pamcv6\n\tVXD4N15B7OcoBFxFzCrztFe6K2WZkixGobT2VngQ=","Date":"Thu, 20 Feb 2025 17:25:32 +0900","From":"Paul Elder <paul.elder@ideasonboard.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"Stefan Klug <stefan.klug@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Subject":"Re: [RFC PATCH 4/7] pipeline: rkisp1: Refactor setControls()","Message-ID":"<Z7bm_H49Fdz6p4Ju@pyrite.rasen.tech>","References":"<20241220162724.756494-1-stefan.klug@ideasonboard.com>\n\t<20241220162724.756494-5-stefan.klug@ideasonboard.com>\n\t<20250112220918.GB13236@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20250112220918.GB13236@pendragon.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>"}},{"id":33406,"web_url":"https://patchwork.libcamera.org/comment/33406/","msgid":"<Z7bssIpDJo9sH0Z5@pyrite.rasen.tech>","date":"2025-02-20T08:49:52","subject":"Re: [RFC PATCH 4/7] pipeline: rkisp1: Refactor setControls()","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"On Fri, Dec 20, 2024 at 05:26:50PM +0100, Stefan Klug wrote:\n> IPARkISP1::setControls() is called when new sensor controls shall be\n> queued in the pipeline handler. It constructs a list of sensor controls\n> and then emits the setSensorControls signal.\n> \n> To be able to return initial sensor controls from the IPARkISP1::start()\n> function, similar functionality will be needed. Prepare for that by\n> changing the setControls() function to a getSensorControls() and by moving\n> the setSensorControls.emit() out of the function.\n> \n> This patch contains no functional changes.\n> \n> Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n\nWith Laurent's comments addressed,\n\nReviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n\n> ---\n>  src/ipa/rkisp1/rkisp1.cpp | 22 +++++++++++-----------\n>  1 file changed, 11 insertions(+), 11 deletions(-)\n> \n> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\n> index 2ffdd99b158a..45a539a61fb1 100644\n> --- a/src/ipa/rkisp1/rkisp1.cpp\n> +++ b/src/ipa/rkisp1/rkisp1.cpp\n> @@ -76,7 +76,7 @@ private:\n>  \tvoid updateControls(const IPACameraSensorInfo &sensorInfo,\n>  \t\t\t    const ControlInfoMap &sensorControls,\n>  \t\t\t    ControlInfoMap *ipaControls);\n> -\tvoid setControls(unsigned int frame);\n> +\tControlList getSensorControls(unsigned int frame);\n>  \n>  \tstd::map<unsigned int, FrameBuffer> buffers_;\n>  \tstd::map<unsigned int, MappedFrameBuffer> mappedBuffers_;\n> @@ -211,7 +211,8 @@ int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision,\n>  \n>  int IPARkISP1::start()\n>  {\n> -\tsetControls(0);\n> +\tControlList ctrls = getSensorControls(0);\n> +\tsetSensorControls.emit(0, ctrls);\n>  \n>  \treturn 0;\n>  }\n> @@ -378,7 +379,12 @@ void IPARkISP1::processStats(const uint32_t frame, const uint32_t bufferId,\n>  \t\talgo->process(context_, frame, frameContext, stats, metadata);\n>  \t}\n>  \n> -\tsetControls(frame);\n> +\t/*\n> +\t * \\todo: Here we should do a lookahead that takes the sensor delays\n> +\t * into account.\n> +\t */\n> +\tControlList ctrls = getSensorControls(frame);\n> +\tsetSensorControls.emit(frame, ctrls);\n>  \n>  \tcontext_.debugMetadata.moveEntries(metadata);\n>  \tmetadataReady.emit(frame, metadata);\n> @@ -443,13 +449,8 @@ void IPARkISP1::updateControls(const IPACameraSensorInfo &sensorInfo,\n>  \t*ipaControls = ControlInfoMap(std::move(ctrlMap), controls::controls);\n>  }\n>  \n> -void IPARkISP1::setControls(unsigned int frame)\n> +ControlList IPARkISP1::getSensorControls(unsigned int frame)\n>  {\n> -\t/*\n> -\t * \\todo The frame number is most likely wrong here, we need to take\n> -\t * internal sensor delays and other timing parameters into account.\n> -\t */\n> -\n>  \tIPAFrameContext &frameContext = context_.frameContexts.get(frame);\n>  \tuint32_t exposure = frameContext.agc.exposure;\n>  \tuint32_t gain = context_.camHelper->gainCode(frameContext.agc.gain);\n> @@ -457,8 +458,7 @@ void IPARkISP1::setControls(unsigned int frame)\n>  \tControlList ctrls(sensorControls_);\n>  \tctrls.set(V4L2_CID_EXPOSURE, static_cast<int32_t>(exposure));\n>  \tctrls.set(V4L2_CID_ANALOGUE_GAIN, static_cast<int32_t>(gain));\n> -\n> -\tsetSensorControls.emit(frame, ctrls);\n> +\treturn ctrls;\n>  }\n>  \n>  } /* namespace ipa::rkisp1 */\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 2687EBEFBE\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 20 Feb 2025 08:50:01 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D591C6869C;\n\tThu, 20 Feb 2025 09:50:00 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3C50768692\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 20 Feb 2025 09:49:59 +0100 (CET)","from pyrite.rasen.tech (unknown\n\t[IPv6:2404:7a81:160:2100:4292:75df:25cd:1836])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E2551526;\n\tThu, 20 Feb 2025 09:48:34 +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=\"Rd+8idsK\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1740041316;\n\tbh=nGXqsqm6qobBNj7y3KfXeRLoGAhC9L5TeggNr0cQXy8=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=Rd+8idsKfj6sF19PzpVokQH8Xi1ZYiVPnoWUBRrjumcKn65EHucv+05NyRUEtreYu\n\t145G0JvdH64aBOKnxBuRfDEEFHHbJyeOpi3lW+2yR16gg1qGAPKgZ3eX9M+MV3fuht\n\tqpG+QICpjo+m2voObPdcM9NnluUUkRc9/5y2BgMs=","Date":"Thu, 20 Feb 2025 17:49:52 +0900","From":"Paul Elder <paul.elder@ideasonboard.com>","To":"Stefan Klug <stefan.klug@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [RFC PATCH 4/7] pipeline: rkisp1: Refactor setControls()","Message-ID":"<Z7bssIpDJo9sH0Z5@pyrite.rasen.tech>","References":"<20241220162724.756494-1-stefan.klug@ideasonboard.com>\n\t<20241220162724.756494-5-stefan.klug@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20241220162724.756494-5-stefan.klug@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>"}}]