[{"id":26816,"web_url":"https://patchwork.libcamera.org/comment/26816/","msgid":"<20230403123447.7lvrlnjbxz65v5px@uno.localdomain>","date":"2023-04-03T12:34:47","subject":"Re: [libcamera-devel] [PATCH v6 09/10] rkisp1: Control camera lens\n\tposition from IPA","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Daniel\n\nOn Fri, Mar 31, 2023 at 10:19:29AM +0200, Daniel Semkowicz via libcamera-devel wrote:\n> Allow control of lens position from the IPA, by setting corresponding\n> af fields in the IPAFrameContext structure. Controls are then passed to\n> the pipeline handler, which sets the lens position in CameraLens.\n>\n> Signed-off-by: Daniel Semkowicz <dse@thaumatec.com>\n\nSeems like the patch has not changed and you've lost my tag\n\nReviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n\nThanks\n  j\n\n> ---\n>  include/libcamera/ipa/rkisp1.mojom       |  1 +\n>  src/ipa/rkisp1/rkisp1.cpp                |  8 ++++++++\n>  src/libcamera/pipeline/rkisp1/rkisp1.cpp | 13 +++++++++++++\n>  3 files changed, 22 insertions(+)\n>\n> diff --git a/include/libcamera/ipa/rkisp1.mojom b/include/libcamera/ipa/rkisp1.mojom\n> index d4ff1230..dc6a8ffc 100644\n> --- a/include/libcamera/ipa/rkisp1.mojom\n> +++ b/include/libcamera/ipa/rkisp1.mojom\n> @@ -39,5 +39,6 @@ interface IPARkISP1Interface {\n>  interface IPARkISP1EventInterface {\n>  \tparamsBufferReady(uint32 frame);\n>  \tsetSensorControls(uint32 frame, libcamera.ControlList sensorControls);\n> +\tsetLensControls(libcamera.ControlList lensControls);\n>  \tmetadataReady(uint32 frame, libcamera.ControlList metadata);\n>  };\n> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\n> index 9c8b4a82..37b1e0a8 100644\n> --- a/src/ipa/rkisp1/rkisp1.cpp\n> +++ b/src/ipa/rkisp1/rkisp1.cpp\n> @@ -497,6 +497,14 @@ void IPARkISP1::setControls(unsigned int frame)\n>  \tctrls.set(V4L2_CID_ANALOGUE_GAIN, static_cast<int32_t>(gain));\n>\n>  \tsetSensorControls.emit(frame, ctrls);\n> +\n> +\tif (lensControls_ && context_.activeState.af.applyLensCtrls) {\n> +\t\tcontext_.activeState.af.applyLensCtrls = false;\n> +\t\tControlList lensCtrls(*lensControls_);\n> +\t\tlensCtrls.set(V4L2_CID_FOCUS_ABSOLUTE,\n> +\t\t\t      context_.activeState.af.lensPosition);\n> +\t\tsetLensControls.emit(lensCtrls);\n> +\t}\n>  }\n>\n>  } /* namespace ipa::rkisp1 */\n> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> index f966254a..f42a8368 100644\n> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> @@ -114,6 +114,7 @@ private:\n>  \tvoid paramFilled(unsigned int frame);\n>  \tvoid setSensorControls(unsigned int frame,\n>  \t\t\t       const ControlList &sensorControls);\n> +\tvoid setLensControls(const ControlList &lensControls);\n>\n>  \tvoid metadataReady(unsigned int frame, const ControlList &metadata);\n>  };\n> @@ -340,6 +341,8 @@ int RkISP1CameraData::loadIPA(unsigned int hwRevision)\n>  \t\treturn -ENOENT;\n>\n>  \tipa_->setSensorControls.connect(this, &RkISP1CameraData::setSensorControls);\n> +\tif (sensor_->focusLens())\n> +\t\tipa_->setLensControls.connect(this, &RkISP1CameraData::setLensControls);\n>  \tipa_->paramsBufferReady.connect(this, &RkISP1CameraData::paramFilled);\n>  \tipa_->metadataReady.connect(this, &RkISP1CameraData::metadataReady);\n>\n> @@ -409,6 +412,16 @@ void RkISP1CameraData::setSensorControls([[maybe_unused]] unsigned int frame,\n>  \tdelayedCtrls_->push(sensorControls);\n>  }\n>\n> +void RkISP1CameraData::setLensControls(const ControlList &lensControls)\n> +{\n> +\tCameraLens *focusLens = sensor_->focusLens();\n> +\n> +\tfor (auto const &[id, value] : lensControls) {\n> +\t\tif (id == V4L2_CID_FOCUS_ABSOLUTE)\n> +\t\t\tfocusLens->setFocusPosition(value.get<int32_t>());\n> +\t}\n> +}\n> +\n>  void RkISP1CameraData::metadataReady(unsigned int frame, const ControlList &metadata)\n>  {\n>  \tRkISP1FrameInfo *info = frameInfo_.find(frame);\n> --\n> 2.39.2\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 C6CE1C0F2A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  3 Apr 2023 12:34:52 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 09D3C6271C;\n\tMon,  3 Apr 2023 14:34:52 +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 18503626E3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  3 Apr 2023 14:34:50 +0200 (CEST)","from ideasonboard.com (93-61-96-190.ip145.fastwebnet.it\n\t[93.61.96.190])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 8DEA44A7;\n\tMon,  3 Apr 2023 14:34:49 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1680525292;\n\tbh=cyCmGaghFJO7U0Ddg/WYvgNMu5aueEiVkAlZJ8dzruQ=;\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=0i3ftMR57oFZeagZyd5wlbpxKT6WLx8iKMfsXrxW5+3+UVSsASwWpNe/GSmi67JDI\n\tFH5uFZ3nYcYZeQrMdXfuyrlI7sSx1PFqgZYyMDU0jxBJCgwlQ0hAmvvCAo70H5Ql1S\n\tC9+LqlRUE6tmRyAUd5djKA72HTI3F3ozoLOH9dKoLofbO/YFSVP5iPyY6189QZn2pd\n\twUZYSHmw5xME8JNZrmcmw+V/vPHnwZNas+b3ijSBshHOETAnYzWXfx+MFklkOpByzB\n\tg58mM3aBWTl9rzku9RgSixuBAeQ/rlrd20K51M4MJRuHZ3dP5IgxZRS2g0fJ+OsAXV\n\tD1DgVB0CW30XA==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1680525289;\n\tbh=cyCmGaghFJO7U0Ddg/WYvgNMu5aueEiVkAlZJ8dzruQ=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=waBTOhquFFLNKsL4vOMkb+RlZAJJ4bZZD4XaT2CCOZa+Qh03FSpocpol+SPxhsBss\n\tfm2VrFdHGMCBUED34u1sPvl9IrcMq8TRWeRMExwxujSvmg/82RYaWYFWus93gcLivN\n\tTdWhBsoMG9NzuEF9YOEhDGz/CJ3ZiZZHc65NpHyk="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"waBTOhqu\"; dkim-atps=neutral","Date":"Mon, 3 Apr 2023 14:34:47 +0200","To":"Daniel Semkowicz <dse@thaumatec.com>","Message-ID":"<20230403123447.7lvrlnjbxz65v5px@uno.localdomain>","References":"<20230331081930.19289-1-dse@thaumatec.com>\n\t<20230331081930.19289-10-dse@thaumatec.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20230331081930.19289-10-dse@thaumatec.com>","Subject":"Re: [libcamera-devel] [PATCH v6 09/10] rkisp1: Control camera lens\n\tposition from IPA","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":"Jacopo Mondi via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Jacopo Mondi <jacopo.mondi@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":27147,"web_url":"https://patchwork.libcamera.org/comment/27147/","msgid":"<CAHgnY3m2e1r3k=yVO8mwHQOkcD5qmrYYBp_8xSFPHeQrR8-2Kg@mail.gmail.com>","date":"2023-05-26T11:45:44","subject":"Re: [libcamera-devel] [PATCH v6 09/10] rkisp1: Control camera lens\n\tposition from IPA","submitter":{"id":126,"url":"https://patchwork.libcamera.org/api/people/126/","name":"Daniel Semkowicz","email":"dse@thaumatec.com"},"content":"Hi Laurent,\n\nOn Wed, Apr 26, 2023 at 6:09 AM Laurent Pinchart\n<laurent.pinchart@ideasonboard.com> wrote:\n>\n> Hi Daniel,\n>\n> Thank you for the patch.\n>\n> On Fri, Mar 31, 2023 at 10:19:29AM +0200, Daniel Semkowicz via libcamera-devel wrote:\n> > Allow control of lens position from the IPA, by setting corresponding\n> > af fields in the IPAFrameContext structure. Controls are then passed to\n> > the pipeline handler, which sets the lens position in CameraLens.\n> >\n> > Signed-off-by: Daniel Semkowicz <dse@thaumatec.com>\n> > ---\n> >  include/libcamera/ipa/rkisp1.mojom       |  1 +\n> >  src/ipa/rkisp1/rkisp1.cpp                |  8 ++++++++\n> >  src/libcamera/pipeline/rkisp1/rkisp1.cpp | 13 +++++++++++++\n> >  3 files changed, 22 insertions(+)\n> >\n> > diff --git a/include/libcamera/ipa/rkisp1.mojom b/include/libcamera/ipa/rkisp1.mojom\n> > index d4ff1230..dc6a8ffc 100644\n> > --- a/include/libcamera/ipa/rkisp1.mojom\n> > +++ b/include/libcamera/ipa/rkisp1.mojom\n> > @@ -39,5 +39,6 @@ interface IPARkISP1Interface {\n> >  interface IPARkISP1EventInterface {\n> >       paramsBufferReady(uint32 frame);\n> >       setSensorControls(uint32 frame, libcamera.ControlList sensorControls);\n> > +     setLensControls(libcamera.ControlList lensControls);\n> >       metadataReady(uint32 frame, libcamera.ControlList metadata);\n> >  };\n> > diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\n> > index 9c8b4a82..37b1e0a8 100644\n> > --- a/src/ipa/rkisp1/rkisp1.cpp\n> > +++ b/src/ipa/rkisp1/rkisp1.cpp\n> > @@ -497,6 +497,14 @@ void IPARkISP1::setControls(unsigned int frame)\n> >       ctrls.set(V4L2_CID_ANALOGUE_GAIN, static_cast<int32_t>(gain));\n> >\n> >       setSensorControls.emit(frame, ctrls);\n> > +\n> > +     if (lensControls_ && context_.activeState.af.applyLensCtrls) {\n> > +             context_.activeState.af.applyLensCtrls = false;\n> > +             ControlList lensCtrls(*lensControls_);\n> > +             lensCtrls.set(V4L2_CID_FOCUS_ABSOLUTE,\n> > +                           context_.activeState.af.lensPosition);\n> > +             setLensControls.emit(lensCtrls);\n>\n> This means that the IPA module will call the pipeline handler twice to\n> set controls, once for sensor controls and once for lens controls. As\n> those calls are cross-thread, and possibly cross-process, that's not\n> very efficient. It would be better to combine the two with a single\n> setControls signal that takes sensor and lens control parameters.\n\nThis makes sense, I will merge these two functions.\n\n>\n> You could then possibly drop the applyLensCtrls variable and always send\n> the lens position value to the pipeline handler. Avoiding going to the\n> kernel driver when the value of the lens position hasn't changed could\n> then be implemented in the CameraLens::setFocusPosition() function\n> instead of each IPA module.\n\nOk, as now there is idea of extending the CameraLens functionality,\nthis micro-optimization has less sense as it will need to be removed in\nthe future. I will remove the applyLensCtrls field.\n\n>\n> > +     }\n> >  }\n> >\n> >  } /* namespace ipa::rkisp1 */\n> > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > index f966254a..f42a8368 100644\n> > --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > @@ -114,6 +114,7 @@ private:\n> >       void paramFilled(unsigned int frame);\n> >       void setSensorControls(unsigned int frame,\n> >                              const ControlList &sensorControls);\n> > +     void setLensControls(const ControlList &lensControls);\n> >\n> >       void metadataReady(unsigned int frame, const ControlList &metadata);\n> >  };\n> > @@ -340,6 +341,8 @@ int RkISP1CameraData::loadIPA(unsigned int hwRevision)\n> >               return -ENOENT;\n> >\n> >       ipa_->setSensorControls.connect(this, &RkISP1CameraData::setSensorControls);\n> > +     if (sensor_->focusLens())\n> > +             ipa_->setLensControls.connect(this, &RkISP1CameraData::setLensControls);\n> >       ipa_->paramsBufferReady.connect(this, &RkISP1CameraData::paramFilled);\n> >       ipa_->metadataReady.connect(this, &RkISP1CameraData::metadataReady);\n> >\n> > @@ -409,6 +412,16 @@ void RkISP1CameraData::setSensorControls([[maybe_unused]] unsigned int frame,\n> >       delayedCtrls_->push(sensorControls);\n> >  }\n> >\n> > +void RkISP1CameraData::setLensControls(const ControlList &lensControls)\n> > +{\n> > +     CameraLens *focusLens = sensor_->focusLens();\n> > +\n> > +     for (auto const &[id, value] : lensControls) {\n> > +             if (id == V4L2_CID_FOCUS_ABSOLUTE)\n> > +                     focusLens->setFocusPosition(value.get<int32_t>());\n> > +     }\n> > +}\n> > +\n> >  void RkISP1CameraData::metadataReady(unsigned int frame, const ControlList &metadata)\n> >  {\n> >       RkISP1FrameInfo *info = frameInfo_.find(frame);\n>\n> --\n> Regards,\n>\n> Laurent Pinchart\n\nBest regards\nDaniel","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 53080C3213\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 26 May 2023 11:45:58 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 977DA626FA;\n\tFri, 26 May 2023 13:45:57 +0200 (CEST)","from mail-ed1-x529.google.com (mail-ed1-x529.google.com\n\t[IPv6:2a00:1450:4864:20::529])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 102CE626F4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 26 May 2023 13:45:56 +0200 (CEST)","by mail-ed1-x529.google.com with SMTP id\n\t4fb4d7f45d1cf-5147dce372eso451023a12.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 26 May 2023 04:45:56 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1685101557;\n\tbh=EpCVB8suhBFiE2CO1txfhysnY2jxCbA4ByiFqCsU72A=;\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=FAQ6EtT5q2Y61ZLIuuE3itJaiBDcyLDe0I5KyhBTspxaK1ZJ3hbPQcadX5dnB2gs2\n\toJO2EuawVDT+QWBr0+g+vOAMzX5Is1e4c7gjfe2i/WtqztTj3WkEc7AmJYCRtqrMot\n\tU4g5KCjQFmehAYBPyulRqrNfvrCkh3RODt/iis4Qshcd2TpOi5WFfqkEzq9bVt8JYz\n\tEMXKrWEUjO9hL8Js1UQL7GiUuy5WUMpwdwvnXHTAZSQBbq9aoo9nXiAz6dbcMJoak5\n\tTA+CcVhXSyKPU9KV4ZwFj/y9EKaHl3d4kpYUSTAwFwRYRdsvrJULZnQxRg9lnnmvE3\n\tlnvx/uiHlWDjQ==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=thaumatec-com.20221208.gappssmtp.com; s=20221208; t=1685101555;\n\tx=1687693555; \n\th=content-transfer-encoding:cc:to:subject:message-id:date:from\n\t:in-reply-to:references:mime-version:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=EAxQouZk76sm1mdq9Z0243h2gk2VlXKVwTIxnvnr01Y=;\n\tb=PCtiN9frDGk+5urz5XAr7t93MaHTVDBZx3j33FiRR11x9kPYjFB0tCKhGL+GG9BHt9\n\tSQo7NlGo6ZFG9n5uL43v2XiCbx1R2T6QlLlcVQ/V3DmgWNU6Iyr5WdpaRPNr/hQNdk1c\n\tjShs2vrdWoRxbx6SqReTz/6fp0/snmzuWDEcBUiR447MuYhy/8EMZ+RYb6MQpTZLxHiu\n\tP5msQbcU7cpDqnrrBsWU29L9IrJvvYdDULvw83mQrjeg33hF5nXtu0JIZEcaPFOKkQQM\n\tN5z10BLqeFCX8fhLS0xpkNJ0cJu6CRcOVZWoCPpoRfAGvlJ1p15t9M7FWYVcX562pUWs\n\tDOOQ=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected)\n\theader.d=thaumatec-com.20221208.gappssmtp.com\n\theader.i=@thaumatec-com.20221208.gappssmtp.com header.b=\"PCtiN9fr\"; \n\tdkim-atps=neutral","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20221208; t=1685101555; x=1687693555;\n\th=content-transfer-encoding:cc:to:subject:message-id:date:from\n\t:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc\n\t:subject:date:message-id:reply-to;\n\tbh=EAxQouZk76sm1mdq9Z0243h2gk2VlXKVwTIxnvnr01Y=;\n\tb=M7Wlrqipx3UnsMoLzaQmv97FpnOuZy6FfFjChOyEiuQCv3lnAVuRMRVTR+PMe2GtsB\n\tk04Z4CM8diMWIdSCAlDbwJZgsnjswgRrrdLyb0hg5DlWWaxuABnYaLsvpdHVp0IrTmfc\n\toWF8JHt5Cz2sjOQpU5CPwknwivze1YYj+raWfGn+t9XtT4Tn9XTtbXJb/DIGwE/vGpgg\n\trvRMWwv9XAGmAqJeU3fPOQcR6RyAL9LURxZuN2JUJ1mrIngWfSPkVK8k+v8coGC605/f\n\t/lYrWPjIvo0U2yGfcr3UnBLWLLmXeGNKG7XsStNR/bhcqqcLHn0Zfi4zvUP9THlLPb+B\n\tEKQQ==","X-Gm-Message-State":"AC+VfDyKizqLbpLbtDTbE4FnY3wXgmGP0piyB7smAkaA9eC4SWfm2iTi\n\tZHx0VE8MI21En4trdJikc0coss83dvhHHxN7jtbujQ==","X-Google-Smtp-Source":"ACHHUZ5+MxMPZrGhBbJiLgmKgrYfBG0G37698z2+zUedRP40zWdxsuNfO5RjGj0FPQfmVbDx7qsXoQIWzXwH6G8+iX0=","X-Received":"by 2002:a05:6402:5154:b0:510:55a3:97ad with SMTP id\n\tn20-20020a056402515400b0051055a397admr1412297edd.0.1685101555483;\n\tFri, 26 May 2023 04:45:55 -0700 (PDT)","MIME-Version":"1.0","References":"<20230331081930.19289-1-dse@thaumatec.com>\n\t<20230331081930.19289-10-dse@thaumatec.com>\n\t<20230426041010.GJ1667@pendragon.ideasonboard.com>","In-Reply-To":"<20230426041010.GJ1667@pendragon.ideasonboard.com>","Date":"Fri, 26 May 2023 13:45:44 +0200","Message-ID":"<CAHgnY3m2e1r3k=yVO8mwHQOkcD5qmrYYBp_8xSFPHeQrR8-2Kg@mail.gmail.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","Subject":"Re: [libcamera-devel] [PATCH v6 09/10] rkisp1: Control camera lens\n\tposition from IPA","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":"Daniel Semkowicz via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Daniel Semkowicz <dse@thaumatec.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]