[{"id":22653,"web_url":"https://patchwork.libcamera.org/comment/22653/","msgid":"<164936992967.22830.1978989118075888701@Monstersaurus>","date":"2022-04-07T22:18:49","subject":"Re: [libcamera-devel] [IPAIPU3 PATCH v5 4/6] ipu3: Use the new\n\tIPAIPU3 interface","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Umang Jain via libcamera-devel (2022-04-06 15:17:07)\n> Use the new IPAIPU3 interface that migrates the event-based ops\n> to dedication functions.\n> \n> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> ---\n>  ipu3.cpp | 101 ++++++++++++++++++++++---------------------------------\n>  1 file changed, 40 insertions(+), 61 deletions(-)\n> \n> diff --git a/ipu3.cpp b/ipu3.cpp\n> index 6ab86e0..b6d2129 100644\n> --- a/ipu3.cpp\n> +++ b/ipu3.cpp\n> @@ -49,13 +49,16 @@ public:\n>  \n>         void mapBuffers(const std::vector<IPABuffer> &buffers) override;\n>         void unmapBuffers(const std::vector<unsigned int> &ids) override;\n> -       void processEvent(const IPU3Event &event) override;\n>  \n> +       void queueRequest(const uint32_t frame, const ControlList &controls) override;\n> +       void fillParamsBuffer(const uint32_t frame, const uint32_t bufferId) override;\n> +       void processStatsBuffer(const uint32_t frame, const int64_t frameTimestamp,\n> +                               const uint32_t bufferId,\n> +                               const ControlList &sensorControls) override;\n>  private:\n>         void updateControls(const IPACameraSensorInfo &sensorInfo,\n>                             const ControlInfoMap &sensorControls,\n>                             ControlInfoMap *ipaControls);\n> -       void processControls(unsigned int frame, const ControlList &metadata);\n>         void runAiq(unsigned int frame);\n>         void fillParams(unsigned int frame, ipu3_uapi_params *params);\n>         void parseStatistics(unsigned int frame,\n> @@ -321,54 +324,41 @@ void IPAIPU3::unmapBuffers(const std::vector<unsigned int> &ids)\n>         }\n>  }\n>  \n> -void IPAIPU3::processEvent(const IPU3Event &event)\n> +void IPAIPU3::queueRequest([[maybe_unused]] unsigned int frame,\n> +                          [[maybe_unused]] const ControlList &controls)\n>  {\n> -       switch (event.op) {\n> -       case EventProcessControls: {\n> -               processControls(event.frame, event.controls);\n> -               break;\n> -       }\n> -       case EventStatReady: {\n> -               auto it = buffers_.find(event.bufferId);\n> -               if (it == buffers_.end()) {\n> -                       LOG(IPAIPU3, Error) << \"Could not find stats buffer!\";\n> -                       return;\n> -               }\n> -\n> -               Span<uint8_t> mem = it->second.maps()[0];\n> -               const ipu3_uapi_stats_3a *stats =\n> -                       reinterpret_cast<ipu3_uapi_stats_3a *>(mem.data());\n> -\n> -               parseStatistics(event.frame,\n> -                               event.frameTimestamp,\n> -                               stats,\n> -                               event.sensorControls);\n> -               break;\n> -       }\n> -       case EventFillParams: {\n> -               auto it = buffers_.find(event.bufferId);\n> -               if (it == buffers_.end()) {\n> -                       LOG(IPAIPU3, Error) << \"Could not find param buffer!\";\n> -                       return;\n> -               }\n> -\n> -               Span<uint8_t> mem = it->second.maps()[0];\n> -               ipu3_uapi_params *params =\n> -                       reinterpret_cast<ipu3_uapi_params *>(mem.data());\n> -\n> -               fillParams(event.frame, params);\n> -               break;\n> -       }\n> -       default:\n> -               LOG(IPAIPU3, Error) << \"Unknown event \" << event.op;\n> -               break;\n> +       /* \\todo Start processing for 'frame' based on 'controls'. */\n> +}\n> +\n> +void IPAIPU3::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)\n> +{\n> +       auto it = buffers_.find(bufferId);\n> +       if (it == buffers_.end()) {\n> +               LOG(IPAIPU3, Error) << \"Could not find params buffer\";\n> +               return;\n>         }\n> +\n> +       Span<uint8_t> mem = it->second.maps()[0];\n> +       ipu3_uapi_params *params =\n> +               reinterpret_cast<ipu3_uapi_params *>(mem.data());\n> +\n> +       fillParams(frame, params);\n>  }\n>  \n> -void IPAIPU3::processControls([[maybe_unused]] unsigned int frame,\n> -                             [[maybe_unused]] const ControlList &controls)\n> +void IPAIPU3::processStatsBuffer(const uint32_t frame, const int64_t frameTimestamp,\n> +                                const uint32_t bufferId, const ControlList &sensorControls)\n>  {\n> -       /* \\todo Start processing for 'frame' based on 'controls'. */\n> +       auto it = buffers_.find(bufferId);\n> +       if (it == buffers_.end()) {\n> +               LOG(IPAIPU3, Error) << \"Could not find stats buffer\";\n> +               return;\n> +       }\n> +\n> +       Span<uint8_t> mem = it->second.maps()[0];\n> +       const ipu3_uapi_stats_3a *stats =\n> +               reinterpret_cast<ipu3_uapi_stats_3a *>(mem.data());\n> +\n> +       parseStatistics(frame, frameTimestamp, stats, sensorControls);\n>  }\n>  \n>  void IPAIPU3::runAiq([[maybe_unused]] unsigned int frame)\n> @@ -424,10 +414,7 @@ void IPAIPU3::fillParams(unsigned int frame, ipu3_uapi_params *params)\n>  \n>         setControls(frame);\n>  \n> -       IPU3Action op;\n> -       op.op = ActionParamFilled;\n> -\n> -       queueFrameAction.emit(frame, op);\n> +       paramsBufferReady.emit(frame);\n>  }\n>  \n>  void IPAIPU3::parseStatistics(unsigned int frame,\n> @@ -488,27 +475,19 @@ void IPAIPU3::parseStatistics(unsigned int frame,\n>                                 (sensorInfo_.pixelRate / 1e6);\n>         ctrls.set(controls::FrameDuration, frameDuration);\n>  \n> -       IPU3Action op;\n> -       op.op = ActionMetadataReady;\n> -       op.controls = ctrls;\n> -\n> -       queueFrameAction.emit(frame, op);\n> +       metadataReady.emit(frame, ctrls);\n>  }\n>  \n>  void IPAIPU3::setControls(unsigned int frame)\n>  {\n> -       IPU3Action op;\n> -       op.op = ActionSetSensorControls;\n> -\n>         ControlList sensorCtrls(ctrls_);\n>         sensorCtrls.set(V4L2_CID_EXPOSURE, static_cast<int32_t>(exposure_));\n>         sensorCtrls.set(V4L2_CID_ANALOGUE_GAIN, static_cast<int32_t>(gain_));\n>  \n> -       op.sensorControls = sensorCtrls;\n> -\n> -       op.lensControls.set(V4L2_CID_FOCUS_ABSOLUTE, lensPosition_);\n> +       ControlList lensCtrls(ctrls_);\n> +       lensCtrls.set(V4L2_CID_FOCUS_ABSOLUTE, lensPosition_);\n>  \n> -       queueFrameAction.emit(frame, op);\n> +       setSensorControls.emit(frame, sensorCtrls, lensCtrls);\n>  }\n>  \n>  } /* namespace ipa::ipu3 */\n> -- \n> 2.31.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 7E6D2C0F1B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  7 Apr 2022 22:18:55 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D6A6465641;\n\tFri,  8 Apr 2022 00:18:54 +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 3313965640\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  8 Apr 2022 00:18:53 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id BB7F6499;\n\tFri,  8 Apr 2022 00:18:52 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1649369934;\n\tbh=x/34duYugeB3BLOISOiJ+/eYrn/diJxWJHVn7ep8eDM=;\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:\n\tFrom;\n\tb=yNhcampWxRcMRHypUXBV1uT/T41RFTepC4VU7FiJq50VlTPcuL3s1BPcpO4Vzu1T/\n\tcCR8ATRUl7yIzTOAv6m+/fCC1q1i6HLehw712Dp30Rc+fbyzts6iy+JBDovWKpz1a+\n\tAGn+QrdxXa+ojpuoKz62wWw3O8FooIoP8mQpDQf/x9GGv7jQmYm0wCsxFA1eE0JDBI\n\tYniMIpcaDYdVb5MPQATTON2MzNYKEFsWe7mlZpJD893CMG+vqF3VbDLmBGTfP/0RiS\n\t8OuxFxf3ulKTFx8ZTMk2rYWOM9Zhf4stYKa+1cXb8ApHwaeod3O8YsNwtNTwkcdTaP\n\t220d90s2Ifo+w==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1649369932;\n\tbh=x/34duYugeB3BLOISOiJ+/eYrn/diJxWJHVn7ep8eDM=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=Dn/aMlTksSnKjNyWkLreI7GlxX8rDpLOx4lwe1qETJKxCSvAu/7jSr+wxecD8OD6D\n\tCip/04XN0YJqpqEGiZ8Syr4T4Je5N/jx4ttNT/pR7bzGB0t73f1RMmVy3PrkSYdGAP\n\ttE4L0hixsUGCmRpbBf62De9HV+l16zZXBumJLfEQ="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"Dn/aMlTk\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20220406141709.164794-5-umang.jain@ideasonboard.com>","References":"<20220406141709.164794-1-umang.jain@ideasonboard.com>\n\t<20220406141709.164794-5-umang.jain@ideasonboard.com>","To":"Umang Jain <umang.jain@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Thu, 07 Apr 2022 23:18:49 +0100","Message-ID":"<164936992967.22830.1978989118075888701@Monstersaurus>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [IPAIPU3 PATCH v5 4/6] ipu3: Use the new\n\tIPAIPU3 interface","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":22664,"web_url":"https://patchwork.libcamera.org/comment/22664/","msgid":"<20220408071736.GP3237525@pyrite.rasen.tech>","date":"2022-04-08T07:17:36","subject":"Re: [libcamera-devel] [IPAIPU3 PATCH v5 4/6] ipu3: Use the new\n\tIPAIPU3 interface","submitter":{"id":97,"url":"https://patchwork.libcamera.org/api/people/97/","name":"Nicolas Dufresne via libcamera-devel","email":"libcamera-devel@lists.libcamera.org"},"content":"Hi Umang,\n\nOn Wed, Apr 06, 2022 at 07:47:07PM +0530, Umang Jain via libcamera-devel wrote:\n> Use the new IPAIPU3 interface that migrates the event-based ops\n> to dedication functions.\n> \n> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n\n> ---\n>  ipu3.cpp | 101 ++++++++++++++++++++++---------------------------------\n>  1 file changed, 40 insertions(+), 61 deletions(-)\n> \n> diff --git a/ipu3.cpp b/ipu3.cpp\n> index 6ab86e0..b6d2129 100644\n> --- a/ipu3.cpp\n> +++ b/ipu3.cpp\n> @@ -49,13 +49,16 @@ public:\n>  \n>  \tvoid mapBuffers(const std::vector<IPABuffer> &buffers) override;\n>  \tvoid unmapBuffers(const std::vector<unsigned int> &ids) override;\n> -\tvoid processEvent(const IPU3Event &event) override;\n>  \n> +\tvoid queueRequest(const uint32_t frame, const ControlList &controls) override;\n> +\tvoid fillParamsBuffer(const uint32_t frame, const uint32_t bufferId) override;\n> +\tvoid processStatsBuffer(const uint32_t frame, const int64_t frameTimestamp,\n> +\t\t\t\tconst uint32_t bufferId,\n> +\t\t\t\tconst ControlList &sensorControls) override;\n>  private:\n>  \tvoid updateControls(const IPACameraSensorInfo &sensorInfo,\n>  \t\t\t    const ControlInfoMap &sensorControls,\n>  \t\t\t    ControlInfoMap *ipaControls);\n> -\tvoid processControls(unsigned int frame, const ControlList &metadata);\n>  \tvoid runAiq(unsigned int frame);\n>  \tvoid fillParams(unsigned int frame, ipu3_uapi_params *params);\n>  \tvoid parseStatistics(unsigned int frame,\n> @@ -321,54 +324,41 @@ void IPAIPU3::unmapBuffers(const std::vector<unsigned int> &ids)\n>  \t}\n>  }\n>  \n> -void IPAIPU3::processEvent(const IPU3Event &event)\n> +void IPAIPU3::queueRequest([[maybe_unused]] unsigned int frame,\n> +\t\t\t   [[maybe_unused]] const ControlList &controls)\n>  {\n> -\tswitch (event.op) {\n> -\tcase EventProcessControls: {\n> -\t\tprocessControls(event.frame, event.controls);\n> -\t\tbreak;\n> -\t}\n> -\tcase EventStatReady: {\n> -\t\tauto it = buffers_.find(event.bufferId);\n> -\t\tif (it == buffers_.end()) {\n> -\t\t\tLOG(IPAIPU3, Error) << \"Could not find stats buffer!\";\n> -\t\t\treturn;\n> -\t\t}\n> -\n> -\t\tSpan<uint8_t> mem = it->second.maps()[0];\n> -\t\tconst ipu3_uapi_stats_3a *stats =\n> -\t\t\treinterpret_cast<ipu3_uapi_stats_3a *>(mem.data());\n> -\n> -\t\tparseStatistics(event.frame,\n> -\t\t\t\tevent.frameTimestamp,\n> -\t\t\t\tstats,\n> -\t\t\t\tevent.sensorControls);\n> -\t\tbreak;\n> -\t}\n> -\tcase EventFillParams: {\n> -\t\tauto it = buffers_.find(event.bufferId);\n> -\t\tif (it == buffers_.end()) {\n> -\t\t\tLOG(IPAIPU3, Error) << \"Could not find param buffer!\";\n> -\t\t\treturn;\n> -\t\t}\n> -\n> -\t\tSpan<uint8_t> mem = it->second.maps()[0];\n> -\t\tipu3_uapi_params *params =\n> -\t\t\treinterpret_cast<ipu3_uapi_params *>(mem.data());\n> -\n> -\t\tfillParams(event.frame, params);\n> -\t\tbreak;\n> -\t}\n> -\tdefault:\n> -\t\tLOG(IPAIPU3, Error) << \"Unknown event \" << event.op;\n> -\t\tbreak;\n> +\t/* \\todo Start processing for 'frame' based on 'controls'. */\n> +}\n> +\n> +void IPAIPU3::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)\n> +{\n> +\tauto it = buffers_.find(bufferId);\n> +\tif (it == buffers_.end()) {\n> +\t\tLOG(IPAIPU3, Error) << \"Could not find params buffer\";\n> +\t\treturn;\n>  \t}\n> +\n> +\tSpan<uint8_t> mem = it->second.maps()[0];\n> +\tipu3_uapi_params *params =\n> +\t\treinterpret_cast<ipu3_uapi_params *>(mem.data());\n> +\n> +\tfillParams(frame, params);\n>  }\n>  \n> -void IPAIPU3::processControls([[maybe_unused]] unsigned int frame,\n> -\t\t\t      [[maybe_unused]] const ControlList &controls)\n> +void IPAIPU3::processStatsBuffer(const uint32_t frame, const int64_t frameTimestamp,\n> +\t\t\t\t const uint32_t bufferId, const ControlList &sensorControls)\n>  {\n> -\t/* \\todo Start processing for 'frame' based on 'controls'. */\n> +\tauto it = buffers_.find(bufferId);\n> +\tif (it == buffers_.end()) {\n> +\t\tLOG(IPAIPU3, Error) << \"Could not find stats buffer\";\n> +\t\treturn;\n> +\t}\n> +\n> +\tSpan<uint8_t> mem = it->second.maps()[0];\n> +\tconst ipu3_uapi_stats_3a *stats =\n> +\t\treinterpret_cast<ipu3_uapi_stats_3a *>(mem.data());\n> +\n> +\tparseStatistics(frame, frameTimestamp, stats, sensorControls);\n>  }\n>  \n>  void IPAIPU3::runAiq([[maybe_unused]] unsigned int frame)\n> @@ -424,10 +414,7 @@ void IPAIPU3::fillParams(unsigned int frame, ipu3_uapi_params *params)\n>  \n>  \tsetControls(frame);\n>  \n> -\tIPU3Action op;\n> -\top.op = ActionParamFilled;\n> -\n> -\tqueueFrameAction.emit(frame, op);\n> +\tparamsBufferReady.emit(frame);\n>  }\n>  \n>  void IPAIPU3::parseStatistics(unsigned int frame,\n> @@ -488,27 +475,19 @@ void IPAIPU3::parseStatistics(unsigned int frame,\n>  \t\t\t\t(sensorInfo_.pixelRate / 1e6);\n>  \tctrls.set(controls::FrameDuration, frameDuration);\n>  \n> -\tIPU3Action op;\n> -\top.op = ActionMetadataReady;\n> -\top.controls = ctrls;\n> -\n> -\tqueueFrameAction.emit(frame, op);\n> +\tmetadataReady.emit(frame, ctrls);\n>  }\n>  \n>  void IPAIPU3::setControls(unsigned int frame)\n>  {\n> -\tIPU3Action op;\n> -\top.op = ActionSetSensorControls;\n> -\n>  \tControlList sensorCtrls(ctrls_);\n>  \tsensorCtrls.set(V4L2_CID_EXPOSURE, static_cast<int32_t>(exposure_));\n>  \tsensorCtrls.set(V4L2_CID_ANALOGUE_GAIN, static_cast<int32_t>(gain_));\n>  \n> -\top.sensorControls = sensorCtrls;\n> -\n> -\top.lensControls.set(V4L2_CID_FOCUS_ABSOLUTE, lensPosition_);\n> +\tControlList lensCtrls(ctrls_);\n> +\tlensCtrls.set(V4L2_CID_FOCUS_ABSOLUTE, lensPosition_);\n>  \n> -\tqueueFrameAction.emit(frame, op);\n> +\tsetSensorControls.emit(frame, sensorCtrls, lensCtrls);\n>  }\n>  \n>  } /* namespace ipa::ipu3 */\n> -- \n> 2.31.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 3F473C0F1B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  8 Apr 2022 07:17:46 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4155C65640;\n\tFri,  8 Apr 2022 09:17:45 +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 BA2A561FBA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  8 Apr 2022 09:17:43 +0200 (CEST)","from pyrite.rasen.tech (softbank036240056250.bbtec.net\n\t[36.240.56.250])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 2582E499;\n\tFri,  8 Apr 2022 09:17:41 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1649402265;\n\tbh=UvkA1Wjs6TF1h1thr4djSGjo/LQE1mpSE7kPVDjvzDk=;\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=3HX/ceUSt+dbvh3DftOnyg1aHFR0Iw1yJGfXPV2uopWbO8HzB8kOKIlJG96vxgFmF\n\tpEBdazg4STJIUphRcCG3O9OAxdjXgXHpL7Mmek95sIC6EboSQhYbIRUx33BnSF0zXE\n\tna8kKs3i5x7x2c6PwEi7SCCcjSU/zkJgQlKjXiVYeD4cb4+kGR90BSMuFKkmoAEyuR\n\t+49D5Jc8Wa0fVwjgqqLfN8F6916dxfWMlwLSS24d6ntxurcdVkigauM8oixjgUhKzY\n\tfP9hrdd7jhjQ1un9GaNdkRwuJiFywh2kIEYok+VK2ZeWCRHSTPF0suNstw/0fh/h/0\n\tBb6uidC/Zqa7Q==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1649402263;\n\tbh=UvkA1Wjs6TF1h1thr4djSGjo/LQE1mpSE7kPVDjvzDk=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=bOAAzRsKz8UF8gsoIDtaqO4Th0O3aad87pYzxLL5Ki3b72k2Hl7UyXh2PvmNSAX2+\n\trpox2xg1ppoEAn/q1OOLGaWsl9P/pgPK/FImWL3BXYf2dEHA6OjTAoc2DxroyqKtDf\n\tP5HOVNOLTRIYqzZeUiiFO7RUzwvNcpGlf/W5dH7M="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"bOAAzRsK\"; dkim-atps=neutral","Date":"Fri, 8 Apr 2022 16:17:36 +0900","To":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<20220408071736.GP3237525@pyrite.rasen.tech>","References":"<20220406141709.164794-1-umang.jain@ideasonboard.com>\n\t<20220406141709.164794-5-umang.jain@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20220406141709.164794-5-umang.jain@ideasonboard.com>","Subject":"Re: [libcamera-devel] [IPAIPU3 PATCH v5 4/6] ipu3: Use the new\n\tIPAIPU3 interface","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":"Paul Elder via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"paul.elder@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>"}}]