[libcamera-devel] [PATCH v2 4/8] android: camera_device: Replace running_ with CameraState

Hirokazu Honda hiroh at chromium.org
Mon May 17 06:50:48 CEST 2021


Hi Jacopo, thank you for the patch.

On Thu, May 13, 2021 at 6:22 PM Jacopo Mondi <jacopo at jmondi.org> wrote:

> The CameraDevice class maintains the camera state in the 'running_'
> boolean flag to check if the camera has to be started at the first
> received process_capture_request() call which happens after the camera
> had been stopped.
>
> So far this was correct, as the operations that change the camera
> could only start or stop the camera, so a simple boolean flag
> was enough.
>
> To prepare to handle the flush() operation that will introduce a new
> 'flushing' state, replace the simple plain boolean flag with an
> enumeration of values that define the CameraState.
>
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
>

Reviewed-by: Hirokazu Honda <hiroh at chromium.org>


> ---
>  src/android/camera_device.cpp | 10 +++++-----
>  src/android/camera_device.h   |  8 +++++++-
>  2 files changed, 12 insertions(+), 6 deletions(-)
>
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index 383baa60f918..82dd7ce0ee99 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -402,7 +402,7 @@
> CameraDevice::Camera3RequestDescriptor::Camera3RequestDescriptor(
>   */
>
>  CameraDevice::CameraDevice(unsigned int id, std::shared_ptr<Camera>
> camera)
> -       : id_(id), running_(false), camera_(std::move(camera)),
> +       : id_(id), state_(CameraStopped), camera_(std::move(camera)),
>           facing_(CAMERA_FACING_FRONT), orientation_(0)
>  {
>         camera_->requestCompleted.connect(this,
> &CameraDevice::requestComplete);
> @@ -758,14 +758,14 @@ void CameraDevice::close()
>
>  void CameraDevice::stop()
>  {
> -       if (!running_)
> +       if (state_ == CameraStopped)
>                 return;
>
>         worker_.stop();
>         camera_->stop();
>
>         descriptors_.clear();
> -       running_ = false;
> +       state_ = CameraStopped;
>  }
>
>  void CameraDevice::setCallbacks(const camera3_callback_ops_t *callbacks)
> @@ -1915,7 +1915,7 @@ int
> CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques
>                 return -EINVAL;
>
>         /* Start the camera if that's the first request we handle. */
> -       if (!running_) {
> +       if (state_ == CameraStopped) {
>                 worker_.start();
>
>                 int ret = camera_->start();
> @@ -1924,7 +1924,7 @@ int
> CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques
>                         return ret;
>                 }
>
> -               running_ = true;
> +               state_ = CameraRunning;
>         }
>
>         /*
> diff --git a/src/android/camera_device.h b/src/android/camera_device.h
> index 8d5da8bc59e1..30b364decaab 100644
> --- a/src/android/camera_device.h
> +++ b/src/android/camera_device.h
> @@ -88,6 +88,11 @@ private:
>                 int androidFormat;
>         };
>
> +       enum State {
> +               CameraStopped,
> +               CameraRunning,
> +       };
> +
>         void stop();
>
>         int initializeStreamConfigurations();
> @@ -115,7 +120,8 @@ private:
>
>         CameraWorker worker_;
>
> -       bool running_;
> +       State state_;
> +
>         std::shared_ptr<libcamera::Camera> camera_;
>         std::unique_ptr<libcamera::CameraConfiguration> config_;
>
> --
> 2.31.1
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20210517/e5e3cf0b/attachment-0001.htm>


More information about the libcamera-devel mailing list