[{"id":15617,"web_url":"https://patchwork.libcamera.org/comment/15617/","msgid":"<cc1a10eb-eaa4-6fe4-7cfe-a95dba946b67@ideasonboard.com>","date":"2021-03-12T13:37:55","subject":"Re: [libcamera-devel] [PATCH v4 6/7] test: delayed_controls: Fixup\n\ttests after recent DelayedControls changes","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Naush,\n\n\nOn 04/03/2021 08:17, Naushir Patuck wrote:\n> The recent fixes applied to DelayedControls change the behavior of the\n> library. As such, the tests ended up failing as they relied on the old\n> behavior of the helper. Update the tests to account for the new behavior\n> and get the tests passing again.\n> \n> Specifically, the following changes have been made for each test:\n> \n> singleControlNoDelay():\n> - Add a call to reset() to initialise internal DelayedControls state\n> only after setting the control on the device.\n> - Trigger a first frame start by calling applyControls() as a pipeline\n> handler would.\n> - Test frames from 1 onwards, as we will never have a queue item at\n> frame 0, since the reset() handles that.\n> \n> singleControlWithDelay():\n> - Trigger a first frame start by calling applyControls() as a pipeline\n> handler would.\n> - Test frames from 1 onwards, as we will never have a queue item at\n> frame 0, since the reset() handles that.\n> \n> dualControlsWithDelay() and dualControlsMultiQueue():\n> - Trigger a first frame start by calling applyControls() as a pipeline\n> handler would.\n> - Test frames from (startOffset + 1) onwards, as we will never have a\n> queue item at frame startOffset.\n> - Use the max delay (2 in this case) to determine the expected result\n> value.\n> \n> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n\nI wondered if these should be squashed into the commits that change it -\nbut I don't think it's a problem.\n\nHard to track all these offsets :-( I'm glad you've created a tool to\nhelp debugging!\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> ---\n>  test/delayed_contols.cpp | 35 ++++++++++++++++++++++++++---------\n>  1 file changed, 26 insertions(+), 9 deletions(-)\n> \n> diff --git a/test/delayed_contols.cpp b/test/delayed_contols.cpp\n> index 3855eb18ecd4..c6f195b7bc7f 100644\n> --- a/test/delayed_contols.cpp\n> +++ b/test/delayed_contols.cpp\n> @@ -82,9 +82,13 @@ protected:\n>  \t\t/* Reset control to value not used in test. */\n>  \t\tctrls.set(V4L2_CID_BRIGHTNESS, 1);\n>  \t\tdev_->setControls(&ctrls);\n> +\t\tdelayed->reset();\n> +\n> +\t\t/* Trigger the first frame start event */\n> +\t\tdelayed->applyControls(0);\n>  \n>  \t\t/* Test control without delay are set at once. */\n> -\t\tfor (unsigned int i = 0; i < 100; i++) {\n> +\t\tfor (unsigned int i = 1; i < 100; i++) {\n>  \t\t\tint32_t value = 100 + i;\n>  \n>  \t\t\tctrls.set(V4L2_CID_BRIGHTNESS, value);\n> @@ -122,8 +126,11 @@ protected:\n>  \t\tdev_->setControls(&ctrls);\n>  \t\tdelayed->reset();\n>  \n> +\t\t/* Trigger the first frame start event */\n> +\t\tdelayed->applyControls(0);\n> +\n>  \t\t/* Test single control with delay. */\n> -\t\tfor (unsigned int i = 0; i < 100; i++) {\n> +\t\tfor (unsigned int i = 1; i < 100; i++) {\n>  \t\t\tint32_t value = 10 + i;\n>  \n>  \t\t\tctrls.set(V4L2_CID_BRIGHTNESS, value);\n> @@ -150,9 +157,11 @@ protected:\n>  \n>  \tint dualControlsWithDelay(uint32_t startOffset)\n>  \t{\n> +\t\tstatic const unsigned int maxDelay = 2;\n> +\n>  \t\tstd::unordered_map<uint32_t, DelayedControls::ControlParams> delays = {\n>  \t\t\t{ V4L2_CID_BRIGHTNESS, { 1, false } },\n> -\t\t\t{ V4L2_CID_CONTRAST, { 2, false } },\n> +\t\t\t{ V4L2_CID_CONTRAST, { maxDelay, false } },\n>  \t\t};\n>  \t\tstd::unique_ptr<DelayedControls> delayed =\n>  \t\t\tstd::make_unique<DelayedControls>(dev_.get(), delays);\n> @@ -165,8 +174,11 @@ protected:\n>  \t\tdev_->setControls(&ctrls);\n>  \t\tdelayed->reset();\n>  \n> +\t\t/* Trigger the first frame start event */\n> +\t\tdelayed->applyControls(startOffset);\n> +\n>  \t\t/* Test dual control with delay. */\n> -\t\tfor (unsigned int i = 0; i < 100; i++) {\n> +\t\tfor (unsigned int i = 1; i < 100; i++) {\n>  \t\t\tuint32_t frame = startOffset + i;\n>  \t\t\tint32_t value = 10 + i;\n>  \n> @@ -189,7 +201,7 @@ protected:\n>  \t\t\t\treturn TestFail;\n>  \t\t\t}\n>  \n> -\t\t\texpected = i < 1 ? expected : value - 1;\n> +\t\t\texpected = i < maxDelay ? expected : value - 1;\n>  \t\t}\n>  \n>  \t\treturn TestPass;\n> @@ -197,9 +209,11 @@ protected:\n>  \n>  \tint dualControlsMultiQueue()\n>  \t{\n> +\t\tstatic const unsigned int maxDelay = 2;\n> +\n>  \t\tstd::unordered_map<uint32_t, DelayedControls::ControlParams> delays = {\n>  \t\t\t{ V4L2_CID_BRIGHTNESS, { 1, false } },\n> -\t\t\t{ V4L2_CID_CONTRAST, { 2, false } }\n> +\t\t\t{ V4L2_CID_CONTRAST, { maxDelay, false } }\n>  \t\t};\n>  \t\tstd::unique_ptr<DelayedControls> delayed =\n>  \t\t\tstd::make_unique<DelayedControls>(dev_.get(), delays);\n> @@ -212,6 +226,9 @@ protected:\n>  \t\tdev_->setControls(&ctrls);\n>  \t\tdelayed->reset();\n>  \n> +\t\t/* Trigger the first frame start event */\n> +\t\tdelayed->applyControls(0);\n> +\n>  \t\t/*\n>  \t\t * Queue all controls before any fake frame start. Note we\n>  \t\t * can't queue up more then the delayed controls history size\n> @@ -226,8 +243,8 @@ protected:\n>  \t\t}\n>  \n>  \t\t/* Process all queued controls. */\n> -\t\tfor (unsigned int i = 0; i < 16; i++) {\n> -\t\t\tint32_t value = 10 + i;\n> +\t\tfor (unsigned int i = 1; i < 16; i++) {\n> +\t\t\tint32_t value = 10 + i - 1;\n>  \n>  \t\t\tdelayed->applyControls(i);\n>  \n> @@ -245,7 +262,7 @@ protected:\n>  \t\t\t\treturn TestFail;\n>  \t\t\t}\n>  \n> -\t\t\texpected = i < 1 ? expected : value - 1;\n> +\t\t\texpected = i < maxDelay ? expected : value - 1;\n>  \t\t}\n>  \n>  \t\treturn TestPass;\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 11D93BD1F1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 12 Mar 2021 13:38:01 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 837AB68C6F;\n\tFri, 12 Mar 2021 14:38:00 +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 1044368C67\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 12 Mar 2021 14:37:59 +0100 (CET)","from [192.168.0.20]\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 878E3A2A;\n\tFri, 12 Mar 2021 14:37:58 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"d4bchyfc\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1615556278;\n\tbh=CwsL7wFbKkEzDn5UfBnjgLCHZdei/8/qD3htJEV6LDg=;\n\th=Reply-To:Subject:To:References:From:Date:In-Reply-To:From;\n\tb=d4bchyfcnaGudGD+zstAhYY/uh8sHTJOGIw9ge5NqYTDN60aKCMKuZaTdxwytDyHw\n\taZWam6B3zqJirznzk40bbHj03vvXy/aNKgSba/5YGBYpHO2DpryHEI+psx+3g5dBF+\n\t1F/uB5nZ512QeAbKKlxqOfFRWEYKm0ASaol+pJR8=","To":"Naushir Patuck <naush@raspberrypi.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20210304081728.1058394-1-naush@raspberrypi.com>\n\t<20210304081728.1058394-7-naush@raspberrypi.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<cc1a10eb-eaa4-6fe4-7cfe-a95dba946b67@ideasonboard.com>","Date":"Fri, 12 Mar 2021 13:37:55 +0000","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101\n\tThunderbird/68.10.0","MIME-Version":"1.0","In-Reply-To":"<20210304081728.1058394-7-naush@raspberrypi.com>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH v4 6/7] test: delayed_controls: Fixup\n\ttests after recent DelayedControls changes","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>","Reply-To":"kieran.bingham@ideasonboard.com","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":15624,"web_url":"https://patchwork.libcamera.org/comment/15624/","msgid":"<CAEmqJPqedgp4zyUa9zLrqU8C-4ot13CuwCpFJ4viOm0RKoJR2w@mail.gmail.com>","date":"2021-03-12T14:10:07","subject":"Re: [libcamera-devel] [PATCH v4 6/7] test: delayed_controls: Fixup\n\ttests after recent DelayedControls changes","submitter":{"id":34,"url":"https://patchwork.libcamera.org/api/people/34/","name":"Naushir Patuck","email":"naush@raspberrypi.com"},"content":"Hi Kieran,\n\n\nOn Fri, 12 Mar 2021 at 13:38, Kieran Bingham <\nkieran.bingham@ideasonboard.com> wrote:\n\n> Hi Naush,\n>\n>\n> On 04/03/2021 08:17, Naushir Patuck wrote:\n> > The recent fixes applied to DelayedControls change the behavior of the\n> > library. As such, the tests ended up failing as they relied on the old\n> > behavior of the helper. Update the tests to account for the new behavior\n> > and get the tests passing again.\n> >\n> > Specifically, the following changes have been made for each test:\n> >\n> > singleControlNoDelay():\n> > - Add a call to reset() to initialise internal DelayedControls state\n> > only after setting the control on the device.\n> > - Trigger a first frame start by calling applyControls() as a pipeline\n> > handler would.\n> > - Test frames from 1 onwards, as we will never have a queue item at\n> > frame 0, since the reset() handles that.\n> >\n> > singleControlWithDelay():\n> > - Trigger a first frame start by calling applyControls() as a pipeline\n> > handler would.\n> > - Test frames from 1 onwards, as we will never have a queue item at\n> > frame 0, since the reset() handles that.\n> >\n> > dualControlsWithDelay() and dualControlsMultiQueue():\n> > - Trigger a first frame start by calling applyControls() as a pipeline\n> > handler would.\n> > - Test frames from (startOffset + 1) onwards, as we will never have a\n> > queue item at frame startOffset.\n> > - Use the max delay (2 in this case) to determine the expected result\n> > value.\n> >\n> > Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n>\n> I wondered if these should be squashed into the commits that change it -\n> but I don't think it's a problem.\n>\n\nI did consider that before submitting this version.  However, it does get a\nbit\nunwieldy.  No one previous commit fixes the overall behaviour of the helper,\nand as such, there would be churn in the test code for each commit, and not\njust incremental fixes, if you get what I mean?\n\nRegards,\nNaush\n\n\n> Hard to track all these offsets :-( I'm glad you've created a tool to\n> help debugging!\n>\n\nYes, the parsing script has kept me sane when trying to debug these\noscillations :)\n\nRegards,\nNaush\n\n\n\n>\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>\n> > ---\n> >  test/delayed_contols.cpp | 35 ++++++++++++++++++++++++++---------\n> >  1 file changed, 26 insertions(+), 9 deletions(-)\n> >\n> > diff --git a/test/delayed_contols.cpp b/test/delayed_contols.cpp\n> > index 3855eb18ecd4..c6f195b7bc7f 100644\n> > --- a/test/delayed_contols.cpp\n> > +++ b/test/delayed_contols.cpp\n> > @@ -82,9 +82,13 @@ protected:\n> >               /* Reset control to value not used in test. */\n> >               ctrls.set(V4L2_CID_BRIGHTNESS, 1);\n> >               dev_->setControls(&ctrls);\n> > +             delayed->reset();\n> > +\n> > +             /* Trigger the first frame start event */\n> > +             delayed->applyControls(0);\n> >\n> >               /* Test control without delay are set at once. */\n> > -             for (unsigned int i = 0; i < 100; i++) {\n> > +             for (unsigned int i = 1; i < 100; i++) {\n> >                       int32_t value = 100 + i;\n> >\n> >                       ctrls.set(V4L2_CID_BRIGHTNESS, value);\n> > @@ -122,8 +126,11 @@ protected:\n> >               dev_->setControls(&ctrls);\n> >               delayed->reset();\n> >\n> > +             /* Trigger the first frame start event */\n> > +             delayed->applyControls(0);\n> > +\n> >               /* Test single control with delay. */\n> > -             for (unsigned int i = 0; i < 100; i++) {\n> > +             for (unsigned int i = 1; i < 100; i++) {\n> >                       int32_t value = 10 + i;\n> >\n> >                       ctrls.set(V4L2_CID_BRIGHTNESS, value);\n> > @@ -150,9 +157,11 @@ protected:\n> >\n> >       int dualControlsWithDelay(uint32_t startOffset)\n> >       {\n> > +             static const unsigned int maxDelay = 2;\n> > +\n> >               std::unordered_map<uint32_t,\n> DelayedControls::ControlParams> delays = {\n> >                       { V4L2_CID_BRIGHTNESS, { 1, false } },\n> > -                     { V4L2_CID_CONTRAST, { 2, false } },\n> > +                     { V4L2_CID_CONTRAST, { maxDelay, false } },\n> >               };\n> >               std::unique_ptr<DelayedControls> delayed =\n> >                       std::make_unique<DelayedControls>(dev_.get(),\n> delays);\n> > @@ -165,8 +174,11 @@ protected:\n> >               dev_->setControls(&ctrls);\n> >               delayed->reset();\n> >\n> > +             /* Trigger the first frame start event */\n> > +             delayed->applyControls(startOffset);\n> > +\n> >               /* Test dual control with delay. */\n> > -             for (unsigned int i = 0; i < 100; i++) {\n> > +             for (unsigned int i = 1; i < 100; i++) {\n> >                       uint32_t frame = startOffset + i;\n> >                       int32_t value = 10 + i;\n> >\n> > @@ -189,7 +201,7 @@ protected:\n> >                               return TestFail;\n> >                       }\n> >\n> > -                     expected = i < 1 ? expected : value - 1;\n> > +                     expected = i < maxDelay ? expected : value - 1;\n> >               }\n> >\n> >               return TestPass;\n> > @@ -197,9 +209,11 @@ protected:\n> >\n> >       int dualControlsMultiQueue()\n> >       {\n> > +             static const unsigned int maxDelay = 2;\n> > +\n> >               std::unordered_map<uint32_t,\n> DelayedControls::ControlParams> delays = {\n> >                       { V4L2_CID_BRIGHTNESS, { 1, false } },\n> > -                     { V4L2_CID_CONTRAST, { 2, false } }\n> > +                     { V4L2_CID_CONTRAST, { maxDelay, false } }\n> >               };\n> >               std::unique_ptr<DelayedControls> delayed =\n> >                       std::make_unique<DelayedControls>(dev_.get(),\n> delays);\n> > @@ -212,6 +226,9 @@ protected:\n> >               dev_->setControls(&ctrls);\n> >               delayed->reset();\n> >\n> > +             /* Trigger the first frame start event */\n> > +             delayed->applyControls(0);\n> > +\n> >               /*\n> >                * Queue all controls before any fake frame start. Note we\n> >                * can't queue up more then the delayed controls history\n> size\n> > @@ -226,8 +243,8 @@ protected:\n> >               }\n> >\n> >               /* Process all queued controls. */\n> > -             for (unsigned int i = 0; i < 16; i++) {\n> > -                     int32_t value = 10 + i;\n> > +             for (unsigned int i = 1; i < 16; i++) {\n> > +                     int32_t value = 10 + i - 1;\n> >\n> >                       delayed->applyControls(i);\n> >\n> > @@ -245,7 +262,7 @@ protected:\n> >                               return TestFail;\n> >                       }\n> >\n> > -                     expected = i < 1 ? expected : value - 1;\n> > +                     expected = i < maxDelay ? expected : value - 1;\n> >               }\n> >\n> >               return TestPass;\n> >\n>\n> --\n> Regards\n> --\n> Kieran\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 23B21BD1F1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 12 Mar 2021 14:10:27 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7FE8568C72;\n\tFri, 12 Mar 2021 15:10:26 +0100 (CET)","from mail-lj1-x232.google.com (mail-lj1-x232.google.com\n\t[IPv6:2a00:1450:4864:20::232])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4305B68C68\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 12 Mar 2021 15:10:25 +0100 (CET)","by mail-lj1-x232.google.com with SMTP id f16so6908640ljm.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 12 Mar 2021 06:10:25 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"osHCAPBY\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc; bh=3r6JnSOkMl83RPW3ONpSUDa3eX3ChncWTkn1sGkQLro=;\n\tb=osHCAPBYpAik4YDMorJMfAqQsloqVOl3vtwI5FCHlkbzj7EYqldMAJtcOLXWRHwUPg\n\ty1XL+Nz6I3uRaNH0h8cuUoobfe5nV4vMidkiU+Yc+XkmIhzrtvZMX9ye7oBPeVp8zQ/R\n\tF+gz4+AdWUembQTRPdorH2i6I5MLtPgfDPLRwSMAkY/NZ/9jAveAvUbHq6+7UgBliay3\n\tyfVD6qFbLT5eA7hwXDmnyhcI4LLYt1XIv+N6dcaAl2+lWrfYeKal7uhVN1EQsuGEvMWt\n\tC0B4IAgwsBl1ZM44fFWFyvg85C3rgK775kXXrfhFAmp/QqGkgt9CAdzJYGVPyDAjK/YD\n\tzFdA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc;\n\tbh=3r6JnSOkMl83RPW3ONpSUDa3eX3ChncWTkn1sGkQLro=;\n\tb=pyNUCVe8LA7hRCaVF/fIOlr7gQK45CZLhK1orq7eob66biMP5ToVtd69zmlJ0bbsaZ\n\twSVch2X6P8InmDIvY9mzpZJPLukj6+basxqgWjmgiJYhYkVqbhGAJZDnmNC+JUONt+OZ\n\tVOZ5STU0Oal0ArXUFEDmn6AXxLFjJALRXO/DJ+SmqpHQ3W6WdleSJ943AT5hdWVj+ViX\n\tnJh63q9wyxccBo6hroJLxPeJFQZ71mUIrO5dyTXbz7Sk2T2bbnR7PcYk3pIKAb9RIFKo\n\t8KlNDHGE6N/dEtCQa4QDln7Pg0NHb6kCJ33ZzhwX6bzEtFwpT6zwMSZ8G0K+NEvWfrQ1\n\t4J4Q==","X-Gm-Message-State":"AOAM531YthmGh7M4OwdMBsIvuGRMMGM0mj7SqXq9T/4zglBKjvc5sMpE\n\tISB33NdBOoLI55HVVRoz4x5UhrVdq00twnQCw7L0zA==","X-Google-Smtp-Source":"ABdhPJwQsa7SR5tk8kq2JBDMKnRlGPPWIK8K8Kf3xZ5ZEH7b/sjfmajDzemfNgc6Y2SVFb5cEeL5+1qFipmZVC50FyQ=","X-Received":"by 2002:a2e:864d:: with SMTP id i13mr2441219ljj.48.1615558224639;\n\tFri, 12 Mar 2021 06:10:24 -0800 (PST)","MIME-Version":"1.0","References":"<20210304081728.1058394-1-naush@raspberrypi.com>\n\t<20210304081728.1058394-7-naush@raspberrypi.com>\n\t<cc1a10eb-eaa4-6fe4-7cfe-a95dba946b67@ideasonboard.com>","In-Reply-To":"<cc1a10eb-eaa4-6fe4-7cfe-a95dba946b67@ideasonboard.com>","From":"Naushir Patuck <naush@raspberrypi.com>","Date":"Fri, 12 Mar 2021 14:10:07 +0000","Message-ID":"<CAEmqJPqedgp4zyUa9zLrqU8C-4ot13CuwCpFJ4viOm0RKoJR2w@mail.gmail.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v4 6/7] test: delayed_controls: Fixup\n\ttests after recent DelayedControls changes","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>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Content-Type":"multipart/mixed;\n\tboundary=\"===============1417702422165811887==\"","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]