[libcamera-devel] [PATCH v3 4/8] android: camera_device: Replace running_ with CameraState
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Sun May 23 20:02:57 CEST 2021
Hi Jacopo,
Thank you for the patch.
On Fri, May 21, 2021 at 05:42:23PM +0200, Jacopo Mondi 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 bd96b355ea92..cf0e5e459213 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)
> @@ -1844,7 +1844,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();
> @@ -1853,7 +1853,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 a34e8a2cd900..995b423c6deb 100644
> --- a/src/android/camera_device.h
> +++ b/src/android/camera_device.h
> @@ -88,6 +88,11 @@ private:
> int androidFormat;
> };
>
> + enum State {
> + CameraStopped,
> + CameraRunning,
> + };
This is a topic that will require revisiting enums globally, but I think
the code would be clearer with
enum class State {
Stopped,
Running,
};
You would then need to use State::Stopped and State::Running explicitly
above. It states explicitly the value is a camera state (compared to
CameraRunning and CameraStopped that do so implicitly only), and avoids
using incorrect values for state_ by mistake as the compiler would catch
that with enum class. What do you think ?
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> +
> void stop();
>
> int initializeStreamConfigurations();
> @@ -114,7 +119,8 @@ private:
>
> CameraWorker worker_;
>
> - bool running_;
> + State state_;
> +
> std::shared_ptr<libcamera::Camera> camera_;
> std::unique_ptr<libcamera::CameraConfiguration> config_;
>
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list