[{"id":15222,"web_url":"https://patchwork.libcamera.org/comment/15222/","msgid":"<YC5hkFd0RUxV/Wlv@oden.dyn.berto.se>","date":"2021-02-18T12:46:08","subject":"Re: [libcamera-devel] [PATCH] libcamera: camera: Constify controls\n\targument to start()","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Laurent,\n\nThanks for your patch.\n\nOn 2021-02-18 08:53:29 +0200, Laurent Pinchart wrote:\n> The ControlList passed to the Camera::start() function isn't modified.\n> Make it const.\n\nTo align with convection elsewhere should we not make it a const \nreference ?\n\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  include/libcamera/camera.h                         | 2 +-\n>  include/libcamera/internal/pipeline_handler.h      | 2 +-\n>  src/libcamera/camera.cpp                           | 2 +-\n>  src/libcamera/pipeline/ipu3/ipu3.cpp               | 4 ++--\n>  src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 4 ++--\n>  src/libcamera/pipeline/rkisp1/rkisp1.cpp           | 4 ++--\n>  src/libcamera/pipeline/simple/simple.cpp           | 4 ++--\n>  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp       | 4 ++--\n>  src/libcamera/pipeline/vimc/vimc.cpp               | 4 ++--\n>  9 files changed, 15 insertions(+), 15 deletions(-)\n> \n> diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\n> index bd81fb54502e..326b14d0ca01 100644\n> --- a/include/libcamera/camera.h\n> +++ b/include/libcamera/camera.h\n> @@ -100,7 +100,7 @@ public:\n>  \tstd::unique_ptr<Request> createRequest(uint64_t cookie = 0);\n>  \tint queueRequest(Request *request);\n>  \n> -\tint start(ControlList *controls = nullptr);\n> +\tint start(const ControlList *controls = nullptr);\n>  \tint stop();\n>  \n>  private:\n> diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h\n> index d455d3c9dc4f..6aca0b46f43d 100644\n> --- a/include/libcamera/internal/pipeline_handler.h\n> +++ b/include/libcamera/internal/pipeline_handler.h\n> @@ -76,7 +76,7 @@ public:\n>  \tvirtual int exportFrameBuffers(Camera *camera, Stream *stream,\n>  \t\t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) = 0;\n>  \n> -\tvirtual int start(Camera *camera, ControlList *controls) = 0;\n> +\tvirtual int start(Camera *camera, const ControlList *controls) = 0;\n>  \tvirtual void stop(Camera *camera) = 0;\n>  \n>  \tint queueRequest(Request *request);\n> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> index c9c79b91e3ae..84edbb8f494d 100644\n> --- a/src/libcamera/camera.cpp\n> +++ b/src/libcamera/camera.cpp\n> @@ -1018,7 +1018,7 @@ int Camera::queueRequest(Request *request)\n>   * \\retval -ENODEV The camera has been disconnected from the system\n>   * \\retval -EACCES The camera is not in a state where it can be started\n>   */\n> -int Camera::start(ControlList *controls)\n> +int Camera::start(const ControlList *controls)\n>  {\n>  \tPrivate *const d = LIBCAMERA_D_PTR();\n>  \n> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> index 3e6b88af4188..76fc7efd408b 100644\n> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> @@ -126,7 +126,7 @@ public:\n>  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n>  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n>  \n> -\tint start(Camera *camera, ControlList *controls) override;\n> +\tint start(Camera *camera, const ControlList *controls) override;\n>  \tvoid stop(Camera *camera) override;\n>  \n>  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> @@ -646,7 +646,7 @@ int PipelineHandlerIPU3::freeBuffers(Camera *camera)\n>  \treturn 0;\n>  }\n>  \n> -int PipelineHandlerIPU3::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> +int PipelineHandlerIPU3::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n>  {\n>  \tstd::map<uint32_t, ControlInfoMap> entityControls;\n>  \tIPU3CameraData *data = cameraData(camera);\n> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> index 15aa600ed581..46361bf3fa51 100644\n> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> @@ -252,7 +252,7 @@ public:\n>  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n>  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n>  \n> -\tint start(Camera *camera, ControlList *controls) override;\n> +\tint start(Camera *camera, const ControlList *controls) override;\n>  \tvoid stop(Camera *camera) override;\n>  \n>  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> @@ -760,7 +760,7 @@ int PipelineHandlerRPi::exportFrameBuffers([[maybe_unused]] Camera *camera, Stre\n>  \treturn ret;\n>  }\n>  \n> -int PipelineHandlerRPi::start(Camera *camera, ControlList *controls)\n> +int PipelineHandlerRPi::start(Camera *camera, const ControlList *controls)\n>  {\n>  \tRPiCameraData *data = cameraData(camera);\n>  \tint ret;\n> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> index a794501a9c8d..538c01392293 100644\n> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> @@ -142,7 +142,7 @@ public:\n>  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n>  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n>  \n> -\tint start(Camera *camera, ControlList *controls) override;\n> +\tint start(Camera *camera, const ControlList *controls) override;\n>  \tvoid stop(Camera *camera) override;\n>  \n>  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> @@ -745,7 +745,7 @@ int PipelineHandlerRkISP1::freeBuffers(Camera *camera)\n>  \treturn 0;\n>  }\n>  \n> -int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> +int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n>  {\n>  \tRkISP1CameraData *data = cameraData(camera);\n>  \tint ret;\n> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> index 23320d2687e1..35cd34ddbf54 100644\n> --- a/src/libcamera/pipeline/simple/simple.cpp\n> +++ b/src/libcamera/pipeline/simple/simple.cpp\n> @@ -125,7 +125,7 @@ public:\n>  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n>  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n>  \n> -\tint start(Camera *camera, ControlList *controls) override;\n> +\tint start(Camera *camera, const ControlList *controls) override;\n>  \tvoid stop(Camera *camera) override;\n>  \n>  \tbool match(DeviceEnumerator *enumerator) override;\n> @@ -641,7 +641,7 @@ int SimplePipelineHandler::exportFrameBuffers(Camera *camera, Stream *stream,\n>  \t\treturn data->video_->exportBuffers(count, buffers);\n>  }\n>  \n> -int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> +int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n>  {\n>  \tSimpleCameraData *data = cameraData(camera);\n>  \tV4L2VideoDevice *video = data->video_;\n> diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> index 08a594175091..031f96e28449 100644\n> --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> @@ -72,7 +72,7 @@ public:\n>  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n>  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n>  \n> -\tint start(Camera *camera, ControlList *controls) override;\n> +\tint start(Camera *camera, const ControlList *controls) override;\n>  \tvoid stop(Camera *camera) override;\n>  \n>  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> @@ -232,7 +232,7 @@ int PipelineHandlerUVC::exportFrameBuffers(Camera *camera, Stream *stream,\n>  \treturn data->video_->exportBuffers(count, buffers);\n>  }\n>  \n> -int PipelineHandlerUVC::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> +int PipelineHandlerUVC::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n>  {\n>  \tUVCCameraData *data = cameraData(camera);\n>  \tunsigned int count = data->stream_.configuration().bufferCount;\n> diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp\n> index 78b47916b4db..57c65b021c46 100644\n> --- a/src/libcamera/pipeline/vimc/vimc.cpp\n> +++ b/src/libcamera/pipeline/vimc/vimc.cpp\n> @@ -86,7 +86,7 @@ public:\n>  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n>  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n>  \n> -\tint start(Camera *camera, ControlList *controls) override;\n> +\tint start(Camera *camera, const ControlList *controls) override;\n>  \tvoid stop(Camera *camera) override;\n>  \n>  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> @@ -307,7 +307,7 @@ int PipelineHandlerVimc::exportFrameBuffers(Camera *camera, Stream *stream,\n>  \treturn data->video_->exportBuffers(count, buffers);\n>  }\n>  \n> -int PipelineHandlerVimc::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> +int PipelineHandlerVimc::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n>  {\n>  \tVimcCameraData *data = cameraData(camera);\n>  \tunsigned int count = data->stream_.configuration().bufferCount;\n> -- \n> Regards,\n> \n> Laurent Pinchart\n> \n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","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 4EF8BBD1F1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 18 Feb 2021 12:46:12 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D419C6836F;\n\tThu, 18 Feb 2021 13:46:11 +0100 (CET)","from mail-lj1-x22d.google.com (mail-lj1-x22d.google.com\n\t[IPv6:2a00:1450:4864:20::22d])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 797FE68110\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 18 Feb 2021 13:46:10 +0100 (CET)","by mail-lj1-x22d.google.com with SMTP id c8so3996391ljd.12\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 18 Feb 2021 04:46:10 -0800 (PST)","from localhost (h-209-203.A463.priv.bahnhof.se. [155.4.209.203])\n\tby smtp.gmail.com with ESMTPSA id\n\tl5sm595305lfc.37.2021.02.18.04.46.08\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 18 Feb 2021 04:46:09 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=ragnatech-se.20150623.gappssmtp.com\n\theader.i=@ragnatech-se.20150623.gappssmtp.com\n\theader.b=\"2SXscsOf\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to;\n\tbh=eyCScD9chYu3aLIFONaepjQeth7lyI5JLyc0T0su+5o=;\n\tb=2SXscsOff53c0YL4COV9Hb81A1kKvt6QAsAC1X0HBMn0cLFGD+ObQJyQEIVgtPoS1M\n\toZlq3L3rVsvIu6U4Vw3pD2gyWwfO/DCDXlNdlfo2ewIUZFK3fu/x+1NOlD2mlHP8tJtP\n\tlv+xTKEuRrtmsCtY7Wa0io0eOSxTNXGvJ3uAnj0qimMovN9jD1CES8EcZ/el8eRABwnB\n\thK9NCuXjvmtb85dR1ijkcWufXproNtvcuacv+pKjvOwPP+okFISwitlHOvikvB25B+gR\n\twGIYOflSeFeBOufUj8XOutEhITbSfRR8RPWSxcr94emmgGa57d19oUKrpdm0rSmnCpFy\n\tzAWA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to;\n\tbh=eyCScD9chYu3aLIFONaepjQeth7lyI5JLyc0T0su+5o=;\n\tb=TYYtyIktZsjY6p+fHavcDMeYGTL69VeUrmepFehQYAWrH+sEzEksuRG5Po3zHfXZwu\n\t/DOZJpL25GDPbZyHPkup55T/EiZCqVvMHZCKkkesN98YUv8frsE87FpF1FggZznT720J\n\tj/EKETg9A0AAPtkb90Qk6UQOYYKSuxyGKXTSF6pTo4SYXF2TAxBQFUjP+O4+mbvXNtGE\n\tdaFQ2daPme3DH9ZjqXrCNjkd17NKevOu/gENbYNFtBlPpg0ghEwzSXZbC8hB/osx420h\n\tlg64yEhVzak6ocJ+s3C6cAVjWD3QDwN29xKxa/PMlsBVZO/Ba/rYiQ3V72npme7S9LOg\n\txRrA==","X-Gm-Message-State":"AOAM5329mONAIU7tr+v7z6O0YbpvWYojhrtZNwHAwKoTnAwTqSIA/MaP\n\tg4O7mN4X+8Hs5SislTxUveVu6qKh5tPmmA==","X-Google-Smtp-Source":"ABdhPJwdxvj2HsTV4EdRDjAfDdkmMrwinW19LIt9j85AEuhV2/Zmt7T3lcs+Q2jtVLX4D3oHJZooGg==","X-Received":"by 2002:a05:651c:2042:: with SMTP id\n\tt2mr2382290ljo.233.1613652369769; \n\tThu, 18 Feb 2021 04:46:09 -0800 (PST)","Date":"Thu, 18 Feb 2021 13:46:08 +0100","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<YC5hkFd0RUxV/Wlv@oden.dyn.berto.se>","References":"<20210218065329.29317-1-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20210218065329.29317-1-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH] libcamera: camera: Constify controls\n\targument to 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":"text/plain; charset=\"iso-8859-1\"","Content-Transfer-Encoding":"quoted-printable","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":15223,"web_url":"https://patchwork.libcamera.org/comment/15223/","msgid":"<20210218133755.pfuckm7zlvnsr6y4@uno.localdomain>","date":"2021-02-18T13:37:55","subject":"Re: [libcamera-devel] [PATCH] libcamera: camera: Constify controls\n\targument to start()","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Niklas, Laurent,\n\nOn Thu, Feb 18, 2021 at 01:46:08PM +0100, Niklas Söderlund wrote:\n> Hi Laurent,\n>\n> Thanks for your patch.\n>\n> On 2021-02-18 08:53:29 +0200, Laurent Pinchart wrote:\n> > The ControlList passed to the Camera::start() function isn't modified.\n> > Make it const.\n>\n> To align with convection elsewhere should we not make it a const\n> reference ?\n>\n\nI think the idea is to be able to call Camera::start() without any\nargument. A cost & would force the caller to pass in an empty control\nlist and would require all users to update as it's a mjor API change.\n\nThe patch looks good\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n> >\n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > ---\n> >  include/libcamera/camera.h                         | 2 +-\n> >  include/libcamera/internal/pipeline_handler.h      | 2 +-\n> >  src/libcamera/camera.cpp                           | 2 +-\n> >  src/libcamera/pipeline/ipu3/ipu3.cpp               | 4 ++--\n> >  src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 4 ++--\n> >  src/libcamera/pipeline/rkisp1/rkisp1.cpp           | 4 ++--\n> >  src/libcamera/pipeline/simple/simple.cpp           | 4 ++--\n> >  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp       | 4 ++--\n> >  src/libcamera/pipeline/vimc/vimc.cpp               | 4 ++--\n> >  9 files changed, 15 insertions(+), 15 deletions(-)\n> >\n> > diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\n> > index bd81fb54502e..326b14d0ca01 100644\n> > --- a/include/libcamera/camera.h\n> > +++ b/include/libcamera/camera.h\n> > @@ -100,7 +100,7 @@ public:\n> >  \tstd::unique_ptr<Request> createRequest(uint64_t cookie = 0);\n> >  \tint queueRequest(Request *request);\n> >\n> > -\tint start(ControlList *controls = nullptr);\n> > +\tint start(const ControlList *controls = nullptr);\n> >  \tint stop();\n> >\n> >  private:\n> > diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h\n> > index d455d3c9dc4f..6aca0b46f43d 100644\n> > --- a/include/libcamera/internal/pipeline_handler.h\n> > +++ b/include/libcamera/internal/pipeline_handler.h\n> > @@ -76,7 +76,7 @@ public:\n> >  \tvirtual int exportFrameBuffers(Camera *camera, Stream *stream,\n> >  \t\t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) = 0;\n> >\n> > -\tvirtual int start(Camera *camera, ControlList *controls) = 0;\n> > +\tvirtual int start(Camera *camera, const ControlList *controls) = 0;\n> >  \tvirtual void stop(Camera *camera) = 0;\n> >\n> >  \tint queueRequest(Request *request);\n> > diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> > index c9c79b91e3ae..84edbb8f494d 100644\n> > --- a/src/libcamera/camera.cpp\n> > +++ b/src/libcamera/camera.cpp\n> > @@ -1018,7 +1018,7 @@ int Camera::queueRequest(Request *request)\n> >   * \\retval -ENODEV The camera has been disconnected from the system\n> >   * \\retval -EACCES The camera is not in a state where it can be started\n> >   */\n> > -int Camera::start(ControlList *controls)\n> > +int Camera::start(const ControlList *controls)\n> >  {\n> >  \tPrivate *const d = LIBCAMERA_D_PTR();\n> >\n> > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > index 3e6b88af4188..76fc7efd408b 100644\n> > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > @@ -126,7 +126,7 @@ public:\n> >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> >\n> > -\tint start(Camera *camera, ControlList *controls) override;\n> > +\tint start(Camera *camera, const ControlList *controls) override;\n> >  \tvoid stop(Camera *camera) override;\n> >\n> >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > @@ -646,7 +646,7 @@ int PipelineHandlerIPU3::freeBuffers(Camera *camera)\n> >  \treturn 0;\n> >  }\n> >\n> > -int PipelineHandlerIPU3::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > +int PipelineHandlerIPU3::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> >  {\n> >  \tstd::map<uint32_t, ControlInfoMap> entityControls;\n> >  \tIPU3CameraData *data = cameraData(camera);\n> > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > index 15aa600ed581..46361bf3fa51 100644\n> > --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > @@ -252,7 +252,7 @@ public:\n> >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> >\n> > -\tint start(Camera *camera, ControlList *controls) override;\n> > +\tint start(Camera *camera, const ControlList *controls) override;\n> >  \tvoid stop(Camera *camera) override;\n> >\n> >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > @@ -760,7 +760,7 @@ int PipelineHandlerRPi::exportFrameBuffers([[maybe_unused]] Camera *camera, Stre\n> >  \treturn ret;\n> >  }\n> >\n> > -int PipelineHandlerRPi::start(Camera *camera, ControlList *controls)\n> > +int PipelineHandlerRPi::start(Camera *camera, const ControlList *controls)\n> >  {\n> >  \tRPiCameraData *data = cameraData(camera);\n> >  \tint ret;\n> > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > index a794501a9c8d..538c01392293 100644\n> > --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > @@ -142,7 +142,7 @@ public:\n> >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> >\n> > -\tint start(Camera *camera, ControlList *controls) override;\n> > +\tint start(Camera *camera, const ControlList *controls) override;\n> >  \tvoid stop(Camera *camera) override;\n> >\n> >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > @@ -745,7 +745,7 @@ int PipelineHandlerRkISP1::freeBuffers(Camera *camera)\n> >  \treturn 0;\n> >  }\n> >\n> > -int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > +int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> >  {\n> >  \tRkISP1CameraData *data = cameraData(camera);\n> >  \tint ret;\n> > diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> > index 23320d2687e1..35cd34ddbf54 100644\n> > --- a/src/libcamera/pipeline/simple/simple.cpp\n> > +++ b/src/libcamera/pipeline/simple/simple.cpp\n> > @@ -125,7 +125,7 @@ public:\n> >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> >\n> > -\tint start(Camera *camera, ControlList *controls) override;\n> > +\tint start(Camera *camera, const ControlList *controls) override;\n> >  \tvoid stop(Camera *camera) override;\n> >\n> >  \tbool match(DeviceEnumerator *enumerator) override;\n> > @@ -641,7 +641,7 @@ int SimplePipelineHandler::exportFrameBuffers(Camera *camera, Stream *stream,\n> >  \t\treturn data->video_->exportBuffers(count, buffers);\n> >  }\n> >\n> > -int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > +int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> >  {\n> >  \tSimpleCameraData *data = cameraData(camera);\n> >  \tV4L2VideoDevice *video = data->video_;\n> > diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> > index 08a594175091..031f96e28449 100644\n> > --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> > +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> > @@ -72,7 +72,7 @@ public:\n> >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> >\n> > -\tint start(Camera *camera, ControlList *controls) override;\n> > +\tint start(Camera *camera, const ControlList *controls) override;\n> >  \tvoid stop(Camera *camera) override;\n> >\n> >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > @@ -232,7 +232,7 @@ int PipelineHandlerUVC::exportFrameBuffers(Camera *camera, Stream *stream,\n> >  \treturn data->video_->exportBuffers(count, buffers);\n> >  }\n> >\n> > -int PipelineHandlerUVC::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > +int PipelineHandlerUVC::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> >  {\n> >  \tUVCCameraData *data = cameraData(camera);\n> >  \tunsigned int count = data->stream_.configuration().bufferCount;\n> > diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp\n> > index 78b47916b4db..57c65b021c46 100644\n> > --- a/src/libcamera/pipeline/vimc/vimc.cpp\n> > +++ b/src/libcamera/pipeline/vimc/vimc.cpp\n> > @@ -86,7 +86,7 @@ public:\n> >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> >\n> > -\tint start(Camera *camera, ControlList *controls) override;\n> > +\tint start(Camera *camera, const ControlList *controls) override;\n> >  \tvoid stop(Camera *camera) override;\n> >\n> >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > @@ -307,7 +307,7 @@ int PipelineHandlerVimc::exportFrameBuffers(Camera *camera, Stream *stream,\n> >  \treturn data->video_->exportBuffers(count, buffers);\n> >  }\n> >\n> > -int PipelineHandlerVimc::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > +int PipelineHandlerVimc::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> >  {\n> >  \tVimcCameraData *data = cameraData(camera);\n> >  \tunsigned int count = data->stream_.configuration().bufferCount;\n> > --\n> > Regards,\n> >\n> > Laurent Pinchart\n> >\n> > _______________________________________________\n> > libcamera-devel mailing list\n> > libcamera-devel@lists.libcamera.org\n> > https://lists.libcamera.org/listinfo/libcamera-devel\n>\n> --\n> Regards,\n> Niklas Söderlund\n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","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 DE6A4BD1F1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 18 Feb 2021 13:37:31 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B961D689B8;\n\tThu, 18 Feb 2021 14:37:31 +0100 (CET)","from relay12.mail.gandi.net (relay12.mail.gandi.net\n\t[217.70.178.232])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 641C86835F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 18 Feb 2021 14:37:30 +0100 (CET)","from uno.localdomain (93-61-96-190.ip145.fastwebnet.it\n\t[93.61.96.190]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay12.mail.gandi.net (Postfix) with ESMTPSA id B61C3200015;\n\tThu, 18 Feb 2021 13:37:29 +0000 (UTC)"],"Date":"Thu, 18 Feb 2021 14:37:55 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Niklas =?utf-8?q?S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","Message-ID":"<20210218133755.pfuckm7zlvnsr6y4@uno.localdomain>","References":"<20210218065329.29317-1-laurent.pinchart@ideasonboard.com>\n\t<YC5hkFd0RUxV/Wlv@oden.dyn.berto.se>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<YC5hkFd0RUxV/Wlv@oden.dyn.berto.se>","Subject":"Re: [libcamera-devel] [PATCH] libcamera: camera: Constify controls\n\targument to 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":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":15226,"web_url":"https://patchwork.libcamera.org/comment/15226/","msgid":"<YC52A9/XC/kdeGms@oden.dyn.berto.se>","date":"2021-02-18T14:13:23","subject":"Re: [libcamera-devel] [PATCH] libcamera: camera: Constify controls\n\targument to start()","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"On 2021-02-18 14:37:55 +0100, Jacopo Mondi wrote:\n> Hi Niklas, Laurent,\n> \n> On Thu, Feb 18, 2021 at 01:46:08PM +0100, Niklas Söderlund wrote:\n> > Hi Laurent,\n> >\n> > Thanks for your patch.\n> >\n> > On 2021-02-18 08:53:29 +0200, Laurent Pinchart wrote:\n> > > The ControlList passed to the Camera::start() function isn't modified.\n> > > Make it const.\n> >\n> > To align with convection elsewhere should we not make it a const\n> > reference ?\n> >\n> \n> I think the idea is to be able to call Camera::start() without any\n> argument. A cost & would force the caller to pass in an empty control\n> list and would require all users to update as it's a mjor API change.\n\nThat is a good point, but can't that be solved with a default argument?\n\n> \n> The patch looks good\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> \n> Thanks\n>   j\n> \n> > >\n> > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > > ---\n> > >  include/libcamera/camera.h                         | 2 +-\n> > >  include/libcamera/internal/pipeline_handler.h      | 2 +-\n> > >  src/libcamera/camera.cpp                           | 2 +-\n> > >  src/libcamera/pipeline/ipu3/ipu3.cpp               | 4 ++--\n> > >  src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 4 ++--\n> > >  src/libcamera/pipeline/rkisp1/rkisp1.cpp           | 4 ++--\n> > >  src/libcamera/pipeline/simple/simple.cpp           | 4 ++--\n> > >  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp       | 4 ++--\n> > >  src/libcamera/pipeline/vimc/vimc.cpp               | 4 ++--\n> > >  9 files changed, 15 insertions(+), 15 deletions(-)\n> > >\n> > > diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\n> > > index bd81fb54502e..326b14d0ca01 100644\n> > > --- a/include/libcamera/camera.h\n> > > +++ b/include/libcamera/camera.h\n> > > @@ -100,7 +100,7 @@ public:\n> > >  \tstd::unique_ptr<Request> createRequest(uint64_t cookie = 0);\n> > >  \tint queueRequest(Request *request);\n> > >\n> > > -\tint start(ControlList *controls = nullptr);\n> > > +\tint start(const ControlList *controls = nullptr);\n> > >  \tint stop();\n> > >\n> > >  private:\n> > > diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h\n> > > index d455d3c9dc4f..6aca0b46f43d 100644\n> > > --- a/include/libcamera/internal/pipeline_handler.h\n> > > +++ b/include/libcamera/internal/pipeline_handler.h\n> > > @@ -76,7 +76,7 @@ public:\n> > >  \tvirtual int exportFrameBuffers(Camera *camera, Stream *stream,\n> > >  \t\t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) = 0;\n> > >\n> > > -\tvirtual int start(Camera *camera, ControlList *controls) = 0;\n> > > +\tvirtual int start(Camera *camera, const ControlList *controls) = 0;\n> > >  \tvirtual void stop(Camera *camera) = 0;\n> > >\n> > >  \tint queueRequest(Request *request);\n> > > diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> > > index c9c79b91e3ae..84edbb8f494d 100644\n> > > --- a/src/libcamera/camera.cpp\n> > > +++ b/src/libcamera/camera.cpp\n> > > @@ -1018,7 +1018,7 @@ int Camera::queueRequest(Request *request)\n> > >   * \\retval -ENODEV The camera has been disconnected from the system\n> > >   * \\retval -EACCES The camera is not in a state where it can be started\n> > >   */\n> > > -int Camera::start(ControlList *controls)\n> > > +int Camera::start(const ControlList *controls)\n> > >  {\n> > >  \tPrivate *const d = LIBCAMERA_D_PTR();\n> > >\n> > > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > > index 3e6b88af4188..76fc7efd408b 100644\n> > > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > > @@ -126,7 +126,7 @@ public:\n> > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > >\n> > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > >  \tvoid stop(Camera *camera) override;\n> > >\n> > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > @@ -646,7 +646,7 @@ int PipelineHandlerIPU3::freeBuffers(Camera *camera)\n> > >  \treturn 0;\n> > >  }\n> > >\n> > > -int PipelineHandlerIPU3::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > +int PipelineHandlerIPU3::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > >  {\n> > >  \tstd::map<uint32_t, ControlInfoMap> entityControls;\n> > >  \tIPU3CameraData *data = cameraData(camera);\n> > > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > > index 15aa600ed581..46361bf3fa51 100644\n> > > --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > > +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > > @@ -252,7 +252,7 @@ public:\n> > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > >\n> > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > >  \tvoid stop(Camera *camera) override;\n> > >\n> > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > @@ -760,7 +760,7 @@ int PipelineHandlerRPi::exportFrameBuffers([[maybe_unused]] Camera *camera, Stre\n> > >  \treturn ret;\n> > >  }\n> > >\n> > > -int PipelineHandlerRPi::start(Camera *camera, ControlList *controls)\n> > > +int PipelineHandlerRPi::start(Camera *camera, const ControlList *controls)\n> > >  {\n> > >  \tRPiCameraData *data = cameraData(camera);\n> > >  \tint ret;\n> > > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > > index a794501a9c8d..538c01392293 100644\n> > > --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > > +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > > @@ -142,7 +142,7 @@ public:\n> > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > >\n> > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > >  \tvoid stop(Camera *camera) override;\n> > >\n> > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > @@ -745,7 +745,7 @@ int PipelineHandlerRkISP1::freeBuffers(Camera *camera)\n> > >  \treturn 0;\n> > >  }\n> > >\n> > > -int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > +int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > >  {\n> > >  \tRkISP1CameraData *data = cameraData(camera);\n> > >  \tint ret;\n> > > diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> > > index 23320d2687e1..35cd34ddbf54 100644\n> > > --- a/src/libcamera/pipeline/simple/simple.cpp\n> > > +++ b/src/libcamera/pipeline/simple/simple.cpp\n> > > @@ -125,7 +125,7 @@ public:\n> > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > >\n> > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > >  \tvoid stop(Camera *camera) override;\n> > >\n> > >  \tbool match(DeviceEnumerator *enumerator) override;\n> > > @@ -641,7 +641,7 @@ int SimplePipelineHandler::exportFrameBuffers(Camera *camera, Stream *stream,\n> > >  \t\treturn data->video_->exportBuffers(count, buffers);\n> > >  }\n> > >\n> > > -int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > +int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > >  {\n> > >  \tSimpleCameraData *data = cameraData(camera);\n> > >  \tV4L2VideoDevice *video = data->video_;\n> > > diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> > > index 08a594175091..031f96e28449 100644\n> > > --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> > > +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> > > @@ -72,7 +72,7 @@ public:\n> > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > >\n> > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > >  \tvoid stop(Camera *camera) override;\n> > >\n> > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > @@ -232,7 +232,7 @@ int PipelineHandlerUVC::exportFrameBuffers(Camera *camera, Stream *stream,\n> > >  \treturn data->video_->exportBuffers(count, buffers);\n> > >  }\n> > >\n> > > -int PipelineHandlerUVC::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > +int PipelineHandlerUVC::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > >  {\n> > >  \tUVCCameraData *data = cameraData(camera);\n> > >  \tunsigned int count = data->stream_.configuration().bufferCount;\n> > > diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp\n> > > index 78b47916b4db..57c65b021c46 100644\n> > > --- a/src/libcamera/pipeline/vimc/vimc.cpp\n> > > +++ b/src/libcamera/pipeline/vimc/vimc.cpp\n> > > @@ -86,7 +86,7 @@ public:\n> > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > >\n> > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > >  \tvoid stop(Camera *camera) override;\n> > >\n> > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > @@ -307,7 +307,7 @@ int PipelineHandlerVimc::exportFrameBuffers(Camera *camera, Stream *stream,\n> > >  \treturn data->video_->exportBuffers(count, buffers);\n> > >  }\n> > >\n> > > -int PipelineHandlerVimc::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > +int PipelineHandlerVimc::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > >  {\n> > >  \tVimcCameraData *data = cameraData(camera);\n> > >  \tunsigned int count = data->stream_.configuration().bufferCount;\n> > > --\n> > > Regards,\n> > >\n> > > Laurent Pinchart\n> > >\n> > > _______________________________________________\n> > > libcamera-devel mailing list\n> > > libcamera-devel@lists.libcamera.org\n> > > https://lists.libcamera.org/listinfo/libcamera-devel\n> >\n> > --\n> > Regards,\n> > Niklas Söderlund\n> > _______________________________________________\n> > libcamera-devel mailing list\n> > libcamera-devel@lists.libcamera.org\n> > https://lists.libcamera.org/listinfo/libcamera-devel","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 955A1BD1F1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 18 Feb 2021 14:13:27 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 14B8C683C0;\n\tThu, 18 Feb 2021 15:13:27 +0100 (CET)","from mail-lj1-x230.google.com (mail-lj1-x230.google.com\n\t[IPv6:2a00:1450:4864:20::230])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2FDA36831A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 18 Feb 2021 15:13:26 +0100 (CET)","by mail-lj1-x230.google.com with SMTP id a17so4654216ljq.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 18 Feb 2021 06:13:26 -0800 (PST)","from localhost (h-209-203.A463.priv.bahnhof.se. [155.4.209.203])\n\tby smtp.gmail.com with ESMTPSA id\n\tr4sm89088lji.134.2021.02.18.06.13.23\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 18 Feb 2021 06:13:24 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=ragnatech-se.20150623.gappssmtp.com\n\theader.i=@ragnatech-se.20150623.gappssmtp.com\n\theader.b=\"nY5G86PS\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to;\n\tbh=tWNmejxrZEOoMgP/Qmnxf3/cEEshC2zHpAfuAHioaBE=;\n\tb=nY5G86PSU1XrmuN1TgjCOomTRVg02XOuZBDepurc0K7DOe4aqE7D49PX2sd6jUeAEp\n\tOgxvlZMpP2fVdQO/X6NZLyxH/i0FDYuLx0yS+OE4DhTk5hB18Fbsz8XBeRrAC8UYfihF\n\tG50ZlG8EURMYpmZFnlD1QXfepUaV+1FW7CBO6d3OZX1GcHACZqcI4+wVlcqa/KclHwX0\n\thCq3fdRVL9CcdaGrqDO5XFMF9gyioiYtIZSHY2cz+BAz984vw5bXy8koLW3YrsmMAKeX\n\tTACbI7ieZr78Iogz6BVnT1xrKoZfQ6P4Blvrh+ZQrGd0SY+aQrkxJAiRqTLJ8SsQ6xJv\n\tz+aw==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to;\n\tbh=tWNmejxrZEOoMgP/Qmnxf3/cEEshC2zHpAfuAHioaBE=;\n\tb=PvyGDZxOLQZt8LJisBHi1GWO/V9f5hdR827lCRMG0oLJwVDWNSW8fUfYeqHapmYr8e\n\tpw40KJv2ttWt41r1lLWnqRgKERlIir17DYXIdT5/VwauPDanOEXbEc+0azDddBSTB53K\n\tqjfrbcb1cYYpnR1h3rcCQXf1XvpCK9YotsYzdWhbDugkM3l/4thHM4IX8O62haNgCu04\n\tEOWHJrpfq5EQ8mO/BELaB3aGd39XU7RndV47g7HLzhtq+aCL2zy6rePosnQa3h+1UUb1\n\t8stomz28ziZGYQYF3TDOREppSW5HZrfjj49YX5SAqtUHMt2P2KOHZ+xba8qmk2GGbL8K\n\tOgxQ==","X-Gm-Message-State":"AOAM531gyT+l7CXrbWS3r0ffPhU8udaltVVpCVnXbxhWYKUUL+u/Pz1q\n\tZyrAewgQ0aRaq4v2taKrhqBf2ci+3IVKzQ==","X-Google-Smtp-Source":"ABdhPJwU/kFDYODu/oUPG8gbgu/4C0tbT09mzMT1/Ivjm/dXshDn6MrOW7AyW0DnESVMqPVBbh1AzA==","X-Received":"by 2002:a05:6512:a8b:: with SMTP id\n\tm11mr2591069lfu.112.1613657605197; \n\tThu, 18 Feb 2021 06:13:25 -0800 (PST)","Date":"Thu, 18 Feb 2021 15:13:23 +0100","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<YC52A9/XC/kdeGms@oden.dyn.berto.se>","References":"<20210218065329.29317-1-laurent.pinchart@ideasonboard.com>\n\t<YC5hkFd0RUxV/Wlv@oden.dyn.berto.se>\n\t<20210218133755.pfuckm7zlvnsr6y4@uno.localdomain>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20210218133755.pfuckm7zlvnsr6y4@uno.localdomain>","Subject":"Re: [libcamera-devel] [PATCH] libcamera: camera: Constify controls\n\targument to 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":"text/plain; charset=\"iso-8859-1\"","Content-Transfer-Encoding":"quoted-printable","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":15227,"web_url":"https://patchwork.libcamera.org/comment/15227/","msgid":"<20210218144319.jxj36qa2tp4ktoxs@uno.localdomain>","date":"2021-02-18T14:43:19","subject":"Re: [libcamera-devel] [PATCH] libcamera: camera: Constify controls\n\targument to start()","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Niklas,\n\nOn Thu, Feb 18, 2021 at 03:13:23PM +0100, Niklas Söderlund wrote:\n> On 2021-02-18 14:37:55 +0100, Jacopo Mondi wrote:\n> > Hi Niklas, Laurent,\n> >\n> > On Thu, Feb 18, 2021 at 01:46:08PM +0100, Niklas Söderlund wrote:\n> > > Hi Laurent,\n> > >\n> > > Thanks for your patch.\n> > >\n> > > On 2021-02-18 08:53:29 +0200, Laurent Pinchart wrote:\n> > > > The ControlList passed to the Camera::start() function isn't modified.\n> > > > Make it const.\n> > >\n> > > To align with convection elsewhere should we not make it a const\n> > > reference ?\n> > >\n> >\n> > I think the idea is to be able to call Camera::start() without any\n> > argument. A cost & would force the caller to pass in an empty control\n> > list and would require all users to update as it's a mjor API change.\n>\n> That is a good point, but can't that be solved with a default argument?\n>\n\nAn empty controls list ? I thought the list passed in as argument had\nto be inspected in camera.cpp but it is passed down to the pipeline\nhandler unconditionally, so it might be possible indeed\n\n> >\n> > The patch looks good\n> > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> >\n> > Thanks\n> >   j\n> >\n> > > >\n> > > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > > > ---\n> > > >  include/libcamera/camera.h                         | 2 +-\n> > > >  include/libcamera/internal/pipeline_handler.h      | 2 +-\n> > > >  src/libcamera/camera.cpp                           | 2 +-\n> > > >  src/libcamera/pipeline/ipu3/ipu3.cpp               | 4 ++--\n> > > >  src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 4 ++--\n> > > >  src/libcamera/pipeline/rkisp1/rkisp1.cpp           | 4 ++--\n> > > >  src/libcamera/pipeline/simple/simple.cpp           | 4 ++--\n> > > >  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp       | 4 ++--\n> > > >  src/libcamera/pipeline/vimc/vimc.cpp               | 4 ++--\n> > > >  9 files changed, 15 insertions(+), 15 deletions(-)\n> > > >\n> > > > diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\n> > > > index bd81fb54502e..326b14d0ca01 100644\n> > > > --- a/include/libcamera/camera.h\n> > > > +++ b/include/libcamera/camera.h\n> > > > @@ -100,7 +100,7 @@ public:\n> > > >  \tstd::unique_ptr<Request> createRequest(uint64_t cookie = 0);\n> > > >  \tint queueRequest(Request *request);\n> > > >\n> > > > -\tint start(ControlList *controls = nullptr);\n> > > > +\tint start(const ControlList *controls = nullptr);\n> > > >  \tint stop();\n> > > >\n> > > >  private:\n> > > > diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h\n> > > > index d455d3c9dc4f..6aca0b46f43d 100644\n> > > > --- a/include/libcamera/internal/pipeline_handler.h\n> > > > +++ b/include/libcamera/internal/pipeline_handler.h\n> > > > @@ -76,7 +76,7 @@ public:\n> > > >  \tvirtual int exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \t\t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) = 0;\n> > > >\n> > > > -\tvirtual int start(Camera *camera, ControlList *controls) = 0;\n> > > > +\tvirtual int start(Camera *camera, const ControlList *controls) = 0;\n> > > >  \tvirtual void stop(Camera *camera) = 0;\n> > > >\n> > > >  \tint queueRequest(Request *request);\n> > > > diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> > > > index c9c79b91e3ae..84edbb8f494d 100644\n> > > > --- a/src/libcamera/camera.cpp\n> > > > +++ b/src/libcamera/camera.cpp\n> > > > @@ -1018,7 +1018,7 @@ int Camera::queueRequest(Request *request)\n> > > >   * \\retval -ENODEV The camera has been disconnected from the system\n> > > >   * \\retval -EACCES The camera is not in a state where it can be started\n> > > >   */\n> > > > -int Camera::start(ControlList *controls)\n> > > > +int Camera::start(const ControlList *controls)\n> > > >  {\n> > > >  \tPrivate *const d = LIBCAMERA_D_PTR();\n> > > >\n> > > > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > > > index 3e6b88af4188..76fc7efd408b 100644\n> > > > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > > > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > > > @@ -126,7 +126,7 @@ public:\n> > > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > > >\n> > > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > > >  \tvoid stop(Camera *camera) override;\n> > > >\n> > > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > > @@ -646,7 +646,7 @@ int PipelineHandlerIPU3::freeBuffers(Camera *camera)\n> > > >  \treturn 0;\n> > > >  }\n> > > >\n> > > > -int PipelineHandlerIPU3::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > > +int PipelineHandlerIPU3::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > > >  {\n> > > >  \tstd::map<uint32_t, ControlInfoMap> entityControls;\n> > > >  \tIPU3CameraData *data = cameraData(camera);\n> > > > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > > > index 15aa600ed581..46361bf3fa51 100644\n> > > > --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > > > +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > > > @@ -252,7 +252,7 @@ public:\n> > > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > > >\n> > > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > > >  \tvoid stop(Camera *camera) override;\n> > > >\n> > > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > > @@ -760,7 +760,7 @@ int PipelineHandlerRPi::exportFrameBuffers([[maybe_unused]] Camera *camera, Stre\n> > > >  \treturn ret;\n> > > >  }\n> > > >\n> > > > -int PipelineHandlerRPi::start(Camera *camera, ControlList *controls)\n> > > > +int PipelineHandlerRPi::start(Camera *camera, const ControlList *controls)\n> > > >  {\n> > > >  \tRPiCameraData *data = cameraData(camera);\n> > > >  \tint ret;\n> > > > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > > > index a794501a9c8d..538c01392293 100644\n> > > > --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > > > +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > > > @@ -142,7 +142,7 @@ public:\n> > > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > > >\n> > > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > > >  \tvoid stop(Camera *camera) override;\n> > > >\n> > > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > > @@ -745,7 +745,7 @@ int PipelineHandlerRkISP1::freeBuffers(Camera *camera)\n> > > >  \treturn 0;\n> > > >  }\n> > > >\n> > > > -int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > > +int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > > >  {\n> > > >  \tRkISP1CameraData *data = cameraData(camera);\n> > > >  \tint ret;\n> > > > diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> > > > index 23320d2687e1..35cd34ddbf54 100644\n> > > > --- a/src/libcamera/pipeline/simple/simple.cpp\n> > > > +++ b/src/libcamera/pipeline/simple/simple.cpp\n> > > > @@ -125,7 +125,7 @@ public:\n> > > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > > >\n> > > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > > >  \tvoid stop(Camera *camera) override;\n> > > >\n> > > >  \tbool match(DeviceEnumerator *enumerator) override;\n> > > > @@ -641,7 +641,7 @@ int SimplePipelineHandler::exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \t\treturn data->video_->exportBuffers(count, buffers);\n> > > >  }\n> > > >\n> > > > -int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > > +int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > > >  {\n> > > >  \tSimpleCameraData *data = cameraData(camera);\n> > > >  \tV4L2VideoDevice *video = data->video_;\n> > > > diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> > > > index 08a594175091..031f96e28449 100644\n> > > > --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> > > > +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> > > > @@ -72,7 +72,7 @@ public:\n> > > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > > >\n> > > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > > >  \tvoid stop(Camera *camera) override;\n> > > >\n> > > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > > @@ -232,7 +232,7 @@ int PipelineHandlerUVC::exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \treturn data->video_->exportBuffers(count, buffers);\n> > > >  }\n> > > >\n> > > > -int PipelineHandlerUVC::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > > +int PipelineHandlerUVC::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > > >  {\n> > > >  \tUVCCameraData *data = cameraData(camera);\n> > > >  \tunsigned int count = data->stream_.configuration().bufferCount;\n> > > > diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp\n> > > > index 78b47916b4db..57c65b021c46 100644\n> > > > --- a/src/libcamera/pipeline/vimc/vimc.cpp\n> > > > +++ b/src/libcamera/pipeline/vimc/vimc.cpp\n> > > > @@ -86,7 +86,7 @@ public:\n> > > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > > >\n> > > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > > >  \tvoid stop(Camera *camera) override;\n> > > >\n> > > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > > @@ -307,7 +307,7 @@ int PipelineHandlerVimc::exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \treturn data->video_->exportBuffers(count, buffers);\n> > > >  }\n> > > >\n> > > > -int PipelineHandlerVimc::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > > +int PipelineHandlerVimc::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > > >  {\n> > > >  \tVimcCameraData *data = cameraData(camera);\n> > > >  \tunsigned int count = data->stream_.configuration().bufferCount;\n> > > > --\n> > > > Regards,\n> > > >\n> > > > Laurent Pinchart\n> > > >\n> > > > _______________________________________________\n> > > > libcamera-devel mailing list\n> > > > libcamera-devel@lists.libcamera.org\n> > > > https://lists.libcamera.org/listinfo/libcamera-devel\n> > >\n> > > --\n> > > Regards,\n> > > Niklas Söderlund\n> > > _______________________________________________\n> > > libcamera-devel mailing list\n> > > libcamera-devel@lists.libcamera.org\n> > > https://lists.libcamera.org/listinfo/libcamera-devel\n>\n> --\n> Regards,\n> Niklas Söderlund","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 EB1ACBD1F6\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 18 Feb 2021 14:42:55 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 71A74689BC;\n\tThu, 18 Feb 2021 15:42:55 +0100 (CET)","from relay12.mail.gandi.net (relay12.mail.gandi.net\n\t[217.70.178.232])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 663C3683C0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 18 Feb 2021 15:42:54 +0100 (CET)","from uno.localdomain (93-61-96-190.ip145.fastwebnet.it\n\t[93.61.96.190]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay12.mail.gandi.net (Postfix) with ESMTPSA id A66B0200011;\n\tThu, 18 Feb 2021 14:42:53 +0000 (UTC)"],"Date":"Thu, 18 Feb 2021 15:43:19 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Niklas =?utf-8?q?S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","Message-ID":"<20210218144319.jxj36qa2tp4ktoxs@uno.localdomain>","References":"<20210218065329.29317-1-laurent.pinchart@ideasonboard.com>\n\t<YC5hkFd0RUxV/Wlv@oden.dyn.berto.se>\n\t<20210218133755.pfuckm7zlvnsr6y4@uno.localdomain>\n\t<YC52A9/XC/kdeGms@oden.dyn.berto.se>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<YC52A9/XC/kdeGms@oden.dyn.berto.se>","Subject":"Re: [libcamera-devel] [PATCH] libcamera: camera: Constify controls\n\targument to 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":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":15233,"web_url":"https://patchwork.libcamera.org/comment/15233/","msgid":"<YC+PPlJSiUJnr5VZ@pendragon.ideasonboard.com>","date":"2021-02-19T10:13:18","subject":"Re: [libcamera-devel] [PATCH] libcamera: camera: Constify controls\n\targument to start()","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Niklas,\n\nOn Thu, Feb 18, 2021 at 03:13:23PM +0100, Niklas Söderlund wrote:\n> On 2021-02-18 14:37:55 +0100, Jacopo Mondi wrote:\n> > On Thu, Feb 18, 2021 at 01:46:08PM +0100, Niklas Söderlund wrote:\n> > > On 2021-02-18 08:53:29 +0200, Laurent Pinchart wrote:\n> > > > The ControlList passed to the Camera::start() function isn't modified.\n> > > > Make it const.\n> > >\n> > > To align with convection elsewhere should we not make it a const\n> > > reference ?\n> > \n> > I think the idea is to be able to call Camera::start() without any\n> > argument. A cost & would force the caller to pass in an empty control\n> > list and would require all users to update as it's a mjor API change.\n> \n> That is a good point, but can't that be solved with a default argument?\n\nThe ControlList is supposed to be constructed with a ControlInfoMap, so\nwe can't default it I'm afraid.\n\nGiven the use case of telling start() there's no control to be set, I\nthink a pointer makes sense. If it was easier to create an empty control\nlist maybe we could turn it into a reference with a default argument,\nbut right now it would be a bit annoying I think. Maybe something to\nkeep in mind when improving the control API ?\n\n> > The patch looks good\n> > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> > \n> > > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > > > ---\n> > > >  include/libcamera/camera.h                         | 2 +-\n> > > >  include/libcamera/internal/pipeline_handler.h      | 2 +-\n> > > >  src/libcamera/camera.cpp                           | 2 +-\n> > > >  src/libcamera/pipeline/ipu3/ipu3.cpp               | 4 ++--\n> > > >  src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 4 ++--\n> > > >  src/libcamera/pipeline/rkisp1/rkisp1.cpp           | 4 ++--\n> > > >  src/libcamera/pipeline/simple/simple.cpp           | 4 ++--\n> > > >  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp       | 4 ++--\n> > > >  src/libcamera/pipeline/vimc/vimc.cpp               | 4 ++--\n> > > >  9 files changed, 15 insertions(+), 15 deletions(-)\n> > > >\n> > > > diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\n> > > > index bd81fb54502e..326b14d0ca01 100644\n> > > > --- a/include/libcamera/camera.h\n> > > > +++ b/include/libcamera/camera.h\n> > > > @@ -100,7 +100,7 @@ public:\n> > > >  \tstd::unique_ptr<Request> createRequest(uint64_t cookie = 0);\n> > > >  \tint queueRequest(Request *request);\n> > > >\n> > > > -\tint start(ControlList *controls = nullptr);\n> > > > +\tint start(const ControlList *controls = nullptr);\n> > > >  \tint stop();\n> > > >\n> > > >  private:\n> > > > diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h\n> > > > index d455d3c9dc4f..6aca0b46f43d 100644\n> > > > --- a/include/libcamera/internal/pipeline_handler.h\n> > > > +++ b/include/libcamera/internal/pipeline_handler.h\n> > > > @@ -76,7 +76,7 @@ public:\n> > > >  \tvirtual int exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \t\t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) = 0;\n> > > >\n> > > > -\tvirtual int start(Camera *camera, ControlList *controls) = 0;\n> > > > +\tvirtual int start(Camera *camera, const ControlList *controls) = 0;\n> > > >  \tvirtual void stop(Camera *camera) = 0;\n> > > >\n> > > >  \tint queueRequest(Request *request);\n> > > > diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> > > > index c9c79b91e3ae..84edbb8f494d 100644\n> > > > --- a/src/libcamera/camera.cpp\n> > > > +++ b/src/libcamera/camera.cpp\n> > > > @@ -1018,7 +1018,7 @@ int Camera::queueRequest(Request *request)\n> > > >   * \\retval -ENODEV The camera has been disconnected from the system\n> > > >   * \\retval -EACCES The camera is not in a state where it can be started\n> > > >   */\n> > > > -int Camera::start(ControlList *controls)\n> > > > +int Camera::start(const ControlList *controls)\n> > > >  {\n> > > >  \tPrivate *const d = LIBCAMERA_D_PTR();\n> > > >\n> > > > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > > > index 3e6b88af4188..76fc7efd408b 100644\n> > > > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > > > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > > > @@ -126,7 +126,7 @@ public:\n> > > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > > >\n> > > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > > >  \tvoid stop(Camera *camera) override;\n> > > >\n> > > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > > @@ -646,7 +646,7 @@ int PipelineHandlerIPU3::freeBuffers(Camera *camera)\n> > > >  \treturn 0;\n> > > >  }\n> > > >\n> > > > -int PipelineHandlerIPU3::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > > +int PipelineHandlerIPU3::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > > >  {\n> > > >  \tstd::map<uint32_t, ControlInfoMap> entityControls;\n> > > >  \tIPU3CameraData *data = cameraData(camera);\n> > > > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > > > index 15aa600ed581..46361bf3fa51 100644\n> > > > --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > > > +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > > > @@ -252,7 +252,7 @@ public:\n> > > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > > >\n> > > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > > >  \tvoid stop(Camera *camera) override;\n> > > >\n> > > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > > @@ -760,7 +760,7 @@ int PipelineHandlerRPi::exportFrameBuffers([[maybe_unused]] Camera *camera, Stre\n> > > >  \treturn ret;\n> > > >  }\n> > > >\n> > > > -int PipelineHandlerRPi::start(Camera *camera, ControlList *controls)\n> > > > +int PipelineHandlerRPi::start(Camera *camera, const ControlList *controls)\n> > > >  {\n> > > >  \tRPiCameraData *data = cameraData(camera);\n> > > >  \tint ret;\n> > > > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > > > index a794501a9c8d..538c01392293 100644\n> > > > --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > > > +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > > > @@ -142,7 +142,7 @@ public:\n> > > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > > >\n> > > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > > >  \tvoid stop(Camera *camera) override;\n> > > >\n> > > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > > @@ -745,7 +745,7 @@ int PipelineHandlerRkISP1::freeBuffers(Camera *camera)\n> > > >  \treturn 0;\n> > > >  }\n> > > >\n> > > > -int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > > +int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > > >  {\n> > > >  \tRkISP1CameraData *data = cameraData(camera);\n> > > >  \tint ret;\n> > > > diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> > > > index 23320d2687e1..35cd34ddbf54 100644\n> > > > --- a/src/libcamera/pipeline/simple/simple.cpp\n> > > > +++ b/src/libcamera/pipeline/simple/simple.cpp\n> > > > @@ -125,7 +125,7 @@ public:\n> > > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > > >\n> > > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > > >  \tvoid stop(Camera *camera) override;\n> > > >\n> > > >  \tbool match(DeviceEnumerator *enumerator) override;\n> > > > @@ -641,7 +641,7 @@ int SimplePipelineHandler::exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \t\treturn data->video_->exportBuffers(count, buffers);\n> > > >  }\n> > > >\n> > > > -int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > > +int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > > >  {\n> > > >  \tSimpleCameraData *data = cameraData(camera);\n> > > >  \tV4L2VideoDevice *video = data->video_;\n> > > > diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> > > > index 08a594175091..031f96e28449 100644\n> > > > --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> > > > +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> > > > @@ -72,7 +72,7 @@ public:\n> > > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > > >\n> > > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > > >  \tvoid stop(Camera *camera) override;\n> > > >\n> > > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > > @@ -232,7 +232,7 @@ int PipelineHandlerUVC::exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \treturn data->video_->exportBuffers(count, buffers);\n> > > >  }\n> > > >\n> > > > -int PipelineHandlerUVC::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > > +int PipelineHandlerUVC::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > > >  {\n> > > >  \tUVCCameraData *data = cameraData(camera);\n> > > >  \tunsigned int count = data->stream_.configuration().bufferCount;\n> > > > diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp\n> > > > index 78b47916b4db..57c65b021c46 100644\n> > > > --- a/src/libcamera/pipeline/vimc/vimc.cpp\n> > > > +++ b/src/libcamera/pipeline/vimc/vimc.cpp\n> > > > @@ -86,7 +86,7 @@ public:\n> > > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > > >\n> > > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > > >  \tvoid stop(Camera *camera) override;\n> > > >\n> > > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > > @@ -307,7 +307,7 @@ int PipelineHandlerVimc::exportFrameBuffers(Camera *camera, Stream *stream,\n> > > >  \treturn data->video_->exportBuffers(count, buffers);\n> > > >  }\n> > > >\n> > > > -int PipelineHandlerVimc::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > > +int PipelineHandlerVimc::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > > >  {\n> > > >  \tVimcCameraData *data = cameraData(camera);\n> > > >  \tunsigned int count = data->stream_.configuration().bufferCount;","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 208D9BD1F1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 19 Feb 2021 10:13:48 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8DE63689B7;\n\tFri, 19 Feb 2021 11:13:47 +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 AC36360106\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 19 Feb 2021 11:13:45 +0100 (CET)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 0EFEE344;\n\tFri, 19 Feb 2021 11:13:44 +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=\"ArNm+5Nw\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1613729625;\n\tbh=36bDCRS1IjEfyIjibmBeaIJflJbW+vawKr6y+w+zsvU=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=ArNm+5NwOQsWSEtVGkCmMZufBBsDvXr1vL9HUxWPf5sdXde1ahpGdoCm3A370Q2ua\n\te4mcySjzZqZ/PWCytmkR6fGbjPltA0xAyPySWiAWnShnu9FJkxpxsWWBDJpPzBrY+G\n\tFdfZmCBKVuAAKjHI7Cm5lyudWM9DuIo5Y+YxyyxE=","Date":"Fri, 19 Feb 2021 12:13:18 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Niklas =?utf-8?q?S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","Message-ID":"<YC+PPlJSiUJnr5VZ@pendragon.ideasonboard.com>","References":"<20210218065329.29317-1-laurent.pinchart@ideasonboard.com>\n\t<YC5hkFd0RUxV/Wlv@oden.dyn.berto.se>\n\t<20210218133755.pfuckm7zlvnsr6y4@uno.localdomain>\n\t<YC52A9/XC/kdeGms@oden.dyn.berto.se>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<YC52A9/XC/kdeGms@oden.dyn.berto.se>","Subject":"Re: [libcamera-devel] [PATCH] libcamera: camera: Constify controls\n\targument to 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":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":15240,"web_url":"https://patchwork.libcamera.org/comment/15240/","msgid":"<YC/JyWp2PLxm7Oze@oden.dyn.berto.se>","date":"2021-02-19T14:23:05","subject":"Re: [libcamera-devel] [PATCH] libcamera: camera: Constify controls\n\targument to start()","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Laurent,\n\nOn 2021-02-19 12:13:18 +0200, Laurent Pinchart wrote:\n> Hi Niklas,\n> \n> On Thu, Feb 18, 2021 at 03:13:23PM +0100, Niklas Söderlund wrote:\n> > On 2021-02-18 14:37:55 +0100, Jacopo Mondi wrote:\n> > > On Thu, Feb 18, 2021 at 01:46:08PM +0100, Niklas Söderlund wrote:\n> > > > On 2021-02-18 08:53:29 +0200, Laurent Pinchart wrote:\n> > > > > The ControlList passed to the Camera::start() function isn't modified.\n> > > > > Make it const.\n> > > >\n> > > > To align with convection elsewhere should we not make it a const\n> > > > reference ?\n> > > \n> > > I think the idea is to be able to call Camera::start() without any\n> > > argument. A cost & would force the caller to pass in an empty control\n> > > list and would require all users to update as it's a mjor API change.\n> > \n> > That is a good point, but can't that be solved with a default argument?\n> \n> The ControlList is supposed to be constructed with a ControlInfoMap, so\n> we can't default it I'm afraid.\n> \n> Given the use case of telling start() there's no control to be set, I\n> think a pointer makes sense. If it was easier to create an empty control\n> list maybe we could turn it into a reference with a default argument,\n> but right now it would be a bit annoying I think. Maybe something to\n> keep in mind when improving the control API ?\n\nThat is a good point, for this patch.\n\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n\n> \n> > > The patch looks good\n> > > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> > > \n> > > > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > > > > ---\n> > > > >  include/libcamera/camera.h                         | 2 +-\n> > > > >  include/libcamera/internal/pipeline_handler.h      | 2 +-\n> > > > >  src/libcamera/camera.cpp                           | 2 +-\n> > > > >  src/libcamera/pipeline/ipu3/ipu3.cpp               | 4 ++--\n> > > > >  src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 4 ++--\n> > > > >  src/libcamera/pipeline/rkisp1/rkisp1.cpp           | 4 ++--\n> > > > >  src/libcamera/pipeline/simple/simple.cpp           | 4 ++--\n> > > > >  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp       | 4 ++--\n> > > > >  src/libcamera/pipeline/vimc/vimc.cpp               | 4 ++--\n> > > > >  9 files changed, 15 insertions(+), 15 deletions(-)\n> > > > >\n> > > > > diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\n> > > > > index bd81fb54502e..326b14d0ca01 100644\n> > > > > --- a/include/libcamera/camera.h\n> > > > > +++ b/include/libcamera/camera.h\n> > > > > @@ -100,7 +100,7 @@ public:\n> > > > >  \tstd::unique_ptr<Request> createRequest(uint64_t cookie = 0);\n> > > > >  \tint queueRequest(Request *request);\n> > > > >\n> > > > > -\tint start(ControlList *controls = nullptr);\n> > > > > +\tint start(const ControlList *controls = nullptr);\n> > > > >  \tint stop();\n> > > > >\n> > > > >  private:\n> > > > > diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h\n> > > > > index d455d3c9dc4f..6aca0b46f43d 100644\n> > > > > --- a/include/libcamera/internal/pipeline_handler.h\n> > > > > +++ b/include/libcamera/internal/pipeline_handler.h\n> > > > > @@ -76,7 +76,7 @@ public:\n> > > > >  \tvirtual int exportFrameBuffers(Camera *camera, Stream *stream,\n> > > > >  \t\t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) = 0;\n> > > > >\n> > > > > -\tvirtual int start(Camera *camera, ControlList *controls) = 0;\n> > > > > +\tvirtual int start(Camera *camera, const ControlList *controls) = 0;\n> > > > >  \tvirtual void stop(Camera *camera) = 0;\n> > > > >\n> > > > >  \tint queueRequest(Request *request);\n> > > > > diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> > > > > index c9c79b91e3ae..84edbb8f494d 100644\n> > > > > --- a/src/libcamera/camera.cpp\n> > > > > +++ b/src/libcamera/camera.cpp\n> > > > > @@ -1018,7 +1018,7 @@ int Camera::queueRequest(Request *request)\n> > > > >   * \\retval -ENODEV The camera has been disconnected from the system\n> > > > >   * \\retval -EACCES The camera is not in a state where it can be started\n> > > > >   */\n> > > > > -int Camera::start(ControlList *controls)\n> > > > > +int Camera::start(const ControlList *controls)\n> > > > >  {\n> > > > >  \tPrivate *const d = LIBCAMERA_D_PTR();\n> > > > >\n> > > > > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > > > > index 3e6b88af4188..76fc7efd408b 100644\n> > > > > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > > > > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > > > > @@ -126,7 +126,7 @@ public:\n> > > > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > > > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > > > >\n> > > > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > > > >  \tvoid stop(Camera *camera) override;\n> > > > >\n> > > > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > > > @@ -646,7 +646,7 @@ int PipelineHandlerIPU3::freeBuffers(Camera *camera)\n> > > > >  \treturn 0;\n> > > > >  }\n> > > > >\n> > > > > -int PipelineHandlerIPU3::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > > > +int PipelineHandlerIPU3::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > > > >  {\n> > > > >  \tstd::map<uint32_t, ControlInfoMap> entityControls;\n> > > > >  \tIPU3CameraData *data = cameraData(camera);\n> > > > > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > > > > index 15aa600ed581..46361bf3fa51 100644\n> > > > > --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > > > > +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> > > > > @@ -252,7 +252,7 @@ public:\n> > > > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > > > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > > > >\n> > > > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > > > >  \tvoid stop(Camera *camera) override;\n> > > > >\n> > > > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > > > @@ -760,7 +760,7 @@ int PipelineHandlerRPi::exportFrameBuffers([[maybe_unused]] Camera *camera, Stre\n> > > > >  \treturn ret;\n> > > > >  }\n> > > > >\n> > > > > -int PipelineHandlerRPi::start(Camera *camera, ControlList *controls)\n> > > > > +int PipelineHandlerRPi::start(Camera *camera, const ControlList *controls)\n> > > > >  {\n> > > > >  \tRPiCameraData *data = cameraData(camera);\n> > > > >  \tint ret;\n> > > > > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > > > > index a794501a9c8d..538c01392293 100644\n> > > > > --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > > > > +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > > > > @@ -142,7 +142,7 @@ public:\n> > > > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > > > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > > > >\n> > > > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > > > >  \tvoid stop(Camera *camera) override;\n> > > > >\n> > > > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > > > @@ -745,7 +745,7 @@ int PipelineHandlerRkISP1::freeBuffers(Camera *camera)\n> > > > >  \treturn 0;\n> > > > >  }\n> > > > >\n> > > > > -int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > > > +int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > > > >  {\n> > > > >  \tRkISP1CameraData *data = cameraData(camera);\n> > > > >  \tint ret;\n> > > > > diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> > > > > index 23320d2687e1..35cd34ddbf54 100644\n> > > > > --- a/src/libcamera/pipeline/simple/simple.cpp\n> > > > > +++ b/src/libcamera/pipeline/simple/simple.cpp\n> > > > > @@ -125,7 +125,7 @@ public:\n> > > > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > > > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > > > >\n> > > > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > > > >  \tvoid stop(Camera *camera) override;\n> > > > >\n> > > > >  \tbool match(DeviceEnumerator *enumerator) override;\n> > > > > @@ -641,7 +641,7 @@ int SimplePipelineHandler::exportFrameBuffers(Camera *camera, Stream *stream,\n> > > > >  \t\treturn data->video_->exportBuffers(count, buffers);\n> > > > >  }\n> > > > >\n> > > > > -int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > > > +int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > > > >  {\n> > > > >  \tSimpleCameraData *data = cameraData(camera);\n> > > > >  \tV4L2VideoDevice *video = data->video_;\n> > > > > diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> > > > > index 08a594175091..031f96e28449 100644\n> > > > > --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> > > > > +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n> > > > > @@ -72,7 +72,7 @@ public:\n> > > > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > > > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > > > >\n> > > > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > > > >  \tvoid stop(Camera *camera) override;\n> > > > >\n> > > > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > > > @@ -232,7 +232,7 @@ int PipelineHandlerUVC::exportFrameBuffers(Camera *camera, Stream *stream,\n> > > > >  \treturn data->video_->exportBuffers(count, buffers);\n> > > > >  }\n> > > > >\n> > > > > -int PipelineHandlerUVC::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > > > +int PipelineHandlerUVC::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > > > >  {\n> > > > >  \tUVCCameraData *data = cameraData(camera);\n> > > > >  \tunsigned int count = data->stream_.configuration().bufferCount;\n> > > > > diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp\n> > > > > index 78b47916b4db..57c65b021c46 100644\n> > > > > --- a/src/libcamera/pipeline/vimc/vimc.cpp\n> > > > > +++ b/src/libcamera/pipeline/vimc/vimc.cpp\n> > > > > @@ -86,7 +86,7 @@ public:\n> > > > >  \tint exportFrameBuffers(Camera *camera, Stream *stream,\n> > > > >  \t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n> > > > >\n> > > > > -\tint start(Camera *camera, ControlList *controls) override;\n> > > > > +\tint start(Camera *camera, const ControlList *controls) override;\n> > > > >  \tvoid stop(Camera *camera) override;\n> > > > >\n> > > > >  \tint queueRequestDevice(Camera *camera, Request *request) override;\n> > > > > @@ -307,7 +307,7 @@ int PipelineHandlerVimc::exportFrameBuffers(Camera *camera, Stream *stream,\n> > > > >  \treturn data->video_->exportBuffers(count, buffers);\n> > > > >  }\n> > > > >\n> > > > > -int PipelineHandlerVimc::start(Camera *camera, [[maybe_unused]] ControlList *controls)\n> > > > > +int PipelineHandlerVimc::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n> > > > >  {\n> > > > >  \tVimcCameraData *data = cameraData(camera);\n> > > > >  \tunsigned int count = data->stream_.configuration().bufferCount;\n> \n> -- \n> Regards,\n> \n> Laurent Pinchart","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 9314DBD1F6\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 19 Feb 2021 14:23:11 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id F1844689CD;\n\tFri, 19 Feb 2021 15:23:10 +0100 (CET)","from mail-lj1-x22e.google.com (mail-lj1-x22e.google.com\n\t[IPv6:2a00:1450:4864:20::22e])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id BDA76602F5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 19 Feb 2021 15:23:09 +0100 (CET)","by mail-lj1-x22e.google.com with SMTP id a22so21320254ljp.10\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 19 Feb 2021 06:23:09 -0800 (PST)","from localhost (h-209-203.A463.priv.bahnhof.se. [155.4.209.203])\n\tby smtp.gmail.com with ESMTPSA id\n\tr13sm934676lfc.262.2021.02.19.06.23.05\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tFri, 19 Feb 2021 06:23:05 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=ragnatech-se.20150623.gappssmtp.com\n\theader.i=@ragnatech-se.20150623.gappssmtp.com\n\theader.b=\"RvNRratM\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to;\n\tbh=QJ9qFMWmCUvssGUcQG5dTV4GPFr3iPtm9SQb8psHjBQ=;\n\tb=RvNRratMp65Tb960PpSUdeTOA7BQVH/MiGpjsG+mmZfqlnaPX2WEKTb6xGQ0tjd+Uu\n\tpGoqMLhThUxOzPqB0R5EfBr7ZfymRGvQxEbd9iaOkZrrQxifgs8wPWv/AyyQIUFM/FkS\n\tSR9tsGORQjf8WGJG90noxUPHjJSTLEdZpChVY1luqJ2QXK22xhgRM06yS/5CT11L6+5C\n\t+5sAJm43NdepfNRTB3PgiWTy9yPGmJJPUy7f9detdrWsrYO86pZRFwRccp6HmLUko8Og\n\tXJtf3OChQnmznIO9VFAmtahcc0KFwglH7N8/rcE6BFbu8FSXQcSyc6bSstuTZ6rbNnmP\n\t7q8w==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to;\n\tbh=QJ9qFMWmCUvssGUcQG5dTV4GPFr3iPtm9SQb8psHjBQ=;\n\tb=aaapxBaNtP+ZjeCchlI+dzJVNlYTHuN/x4SwmvUl7SbpNLsEicxO4dlkf4Y5+0gx5V\n\teJ2YpxGWuf4qbuQb/L5+NYXZRvocSE60DodTXQWm9lBQkXgnyQN1vRH+1fMBVcnbIpBr\n\tQG94UBxGNCeWSOFP99XGT2g5szjtrjDThe3mxgqqANqh0iOTu0LK5sUYpq8fmL90r3hZ\n\tyNPCEIDeiqzIbzfKprafsko5ofW2d1nY0uuyw3Pa0LWeX27CZ/yvCg7/Ozk3993wqfHt\n\tocbYACFx3xGb0jZ0pVOkykyGeo6B2MubcytEbGU9xvarb40bZeumUruPF4dNe/shqoKv\n\tHMXA==","X-Gm-Message-State":"AOAM533kcopQlvL/xv2WdAerrNcY3swQZagB5dLKtptmHFv40f6BNYMz\n\t47WM3i+kwHqnuRjYNZt7Lz0o6iYMcarJFOqe","X-Google-Smtp-Source":"ABdhPJxzzatDE9mri+QHHV92pS9SzScQvPA844XWYO54cnReC7gtu4iN4ru2jvrPwj26U+UfPS7lHQ==","X-Received":"by 2002:a2e:88cb:: with SMTP id\n\ta11mr4395071ljk.394.1613744588886; \n\tFri, 19 Feb 2021 06:23:08 -0800 (PST)","Date":"Fri, 19 Feb 2021 15:23:05 +0100","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<YC/JyWp2PLxm7Oze@oden.dyn.berto.se>","References":"<20210218065329.29317-1-laurent.pinchart@ideasonboard.com>\n\t<YC5hkFd0RUxV/Wlv@oden.dyn.berto.se>\n\t<20210218133755.pfuckm7zlvnsr6y4@uno.localdomain>\n\t<YC52A9/XC/kdeGms@oden.dyn.berto.se>\n\t<YC+PPlJSiUJnr5VZ@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<YC+PPlJSiUJnr5VZ@pendragon.ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH] libcamera: camera: Constify controls\n\targument to 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":"text/plain; charset=\"iso-8859-1\"","Content-Transfer-Encoding":"quoted-printable","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]