[{"id":25703,"web_url":"https://patchwork.libcamera.org/comment/25703/","msgid":"<CAHW6GY+PiEtta=MBqipZERBraMw4QMU8=4zdcAKBPoTbyBk33A@mail.gmail.com>","date":"2022-11-01T11:49:49","subject":"Re: [libcamera-devel] [PATCH v1 02/10] pipeline: raspberrypi: Add a\n\tpipeline config structure","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 patch!\n\nOn Fri, 14 Oct 2022 at 14:18, Naushir Patuck via libcamera-devel\n<libcamera-devel@lists.libcamera.org> wrote:\n>\n> Add a configuration structure to store platform specific parameters used by\n> the pipeline handler. Currently, these only store Unicam buffer counts,\n> replacing the hardcoded static values in the source code.\n>\n> In subsequent commits, more parameters will be added to the configuration\n> structure, and parameters will be read in through a config file.\n>\n> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n> ---\n>  .../pipeline/raspberrypi/raspberrypi.cpp      | 43 ++++++++++++++++---\n>  1 file changed, 36 insertions(+), 7 deletions(-)\n>\n> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> index d366a8bec007..7d1e454cddcd 100644\n> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> @@ -294,6 +294,13 @@ public:\n>         /* Have internal buffers been allocated? */\n>         bool buffersAllocated_;\n>\n> +       struct Config {\n> +               unsigned int minUnicamBuffers;\n> +               unsigned int minTotalUnicamBuffers;\n\nI wonder slightly whether it's worth saying here what these numbers\nrepresent? Or maybe the comments in the code below are sufficient.\nEither way:\n\nReviewed-by: David Plowman <david.plowman@raspberrypi.com>\n\nThanks!\nDavid\n\n> +       };\n> +\n> +       Config config_;\n> +\n>  private:\n>         void checkRequestCompleted();\n>         void fillRequestMetadata(const ControlList &bufferControls,\n> @@ -343,6 +350,7 @@ private:\n>         }\n>\n>         int registerCamera(MediaDevice *unicam, MediaDevice *isp, MediaEntity *sensorEntity);\n> +       int configurePipelineHandler(RPiCameraData *data);\n>         int queueAllBuffers(Camera *camera);\n>         int prepareBuffers(Camera *camera);\n>         void mapBuffers(Camera *camera, const RPi::BufferMap &buffers, unsigned int mask);\n> @@ -1368,6 +1376,12 @@ int PipelineHandlerRPi::registerCamera(MediaDevice *unicam, MediaDevice *isp, Me\n>         streams.insert(&data->isp_[Isp::Output0]);\n>         streams.insert(&data->isp_[Isp::Output1]);\n>\n> +       int ret = configurePipelineHandler(data.get());\n> +       if (ret) {\n> +               LOG(RPI, Error) << \"Unable to configure the pipeline handler!\";\n> +               return ret;\n> +       }\n> +\n>         /* Create and register the camera. */\n>         const std::string &id = data->sensor_->id();\n>         std::shared_ptr<Camera> camera =\n> @@ -1380,6 +1394,18 @@ int PipelineHandlerRPi::registerCamera(MediaDevice *unicam, MediaDevice *isp, Me\n>         return 0;\n>  }\n>\n> +int PipelineHandlerRPi::configurePipelineHandler(RPiCameraData *data)\n> +{\n> +       RPiCameraData::Config &config = data->config_;\n> +\n> +       config = {\n> +               .minUnicamBuffers = 2,\n> +               .minTotalUnicamBuffers = 4,\n> +       };\n> +\n> +       return 0;\n> +}\n> +\n>  int PipelineHandlerRPi::queueAllBuffers(Camera *camera)\n>  {\n>         RPiCameraData *data = cameraData(camera);\n> @@ -1430,25 +1456,28 @@ int PipelineHandlerRPi::prepareBuffers(Camera *camera)\n>         for (auto const stream : data->streams_) {\n>                 unsigned int numBuffers;\n>                 /*\n> -                * For Unicam, allocate a minimum of 4 buffers as we want\n> -                * to avoid any frame drops.\n> +                * For Unicam, allocate a minimum number of buffers for internal\n> +                * use as we want to avoid any frame drops.\n>                  */\n> -               constexpr unsigned int minBuffers = 4;\n> +               const unsigned int minBuffers = data->config_.minTotalUnicamBuffers;\n>                 if (stream == &data->unicam_[Unicam::Image]) {\n>                         /*\n>                          * If an application has configured a RAW stream, allocate\n>                          * additional buffers to make up the minimum, but ensure\n> -                        * we have at least 2 sets of internal buffers to use to\n> -                        * minimise frame drops.\n> +                        * we have at least minUnicamBuffers sets of internal\n> +                        * buffers to use to minimise frame drops.\n>                          */\n> -                       numBuffers = std::max<int>(2, minBuffers - numRawBuffers);\n> +                       numBuffers = std::max<int>(data->config_.minUnicamBuffers,\n> +                                                  minBuffers - numRawBuffers);\n>                 } else if (stream == &data->isp_[Isp::Input]) {\n>                         /*\n>                          * ISP input buffers are imported from Unicam, so follow\n>                          * similar logic as above to count all the RAW buffers\n>                          * available.\n>                          */\n> -                       numBuffers = numRawBuffers + std::max<int>(2, minBuffers - numRawBuffers);\n> +                       numBuffers = numRawBuffers +\n> +                                    std::max<int>(data->config_.minUnicamBuffers,\n> +                                                  minBuffers - numRawBuffers);\n>\n>                 } else if (stream == &data->unicam_[Unicam::Embedded]) {\n>                         /*\n> --\n> 2.25.1\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 7981EBD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  1 Nov 2022 11:50:03 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DE34863031;\n\tTue,  1 Nov 2022 12:50:02 +0100 (CET)","from mail-pj1-x1035.google.com (mail-pj1-x1035.google.com\n\t[IPv6:2607:f8b0:4864:20::1035])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9F53463009\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  1 Nov 2022 12:50:01 +0100 (CET)","by mail-pj1-x1035.google.com with SMTP id\n\tc15-20020a17090a1d0f00b0021365864446so12704657pjd.4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 01 Nov 2022 04:50:01 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1667303402;\n\tbh=0tcXJgh0k/C98DEbxhHdkbOEaRPPj6Uc6Fwkw2P5HbM=;\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=lr+5JJAfUqk0Vp1nXaVStWyD5qoBqsv2Vs1VOgvimdr1FgTKC5KPrhKXH8RMM9ACJ\n\t0ma9wzl91ZOidj4LZHI18nlrLR5wUCPq1/Y9KkpFjP5mhrBOzslVM6zg/5yDU0sWfE\n\t3xSIZzhO6nJpGCWP//QH2ssi0Q/TnEiEazok8IzPCt1kmOGOFQjveBg0PFq8oGqle/\n\txLAEVGmW2BpPS/+OJS3qUmMJjAVNpcTp9pFK+GMZ76aojhsUjdfLMa2cZSWfR3kVR9\n\t6IOlnlqpx7PF3tyByhywPqo9GQmS+AnFTytgCOA6j9EwGUATBADmCshZ7f3eG6x1/e\n\tCmj2/Kjx06Esw==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\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=7sPwC6cUmhnGIYg4lUBqbMgz9g6SImtEj1gewDe8sP0=;\n\tb=G3ukG/f+QyzqwW+0tHjnFMr4skgwP0pz1KsIPWf4U0JD9C7nYi/QMHl27FqyMZk6RB\n\tUddsYJjkFfbv29XjwGSKzcJbbtUWdHN3A0iuboDKf7B94r5SfpHT6rHesMzH6dJ9ULXy\n\tkG/zvAt/Kn6rWifhOyfxYkd90tJRGnt7VCyrDKUc2Pt55b10RFSmvSFjpf2W8Ew6Lecy\n\tDbgjZ5tPixnbAvJqaBd2bNJadi0clvZabFWfuOEgI7nrb7xuw5dQzv6voIjxsPQ7tX/Y\n\tzRdvxdijE5y+vHD9Y8/9B1eZO3xUONnYjyy9GLv1FACs1RhFi18U8TgTiCIR55i5g5uM\n\tipzQ=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"G3ukG/f+\"; dkim-atps=neutral","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=7sPwC6cUmhnGIYg4lUBqbMgz9g6SImtEj1gewDe8sP0=;\n\tb=LwhZLam0djfxdDPmodMg/PlXcVQe8VZ2IIPuqkdxyrGeVvNT3hZ6tp0+XMcWZOZbtV\n\tfe1MEuJMjT+0WTyvNgkjQzPjd/4PNMZUU+wwSpPnGANnnXING/kLZLqk9ychUDU/YsID\n\tg9KC0UMRXRwfy+TUn6l3iV2r6Yzd3UN8NLvaHDXVbXwLa9bS/L8WdRLNVcDpWGrm5Mkg\n\tOZDV7NxEZ/HKCDwGoQdNf9w4wWZM2wjny14x3eeCZHNUHONryrLygD748WXiLzzY+aYy\n\tPzIG7cVZQFhdn+E3UqQOyG7xnTKcjGi7q3ug2e3FteEeP/y3MU+35B+pwGhbbFnXICds\n\trcSQ==","X-Gm-Message-State":"ACrzQf1mAWlSaYrAtJ86gJQB608BclUMpHcd4a5clXOEe52fPQQbWvs5\n\tsE0Q7+XaP0FkhNZhCwlOwCDXsd3pSO42Crb+6g3H4Q==","X-Google-Smtp-Source":"AMsMyM5nwOoWR52iFwtRNwPfdC1Ur5zQvYQsNtc2zdvsT/h8zx/OLMk1VjBISLmwmqOKF/XbfKXDyR8nRpjwycIQld8=","X-Received":"by 2002:a17:902:720a:b0:181:150c:fcc4 with SMTP id\n\tba10-20020a170902720a00b00181150cfcc4mr19555884plb.109.1667303399979;\n\tTue, 01 Nov 2022 04:49:59 -0700 (PDT)","MIME-Version":"1.0","References":"<20221014131846.27169-1-naush@raspberrypi.com>\n\t<20221014131846.27169-3-naush@raspberrypi.com>","In-Reply-To":"<20221014131846.27169-3-naush@raspberrypi.com>","Date":"Tue, 1 Nov 2022 11:49:49 +0000","Message-ID":"<CAHW6GY+PiEtta=MBqipZERBraMw4QMU8=4zdcAKBPoTbyBk33A@mail.gmail.com>","To":"Naushir Patuck <naush@raspberrypi.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH v1 02/10] pipeline: raspberrypi: Add a\n\tpipeline config structure","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":"David Plowman via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"David Plowman <david.plowman@raspberrypi.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":25922,"web_url":"https://patchwork.libcamera.org/comment/25922/","msgid":"<CAEmqJPq5QNqFDpsDKHa-8K9uNqZr+Rjd80c1vAKL+Z94ncRLrg@mail.gmail.com>","date":"2022-11-29T10:23:12","subject":"Re: [libcamera-devel] [PATCH v1 02/10] pipeline: raspberrypi: Add a\n\tpipeline config structure","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 your feedback!\n\nOn Tue, 1 Nov 2022 at 11:50, David Plowman <david.plowman@raspberrypi.com>\nwrote:\n\n> Hi Naush\n>\n> Thanks for the patch!\n>\n> On Fri, 14 Oct 2022 at 14:18, Naushir Patuck via libcamera-devel\n> <libcamera-devel@lists.libcamera.org> wrote:\n> >\n> > Add a configuration structure to store platform specific parameters used\n> by\n> > the pipeline handler. Currently, these only store Unicam buffer counts,\n> > replacing the hardcoded static values in the source code.\n> >\n> > In subsequent commits, more parameters will be added to the configuration\n> > structure, and parameters will be read in through a config file.\n> >\n> > Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n> > ---\n> >  .../pipeline/raspberrypi/raspberrypi.cpp      | 43 ++++++++++++++++---\n> >  1 file changed, 36 insertions(+), 7 deletions(-)\n> >\n> > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > index d366a8bec007..7d1e454cddcd 100644\n> > --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > @@ -294,6 +294,13 @@ public:\n> >         /* Have internal buffers been allocated? */\n> >         bool buffersAllocated_;\n> >\n> > +       struct Config {\n> > +               unsigned int minUnicamBuffers;\n> > +               unsigned int minTotalUnicamBuffers;\n>\n> I wonder slightly whether it's worth saying here what these numbers\n> represent? Or maybe the comments in the code below are sufficient.\n>\n\nSure, I'll add comments to the struct - will probably copy out what is in\nthe\njson file!\n\nRegards,\nNaush\n\n\n> Either way:\n>\n> Reviewed-by: David Plowman <david.plowman@raspberrypi.com>\n>\n> Thanks!\n> David\n>\n> > +       };\n> > +\n> > +       Config config_;\n> > +\n> >  private:\n> >         void checkRequestCompleted();\n> >         void fillRequestMetadata(const ControlList &bufferControls,\n> > @@ -343,6 +350,7 @@ private:\n> >         }\n> >\n> >         int registerCamera(MediaDevice *unicam, MediaDevice *isp,\n> MediaEntity *sensorEntity);\n> > +       int configurePipelineHandler(RPiCameraData *data);\n> >         int queueAllBuffers(Camera *camera);\n> >         int prepareBuffers(Camera *camera);\n> >         void mapBuffers(Camera *camera, const RPi::BufferMap &buffers,\n> unsigned int mask);\n> > @@ -1368,6 +1376,12 @@ int\n> PipelineHandlerRPi::registerCamera(MediaDevice *unicam, MediaDevice *isp, Me\n> >         streams.insert(&data->isp_[Isp::Output0]);\n> >         streams.insert(&data->isp_[Isp::Output1]);\n> >\n> > +       int ret = configurePipelineHandler(data.get());\n> > +       if (ret) {\n> > +               LOG(RPI, Error) << \"Unable to configure the pipeline\n> handler!\";\n> > +               return ret;\n> > +       }\n> > +\n> >         /* Create and register the camera. */\n> >         const std::string &id = data->sensor_->id();\n> >         std::shared_ptr<Camera> camera =\n> > @@ -1380,6 +1394,18 @@ int\n> PipelineHandlerRPi::registerCamera(MediaDevice *unicam, MediaDevice *isp, Me\n> >         return 0;\n> >  }\n> >\n> > +int PipelineHandlerRPi::configurePipelineHandler(RPiCameraData *data)\n> > +{\n> > +       RPiCameraData::Config &config = data->config_;\n> > +\n> > +       config = {\n> > +               .minUnicamBuffers = 2,\n> > +               .minTotalUnicamBuffers = 4,\n> > +       };\n> > +\n> > +       return 0;\n> > +}\n> > +\n> >  int PipelineHandlerRPi::queueAllBuffers(Camera *camera)\n> >  {\n> >         RPiCameraData *data = cameraData(camera);\n> > @@ -1430,25 +1456,28 @@ int PipelineHandlerRPi::prepareBuffers(Camera\n> *camera)\n> >         for (auto const stream : data->streams_) {\n> >                 unsigned int numBuffers;\n> >                 /*\n> > -                * For Unicam, allocate a minimum of 4 buffers as we want\n> > -                * to avoid any frame drops.\n> > +                * For Unicam, allocate a minimum number of buffers for\n> internal\n> > +                * use as we want to avoid any frame drops.\n> >                  */\n> > -               constexpr unsigned int minBuffers = 4;\n> > +               const unsigned int minBuffers =\n> data->config_.minTotalUnicamBuffers;\n> >                 if (stream == &data->unicam_[Unicam::Image]) {\n> >                         /*\n> >                          * If an application has configured a RAW\n> stream, allocate\n> >                          * additional buffers to make up the minimum,\n> but ensure\n> > -                        * we have at least 2 sets of internal buffers\n> to use to\n> > -                        * minimise frame drops.\n> > +                        * we have at least minUnicamBuffers sets of\n> internal\n> > +                        * buffers to use to minimise frame drops.\n> >                          */\n> > -                       numBuffers = std::max<int>(2, minBuffers -\n> numRawBuffers);\n> > +                       numBuffers =\n> std::max<int>(data->config_.minUnicamBuffers,\n> > +                                                  minBuffers -\n> numRawBuffers);\n> >                 } else if (stream == &data->isp_[Isp::Input]) {\n> >                         /*\n> >                          * ISP input buffers are imported from Unicam,\n> so follow\n> >                          * similar logic as above to count all the RAW\n> buffers\n> >                          * available.\n> >                          */\n> > -                       numBuffers = numRawBuffers + std::max<int>(2,\n> minBuffers - numRawBuffers);\n> > +                       numBuffers = numRawBuffers +\n> > +\n> std::max<int>(data->config_.minUnicamBuffers,\n> > +                                                  minBuffers -\n> numRawBuffers);\n> >\n> >                 } else if (stream == &data->unicam_[Unicam::Embedded]) {\n> >                         /*\n> > --\n> > 2.25.1\n> >\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 A7EFBBDE6B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 29 Nov 2022 10:23:30 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 24F7C6333A;\n\tTue, 29 Nov 2022 11:23:30 +0100 (CET)","from mail-io1-xd32.google.com (mail-io1-xd32.google.com\n\t[IPv6:2607:f8b0:4864:20::d32])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id CCDDF63314\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 29 Nov 2022 11:23:28 +0100 (CET)","by mail-io1-xd32.google.com with SMTP id i85so9696044ioa.5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 29 Nov 2022 02:23:28 -0800 (PST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1669717410;\n\tbh=jmOABKhdn6V7Ay8aNO7BLdZwV7nDRgLurORo/8s+yMU=;\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=dYygLjQ31aEu1zPtrsvWNSe9MvbQqmGmTE/B7p70H09c5VooKvdM3bRNezIbW6hN0\n\tsfbMvaEVDYO7pMohAhqd/EELd6RQF9PhndHpNpk6H9jUmTPnP1o8n1P+cMTUeLBduq\n\tuIrGgEPGauQUBqwf1QyDBQVVcHtl4kONObGNO09PHVuGER7fE3mJMhuTJGhtJW5Mo7\n\tHUzh77yi7/4c4vAbwQ8ykDv3kLHmeX7AK+oPpckQJ3rgqkZ09uKhH8xSJP/2GyhAw9\n\tjlHtn4HV9Z7mVg6rcsGoJ9q3DogShPISDQSvGm7uK9KfoHeIGF+zQdyh6ZKPndyWUC\n\temhgyo2dI2VoA==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\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=wYUrMDvrfs/muwsMINVg30OBYCh1IMc9WyBvQBBLWLk=;\n\tb=PIr3fbxd3/mH89kyydo+k+npFOHep+pvuY+OpIAibZzKGcnh0rYqu0zxteXxL7hU2+\n\tcV+0n9rQyK36eB9f6TQtTSkoAOBlkIrkoLdQCDnZnpdHgMA8f9aQxSLQ82GPtXl8+3mN\n\taW8DU80hj08X7SA2EnviFkyW02RfoApawfGYdTslAxRxAHm6nO0e6EBjDOLUHXmVGmje\n\tcZNkKseygTlNXiKOLn2JPIk5j993bv77SbF4HVAWHn8U5NBQrkJ4D2iaohR7i6nz1w/0\n\tO2JGqxRzl7UrwdWYgIxeNexCDRnCy5+e30YUojjOkB248/xkKCp2t3W7HtFFoh3qYtRw\n\tpI3Q=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"PIr3fbxd\"; dkim-atps=neutral","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=wYUrMDvrfs/muwsMINVg30OBYCh1IMc9WyBvQBBLWLk=;\n\tb=HN/IDUjHDfj7milH+AtVn41F2Q1bdOoOQNlQqEm/NIv1BzOM7jKHqvxpH92SsVX28z\n\tCVcLoa+L9+A6f160c4L8Nlb27geFxgMj/NkVjom285QSYJWc6uHsZByK2RUwrAYssKey\n\t8J4ETHjqUu3pijTL/K9kXOp8QKcKb1I4su8KUcMBIRaaHz3OteUxWEaGBGqfm6vaV93k\n\tQ7R/HN7dvIIPjOqxg+HDaTXHd4lCsMrjSctHGGQ3FB6YvRW/upJb2BpP4+FXQm4Grmdq\n\t4zo/1bieSCr7j+JSUl95toz+XjZQxdg0QA0uojgiT4yX5wBOcAjGyZC3gdQ4fOM8BDfA\n\tfxow==","X-Gm-Message-State":"ANoB5pnP+M7bCkG/kKI3sUrJomU1cuNTGHd/I5MGhgdsZ4IiIhpbadO5\n\tOC6h9K6m7IOeg1sGrqDiVKYiYsRJW/bv2CwrgMfIwT5jR74=","X-Google-Smtp-Source":"AA0mqf4jm61eHEV0PcZJSgnJkyNRYTVBKHZQjwDVTBWZk88L5AxWbakqy8p5FEJ/rsw8m2pUjB0SSnTvqZOK2+ErdY0=","X-Received":"by 2002:a05:6638:3786:b0:363:b82d:d510 with SMTP id\n\tw6-20020a056638378600b00363b82dd510mr25477364jal.112.1669717407645;\n\tTue, 29 Nov 2022 02:23:27 -0800 (PST)","MIME-Version":"1.0","References":"<20221014131846.27169-1-naush@raspberrypi.com>\n\t<20221014131846.27169-3-naush@raspberrypi.com>\n\t<CAHW6GY+PiEtta=MBqipZERBraMw4QMU8=4zdcAKBPoTbyBk33A@mail.gmail.com>","In-Reply-To":"<CAHW6GY+PiEtta=MBqipZERBraMw4QMU8=4zdcAKBPoTbyBk33A@mail.gmail.com>","Date":"Tue, 29 Nov 2022 10:23:12 +0000","Message-ID":"<CAEmqJPq5QNqFDpsDKHa-8K9uNqZr+Rjd80c1vAKL+Z94ncRLrg@mail.gmail.com>","To":"David Plowman <david.plowman@raspberrypi.com>","Content-Type":"multipart/alternative; boundary=\"000000000000f5555705ee9960b5\"","Subject":"Re: [libcamera-devel] [PATCH v1 02/10] pipeline: raspberrypi: Add a\n\tpipeline config structure","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":"Naushir Patuck via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Naushir Patuck <naush@raspberrypi.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]