[{"id":18302,"web_url":"https://patchwork.libcamera.org/comment/18302/","msgid":"<YPu6r3apNcxinbMH@oden.dyn.berto.se>","date":"2021-07-24T07:01:03","subject":"Re: [libcamera-devel] [RFC PATCH 06/17] libcamera: camera: Move\n\tCamera::Private to header file","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 work.\n\nOn 2021-07-23 07:00:25 +0300, Laurent Pinchart wrote:\n> The Camera::Private class is defined in camera.cpp. To prepare for\n> allowing it to be subclassed by pipeline handlers, move it to a new\n> internal/camera.h header.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  include/libcamera/internal/camera.h    | 63 ++++++++++++++++++++++++++\n>  include/libcamera/internal/meson.build |  1 +\n>  src/libcamera/camera.cpp               | 40 +---------------\n>  3 files changed, 66 insertions(+), 38 deletions(-)\n>  create mode 100644 include/libcamera/internal/camera.h\n> \n> diff --git a/include/libcamera/internal/camera.h b/include/libcamera/internal/camera.h\n> new file mode 100644\n> index 000000000000..9ef5d8ae98a6\n> --- /dev/null\n> +++ b/include/libcamera/internal/camera.h\n> @@ -0,0 +1,63 @@\n> +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> +/*\n> + * Copyright (C) 2021, Google Inc.\n> + *\n> + * camera.h - Camera private data\n> + */\n> +#ifndef __LIBCAMERA_INTERNAL_CAMERA_H__\n> +#define __LIBCAMERA_INTERNAL_CAMERA_H__\n> +\n> +#include <atomic>\n> +#include <memory>\n> +#include <set>\n> +#include <string>\n> +\n> +#include <libcamera/base/class.h>\n> +\n> +#include <libcamera/camera.h>\n> +\n> +namespace libcamera {\n> +\n> +class PipelineHandler;\n> +class Stream;\n> +\n> +class Camera::Private : public Extensible::Private\n> +{\n> +\tLIBCAMERA_DECLARE_PUBLIC(Camera)\n> +\n> +public:\n> +\tenum State {\n> +\t\tCameraAvailable,\n> +\t\tCameraAcquired,\n> +\t\tCameraConfigured,\n> +\t\tCameraStopping,\n> +\t\tCameraRunning,\n> +\t};\n> +\n> +\tPrivate(PipelineHandler *pipe, const std::string &id,\n> +\t\tconst std::set<Stream *> &streams);\n> +\t~Private();\n> +\n> +\tbool isRunning() const;\n> +\tint isAccessAllowed(State state, bool allowDisconnected = false,\n> +\t\t\t    const char *from = __builtin_FUNCTION()) const;\n> +\tint isAccessAllowed(State low, State high,\n> +\t\t\t    bool allowDisconnected = false,\n> +\t\t\t    const char *from = __builtin_FUNCTION()) const;\n> +\n> +\tvoid disconnect();\n> +\tvoid setState(State state);\n> +\n> +\tstd::shared_ptr<PipelineHandler> pipe_;\n> +\tstd::string id_;\n> +\tstd::set<Stream *> streams_;\n> +\tstd::set<const Stream *> activeStreams_;\n> +\n> +private:\n> +\tbool disconnected_;\n> +\tstd::atomic<State> state_;\n> +};\n> +\n> +} /* namespace libcamera */\n> +\n> +#endif /* __LIBCAMERA_INTERNAL_CAMERA_H__ */\n> diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build\n> index 6d4eb7ed3df6..dac1a2d36fa8 100644\n> --- a/include/libcamera/internal/meson.build\n> +++ b/include/libcamera/internal/meson.build\n> @@ -12,6 +12,7 @@ libcamera_tracepoint_header = custom_target(\n>  libcamera_internal_headers = files([\n>      'bayer_format.h',\n>      'byte_stream_buffer.h',\n> +    'camera.h',\n>      'camera_controls.h',\n>      'camera_sensor.h',\n>      'camera_sensor_properties.h',\n> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> index c126b49290ce..4b5bc891fc37 100644\n> --- a/src/libcamera/camera.cpp\n> +++ b/src/libcamera/camera.cpp\n> @@ -18,10 +18,11 @@\n>  #include <libcamera/request.h>\n>  #include <libcamera/stream.h>\n>  \n> +#include \"libcamera/internal/camera.h\"\n>  #include \"libcamera/internal/pipeline_handler.h\"\n>  \n>  /**\n> - * \\file camera.h\n> + * \\file libcamera/camera.h\n\nUnrelated change ;-) With or without this commented in the commit \nmessage,\n\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n\n>   * \\brief Camera device handling\n>   *\n>   * \\page camera-model Camera Model\n> @@ -331,43 +332,6 @@ std::size_t CameraConfiguration::size() const\n>   * \\brief The vector of stream configurations\n>   */\n>  \n> -class Camera::Private : public Extensible::Private\n> -{\n> -\tLIBCAMERA_DECLARE_PUBLIC(Camera)\n> -\n> -public:\n> -\tenum State {\n> -\t\tCameraAvailable,\n> -\t\tCameraAcquired,\n> -\t\tCameraConfigured,\n> -\t\tCameraStopping,\n> -\t\tCameraRunning,\n> -\t};\n> -\n> -\tPrivate(PipelineHandler *pipe, const std::string &id,\n> -\t\tconst std::set<Stream *> &streams);\n> -\t~Private();\n> -\n> -\tbool isRunning() const;\n> -\tint isAccessAllowed(State state, bool allowDisconnected = false,\n> -\t\t\t    const char *from = __builtin_FUNCTION()) const;\n> -\tint isAccessAllowed(State low, State high,\n> -\t\t\t    bool allowDisconnected = false,\n> -\t\t\t    const char *from = __builtin_FUNCTION()) const;\n> -\n> -\tvoid disconnect();\n> -\tvoid setState(State state);\n> -\n> -\tstd::shared_ptr<PipelineHandler> pipe_;\n> -\tstd::string id_;\n> -\tstd::set<Stream *> streams_;\n> -\tstd::set<const Stream *> activeStreams_;\n> -\n> -private:\n> -\tbool disconnected_;\n> -\tstd::atomic<State> state_;\n> -};\n> -\n>  Camera::Private::Private(PipelineHandler *pipe,\n>  \t\t\t const std::string &id,\n>  \t\t\t const std::set<Stream *> &streams)\n> -- \n> Regards,\n> \n> Laurent Pinchart\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 9D858C0109\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat, 24 Jul 2021 07:01:06 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id F1697687A9;\n\tSat, 24 Jul 2021 09:01:05 +0200 (CEST)","from mail-lf1-x12e.google.com (mail-lf1-x12e.google.com\n\t[IPv6:2a00:1450:4864:20::12e])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C17AC68540\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 24 Jul 2021 09:01:04 +0200 (CEST)","by mail-lf1-x12e.google.com with SMTP id f18so5758314lfu.10\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 24 Jul 2021 00:01:04 -0700 (PDT)","from localhost (h-46-59-88-219.A463.priv.bahnhof.se.\n\t[46.59.88.219]) by smtp.gmail.com with ESMTPSA id\n\tz25sm2427160lfh.283.2021.07.24.00.01.03\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tSat, 24 Jul 2021 00:01:03 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=ragnatech-se.20150623.gappssmtp.com\n\theader.i=@ragnatech-se.20150623.gappssmtp.com\n\theader.b=\"cA4U5/Xz\"; 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=7QjzO1FVJU31mO6XM4zVdmnGFKIeOejMmdyPt67mML4=;\n\tb=cA4U5/XzI772VWM8WY9vrY0aZl5BoPxUjPA1vObRfbidWZ94qqOYZIrJ9jJiqCbl5b\n\t4Cj30XQKrcp1OtyOlYzJTmUl/jrWLl4GW2CRMqImdHBYcp+/wmuQid/PPj/PDeVDuvnd\n\tXokxbFz7Ouwg3kT6lYZyrQVi2bTJC2B33z4zbjDwSUTvngqXUDgQaEQOkgcT3ckTwxrs\n\tHCeaKyufy/7Zqph1u/Ax50TPjxjhQjyU4K09DJH7DiEzRgsgx6gI9Rw8c2uC6CNfiAiv\n\tSjzwGjdeQxwxEh/V/ovg92C+laqnaHF+wCAmQjxV7bOFWiMo/PZn3kFSU4SPCEt43TsZ\n\trRPQ==","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=7QjzO1FVJU31mO6XM4zVdmnGFKIeOejMmdyPt67mML4=;\n\tb=jxafgHzHIj/H76zqKNf0lHcMIx4/pQTMXwIIuVGQIzwEX520fedNoLQvmrIrUvhgRl\n\tgpgNCuT8QtFgb/BhkX9drVACVxkcTbKQKwz2mS4OwR2OSczu0B+Jcp9tuV5rPQc6UFlw\n\ts1frF5tFoyD3Og41z+4mznwBYOZ4D89ur/4SOdP9zaPWBDNqWMMCIAk5adXR25gm2983\n\tm+C+zNZf573qHm9Iw3i3OUYXwSiuiUqtXKPOc7k5F8FSVewwmj/eDTfu/x2b0Y8jh/fY\n\tEljgaK7mNbIUhU2IcFFusMaqzaUOExW0QBbyiB2FhFhI4542L7YoO6GX1d/bGDOGasW6\n\tov9g==","X-Gm-Message-State":"AOAM530J3T+NMkN1Gu2nUdfTnjfAL0Kk8tljLhV28CuGyzgzNZaSSZsN\n\tNkcm0c9/IgehDGvrADZQIP99bQ==","X-Google-Smtp-Source":"ABdhPJzO3fbNOonoqJggmPx6Ukgh3t2bfcDsy8qx85DtbxOpFoaOJ66k2c+lVIKyIXLwFzVm5Goxew==","X-Received":"by 2002:ac2:4ac6:: with SMTP id m6mr5952629lfp.73.1627110064198; \n\tSat, 24 Jul 2021 00:01:04 -0700 (PDT)","Date":"Sat, 24 Jul 2021 09:01:03 +0200","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<YPu6r3apNcxinbMH@oden.dyn.berto.se>","References":"<20210723040036.32346-1-laurent.pinchart@ideasonboard.com>\n\t<20210723040036.32346-7-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=iso-8859-1","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20210723040036.32346-7-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [RFC PATCH 06/17] libcamera: camera: Move\n\tCamera::Private to header file","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","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":18317,"web_url":"https://patchwork.libcamera.org/comment/18317/","msgid":"<YPxjnXIfx8HwtzqQ@pendragon.ideasonboard.com>","date":"2021-07-24T19:01:49","subject":"Re: [libcamera-devel] [RFC PATCH 06/17] libcamera: camera: Move\n\tCamera::Private to header file","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Niklas,\n\nOn Sat, Jul 24, 2021 at 09:01:03AM +0200, Niklas Söderlund wrote:\n> On 2021-07-23 07:00:25 +0300, Laurent Pinchart wrote:\n> > The Camera::Private class is defined in camera.cpp. To prepare for\n> > allowing it to be subclassed by pipeline handlers, move it to a new\n> > internal/camera.h header.\n> > \n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > ---\n> >  include/libcamera/internal/camera.h    | 63 ++++++++++++++++++++++++++\n> >  include/libcamera/internal/meson.build |  1 +\n> >  src/libcamera/camera.cpp               | 40 +---------------\n> >  3 files changed, 66 insertions(+), 38 deletions(-)\n> >  create mode 100644 include/libcamera/internal/camera.h\n> > \n> > diff --git a/include/libcamera/internal/camera.h b/include/libcamera/internal/camera.h\n> > new file mode 100644\n> > index 000000000000..9ef5d8ae98a6\n> > --- /dev/null\n> > +++ b/include/libcamera/internal/camera.h\n> > @@ -0,0 +1,63 @@\n> > +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> > +/*\n> > + * Copyright (C) 2021, Google Inc.\n> > + *\n> > + * camera.h - Camera private data\n> > + */\n> > +#ifndef __LIBCAMERA_INTERNAL_CAMERA_H__\n> > +#define __LIBCAMERA_INTERNAL_CAMERA_H__\n> > +\n> > +#include <atomic>\n> > +#include <memory>\n> > +#include <set>\n> > +#include <string>\n> > +\n> > +#include <libcamera/base/class.h>\n> > +\n> > +#include <libcamera/camera.h>\n> > +\n> > +namespace libcamera {\n> > +\n> > +class PipelineHandler;\n> > +class Stream;\n> > +\n> > +class Camera::Private : public Extensible::Private\n> > +{\n> > +\tLIBCAMERA_DECLARE_PUBLIC(Camera)\n> > +\n> > +public:\n> > +\tenum State {\n> > +\t\tCameraAvailable,\n> > +\t\tCameraAcquired,\n> > +\t\tCameraConfigured,\n> > +\t\tCameraStopping,\n> > +\t\tCameraRunning,\n> > +\t};\n> > +\n> > +\tPrivate(PipelineHandler *pipe, const std::string &id,\n> > +\t\tconst std::set<Stream *> &streams);\n> > +\t~Private();\n> > +\n> > +\tbool isRunning() const;\n> > +\tint isAccessAllowed(State state, bool allowDisconnected = false,\n> > +\t\t\t    const char *from = __builtin_FUNCTION()) const;\n> > +\tint isAccessAllowed(State low, State high,\n> > +\t\t\t    bool allowDisconnected = false,\n> > +\t\t\t    const char *from = __builtin_FUNCTION()) const;\n> > +\n> > +\tvoid disconnect();\n> > +\tvoid setState(State state);\n> > +\n> > +\tstd::shared_ptr<PipelineHandler> pipe_;\n> > +\tstd::string id_;\n> > +\tstd::set<Stream *> streams_;\n> > +\tstd::set<const Stream *> activeStreams_;\n> > +\n> > +private:\n> > +\tbool disconnected_;\n> > +\tstd::atomic<State> state_;\n> > +};\n> > +\n> > +} /* namespace libcamera */\n> > +\n> > +#endif /* __LIBCAMERA_INTERNAL_CAMERA_H__ */\n> > diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build\n> > index 6d4eb7ed3df6..dac1a2d36fa8 100644\n> > --- a/include/libcamera/internal/meson.build\n> > +++ b/include/libcamera/internal/meson.build\n> > @@ -12,6 +12,7 @@ libcamera_tracepoint_header = custom_target(\n> >  libcamera_internal_headers = files([\n> >      'bayer_format.h',\n> >      'byte_stream_buffer.h',\n> > +    'camera.h',\n> >      'camera_controls.h',\n> >      'camera_sensor.h',\n> >      'camera_sensor_properties.h',\n> > diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> > index c126b49290ce..4b5bc891fc37 100644\n> > --- a/src/libcamera/camera.cpp\n> > +++ b/src/libcamera/camera.cpp\n> > @@ -18,10 +18,11 @@\n> >  #include <libcamera/request.h>\n> >  #include <libcamera/stream.h>\n> >  \n> > +#include \"libcamera/internal/camera.h\"\n> >  #include \"libcamera/internal/pipeline_handler.h\"\n> >  \n> >  /**\n> > - * \\file camera.h\n> > + * \\file libcamera/camera.h\n> \n> Unrelated change ;-) With or without this commented in the commit \n> message,\n\nWith the addition of internal/camera.h, \"camera.h\" became ambiguous, and\ndoxygen started warning about it. I'll mention it in the commit message.\n\n> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> \n> >   * \\brief Camera device handling\n> >   *\n> >   * \\page camera-model Camera Model\n> > @@ -331,43 +332,6 @@ std::size_t CameraConfiguration::size() const\n> >   * \\brief The vector of stream configurations\n> >   */\n> >  \n> > -class Camera::Private : public Extensible::Private\n> > -{\n> > -\tLIBCAMERA_DECLARE_PUBLIC(Camera)\n> > -\n> > -public:\n> > -\tenum State {\n> > -\t\tCameraAvailable,\n> > -\t\tCameraAcquired,\n> > -\t\tCameraConfigured,\n> > -\t\tCameraStopping,\n> > -\t\tCameraRunning,\n> > -\t};\n> > -\n> > -\tPrivate(PipelineHandler *pipe, const std::string &id,\n> > -\t\tconst std::set<Stream *> &streams);\n> > -\t~Private();\n> > -\n> > -\tbool isRunning() const;\n> > -\tint isAccessAllowed(State state, bool allowDisconnected = false,\n> > -\t\t\t    const char *from = __builtin_FUNCTION()) const;\n> > -\tint isAccessAllowed(State low, State high,\n> > -\t\t\t    bool allowDisconnected = false,\n> > -\t\t\t    const char *from = __builtin_FUNCTION()) const;\n> > -\n> > -\tvoid disconnect();\n> > -\tvoid setState(State state);\n> > -\n> > -\tstd::shared_ptr<PipelineHandler> pipe_;\n> > -\tstd::string id_;\n> > -\tstd::set<Stream *> streams_;\n> > -\tstd::set<const Stream *> activeStreams_;\n> > -\n> > -private:\n> > -\tbool disconnected_;\n> > -\tstd::atomic<State> state_;\n> > -};\n> > -\n> >  Camera::Private::Private(PipelineHandler *pipe,\n> >  \t\t\t const std::string &id,\n> >  \t\t\t const std::set<Stream *> &streams)","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 4F6ECC322C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat, 24 Jul 2021 19:01:54 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id F0568687AF;\n\tSat, 24 Jul 2021 21:01:53 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A3FFE68536\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 24 Jul 2021 21:01:52 +0200 (CEST)","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 42EC73D7;\n\tSat, 24 Jul 2021 21:01:52 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"tFArC2MN\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1627153312;\n\tbh=GjPC8L10QHq+Bbx80oYcqeNMCsAdicR1pfTWA8X2rXA=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=tFArC2MNmay785CRT3XAAFP9gMknedACFxvKNViRONRg8ZT+TIWxydOF67f6PZkLH\n\tkxpwB1ur3Tu7gS0MnfpR9m5gNudgdPmWXG3DwqOF0cKmQPnNqq2yLdo9QTt9WfBjks\n\tVYRKXdY8bzXzvrvDwsjzbuH+jctiYcKwX2e1rtTY=","Date":"Sat, 24 Jul 2021 22:01:49 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Niklas =?utf-8?q?S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","Message-ID":"<YPxjnXIfx8HwtzqQ@pendragon.ideasonboard.com>","References":"<20210723040036.32346-1-laurent.pinchart@ideasonboard.com>\n\t<20210723040036.32346-7-laurent.pinchart@ideasonboard.com>\n\t<YPu6r3apNcxinbMH@oden.dyn.berto.se>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<YPu6r3apNcxinbMH@oden.dyn.berto.se>","Subject":"Re: [libcamera-devel] [RFC PATCH 06/17] libcamera: camera: Move\n\tCamera::Private to header file","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","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":18427,"web_url":"https://patchwork.libcamera.org/comment/18427/","msgid":"<20210729204413.xnserzxxyahrdqyu@uno.localdomain>","date":"2021-07-29T20:44:13","subject":"Re: [libcamera-devel] [RFC PATCH 06/17] libcamera: camera: Move\n\tCamera::Private to header file","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Laurent,\n\nOn Fri, Jul 23, 2021 at 07:00:25AM +0300, Laurent Pinchart wrote:\n> The Camera::Private class is defined in camera.cpp. To prepare for\n> allowing it to be subclassed by pipeline handlers, move it to a new\n> internal/camera.h header.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  include/libcamera/internal/camera.h    | 63 ++++++++++++++++++++++++++\n>  include/libcamera/internal/meson.build |  1 +\n>  src/libcamera/camera.cpp               | 40 +---------------\n>  3 files changed, 66 insertions(+), 38 deletions(-)\n>  create mode 100644 include/libcamera/internal/camera.h\n>\n> diff --git a/include/libcamera/internal/camera.h b/include/libcamera/internal/camera.h\n> new file mode 100644\n> index 000000000000..9ef5d8ae98a6\n> --- /dev/null\n> +++ b/include/libcamera/internal/camera.h\n> @@ -0,0 +1,63 @@\n> +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> +/*\n> + * Copyright (C) 2021, Google Inc.\n> + *\n> + * camera.h - Camera private data\n> + */\n> +#ifndef __LIBCAMERA_INTERNAL_CAMERA_H__\n> +#define __LIBCAMERA_INTERNAL_CAMERA_H__\n> +\n> +#include <atomic>\n> +#include <memory>\n> +#include <set>\n> +#include <string>\n> +\n> +#include <libcamera/base/class.h>\n> +\n> +#include <libcamera/camera.h>\n> +\n> +namespace libcamera {\n> +\n> +class PipelineHandler;\n> +class Stream;\n> +\n> +class Camera::Private : public Extensible::Private\n> +{\n> +\tLIBCAMERA_DECLARE_PUBLIC(Camera)\n> +\n> +public:\n> +\tenum State {\n> +\t\tCameraAvailable,\n> +\t\tCameraAcquired,\n> +\t\tCameraConfigured,\n> +\t\tCameraStopping,\n> +\t\tCameraRunning,\n> +\t};\n> +\n> +\tPrivate(PipelineHandler *pipe, const std::string &id,\n> +\t\tconst std::set<Stream *> &streams);\n> +\t~Private();\n> +\n> +\tbool isRunning() const;\n> +\tint isAccessAllowed(State state, bool allowDisconnected = false,\n> +\t\t\t    const char *from = __builtin_FUNCTION()) const;\n> +\tint isAccessAllowed(State low, State high,\n> +\t\t\t    bool allowDisconnected = false,\n> +\t\t\t    const char *from = __builtin_FUNCTION()) const;\n> +\n> +\tvoid disconnect();\n> +\tvoid setState(State state);\n> +\n> +\tstd::shared_ptr<PipelineHandler> pipe_;\n> +\tstd::string id_;\n> +\tstd::set<Stream *> streams_;\n> +\tstd::set<const Stream *> activeStreams_;\n> +\n> +private:\n> +\tbool disconnected_;\n> +\tstd::atomic<State> state_;\n> +};\n> +\n> +} /* namespace libcamera */\n> +\n> +#endif /* __LIBCAMERA_INTERNAL_CAMERA_H__ */\n> diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build\n> index 6d4eb7ed3df6..dac1a2d36fa8 100644\n> --- a/include/libcamera/internal/meson.build\n> +++ b/include/libcamera/internal/meson.build\n> @@ -12,6 +12,7 @@ libcamera_tracepoint_header = custom_target(\n>  libcamera_internal_headers = files([\n>      'bayer_format.h',\n>      'byte_stream_buffer.h',\n> +    'camera.h',\n>      'camera_controls.h',\n>      'camera_sensor.h',\n>      'camera_sensor_properties.h',\n> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> index c126b49290ce..4b5bc891fc37 100644\n> --- a/src/libcamera/camera.cpp\n> +++ b/src/libcamera/camera.cpp\n> @@ -18,10 +18,11 @@\n>  #include <libcamera/request.h>\n>  #include <libcamera/stream.h>\n>\n> +#include \"libcamera/internal/camera.h\"\n>  #include \"libcamera/internal/pipeline_handler.h\"\n>\n>  /**\n> - * \\file camera.h\n> + * \\file libcamera/camera.h\n\nDocumentation will be grouped in a single page for both public and\nprivate, I assume this is intentional ?\n\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n   j\n\n>   * \\brief Camera device handling\n>   *\n>   * \\page camera-model Camera Model\n> @@ -331,43 +332,6 @@ std::size_t CameraConfiguration::size() const\n>   * \\brief The vector of stream configurations\n>   */\n>\n> -class Camera::Private : public Extensible::Private\n> -{\n> -\tLIBCAMERA_DECLARE_PUBLIC(Camera)\n> -\n> -public:\n> -\tenum State {\n> -\t\tCameraAvailable,\n> -\t\tCameraAcquired,\n> -\t\tCameraConfigured,\n> -\t\tCameraStopping,\n> -\t\tCameraRunning,\n> -\t};\n> -\n> -\tPrivate(PipelineHandler *pipe, const std::string &id,\n> -\t\tconst std::set<Stream *> &streams);\n> -\t~Private();\n> -\n> -\tbool isRunning() const;\n> -\tint isAccessAllowed(State state, bool allowDisconnected = false,\n> -\t\t\t    const char *from = __builtin_FUNCTION()) const;\n> -\tint isAccessAllowed(State low, State high,\n> -\t\t\t    bool allowDisconnected = false,\n> -\t\t\t    const char *from = __builtin_FUNCTION()) const;\n> -\n> -\tvoid disconnect();\n> -\tvoid setState(State state);\n> -\n> -\tstd::shared_ptr<PipelineHandler> pipe_;\n> -\tstd::string id_;\n> -\tstd::set<Stream *> streams_;\n> -\tstd::set<const Stream *> activeStreams_;\n> -\n> -private:\n> -\tbool disconnected_;\n> -\tstd::atomic<State> state_;\n> -};\n> -\n>  Camera::Private::Private(PipelineHandler *pipe,\n>  \t\t\t const std::string &id,\n>  \t\t\t const std::set<Stream *> &streams)\n> --\n> Regards,\n>\n> Laurent Pinchart\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 7851EC322E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 29 Jul 2021 20:43:29 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 03C0D687C5;\n\tThu, 29 Jul 2021 22:43:29 +0200 (CEST)","from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net\n\t[217.70.183.194])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D98F5687BA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 29 Jul 2021 22:43:27 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay2-d.mail.gandi.net (Postfix) with ESMTPSA id 239A640004;\n\tThu, 29 Jul 2021 20:43:26 +0000 (UTC)"],"Date":"Thu, 29 Jul 2021 22:44:13 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20210729204413.xnserzxxyahrdqyu@uno.localdomain>","References":"<20210723040036.32346-1-laurent.pinchart@ideasonboard.com>\n\t<20210723040036.32346-7-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20210723040036.32346-7-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [RFC PATCH 06/17] libcamera: camera: Move\n\tCamera::Private to header file","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","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":18435,"web_url":"https://patchwork.libcamera.org/comment/18435/","msgid":"<YQNlwqYpPAiESJAv@pendragon.ideasonboard.com>","date":"2021-07-30T02:36:50","subject":"Re: [libcamera-devel] [RFC PATCH 06/17] libcamera: camera: Move\n\tCamera::Private to header file","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Jacopo,\n\nOn Thu, Jul 29, 2021 at 10:44:13PM +0200, Jacopo Mondi wrote:\n> On Fri, Jul 23, 2021 at 07:00:25AM +0300, Laurent Pinchart wrote:\n> > The Camera::Private class is defined in camera.cpp. To prepare for\n> > allowing it to be subclassed by pipeline handlers, move it to a new\n> > internal/camera.h header.\n> >\n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > ---\n> >  include/libcamera/internal/camera.h    | 63 ++++++++++++++++++++++++++\n> >  include/libcamera/internal/meson.build |  1 +\n> >  src/libcamera/camera.cpp               | 40 +---------------\n> >  3 files changed, 66 insertions(+), 38 deletions(-)\n> >  create mode 100644 include/libcamera/internal/camera.h\n> >\n> > diff --git a/include/libcamera/internal/camera.h b/include/libcamera/internal/camera.h\n> > new file mode 100644\n> > index 000000000000..9ef5d8ae98a6\n> > --- /dev/null\n> > +++ b/include/libcamera/internal/camera.h\n> > @@ -0,0 +1,63 @@\n> > +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> > +/*\n> > + * Copyright (C) 2021, Google Inc.\n> > + *\n> > + * camera.h - Camera private data\n> > + */\n> > +#ifndef __LIBCAMERA_INTERNAL_CAMERA_H__\n> > +#define __LIBCAMERA_INTERNAL_CAMERA_H__\n> > +\n> > +#include <atomic>\n> > +#include <memory>\n> > +#include <set>\n> > +#include <string>\n> > +\n> > +#include <libcamera/base/class.h>\n> > +\n> > +#include <libcamera/camera.h>\n> > +\n> > +namespace libcamera {\n> > +\n> > +class PipelineHandler;\n> > +class Stream;\n> > +\n> > +class Camera::Private : public Extensible::Private\n> > +{\n> > +\tLIBCAMERA_DECLARE_PUBLIC(Camera)\n> > +\n> > +public:\n> > +\tenum State {\n> > +\t\tCameraAvailable,\n> > +\t\tCameraAcquired,\n> > +\t\tCameraConfigured,\n> > +\t\tCameraStopping,\n> > +\t\tCameraRunning,\n> > +\t};\n> > +\n> > +\tPrivate(PipelineHandler *pipe, const std::string &id,\n> > +\t\tconst std::set<Stream *> &streams);\n> > +\t~Private();\n> > +\n> > +\tbool isRunning() const;\n> > +\tint isAccessAllowed(State state, bool allowDisconnected = false,\n> > +\t\t\t    const char *from = __builtin_FUNCTION()) const;\n> > +\tint isAccessAllowed(State low, State high,\n> > +\t\t\t    bool allowDisconnected = false,\n> > +\t\t\t    const char *from = __builtin_FUNCTION()) const;\n> > +\n> > +\tvoid disconnect();\n> > +\tvoid setState(State state);\n> > +\n> > +\tstd::shared_ptr<PipelineHandler> pipe_;\n> > +\tstd::string id_;\n> > +\tstd::set<Stream *> streams_;\n> > +\tstd::set<const Stream *> activeStreams_;\n> > +\n> > +private:\n> > +\tbool disconnected_;\n> > +\tstd::atomic<State> state_;\n> > +};\n> > +\n> > +} /* namespace libcamera */\n> > +\n> > +#endif /* __LIBCAMERA_INTERNAL_CAMERA_H__ */\n> > diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build\n> > index 6d4eb7ed3df6..dac1a2d36fa8 100644\n> > --- a/include/libcamera/internal/meson.build\n> > +++ b/include/libcamera/internal/meson.build\n> > @@ -12,6 +12,7 @@ libcamera_tracepoint_header = custom_target(\n> >  libcamera_internal_headers = files([\n> >      'bayer_format.h',\n> >      'byte_stream_buffer.h',\n> > +    'camera.h',\n> >      'camera_controls.h',\n> >      'camera_sensor.h',\n> >      'camera_sensor_properties.h',\n> > diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> > index c126b49290ce..4b5bc891fc37 100644\n> > --- a/src/libcamera/camera.cpp\n> > +++ b/src/libcamera/camera.cpp\n> > @@ -18,10 +18,11 @@\n> >  #include <libcamera/request.h>\n> >  #include <libcamera/stream.h>\n> >\n> > +#include \"libcamera/internal/camera.h\"\n> >  #include \"libcamera/internal/pipeline_handler.h\"\n> >\n> >  /**\n> > - * \\file camera.h\n> > + * \\file libcamera/camera.h\n> \n> Documentation will be grouped in a single page for both public and\n> private, I assume this is intentional ?\n\nFor now, yes. At some point in the future I'd like to generate two sets\nof documentation, one for the public API only, and one for the internal\nAPI (which should at least have links to the public API where\napplicable, but may combine both the public and private APIs, not sure\nyet).\n\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> \n> >   * \\brief Camera device handling\n> >   *\n> >   * \\page camera-model Camera Model\n> > @@ -331,43 +332,6 @@ std::size_t CameraConfiguration::size() const\n> >   * \\brief The vector of stream configurations\n> >   */\n> >\n> > -class Camera::Private : public Extensible::Private\n> > -{\n> > -\tLIBCAMERA_DECLARE_PUBLIC(Camera)\n> > -\n> > -public:\n> > -\tenum State {\n> > -\t\tCameraAvailable,\n> > -\t\tCameraAcquired,\n> > -\t\tCameraConfigured,\n> > -\t\tCameraStopping,\n> > -\t\tCameraRunning,\n> > -\t};\n> > -\n> > -\tPrivate(PipelineHandler *pipe, const std::string &id,\n> > -\t\tconst std::set<Stream *> &streams);\n> > -\t~Private();\n> > -\n> > -\tbool isRunning() const;\n> > -\tint isAccessAllowed(State state, bool allowDisconnected = false,\n> > -\t\t\t    const char *from = __builtin_FUNCTION()) const;\n> > -\tint isAccessAllowed(State low, State high,\n> > -\t\t\t    bool allowDisconnected = false,\n> > -\t\t\t    const char *from = __builtin_FUNCTION()) const;\n> > -\n> > -\tvoid disconnect();\n> > -\tvoid setState(State state);\n> > -\n> > -\tstd::shared_ptr<PipelineHandler> pipe_;\n> > -\tstd::string id_;\n> > -\tstd::set<Stream *> streams_;\n> > -\tstd::set<const Stream *> activeStreams_;\n> > -\n> > -private:\n> > -\tbool disconnected_;\n> > -\tstd::atomic<State> state_;\n> > -};\n> > -\n> >  Camera::Private::Private(PipelineHandler *pipe,\n> >  \t\t\t const std::string &id,\n> >  \t\t\t const std::set<Stream *> &streams)","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 2E849C322E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 30 Jul 2021 02:37:01 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A71E2687BD;\n\tFri, 30 Jul 2021 04:37:00 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 7E5C5687BD\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 30 Jul 2021 04:36:58 +0200 (CEST)","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 083CC89B;\n\tFri, 30 Jul 2021 04:36:57 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"CX8UVTtj\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1627612618;\n\tbh=6FizzOCIBpKKTC3WrBwBc7QKHbRRlJZnuaUEKNxHCdE=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=CX8UVTtjCZyY+8JWs2V7Cla6Mky72cwCuq/wGB9/xU6AnRcJw4rzhF/p8Spxo7t3w\n\t5r35E07UyCGmch7dHVF6aP4aeU1OAA06LLhe22bqrUM3HY17ZwhA/qyqQdAHhEgJj4\n\tBHXwC7QaJj3+nN7eddi25Bq1wt+w9HOI6ZcD6ySw=","Date":"Fri, 30 Jul 2021 05:36:50 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<YQNlwqYpPAiESJAv@pendragon.ideasonboard.com>","References":"<20210723040036.32346-1-laurent.pinchart@ideasonboard.com>\n\t<20210723040036.32346-7-laurent.pinchart@ideasonboard.com>\n\t<20210729204413.xnserzxxyahrdqyu@uno.localdomain>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20210729204413.xnserzxxyahrdqyu@uno.localdomain>","Subject":"Re: [libcamera-devel] [RFC PATCH 06/17] libcamera: camera: Move\n\tCamera::Private to header file","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","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]