[libcamera-devel] [PATCH v3 4/8] android: camera_device: Replace running_ with CameraState
Jacopo Mondi
jacopo at jmondi.org
Fri May 21 17:42:23 CEST 2021
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,
+ };
+
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_;
--
2.31.1
More information about the libcamera-devel
mailing list