[libcamera-devel] [PATCH v2 1/5] android: camera_stream: Add sourceStream

Paul Elder paul.elder at ideasonboard.com
Fri May 27 11:34:36 CEST 2022


From: Hirokazu Honda <hiroh at chromium.org>

Add to the CameraStream class a sourceStream field, which for streams
of type Mapped contains a reference to the stream which produces the
actual image data.

The sourceStream of mapped streams will be used in later patches to make
sure for each Mapped stream at least one libcamera::Stream is queued to
the libcamera::Camera.

Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>

---
Changes in v2:
- fix whitespace
---
 src/android/camera_device.cpp | 8 +++++++-
 src/android/camera_stream.cpp | 6 ++++--
 src/android/camera_stream.h   | 6 +++++-
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 8e804d4d..20599665 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -681,10 +681,16 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
 	for (const auto &streamConfig : streamConfigs) {
 		config->addConfiguration(streamConfig.config);
 
+		CameraStream *sourceStream = nullptr;
 		for (auto &stream : streamConfig.streams) {
 			streams_.emplace_back(this, config.get(), stream.type,
-					      stream.stream, config->size() - 1);
+					      stream.stream, sourceStream,
+					      config->size() - 1);
 			stream.stream->priv = static_cast<void *>(&streams_.back());
+
+			/* Mapped streams are always associated with a Direct one. */
+			if (stream.type == CameraStream::Type::Direct)
+				sourceStream = &streams_.back();
 		}
 	}
 
diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp
index 94f1884c..154e088e 100644
--- a/src/android/camera_stream.cpp
+++ b/src/android/camera_stream.cpp
@@ -52,9 +52,11 @@ LOG_DECLARE_CATEGORY(HAL)
 
 CameraStream::CameraStream(CameraDevice *const cameraDevice,
 			   CameraConfiguration *config, Type type,
-			   camera3_stream_t *camera3Stream, unsigned int index)
+			   camera3_stream_t *camera3Stream,
+			   CameraStream *const sourceStream, unsigned int index)
 	: cameraDevice_(cameraDevice), config_(config), type_(type),
-	  camera3Stream_(camera3Stream), index_(index)
+	  camera3Stream_(camera3Stream), sourceStream_(sourceStream),
+	  index_(index)
 {
 }
 
diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h
index f9504462..4c5078b2 100644
--- a/src/android/camera_stream.h
+++ b/src/android/camera_stream.h
@@ -114,7 +114,9 @@ public:
 	};
 	CameraStream(CameraDevice *const cameraDevice,
 		     libcamera::CameraConfiguration *config, Type type,
-		     camera3_stream_t *camera3Stream, unsigned int index);
+		     camera3_stream_t *camera3Stream,
+		     CameraStream *const sourceStream,
+		     unsigned int index);
 	CameraStream(CameraStream &&other);
 	~CameraStream();
 
@@ -122,6 +124,7 @@ public:
 	camera3_stream_t *camera3Stream() const { return camera3Stream_; }
 	const libcamera::StreamConfiguration &configuration() const;
 	libcamera::Stream *stream() const;
+	CameraStream *sourceStream() const { return sourceStream_; }
 
 	int configure();
 	int process(Camera3RequestDescriptor::StreamBuffer *streamBuffer);
@@ -167,6 +170,7 @@ private:
 	const libcamera::CameraConfiguration *config_;
 	const Type type_;
 	camera3_stream_t *camera3Stream_;
+	CameraStream *const sourceStream_;
 	const unsigned int index_;
 
 	std::unique_ptr<PlatformFrameBufferAllocator> allocator_;
-- 
2.30.2



More information about the libcamera-devel mailing list