[{"id":13248,"web_url":"https://patchwork.libcamera.org/comment/13248/","msgid":"<CAEmqJPocCTxUD87F+=07P=1umGLBVVtDkYRDebR_LPa9rTVzMg@mail.gmail.com>","date":"2020-10-19T10:02:48","subject":"Re: [libcamera-devel] [PATCH 0/5] RFQ: Pass controls on\n\tcamera:start()","submitter":{"id":34,"url":"https://patchwork.libcamera.org/api/people/34/","name":"Naushir Patuck","email":"naush@raspberrypi.com"},"content":"Hi all,\n\nGentle ping to get some comments on this one.  If you prefer, I could\nsubmit as an official patch to review?\n\nThanks,\nNaush\n\nOn Fri, 2 Oct 2020 at 10:33, Naushir Patuck <naush@raspberrypi.com> wrote:\n>\n> Hi all,\n>\n> I would like to resurrect the topic of passing controls to the pipeline handlers and ipas on startup.  We talked about this some time back, and unfortunately it drifted off my radar.\n>\n> Attached is some work I've done to resurrect this discussion.  I have added the ability for an application to pass in controls through the camera::start() public API. This is similar to how controls are passed in though Requests, the only difference being that if we do pass it in the latter, we could incur multiple frames of delay before they are applied.  This would be unsuitable for a lot of users I feel. This change gives us a huge jump in getting to feature parity with the existing Raspberry Pi camera stack.\n>\n> There are a couple of things to address in these changes:\n> - I have modified the camera::start() public API with the following signature: int start(ControlList *controls = nullptr).  I know the convention is to use a reference here, but I wanted to keep API backward compatible, and a pointer can have a default value nullptr.  I could also overload start and keep the old and new signature perhaps, but not sure on the policy for public methods having multiple signatures.\n>\n> - the IPA context wrapper code needs the ability to serialise IPAOperationData structures.  This is needed for this code, as well as for configure() as part of an earlier set of changes.\n>\n> Please note, this patch set is for discussion to start with and not ready to submit as-is.  Happy to hear your thoughts.\n>\n> Regards,\n> Naush\n>\n> Naushir Patuck (5):\n>   pipeline: raspberrypi: Sensor flips should be applied unconditionally\n>   libcamera: pipeline: Pass libcamera controls into\n>     pipeline_handler::start()\n>   libcamera: ipa: Pass a set of controls and return results from\n>     ipa::start()\n>   pipeline: ipa: raspberrypi: Pass controls to IPA on start\n>   DNI: qcam: Simple test to pass controls on camera::start()\n>\n>  Documentation/guides/pipeline-handler.rst     |  4 +-\n>  include/libcamera/camera.h                    |  2 +-\n>  .../libcamera/internal/ipa_context_wrapper.h  |  3 +-\n>  include/libcamera/internal/pipeline_handler.h |  2 +-\n>  include/libcamera/ipa/ipa_interface.h         |  3 +-\n>  include/libcamera/ipa/raspberrypi.h           |  1 +\n>  src/ipa/libipa/ipa_interface_wrapper.cpp      |  4 +-\n>  src/ipa/raspberrypi/raspberrypi.cpp           | 50 ++++++++++++-------\n>  src/ipa/rkisp1/rkisp1.cpp                     |  3 +-\n>  src/ipa/vimc/vimc.cpp                         |  6 ++-\n>  src/libcamera/camera.cpp                      | 11 ++--\n>  src/libcamera/ipa_context_wrapper.cpp         |  6 ++-\n>  src/libcamera/ipa_interface.cpp               |  7 +++\n>  src/libcamera/pipeline/ipu3/ipu3.cpp          |  4 +-\n>  .../pipeline/raspberrypi/raspberrypi.cpp      | 46 ++++++++++-------\n>  src/libcamera/pipeline/rkisp1/rkisp1.cpp      |  9 ++--\n>  src/libcamera/pipeline/simple/simple.cpp      |  4 +-\n>  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp  |  4 +-\n>  src/libcamera/pipeline/vimc/vimc.cpp          |  7 +--\n>  src/libcamera/pipeline_handler.cpp            |  1 +\n>  src/libcamera/proxy/ipa_proxy_linux.cpp       |  3 +-\n>  src/libcamera/proxy/ipa_proxy_thread.cpp      | 13 +++--\n>  src/qcam/main_window.cpp                      |  7 ++-\n>  test/ipa/ipa_interface_test.cpp               |  3 +-\n>  test/ipa/ipa_wrappers_test.cpp                |  5 +-\n>  25 files changed, 134 insertions(+), 74 deletions(-)\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 3183DBDB1F\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 19 Oct 2020 10:03:07 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B6A1E6124B;\n\tMon, 19 Oct 2020 12:03:06 +0200 (CEST)","from mail-lf1-x141.google.com (mail-lf1-x141.google.com\n\t[IPv6:2a00:1450:4864:20::141])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B76BD605BF\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 19 Oct 2020 12:03:05 +0200 (CEST)","by mail-lf1-x141.google.com with SMTP id c141so13446885lfg.5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 19 Oct 2020 03:03:05 -0700 (PDT)"],"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=\"rAtHw6gO\"; 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:content-transfer-encoding;\n\tbh=W1TgQM4DtgMwVUgmVuLuTGB5KU8Z4dxS8NTuOBtPkts=;\n\tb=rAtHw6gO5vhJ9sk3f+PUJOadxL4oRfuG9JgvEID6LgpLpxLjUBxHTT73nwRebNx5ct\n\tLWMl1Qy9O/dGAzot0pyMafavqqGcWh7FHWaid88a112VwLRtqN+OPybmqB0TmYxoEcUf\n\ti/n+KaQMYHlvVAk38uqlKgtrDoGhGAtmItvbM5+Qn3YQ9LKdsHusncJe38pFNsDxyRGU\n\ttiFFi9rsRXX9pdGWaaRCvdcQm7AdutfiqzBq8fNKxG2MoFurkvLO2g2i7fPlkyV662R2\n\tbXp68Qvxt7LugBTTe83gK8vsWGC3+R0EX2u3V7KSDuDDjE7NLEi5pIp8/RoLKvUAVTyW\n\tm42A==","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:content-transfer-encoding;\n\tbh=W1TgQM4DtgMwVUgmVuLuTGB5KU8Z4dxS8NTuOBtPkts=;\n\tb=e8hsGoDJiJ+kflroVsZ0O3orAoW7nJaThGICwuqrQaXfTYEbMjDUuGqm5K5SV0g3yj\n\t2pQQfODvoStmwCN29cCKQo5c2/ZXctbyOMCTHbcr+f53iJ6j/fhsQ2ggv/ZH2gSXxitm\n\tQwYTcuKhR7rTJuthuNmOiu2jES9w7wCSu/ENBd0kOnGVCBQooOmERf4NrLAgrIJgUjMv\n\tT1mkxIDviGBicbKR7OXFRyqYgTTKyWMOltDvdU8zul+FQ7c4vpOV/Tj7WdNldalk2ObW\n\t1setpS/9MWY9sAy/fPZEM4RyKWhGYx3GnCaXN2RynM6g47q6AH1fS4SYMEykjuSzDh5B\n\t0uwA==","X-Gm-Message-State":"AOAM532XzYcm6AfHBqbEgw2O7eL/aZpiwv0oVj6YSTC4dkb0GCU75cBD\n\tT+tFpfPhseSgcrX8HtTIIKM6u7LKrDy/gx4NLLHuwoKSXS8=","X-Google-Smtp-Source":"ABdhPJydyfLXB+4ZqmAQCoRBWpRLmFTOzoLlkHxrLyBOQjCk5FXYMmFRxbg6OQJyesf5XfQGXHwjVtL/VJmGkXVR+58=","X-Received":"by 2002:a19:8014:: with SMTP id\n\tb20mr5158707lfd.177.1603101784458; \n\tMon, 19 Oct 2020 03:03:04 -0700 (PDT)","MIME-Version":"1.0","References":"<20201002093309.109180-1-naush@raspberrypi.com>","In-Reply-To":"<20201002093309.109180-1-naush@raspberrypi.com>","From":"Naushir Patuck <naush@raspberrypi.com>","Date":"Mon, 19 Oct 2020 11:02:48 +0100","Message-ID":"<CAEmqJPocCTxUD87F+=07P=1umGLBVVtDkYRDebR_LPa9rTVzMg@mail.gmail.com>","To":"libcamera-devel@lists.libcamera.org","Subject":"Re: [libcamera-devel] [PATCH 0/5] RFQ: Pass controls on\n\tcamera:start()","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>","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":13255,"web_url":"https://patchwork.libcamera.org/comment/13255/","msgid":"<fadbc675-7dcd-8c21-2e7c-0cdf1008db4c@ideasonboard.com>","date":"2020-10-19T14:01:14","subject":"Re: [libcamera-devel] [PATCH 0/5] RFQ: Pass controls on\n\tcamera:start()","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Naush,\n\nOn 19/10/2020 11:02, Naushir Patuck wrote:\n> Hi all,\n> \n> Gentle ping to get some comments on this one.  If you prefer, I could\n> submit as an official patch to review?\n> \n> Thanks,\n> Naush\n> \n> On Fri, 2 Oct 2020 at 10:33, Naushir Patuck <naush@raspberrypi.com> wrote:\n>>\n>> Hi all,\n>>\n>> I would like to resurrect the topic of passing controls to the pipeline handlers and ipas on startup.  We talked about this some time back, and unfortunately it drifted off my radar.\n>>\n>> Attached is some work I've done to resurrect this discussion.  I have added the ability for an application to pass in controls through the camera::start() public API. This is similar to how controls are passed in though Requests, the only difference being that if we do pass it in the latter, we could incur multiple frames of delay before they are applied.  This would be unsuitable for a lot of users I feel. This change gives us a huge jump in getting to feature parity with the existing Raspberry Pi camera stack.\n\nPassing this in through start sounds a bit odd to me.\n\nShould this be part of the camera->configure() phase?\n\nIt's setting the initial configuration right?\n\nAnd we can add a ControlList to the CameraConfiguration without needing\nto update any function signatures.\n\nThen when a pipeline is called with configure(), it needs to apply any\ncontrols in the list at that point. And it looks like the\nCameraConfiguration is already passed through to:\n\nint RPiCameraData::configureIPA(const CameraConfiguration *config)\n\nSo, then there is the information required at that phase too?\n\nI'm wondering if I've missed something obvious that would have prevented\nyou from already using this approach?\n\n--\nKieran\n\n\n>>\n>> There are a couple of things to address in these changes:\n>> - I have modified the camera::start() public API with the following signature: int start(ControlList *controls = nullptr).  I know the convention is to use a reference here, but I wanted to keep API backward compatible, and a pointer can have a default value nullptr.  I could also overload start and keep the old and new signature perhaps, but not sure on the policy for public methods having multiple signatures.\n>>\n>> - the IPA context wrapper code needs the ability to serialise IPAOperationData structures.  This is needed for this code, as well as for configure() as part of an earlier set of changes.>> Please note, this patch set is for discussion to start with and not\nready to submit as-is.  Happy to hear your thoughts.\n>>\n>> Regards,\n>> Naush\n>>\n>> Naushir Patuck (5):\n>>   pipeline: raspberrypi: Sensor flips should be applied unconditionally\n>>   libcamera: pipeline: Pass libcamera controls into\n>>     pipeline_handler::start()\n>>   libcamera: ipa: Pass a set of controls and return results from\n>>     ipa::start()\n>>   pipeline: ipa: raspberrypi: Pass controls to IPA on start\n>>   DNI: qcam: Simple test to pass controls on camera::start()\n>>\n>>  Documentation/guides/pipeline-handler.rst     |  4 +-\n>>  include/libcamera/camera.h                    |  2 +-\n>>  .../libcamera/internal/ipa_context_wrapper.h  |  3 +-\n>>  include/libcamera/internal/pipeline_handler.h |  2 +-\n>>  include/libcamera/ipa/ipa_interface.h         |  3 +-\n>>  include/libcamera/ipa/raspberrypi.h           |  1 +\n>>  src/ipa/libipa/ipa_interface_wrapper.cpp      |  4 +-\n>>  src/ipa/raspberrypi/raspberrypi.cpp           | 50 ++++++++++++-------\n>>  src/ipa/rkisp1/rkisp1.cpp                     |  3 +-\n>>  src/ipa/vimc/vimc.cpp                         |  6 ++-\n>>  src/libcamera/camera.cpp                      | 11 ++--\n>>  src/libcamera/ipa_context_wrapper.cpp         |  6 ++-\n>>  src/libcamera/ipa_interface.cpp               |  7 +++\n>>  src/libcamera/pipeline/ipu3/ipu3.cpp          |  4 +-\n>>  .../pipeline/raspberrypi/raspberrypi.cpp      | 46 ++++++++++-------\n>>  src/libcamera/pipeline/rkisp1/rkisp1.cpp      |  9 ++--\n>>  src/libcamera/pipeline/simple/simple.cpp      |  4 +-\n>>  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp  |  4 +-\n>>  src/libcamera/pipeline/vimc/vimc.cpp          |  7 +--\n>>  src/libcamera/pipeline_handler.cpp            |  1 +\n>>  src/libcamera/proxy/ipa_proxy_linux.cpp       |  3 +-\n>>  src/libcamera/proxy/ipa_proxy_thread.cpp      | 13 +++--\n>>  src/qcam/main_window.cpp                      |  7 ++-\n>>  test/ipa/ipa_interface_test.cpp               |  3 +-\n>>  test/ipa/ipa_wrappers_test.cpp                |  5 +-\n>>  25 files changed, 134 insertions(+), 74 deletions(-)\n>>\n>> --\n>> 2.25.1\n>>\n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel\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 C7796BDB13\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 19 Oct 2020 14:01:19 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 52F39613AD;\n\tMon, 19 Oct 2020 16:01:19 +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 DF5F0607B8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 19 Oct 2020 16:01:17 +0200 (CEST)","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 6A4D691A4;\n\tMon, 19 Oct 2020 16:01:17 +0200 (CEST)"],"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=\"r94s1mMN\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1603116077;\n\tbh=fFkSTa25Qx5Yuv0Q7tNph8qs5TxhgZDDHPfikQufEgM=;\n\th=Reply-To:Subject:To:References:From:Date:In-Reply-To:From;\n\tb=r94s1mMNmGUnGTKgE1McGs7yt8FmOhbfRXSe5Q107PBvfPyFGQA3Tg6lfuMs92E6o\n\tiWvD6TxOCkvjVitP/ntq+Vm0IGel7u4ud6KnPPgdHAgiBY16b0BU3I18SHUM3s9M4R\n\tQxBiQEYhIfZki93Pez6EkEgMrILDnggJAeLTKB60=","To":"Naushir Patuck <naush@raspberrypi.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20201002093309.109180-1-naush@raspberrypi.com>\n\t<CAEmqJPocCTxUD87F+=07P=1umGLBVVtDkYRDebR_LPa9rTVzMg@mail.gmail.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":"<fadbc675-7dcd-8c21-2e7c-0cdf1008db4c@ideasonboard.com>","Date":"Mon, 19 Oct 2020 15:01:14 +0100","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":"<CAEmqJPocCTxUD87F+=07P=1umGLBVVtDkYRDebR_LPa9rTVzMg@mail.gmail.com>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH 0/5] RFQ: Pass controls on\n\tcamera:start()","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":13256,"web_url":"https://patchwork.libcamera.org/comment/13256/","msgid":"<CAEmqJPqTyTw3YMBKHZCVvckeAKwzf7ijXrP2DPjqgMeHoibGWA@mail.gmail.com>","date":"2020-10-19T14:14:48","subject":"Re: [libcamera-devel] [PATCH 0/5] RFQ: Pass controls on\n\tcamera:start()","submitter":{"id":34,"url":"https://patchwork.libcamera.org/api/people/34/","name":"Naushir Patuck","email":"naush@raspberrypi.com"},"content":"Hi Kieran,\n\n\nOn Mon, 19 Oct 2020 at 15:01, Kieran Bingham <\nkieran.bingham@ideasonboard.com> wrote:\n\n> Hi Naush,\n>\n> On 19/10/2020 11:02, Naushir Patuck wrote:\n> > Hi all,\n> >\n> > Gentle ping to get some comments on this one.  If you prefer, I could\n> > submit as an official patch to review?\n> >\n> > Thanks,\n> > Naush\n> >\n> > On Fri, 2 Oct 2020 at 10:33, Naushir Patuck <naush@raspberrypi.com>\n> wrote:\n> >>\n> >> Hi all,\n> >>\n> >> I would like to resurrect the topic of passing controls to the pipeline\n> handlers and ipas on startup.  We talked about this some time back, and\n> unfortunately it drifted off my radar.\n> >>\n> >> Attached is some work I've done to resurrect this discussion.  I have\n> added the ability for an application to pass in controls through the\n> camera::start() public API. This is similar to how controls are passed in\n> though Requests, the only difference being that if we do pass it in the\n> latter, we could incur multiple frames of delay before they are applied.\n> This would be unsuitable for a lot of users I feel. This change gives us a\n> huge jump in getting to feature parity with the existing Raspberry Pi\n> camera stack.\n>\n> Passing this in through start sounds a bit odd to me.\n>\n> Should this be part of the camera->configure() phase?\n>\n> It's setting the initial configuration right?\n>\n> And we can add a ControlList to the CameraConfiguration without needing\n> to update any function signatures.\n>\n> Then when a pipeline is called with configure(), it needs to apply any\n> controls in the list at that point. And it looks like the\n> CameraConfiguration is already passed through to:\n>\n> int RPiCameraData::configureIPA(const CameraConfiguration *config)\n>\n> So, then there is the information required at that phase too?\n>\n> I'm wondering if I've missed something obvious that would have prevented\n> you from already using this approach?\n>\n\nIndeed, this was one of the approaches we discussed some time back.\nHowever, as you mentioned, CameraConfiguration gets set in the\ncamera->configure() phase, and this may not necessarily be what we want.\nAn application may want to set startup parameters without doing a\ncamera->configure() in a run.  With this change, we would do a sequence\nlike start(), stop() start(new config parameters).  If we were to do\nstart(), stop() configure(new config parameters), start(), it may incur\nadditional overheads in calling configure() only to setup some new startup\nparams, where the configure() might be going to the kernel and calling the\nsensors to set itself up again, even though it is not needed.  Hope that\nmakes sense?\n\nRegards,\nNaush\n\n\n\n>\n> --\n> Kieran\n>\n>\n> >>\n> >> There are a couple of things to address in these changes:\n> >> - I have modified the camera::start() public API with the following\n> signature: int start(ControlList *controls = nullptr).  I know the\n> convention is to use a reference here, but I wanted to keep API backward\n> compatible, and a pointer can have a default value nullptr.  I could also\n> overload start and keep the old and new signature perhaps, but not sure on\n> the policy for public methods having multiple signatures.\n> >>\n> >> - the IPA context wrapper code needs the ability to serialise\n> IPAOperationData structures.  This is needed for this code, as well as for\n> configure() as part of an earlier set of changes.>> Please note, this patch\n> set is for discussion to start with and not\n> ready to submit as-is.  Happy to hear your thoughts.\n> >>\n> >> Regards,\n> >> Naush\n> >>\n> >> Naushir Patuck (5):\n> >>   pipeline: raspberrypi: Sensor flips should be applied unconditionally\n> >>   libcamera: pipeline: Pass libcamera controls into\n> >>     pipeline_handler::start()\n> >>   libcamera: ipa: Pass a set of controls and return results from\n> >>     ipa::start()\n> >>   pipeline: ipa: raspberrypi: Pass controls to IPA on start\n> >>   DNI: qcam: Simple test to pass controls on camera::start()\n> >>\n> >>  Documentation/guides/pipeline-handler.rst     |  4 +-\n> >>  include/libcamera/camera.h                    |  2 +-\n> >>  .../libcamera/internal/ipa_context_wrapper.h  |  3 +-\n> >>  include/libcamera/internal/pipeline_handler.h |  2 +-\n> >>  include/libcamera/ipa/ipa_interface.h         |  3 +-\n> >>  include/libcamera/ipa/raspberrypi.h           |  1 +\n> >>  src/ipa/libipa/ipa_interface_wrapper.cpp      |  4 +-\n> >>  src/ipa/raspberrypi/raspberrypi.cpp           | 50 ++++++++++++-------\n> >>  src/ipa/rkisp1/rkisp1.cpp                     |  3 +-\n> >>  src/ipa/vimc/vimc.cpp                         |  6 ++-\n> >>  src/libcamera/camera.cpp                      | 11 ++--\n> >>  src/libcamera/ipa_context_wrapper.cpp         |  6 ++-\n> >>  src/libcamera/ipa_interface.cpp               |  7 +++\n> >>  src/libcamera/pipeline/ipu3/ipu3.cpp          |  4 +-\n> >>  .../pipeline/raspberrypi/raspberrypi.cpp      | 46 ++++++++++-------\n> >>  src/libcamera/pipeline/rkisp1/rkisp1.cpp      |  9 ++--\n> >>  src/libcamera/pipeline/simple/simple.cpp      |  4 +-\n> >>  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp  |  4 +-\n> >>  src/libcamera/pipeline/vimc/vimc.cpp          |  7 +--\n> >>  src/libcamera/pipeline_handler.cpp            |  1 +\n> >>  src/libcamera/proxy/ipa_proxy_linux.cpp       |  3 +-\n> >>  src/libcamera/proxy/ipa_proxy_thread.cpp      | 13 +++--\n> >>  src/qcam/main_window.cpp                      |  7 ++-\n> >>  test/ipa/ipa_interface_test.cpp               |  3 +-\n> >>  test/ipa/ipa_wrappers_test.cpp                |  5 +-\n> >>  25 files changed, 134 insertions(+), 74 deletions(-)\n> >>\n> >> --\n> >> 2.25.1\n> >>\n> > _______________________________________________\n> > libcamera-devel mailing list\n> > libcamera-devel@lists.libcamera.org\n> > https://lists.libcamera.org/listinfo/libcamera-devel\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 89364BDB1F\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 19 Oct 2020 14:15:09 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id EC5BE61373;\n\tMon, 19 Oct 2020 16:15:08 +0200 (CEST)","from mail-lj1-x22c.google.com (mail-lj1-x22c.google.com\n\t[IPv6:2a00:1450:4864:20::22c])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 865D5607B8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 19 Oct 2020 16:15:06 +0200 (CEST)","by mail-lj1-x22c.google.com with SMTP id a4so147384lji.12\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 19 Oct 2020 07:15:06 -0700 (PDT)"],"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=\"Y5796HoI\"; 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=5QUkzabeGZjaxyvzu4+ODBa7ZkyNtSAc6uwXUad2few=;\n\tb=Y5796HoI9yoDHlR3JQs55MVs35MxM3VSr3GfwOeqo+fn4ViAR3yARhmRoRpfCDiFYK\n\tMhGbRRLciwtKjPwVSMnOyopPO0NWvsI4IyTT0tFbexhJcGz43kRhHIK+HXqXm3fGfVOD\n\tIn74vw/uh/CXJi8+F2Lxk7UGuHCgnCf6mwOojFQHp0F7G2LwSY3g6USPp7OcxJSyrsF1\n\tNMJ955TcGeL87FaVMoBcyy+HEGmLl8TEDtgnOGl/gwxLYes8AGp1anvJyr8QwM4pXTPc\n\tr/NeacJQVRbh4PNvkiL/SUijN6OcV0/wwjjpIzyh8wEzTTJC/UQs5uvqOjuf8qNJ4P76\n\t0EHQ==","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=5QUkzabeGZjaxyvzu4+ODBa7ZkyNtSAc6uwXUad2few=;\n\tb=bB1uCmgVRI7sLOWbMwxWGJqesG1LdD2WKwy7EelpMlr4izGx+7y8IagbY7oOL3zoxn\n\tXQ9gtHivqmXmaXwBxCJX64k94JIO5J8pWTTU3iHYwzONQbrWbfGskbRjyXTOLivNgAYp\n\tNFX+chEiaexgwrBZnzdKcmvjZl5EvXPlJ0xLzsHHHIDui3wEIUcTxXCSpUbffyPtE7gJ\n\tx2w0f/us9tf3xQ9OS3SQYwA8PWzcaTWHLb5DhMw4kKooFlQnUkeG+3FELcFDChuyhSit\n\tSFd5JU3yBkee6GpnpNzUWUsTNX1v+P2L3yUMqT+ceNgLyRns7+QWoqLm5D+GaY7Fr8Q8\n\tteGQ==","X-Gm-Message-State":"AOAM5323Jh720lW/Lp8CU0QzDo+nhAj9mceS4cQhPHZPaOxa45IunVLv\n\ttN0jD2tDdL73uBQL4hGlMhkaPR6mz7BpbgAe2ct76PDmKSUx4Q==","X-Google-Smtp-Source":"ABdhPJxraB970Chciqn89qNBtL/QPJe2SsIIpRXBuwRRHuzjJeECrPgY2dy/tfiTELlRyy6NJ375OheWwuIaPQ5NvfU=","X-Received":"by 2002:a2e:9a44:: with SMTP id k4mr87331ljj.1.1603116905933;\n\tMon, 19 Oct 2020 07:15:05 -0700 (PDT)","MIME-Version":"1.0","References":"<20201002093309.109180-1-naush@raspberrypi.com>\n\t<CAEmqJPocCTxUD87F+=07P=1umGLBVVtDkYRDebR_LPa9rTVzMg@mail.gmail.com>\n\t<fadbc675-7dcd-8c21-2e7c-0cdf1008db4c@ideasonboard.com>","In-Reply-To":"<fadbc675-7dcd-8c21-2e7c-0cdf1008db4c@ideasonboard.com>","From":"Naushir Patuck <naush@raspberrypi.com>","Date":"Mon, 19 Oct 2020 15:14:48 +0100","Message-ID":"<CAEmqJPqTyTw3YMBKHZCVvckeAKwzf7ijXrP2DPjqgMeHoibGWA@mail.gmail.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 0/5] RFQ: Pass controls on\n\tcamera:start()","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@lists.libcamera.org","Content-Type":"multipart/mixed;\n\tboundary=\"===============3504747519945779882==\"","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]