[{"id":38415,"web_url":"https://patchwork.libcamera.org/comment/38415/","msgid":"<CAEmqJPo761Fw4Sn6zjnxPuJSCJHi_cV4-fw7uSiTq3Hme=+1yQ@mail.gmail.com>","date":"2026-03-26T09:01:42","subject":"Re: [PATCH v1 1/3] pipeline: rpi: Simplify delayed controls","submitter":{"id":34,"url":"https://patchwork.libcamera.org/api/people/34/","name":"Naushir Patuck","email":"naush@raspberrypi.com"},"content":"Hi David,\n\nThank you for the patch.\n\nOn Tue, 24 Mar 2026 at 15:17, David Plowman\n<david.plowman@raspberrypi.com> wrote:\n>\n> The queueCount field in the DelayedControls is actually\n> redundant. Remove it.\n>\n> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>\n> ---\n>  .../pipeline/rpi/common/delayed_controls.cpp  | 22 +++++++++----------\n>  .../pipeline/rpi/common/delayed_controls.h    |  1 -\n>  2 files changed, 10 insertions(+), 13 deletions(-)\n>\n> diff --git a/src/libcamera/pipeline/rpi/common/delayed_controls.cpp b/src/libcamera/pipeline/rpi/common/delayed_controls.cpp\n> index 19c71946..c06bd784 100644\n> --- a/src/libcamera/pipeline/rpi/common/delayed_controls.cpp\n> +++ b/src/libcamera/pipeline/rpi/common/delayed_controls.cpp\n> @@ -119,7 +119,6 @@ DelayedControls::DelayedControls(V4L2Device *device,\n>   */\n>  void DelayedControls::reset(unsigned int cookie)\n>  {\n> -       queueCount_ = 1;\n>         writeCount_ = 0;\n>         cookies_[0] = cookie;\n>\n> @@ -155,8 +154,8 @@ bool DelayedControls::push(const ControlList &controls, const unsigned int cooki\n>  {\n>         /* Copy state from previous frame. */\n>         for (auto &ctrl : values_) {\n> -               Info &info = ctrl.second[queueCount_];\n> -               info = values_[ctrl.first][queueCount_ - 1];\n> +               Info &info = ctrl.second[writeCount_];\n> +               info = values_[ctrl.first][writeCount_ - 1];\n>                 info.updated = false;\n>         }\n\nIt's been a while since I've looked into this bit of code, but I'm\nfairly confident that the logic is correct.\n\nI had to stop at the above change since there is a possibility that\nwriteCount_ == 0 and we index into -1.  This should never happen as\nthe sequencing within our PH always ensures applyControls() will be\ncalled on the first frame.\n\nJust to keep me happy, can we consider adding an if (writeCount_ > 0)\nguard around the for loop above?  With this, it would be entirely\nvalid for push() to be called before applyControls(), even though we\nwould not do it practically.  Perhaps a log message on the else branch\nmight also be useful?\n\nRegards,\nNaush\n\n>\n> @@ -175,18 +174,17 @@ bool DelayedControls::push(const ControlList &controls, const unsigned int cooki\n>                 if (controlParams_.find(id) == controlParams_.end())\n>                         return false;\n>\n> -               Info &info = values_[id][queueCount_];\n> +               Info &info = values_[id][writeCount_];\n>\n>                 info = Info(control.second);\n>\n>                 LOG(RPiDelayedControls, Debug)\n>                         << \"Queuing \" << id->name()\n>                         << \" to \" << info.toString()\n> -                       << \" at index \" << queueCount_;\n> +                       << \" at index \" << writeCount_;\n>         }\n>\n> -       cookies_[queueCount_] = cookie;\n> -       queueCount_++;\n> +       cookies_[writeCount_] = cookie;\n>\n>         return true;\n>  }\n> @@ -277,12 +275,12 @@ void DelayedControls::applyControls(uint32_t sequence)\n>                 }\n>         }\n>\n> -       writeCount_ = sequence + 1;\n> -\n> -       while (writeCount_ > queueCount_) {\n> +       while (writeCount_ < sequence + 1) {\n> +               writeCount_++;\n>                 LOG(RPiDelayedControls, Debug)\n> -                       << \"Queue is empty, auto queue no-op.\";\n> -               push({}, cookies_[queueCount_ - 1]);\n> +                       << \"Pushing noop with for index \" << writeCount_\n> +                       << \" with cookie \" << cookies_[writeCount_ - 1];\n> +               push({}, cookies_[writeCount_ - 1]);\n>         }\n>\n>         device_->setControls(&out);\n> diff --git a/src/libcamera/pipeline/rpi/common/delayed_controls.h b/src/libcamera/pipeline/rpi/common/delayed_controls.h\n> index 487b0057..48ad5a0f 100644\n> --- a/src/libcamera/pipeline/rpi/common/delayed_controls.h\n> +++ b/src/libcamera/pipeline/rpi/common/delayed_controls.h\n> @@ -76,7 +76,6 @@ private:\n>         std::unordered_map<const ControlId *, ControlParams> controlParams_;\n>         unsigned int maxDelay_;\n>\n> -       uint32_t queueCount_;\n>         uint32_t writeCount_;\n>         std::unordered_map<const ControlId *, RingBuffer<Info>> values_;\n>         RingBuffer<unsigned int> cookies_;\n> --\n> 2.47.3\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 7EA64C32DE\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 26 Mar 2026 09:02:22 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 92AC762854;\n\tThu, 26 Mar 2026 10:02:21 +0100 (CET)","from mail-vs1-xe34.google.com (mail-vs1-xe34.google.com\n\t[IPv6:2607:f8b0:4864:20::e34])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C4CFF62655\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 26 Mar 2026 10:02:19 +0100 (CET)","by mail-vs1-xe34.google.com with SMTP id\n\tada2fe7eead31-6027a04521dso31113137.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 26 Mar 2026 02:02:19 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"MIJ+027Q\"; dkim-atps=neutral","ARC-Seal":"i=1; a=rsa-sha256; t=1774515738; cv=none;\n\td=google.com; s=arc-20240605;\n\tb=ar5tg+pqhsMIrvTJfPPfClyfXvUm6a1C7IFAUNsz+S9Wr9rDtmavVrn+GIXkZ4pKea\n\terUQfyo/3qPIYDRzxSiKJul71IzoHmRpaOFTLsDoPkcMbbQ734nyy/FBbcuFv5qPDOuP\n\tiLltY3hJvxM/IgNeTyr+pKqkPIpbwdKF3krL++1NfgkmsSwsbpyEo1OmsR1cTaGRpgHv\n\tH5wrJkrnGXNkF5vnpURbzOdLwpSoi43ggYMJiiXYn5e0PtZkyIM6EOc/XCfc88QGN7K9\n\tvVYMnQjmUEPoHp6x8BnNGyrVyu7gXsjkw8E+g/tpPxuItvZlGrP3kxPaDDHsmKw5RtYD\n\tkq8g==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n\ts=arc-20240605; \n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:dkim-signature;\n\tbh=7NSHIqQ5t6x3dx2G9Dkw/bBWaaqXDoGo6D8kKL+YrWw=;\n\tfh=raf7gMhxwhTsDETG3li6wpOfdJf6YyDg/c7aYJ8coN8=;\n\tb=Q6nuWqgay5dAvc4ZKQeTuQxPu2FLAWAW7KhTHlninbe6HFtNvMkmBm1X+GIQbSK9G/\n\tYdIxWHN0GnC9ASG5Uir/+jY+k59dbxFdw6Kw1Dk+E3CFBQRnRxho/5SSOj9MwrI6y1QW\n\t6Vre99o4GM/fEzGjwx+jGJAZbohxN8SChcXxyX138D/wQm9yC/28fWP26sCQN8q5wjfi\n\tbgHBxwb2eVqTkkIsh0CtGUjK8rEo1YKxeGBkQyaaZGTOdUhVzonuBWLsloqYbDeCagoe\n\t/NSTccrKXProVXeMITkMnAtwNVIwXF/PL8emPhw5Wa/n+pu2K4EGF1xvSCgxOsZCXi7l\n\tqtBA==; darn=lists.libcamera.org","ARC-Authentication-Results":"i=1; mx.google.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1774515738; x=1775120538;\n\tdarn=lists.libcamera.org; \n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:from:to:cc:subject:date:message-id:reply-to;\n\tbh=7NSHIqQ5t6x3dx2G9Dkw/bBWaaqXDoGo6D8kKL+YrWw=;\n\tb=MIJ+027QzbJeQEb0Fa9u1pcu6mezdC2HDl00Xs5sUv/2vnZ3aaqZonGRVvVCvW/O47\n\tiORbe1zZkZFg9CcgeMeJra1ziDI6DK7ksBSkxDzJsNtSFsgMrPVM3ODIOFTwhjX3vLAO\n\tundmT+yo0nF4TmZLHlcaS0wpGjf7J6ZhVQsOlGiG2/Ezoiny1uYuIk9e4noZnTpNCwS6\n\tCusG7U3dAtz1XI+xjFnmw6XpycToxzlbaNWXnMjygAW/YPIFyLbLF/9HS0U2dQqbFEY0\n\tjcCjvTN1CWFThI9s4BTLp4aYG2c2AOX/l071NFlcEbLaxJ9uloHQtNx0/TAv7t2EBiey\n\tALIQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1774515738; x=1775120538;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=7NSHIqQ5t6x3dx2G9Dkw/bBWaaqXDoGo6D8kKL+YrWw=;\n\tb=mcGNbfTDqpr7B8VNFRvSae5gj4ck9WoggIyDzCEHaIuuEojQTUvCmtQGw+Z6wX8+DJ\n\ttzR1E4lWNazO+b61BUv7Qo5QA6dvz1uN5c6AzbKBQNEHYUH/d/Ex1IjpsX2wJh8AHvD6\n\ttmuwsOh7UjhVnninh94JdPd1xCR/feUc/EcWLbjpfm5l/CHogpxDHlOLlxGfPvk2JkP0\n\tjPadjQxrXA8KRLhBx7ADXIZvnm1iN4l9oK32zulkWlineFNOdaaXeEM3TviQu5oy96Yo\n\tk9r8vH5cB9z4tp/TQHATUyclYtnBL5y7ZInX9538MVploAS7oGQnGPgoEsijr2mMgMmS\n\tKnSQ==","X-Gm-Message-State":"AOJu0YzhtII1wsKdEhovgNol3rDVxDCBwJPag6559iMbp14UatbrGzSS\n\t2HPxL1eb8A0IMgQKmY264F1tldpem6A6qsdZuyuUgsJoHPe3k5lbcgSdFA1/jFpGaexAygxLX/t\n\tznGMaN2DmZjpIzNUi7MgcSslS2ooHshWBVCA0rHIdZDsQqCFv2/Prjio=","X-Gm-Gg":"ATEYQzzO4sT+Dq65k+QiT1pphDL0Lpp2X4rQbs2npKhG1JKulEJ5ZyYrc6fDj2L0BwB\n\th/WyDBGGgaF6H2Eq1oRRSzURRpU+DC/taXPFz/wlJYVo6WtSuORRs0ywK6RTn2EdRBt2P1QSNio\n\tqMVHrW+rfWfwzaW16MFFDUJ26XbfHKbS7o0E0xj4cOG5DTnyBMwgKhSmpJZq+aT6w6d2Zm7IQNP\n\tjknPyaR4vNa4+jjYER3Nb+W9jh7CTrrRbMfP4HyZ+Rsl/aqYUv/rrr2PRjpHGgzya0eGsJCShAa\n\tF9CtrklWbXFg4tDEcpHHQob3tBm3i4jjAKw5fnRACTVXkBUsCPBjrEwdIh8sSfJcWs4c/aXXZG5\n\tqjKMKnyCZa0oCHKVNsCLQBQ==","X-Received":"by 2002:a05:6102:3594:b0:5ff:1cc2:aa9c with SMTP id\n\tada2fe7eead31-603872fd3bamr1622592137.5.1774515738540;\n\tThu, 26 Mar 2026 02:02:18 -0700 (PDT)","MIME-Version":"1.0","References":"<20260324151714.3345-1-david.plowman@raspberrypi.com>\n\t<20260324151714.3345-2-david.plowman@raspberrypi.com>","In-Reply-To":"<20260324151714.3345-2-david.plowman@raspberrypi.com>","From":"Naushir Patuck <naush@raspberrypi.com>","Date":"Thu, 26 Mar 2026 09:01:42 +0000","X-Gm-Features":"AQROBzBeyrXDd7xtJetAn21u3zaScigrkXcdQKeRW3QyoYUlJGiuSyIaCanJkNc","Message-ID":"<CAEmqJPo761Fw4Sn6zjnxPuJSCJHi_cV4-fw7uSiTq3Hme=+1yQ@mail.gmail.com>","Subject":"Re: [PATCH v1 1/3] pipeline: rpi: Simplify delayed controls","To":"David Plowman <david.plowman@raspberrypi.com>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"UTF-8\"","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":38438,"web_url":"https://patchwork.libcamera.org/comment/38438/","msgid":"<CAHW6GY+KiCadE067g25jjKAROo8u_PvW5FuJEFsrNqSrXGYUqQ@mail.gmail.com>","date":"2026-03-27T11:37:08","subject":"Re: [PATCH v1 1/3] pipeline: rpi: Simplify delayed controls","submitter":{"id":42,"url":"https://patchwork.libcamera.org/api/people/42/","name":"David Plowman","email":"david.plowman@raspberrypi.com"},"content":"Hi Naush\n\nThanks for the review.\n\nOn Thu, 26 Mar 2026 at 09:02, Naushir Patuck <naush@raspberrypi.com> wrote:\n>\n> Hi David,\n>\n> Thank you for the patch.\n>\n> On Tue, 24 Mar 2026 at 15:17, David Plowman\n> <david.plowman@raspberrypi.com> wrote:\n> >\n> > The queueCount field in the DelayedControls is actually\n> > redundant. Remove it.\n> >\n> > Signed-off-by: David Plowman <david.plowman@raspberrypi.com>\n> > ---\n> >  .../pipeline/rpi/common/delayed_controls.cpp  | 22 +++++++++----------\n> >  .../pipeline/rpi/common/delayed_controls.h    |  1 -\n> >  2 files changed, 10 insertions(+), 13 deletions(-)\n> >\n> > diff --git a/src/libcamera/pipeline/rpi/common/delayed_controls.cpp b/src/libcamera/pipeline/rpi/common/delayed_controls.cpp\n> > index 19c71946..c06bd784 100644\n> > --- a/src/libcamera/pipeline/rpi/common/delayed_controls.cpp\n> > +++ b/src/libcamera/pipeline/rpi/common/delayed_controls.cpp\n> > @@ -119,7 +119,6 @@ DelayedControls::DelayedControls(V4L2Device *device,\n> >   */\n> >  void DelayedControls::reset(unsigned int cookie)\n> >  {\n> > -       queueCount_ = 1;\n> >         writeCount_ = 0;\n> >         cookies_[0] = cookie;\n> >\n> > @@ -155,8 +154,8 @@ bool DelayedControls::push(const ControlList &controls, const unsigned int cooki\n> >  {\n> >         /* Copy state from previous frame. */\n> >         for (auto &ctrl : values_) {\n> > -               Info &info = ctrl.second[queueCount_];\n> > -               info = values_[ctrl.first][queueCount_ - 1];\n> > +               Info &info = ctrl.second[writeCount_];\n> > +               info = values_[ctrl.first][writeCount_ - 1];\n> >                 info.updated = false;\n> >         }\n>\n> It's been a while since I've looked into this bit of code, but I'm\n> fairly confident that the logic is correct.\n>\n> I had to stop at the above change since there is a possibility that\n> writeCount_ == 0 and we index into -1.  This should never happen as\n> the sequencing within our PH always ensures applyControls() will be\n> called on the first frame.\n>\n> Just to keep me happy, can we consider adding an if (writeCount_ > 0)\n> guard around the for loop above?  With this, it would be entirely\n> valid for push() to be called before applyControls(), even though we\n> would not do it practically.  Perhaps a log message on the else branch\n> might also be useful?\n>\n> Regards,\n> Naush\n\nYep, I'll add that.\n\nThanks\nDavid\n\n>\n> >\n> > @@ -175,18 +174,17 @@ bool DelayedControls::push(const ControlList &controls, const unsigned int cooki\n> >                 if (controlParams_.find(id) == controlParams_.end())\n> >                         return false;\n> >\n> > -               Info &info = values_[id][queueCount_];\n> > +               Info &info = values_[id][writeCount_];\n> >\n> >                 info = Info(control.second);\n> >\n> >                 LOG(RPiDelayedControls, Debug)\n> >                         << \"Queuing \" << id->name()\n> >                         << \" to \" << info.toString()\n> > -                       << \" at index \" << queueCount_;\n> > +                       << \" at index \" << writeCount_;\n> >         }\n> >\n> > -       cookies_[queueCount_] = cookie;\n> > -       queueCount_++;\n> > +       cookies_[writeCount_] = cookie;\n> >\n> >         return true;\n> >  }\n> > @@ -277,12 +275,12 @@ void DelayedControls::applyControls(uint32_t sequence)\n> >                 }\n> >         }\n> >\n> > -       writeCount_ = sequence + 1;\n> > -\n> > -       while (writeCount_ > queueCount_) {\n> > +       while (writeCount_ < sequence + 1) {\n> > +               writeCount_++;\n> >                 LOG(RPiDelayedControls, Debug)\n> > -                       << \"Queue is empty, auto queue no-op.\";\n> > -               push({}, cookies_[queueCount_ - 1]);\n> > +                       << \"Pushing noop with for index \" << writeCount_\n> > +                       << \" with cookie \" << cookies_[writeCount_ - 1];\n> > +               push({}, cookies_[writeCount_ - 1]);\n> >         }\n> >\n> >         device_->setControls(&out);\n> > diff --git a/src/libcamera/pipeline/rpi/common/delayed_controls.h b/src/libcamera/pipeline/rpi/common/delayed_controls.h\n> > index 487b0057..48ad5a0f 100644\n> > --- a/src/libcamera/pipeline/rpi/common/delayed_controls.h\n> > +++ b/src/libcamera/pipeline/rpi/common/delayed_controls.h\n> > @@ -76,7 +76,6 @@ private:\n> >         std::unordered_map<const ControlId *, ControlParams> controlParams_;\n> >         unsigned int maxDelay_;\n> >\n> > -       uint32_t queueCount_;\n> >         uint32_t writeCount_;\n> >         std::unordered_map<const ControlId *, RingBuffer<Info>> values_;\n> >         RingBuffer<unsigned int> cookies_;\n> > --\n> > 2.47.3\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 DB9EDBDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 27 Mar 2026 11:37:22 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2EEF362CC9;\n\tFri, 27 Mar 2026 12:37:22 +0100 (CET)","from mail-ej1-x62b.google.com (mail-ej1-x62b.google.com\n\t[IPv6:2a00:1450:4864:20::62b])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 878EC62CB8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Mar 2026 12:37:20 +0100 (CET)","by mail-ej1-x62b.google.com with SMTP id\n\ta640c23a62f3a-b980785a0bfso277304866b.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Mar 2026 04:37:20 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"JGcoYKcS\"; dkim-atps=neutral","ARC-Seal":"i=1; a=rsa-sha256; t=1774611440; cv=none;\n\td=google.com; s=arc-20240605;\n\tb=PwbYfQgMsyuQtP4MEWoU80FzJtZzyeI5wb5twemJ/fkiQ1AVpyhH0/LwTp3Ftw8KOf\n\ttEx9MTXg+krUVC2oUczKvDsOF1WNT4f+aKBJQzP4M+DqOg5U17BwZ8MJjvrcCWQGteLm\n\tRErC9SqNEkd24fKnXK+zhtTjEuMwsdeG2sRGRbSql7/uYpNZ3tEgzQPTa/ypZuU4Eyqx\n\trXZrDf362uTh/CWGC7z7MH870DJWcPlf/z7AnHuRfkrHrEwsSuMqkkx6f6p6Mcv6bEoi\n\t3OlO0UoMomAIKiUDsQUXx7yQiYJ4bLNgGenHBwgeQtFIRtxAl0Y/2ixA4+caEwCvZ/PB\n\tiglg==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n\ts=arc-20240605; \n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:dkim-signature;\n\tbh=JuhOiKInGSMXcF7M+zQqNPUeRRH9S85b3KY/FWvxtoc=;\n\tfh=pViFh4rhBx6810yKb0wI4WZcwBOqDHh72fUf/cLkiP4=;\n\tb=cr18+AbeJ0TBewlN1OG2azwZWaJRfk+AEOuWrOUSFlUDzrBmeuGjabWHoq6WuRSy4f\n\t4dBkH/Ph6eFkBQjGezpHKHvsmybQ4PiQtrkB/cEPBENYZvRKxVjyP9KWSbBp9ZWTvfiQ\n\tWzGerBdlqyzYjQNIrdVj3OukeqxFORgwCld66j1/u2y4wAWAnQlshETWpS3yjvDUzIAf\n\tD+TOyttWxfNQZGkuaWH4GbAd+i3BIXF8quX2tzvLKiOM3UZB9j8bWv6MAItSS3gWf3eX\n\tIfcz4j/wylcApiTwu2EI7J+Zsq1stl0wGjStsnVNJRFhqGbDDUuqRCsyB0cZ0ofglBfa\n\tBRVw==; darn=lists.libcamera.org","ARC-Authentication-Results":"i=1; mx.google.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1774611440; x=1775216240;\n\tdarn=lists.libcamera.org; \n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:from:to:cc:subject:date:message-id:reply-to;\n\tbh=JuhOiKInGSMXcF7M+zQqNPUeRRH9S85b3KY/FWvxtoc=;\n\tb=JGcoYKcSLQY2vstj/0To1F6W9fbqQkRZKijkYUVgSO+nTVLZuWdFpB1Qns0TI03hUm\n\t845EhvdzS2tlN9k+1Hdwcvc9oNcXcHLmfJDHuTCc9mofyS3OEA7LJ+0QQDeYSlqmm2di\n\tyEgj0E6sIWQG9jruF9CZgqOMBqo237WTVTmBxMf6W3VRTKHWQaqusdND+5qdma/pZ0VV\n\td39npFWf/iyy1yYqWj3ysIDd92y7ULkUVKPt34CMZ0Im+YqN+Aagp216ny6XfE2reFoA\n\tbuuBknJ4ntTcyzrMDXSsZoTNoZPDVpjMUZsCmvko/gyEbeKmq+Rph9XrODyHEDzexWhh\n\tyBDw==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1774611440; x=1775216240;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=JuhOiKInGSMXcF7M+zQqNPUeRRH9S85b3KY/FWvxtoc=;\n\tb=KZIq6vgfyMsG2gz+PXNjQ5ESzy+h+TF7y/IAPN7dw9r9kUyE0bQ1IHt+FhU2Sif0b/\n\tm6d4hbMFlxNKnK8GaE0M0VSxttHoLAzjvQr6UajQDo93xwkauyKRLFQ3FHXplyi/T7y4\n\tzFWVDj/fhcKdk1yz6pn9PkByRnTsvcI/zrvamjV+hpjCU3+m2nXs9jzM2ltwXoGsV7vn\n\tcTpC+p761CEypI4She04nHrp8YGDl4uu1TLeJR5F3TF4fMCviGi6zgTz+Vl2z+wYIO2k\n\t3r60rn8OLfXOMK5tAfFilSgUhb31BNXPGUKgT8bRoAxDDbJuScKiyV/UqYrkQb5UiXus\n\tNdDQ==","X-Gm-Message-State":"AOJu0YzW0FLY8mfuzX0qU2sObpeG7OpEdNdzNXHnL+y+IEvZ8Zv2HJYX\n\tP8NJJ1BqW2GCDu+XFDI5SZ95N834lf23EClCsanVbMWIbrSzBqp0SsXChpriJq7QWwdKVPYZwFW\n\tB1xHbnA6G/U8E62SJnX+25VWEIkwJoXl9iBcRsFOIwQ==","X-Gm-Gg":"ATEYQzxsbAaiiTlPq0UAHTJ5gNjsW7hM37cRbZ5CU3vPd+uQHNNWdDhSKh/qEU4lSru\n\txVRpdrTDsJlSCKH4Bd/p3QpG8/OkymY/pkQVoP3EmCR9VNAwxbfh6z7RUk8VQmyLjBsBxIOYCs2\n\tDEB58+hzvx81WpW1aV70KFUWMn1c6fFY/IzxKF0+PRxRN3e+Cx3I24/F6SuF1IIHeQxKcCohxeN\n\tDt0XH2/se3lBoFAjZ8Fw7drXbk3HpPmITWTGJC5lk3DWp7divf5ht90QMTuYLfEqQ2cVb1u2Yb8\n\tD99B6sGBengaXjrADUPgHy+Q1mj2B0pblj/t04qGULSW/mC3Z5xpl3Hyo+o21KhPtdxd9DFwDFI\n\tlWek+fi1OdQDzmZHgPZN0S/o=","X-Received":"by 2002:a17:907:96ab:b0:b9b:5b99:c05f with SMTP id\n\ta640c23a62f3a-b9b5b9a111cmr96651866b.44.1774611439923;\n\tFri, 27 Mar 2026 04:37:19 -0700 (PDT)","MIME-Version":"1.0","References":"<20260324151714.3345-1-david.plowman@raspberrypi.com>\n\t<20260324151714.3345-2-david.plowman@raspberrypi.com>\n\t<CAEmqJPo761Fw4Sn6zjnxPuJSCJHi_cV4-fw7uSiTq3Hme=+1yQ@mail.gmail.com>","In-Reply-To":"<CAEmqJPo761Fw4Sn6zjnxPuJSCJHi_cV4-fw7uSiTq3Hme=+1yQ@mail.gmail.com>","From":"David Plowman <david.plowman@raspberrypi.com>","Date":"Fri, 27 Mar 2026 11:37:08 +0000","X-Gm-Features":"AQROBzAdEM40Z1sl0tQyQHG28u6VNiMps9XBfucHHIYh3y62qRtUHjIg09vKoKQ","Message-ID":"<CAHW6GY+KiCadE067g25jjKAROo8u_PvW5FuJEFsrNqSrXGYUqQ@mail.gmail.com>","Subject":"Re: [PATCH v1 1/3] pipeline: rpi: Simplify delayed controls","To":"Naushir Patuck <naush@raspberrypi.com>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"UTF-8\"","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>"}}]