[{"id":24489,"web_url":"https://patchwork.libcamera.org/comment/24489/","msgid":"<CAHbe+E0YJ6uiU3EfXXg52S=iA4ymcdns2_-1_OeVxyi5V3ULGw@mail.gmail.com>","date":"2022-08-09T20:55:15","subject":"Re: [libcamera-devel] [PATCH v7 5/8] qcam: Queue requests only\n\tthrough MainWindow::queueRequest()","submitter":{"id":114,"url":"https://patchwork.libcamera.org/api/people/114/","name":"Utkarsh Tiwari","email":"utkarsh02t@gmail.com"},"content":"On Wed, Aug 10, 2022 at 2:23 AM Utkarsh Tiwari <utkarsh02t@gmail.com> wrote:\n\n> Currently to request a frame, we operate the camera directly.\n> This approach is also scattered in two places,\n> MainWindow::startCapture() and MainWindow::queueRequest().\n> This makes it difficult to account for requests.\n>\n> Centralize all the queuing to a single function queueRequest()\n>\n> Rename the current queueRequest() to renderComplete().\n> This makes more sense as this slot is triggered when\n> the render is complete and we want to queue another\n> request.\n>\n> Signed-off-by: Utkarsh Tiwari <utkarsh02t at gmail.com>\n> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>\n> Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>\nFix mail id here:\nReviewed-by: Kieran Bingham <kieran.bingham@ ideasonboard.com>\nReviewed-by: Umang Jain <umang.jain@ideasonboard.com>\n\n> ---\n>  src/qcam/main_window.cpp | 14 +++++++++-----\n>  src/qcam/main_window.h   |  3 ++-\n>  2 files changed, 11 insertions(+), 6 deletions(-)\n>\n> diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp\n> index 15b150ec..3feabcff 100644\n> --- a/src/qcam/main_window.cpp\n> +++ b/src/qcam/main_window.cpp\n> @@ -120,14 +120,14 @@ MainWindow::MainWindow(CameraManager *cm, const\n> OptionsParser::Options &options)\n>         if (renderType == \"qt\") {\n>                 ViewFinderQt *viewfinder = new ViewFinderQt(this);\n>                 connect(viewfinder, &ViewFinderQt::renderComplete,\n> -                       this, &MainWindow::queueRequest);\n> +                       this, &MainWindow::renderComplete);\n>                 viewfinder_ = viewfinder;\n>                 setCentralWidget(viewfinder);\n>  #ifndef QT_NO_OPENGL\n>         } else if (renderType == \"gles\") {\n>                 ViewFinderGL *viewfinder = new ViewFinderGL(this);\n>                 connect(viewfinder, &ViewFinderGL::renderComplete,\n> -                       this, &MainWindow::queueRequest);\n> +                       this, &MainWindow::renderComplete);\n>                 viewfinder_ = viewfinder;\n>                 setCentralWidget(viewfinder);\n>  #endif\n> @@ -513,7 +513,7 @@ int MainWindow::startCapture()\n>\n>         /* Queue all requests. */\n>         for (std::unique_ptr<Request> &request : requests_) {\n> -               ret = camera_->queueRequest(request.get());\n> +               ret = queueRequest(request.get());\n>                 if (ret < 0) {\n>                         qWarning() << \"Can't queue request\";\n>                         goto error_disconnect;\n> @@ -745,7 +745,7 @@ void MainWindow::processViewfinder(FrameBuffer *buffer)\n>         viewfinder_->render(buffer, mappedBuffers_[buffer].get());\n>  }\n>\n> -void MainWindow::queueRequest(FrameBuffer *buffer)\n> +void MainWindow::renderComplete(FrameBuffer *buffer)\n>  {\n>         Request *request;\n>         {\n> @@ -774,6 +774,10 @@ void MainWindow::queueRequest(FrameBuffer *buffer)\n>                         qWarning() << \"No free buffer available for RAW\n> capture\";\n>                 }\n>         }\n> +       queueRequest(request);\n> +}\n>\n> -       camera_->queueRequest(request);\n> +int MainWindow::queueRequest(Request *request)\n> +{\n> +       return camera_->queueRequest(request);\n>  }\n> diff --git a/src/qcam/main_window.h b/src/qcam/main_window.h\n> index bbdbb21c..bd6f0172 100644\n> --- a/src/qcam/main_window.h\n> +++ b/src/qcam/main_window.h\n> @@ -70,7 +70,7 @@ private Q_SLOTS:\n>         void processRaw(libcamera::FrameBuffer *buffer,\n>                         const libcamera::ControlList &metadata);\n>\n> -       void queueRequest(libcamera::FrameBuffer *buffer);\n> +       void renderComplete(libcamera::FrameBuffer *buffer);\n>\n>  private:\n>         int createToolbars();\n> @@ -84,6 +84,7 @@ private:\n>         void addCamera(std::shared_ptr<libcamera::Camera> camera);\n>         void removeCamera(std::shared_ptr<libcamera::Camera> camera);\n>\n> +       int queueRequest(libcamera::Request *request);\n>         void requestComplete(libcamera::Request *request);\n>         void processCapture();\n>         void processHotplug(HotplugEvent *e);\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 B042BC3272\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  9 Aug 2022 20:55:30 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 3B5BF6332B;\n\tTue,  9 Aug 2022 22:55:30 +0200 (CEST)","from mail-pf1-x432.google.com (mail-pf1-x432.google.com\n\t[IPv6:2607:f8b0:4864:20::432])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id CE20C61FAA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  9 Aug 2022 22:55:28 +0200 (CEST)","by mail-pf1-x432.google.com with SMTP id p125so8327074pfp.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 09 Aug 2022 13:55:28 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1660078530;\n\tbh=o4rtr6Dqztddhm428Eq0nA2X51bpEDaeFvjfXWDRrKI=;\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:\n\tFrom;\n\tb=JfHXzi0v2Xae92b/eAYwKvkjFwLTwJ9sRTUoGZWZI4kM3qbzTGmY+iHKfGiQX7dJl\n\thVxmQAPlYycMPJXgZdiDsq4BmvM5qPiM371iuaQampt/U05HBRPiZGtMREY8u+GhnW\n\tUvMwqmj+Sjm6CVqHwWU81zUlsZaLlmmSeNgJVnjebGJs+j432AkPwQYj+sbPv+uTq8\n\t6k+N97C22YAuu3Hk3b8OzrVuCxqpMyGh7Z4jH0oQ+G0dIyrwl/lbLVeKio9SJcSpvm\n\tiNtH+EQoTR6dFw8gQWTgqQ1IYgqR6gU5ucFBVAiM4IEAABdOuw8u73li2xzmsfvzVx\n\tkEDD6MLHtYmNA==","v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:from:to:cc;\n\tbh=042k/Ccvy6f++LyVQsTy+rvfhhqgfBcao80e8fGPRNY=;\n\tb=iNAURXTepdtGMaw75a5qVKlkwYaTtdcISLydDY27e9bCuNqKdcaknYjX2Sh59rvqyn\n\tAavuh0Y+z4u5WC+1/sHwOcttiUy11bfqBXyN0qzZZJi0vcEbzcVg/4E+5zSaQLddUj+9\n\to0zXQLc7D0P+RTMWPtWRAsWlVF41pv01IWoDwHjI9c+Dc2XnZgtQdPRJmcqq2lJ2SYBD\n\tmhifCfdSf+RSXDiho6CEt6Vu2O6lqOD3+bNimrSj6beJb4vIMu9pVwzGTERa/Y1Y7ZDe\n\t6qydEjVEB9WbDpCV3G04/2gtqsbpz38FLoJl8O+F1fJ58ela4amuZAc14woBtWcLQhwQ\n\tEByA=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"iNAURXTe\"; 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;\n\tbh=042k/Ccvy6f++LyVQsTy+rvfhhqgfBcao80e8fGPRNY=;\n\tb=hcIv+bNufWmt0wDKjD2R7v8gJl5fLR/ZywyxA6t4K/aoSHGCXa0069rofSPT+dvTqF\n\tdqmL7tQqYnQiOym9dNt/D8DJX93Ge9Mlw8D7UXElbdbBdLB6u3NzIhCsrYvTx4LAcO1o\n\tmVWv0pbPoYCPoY5xbStdRDR0hjv/EH+R4e6J/9SXqEjRJtuLu6zD6e8omv1IxEMWB2zB\n\twcB37CqICL3de2sHthFShq3lzmIQPhCoMb48/rSDxzl7xfCy8DuKLufGUv/D3X04fUxW\n\ty1d7F/9Eao8UipwC/gBRVbkks7WehXt+05/Kt0x1Ygi/DKT5ne6ylPGkHOKp/wKqlrC5\n\tzabQ==","X-Gm-Message-State":"ACgBeo2AzTfQJlhDg6pMDt6og9nKb/IOG5/gD27+sWVWc6QRmAMjx4HW\n\tMJQfGmWAkA6rceDSwCLT1ZSn0ML1Ck7gfz2QWhRwATIox2Q=","X-Google-Smtp-Source":"AA6agR785JaedJKaBVMUUynyS2GpApWYatQ1iuQbFdovZeMonchvfkOVI6bIhORV+9LRzIDTScmmFlyQe935IzECDJg=","X-Received":"by 2002:a63:83c1:0:b0:41d:9e78:ff44 with SMTP id\n\th184-20020a6383c1000000b0041d9e78ff44mr6651000pge.22.1660078527178;\n\tTue, 09 Aug 2022 13:55:27 -0700 (PDT)","MIME-Version":"1.0","References":"<20220809205042.344923-1-utkarsh02t@gmail.com>\n\t<20220809205042.344923-6-utkarsh02t@gmail.com>","In-Reply-To":"<20220809205042.344923-6-utkarsh02t@gmail.com>","Date":"Wed, 10 Aug 2022 02:25:15 +0530","Message-ID":"<CAHbe+E0YJ6uiU3EfXXg52S=iA4ymcdns2_-1_OeVxyi5V3ULGw@mail.gmail.com>","To":"libcamera-devel@lists.libcamera.org","Content-Type":"multipart/alternative; boundary=\"000000000000e96a7905e5d52651\"","Subject":"Re: [libcamera-devel] [PATCH v7 5/8] qcam: Queue requests only\n\tthrough MainWindow::queueRequest()","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":"Utkarsh Tiwari via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Utkarsh Tiwari <utkarsh02t@gmail.com>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":24492,"web_url":"https://patchwork.libcamera.org/comment/24492/","msgid":"<166008156054.2423137.2857856564377373140@Monstersaurus>","date":"2022-08-09T21:46:00","subject":"Re: [libcamera-devel] [PATCH v7 5/8] qcam: Queue requests only\n\tthrough MainWindow::queueRequest()","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Utkarsh Tiwari (2022-08-09 21:55:15)\n> On Wed, Aug 10, 2022 at 2:23 AM Utkarsh Tiwari <utkarsh02t@gmail.com> wrote:\n> \n> > Currently to request a frame, we operate the camera directly.\n> > This approach is also scattered in two places,\n> > MainWindow::startCapture() and MainWindow::queueRequest().\n> > This makes it difficult to account for requests.\n> >\n> > Centralize all the queuing to a single function queueRequest()\n> >\n> > Rename the current queueRequest() to renderComplete().\n> > This makes more sense as this slot is triggered when\n> > the render is complete and we want to queue another\n> > request.\n> >\n> > Signed-off-by: Utkarsh Tiwari <utkarsh02t at gmail.com>\n> > Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>\n> > Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>\n> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> >\n> Fix mail id here:\n> Reviewed-by: Kieran Bingham <kieran.bingham@ ideasonboard.com>\n\nStill not quite ;-) but it's ok, it can be handled when applying.\n\n\n> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>\n> \n> > ---\n> >  src/qcam/main_window.cpp | 14 +++++++++-----\n> >  src/qcam/main_window.h   |  3 ++-\n> >  2 files changed, 11 insertions(+), 6 deletions(-)\n> >\n> > diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp\n> > index 15b150ec..3feabcff 100644\n> > --- a/src/qcam/main_window.cpp\n> > +++ b/src/qcam/main_window.cpp\n> > @@ -120,14 +120,14 @@ MainWindow::MainWindow(CameraManager *cm, const\n> > OptionsParser::Options &options)\n> >         if (renderType == \"qt\") {\n> >                 ViewFinderQt *viewfinder = new ViewFinderQt(this);\n> >                 connect(viewfinder, &ViewFinderQt::renderComplete,\n> > -                       this, &MainWindow::queueRequest);\n> > +                       this, &MainWindow::renderComplete);\n> >                 viewfinder_ = viewfinder;\n> >                 setCentralWidget(viewfinder);\n> >  #ifndef QT_NO_OPENGL\n> >         } else if (renderType == \"gles\") {\n> >                 ViewFinderGL *viewfinder = new ViewFinderGL(this);\n> >                 connect(viewfinder, &ViewFinderGL::renderComplete,\n> > -                       this, &MainWindow::queueRequest);\n> > +                       this, &MainWindow::renderComplete);\n> >                 viewfinder_ = viewfinder;\n> >                 setCentralWidget(viewfinder);\n> >  #endif\n> > @@ -513,7 +513,7 @@ int MainWindow::startCapture()\n> >\n> >         /* Queue all requests. */\n> >         for (std::unique_ptr<Request> &request : requests_) {\n> > -               ret = camera_->queueRequest(request.get());\n> > +               ret = queueRequest(request.get());\n> >                 if (ret < 0) {\n> >                         qWarning() << \"Can't queue request\";\n> >                         goto error_disconnect;\n> > @@ -745,7 +745,7 @@ void MainWindow::processViewfinder(FrameBuffer *buffer)\n> >         viewfinder_->render(buffer, mappedBuffers_[buffer].get());\n> >  }\n> >\n> > -void MainWindow::queueRequest(FrameBuffer *buffer)\n> > +void MainWindow::renderComplete(FrameBuffer *buffer)\n> >  {\n> >         Request *request;\n> >         {\n> > @@ -774,6 +774,10 @@ void MainWindow::queueRequest(FrameBuffer *buffer)\n> >                         qWarning() << \"No free buffer available for RAW\n> > capture\";\n> >                 }\n> >         }\n> > +       queueRequest(request);\n> > +}\n> >\n> > -       camera_->queueRequest(request);\n> > +int MainWindow::queueRequest(Request *request)\n> > +{\n> > +       return camera_->queueRequest(request);\n> >  }\n> > diff --git a/src/qcam/main_window.h b/src/qcam/main_window.h\n> > index bbdbb21c..bd6f0172 100644\n> > --- a/src/qcam/main_window.h\n> > +++ b/src/qcam/main_window.h\n> > @@ -70,7 +70,7 @@ private Q_SLOTS:\n> >         void processRaw(libcamera::FrameBuffer *buffer,\n> >                         const libcamera::ControlList &metadata);\n> >\n> > -       void queueRequest(libcamera::FrameBuffer *buffer);\n> > +       void renderComplete(libcamera::FrameBuffer *buffer);\n> >\n> >  private:\n> >         int createToolbars();\n> > @@ -84,6 +84,7 @@ private:\n> >         void addCamera(std::shared_ptr<libcamera::Camera> camera);\n> >         void removeCamera(std::shared_ptr<libcamera::Camera> camera);\n> >\n> > +       int queueRequest(libcamera::Request *request);\n> >         void requestComplete(libcamera::Request *request);\n> >         void processCapture();\n> >         void processHotplug(HotplugEvent *e);\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 69C09C3272\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  9 Aug 2022 21:46:04 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 235BF6332B;\n\tTue,  9 Aug 2022 23:46:04 +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 1E43F61FAA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  9 Aug 2022 23:46:03 +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 C6F0E481;\n\tTue,  9 Aug 2022 23:46:02 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1660081564;\n\tbh=P2hAhJlUXtUlWYkzNIkdNg6mPh7GSQaPvbJ4arzKSNw=;\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=P2O+7o0W6I84zKlUxjIG79A+7DA3ZufYHxs4QLZMp/fWXWIxE+P0AHOoQ93Buig+8\n\tIa5DL0yQtV+bAbQTDOgNAXD5mmRSqdiGUDJ5PxM8njXvxuEqAfkEbcALAclL9Bc944\n\tQpNoT2lXMeO73gcch4Ib2xvNeDwwqlc6MSSF0l/apGybn8AXvy3uC2ivKg8/lcRmPd\n\tFkBDK7Gr1IxDmiYeOtXG2LXAFXy8Xg3tH8Hh3Z8sVnw3N6X0caSqm1bWIdf+sYznxZ\n\t2G2CrZO92Fn/qgBVY59psJW8/5LvpGevaP8lFT6m/JIZgd15UaEBVC6bQYOvlItaGL\n\t/0PwmHZck+x0w==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1660081562;\n\tbh=P2hAhJlUXtUlWYkzNIkdNg6mPh7GSQaPvbJ4arzKSNw=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=ar+NE/dQu+zSVSMSL6+ULiCnlY5rEfnxw3kgEO4EGho3Ldshf5TzYhrq49ERo1/mW\n\txi6fsivQEpGaKyTcw+buEYozkkofmiYsucWbv2Iaw67KvLdHtv1JfkKtj5sjwoz2SN\n\t8uj4c7LE07ZiofW85KaSIRqSFvK1QKbnpQ3hVmKk="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"ar+NE/dQ\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<CAHbe+E0YJ6uiU3EfXXg52S=iA4ymcdns2_-1_OeVxyi5V3ULGw@mail.gmail.com>","References":"<20220809205042.344923-1-utkarsh02t@gmail.com>\n\t<20220809205042.344923-6-utkarsh02t@gmail.com>\n\t<CAHbe+E0YJ6uiU3EfXXg52S=iA4ymcdns2_-1_OeVxyi5V3ULGw@mail.gmail.com>","To":"Utkarsh Tiwari <utkarsh02t@gmail.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Tue, 09 Aug 2022 22:46:00 +0100","Message-ID":"<166008156054.2423137.2857856564377373140@Monstersaurus>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH v7 5/8] qcam: Queue requests only\n\tthrough MainWindow::queueRequest()","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>"}}]