From 0b661d70ec62d69ffd4ea7bb0aeb92d7ad12b8d3 Mon Sep 17 00:00:00 2001
From: Hirokazu Honda <hiroh@chromium.org>
Date: Fri, 2 Apr 2021 11:12:37 +0900
Subject: android: CameraDevice: Add stop()

This adds CameraDevice::stop(), which cleans up the member
variables of CameraDevice. It is called in CameraDevice::close()
and CameraDevice::configureStreams().

Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 src/android/camera_device.cpp | 19 ++++++++++++-------
 src/android/camera_device.h   |  2 ++
 2 files changed, 14 insertions(+), 7 deletions(-)

(limited to 'src/android')

diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 89044efa..00eb76b5 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -754,9 +754,18 @@ void CameraDevice::close()
 {
 	streams_.clear();
 
+	stop();
+
+	camera_->release();
+}
+
+void CameraDevice::stop()
+{
+	if (!running_)
+		return;
+
 	worker_.stop();
 	camera_->stop();
-	camera_->release();
 
 	running_ = false;
 }
@@ -1642,12 +1651,8 @@ PixelFormat CameraDevice::toPixelFormat(int format) const
  */
 int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
 {
-	/* Before any configuration attempt, stop the camera if it's running. */
-	if (running_) {
-		worker_.stop();
-		camera_->stop();
-		running_ = false;
-	}
+	/* Before any configuration attempt, stop the camera. */
+	stop();
 
 	if (stream_list->num_streams == 0) {
 		LOG(HAL, Error) << "No streams in configuration";
diff --git a/src/android/camera_device.h b/src/android/camera_device.h
index 11bdfec8..39cf95ad 100644
--- a/src/android/camera_device.h
+++ b/src/android/camera_device.h
@@ -85,6 +85,8 @@ private:
 		int androidFormat;
 	};
 
+	void stop();
+
 	int initializeStreamConfigurations();
 	std::vector<libcamera::Size>
 	getYUVResolutions(libcamera::CameraConfiguration *cameraConfig,
-- 
cgit v1.2.1