[libcamera-devel,v3,1/5] android: camera_stream: Add sourceStream
diff mbox series

Message ID 20220604093025.77737-2-jacopo@jmondi.org
State Accepted
Headers show
Series
  • Plumb the YUV processor in
Related show

Commit Message

Jacopo Mondi June 4, 2022, 9:30 a.m. UTC
From: Hirokazu Honda <hiroh@chromium.org>

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

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@chromium.org>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 src/android/camera_device.cpp | 15 ++++++++++++++-
 src/android/camera_stream.cpp |  6 ++++--
 src/android/camera_stream.h   |  6 +++++-
 3 files changed, 23 insertions(+), 4 deletions(-)

Patch
diff mbox series

diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 8e804d4d5aed..773cb3b66d48 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -681,10 +681,23 @@  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());
+
+			/*
+			 * The streamConfig.streams vector contains as its first
+			 * element a Direct (or Internal) stream, and then an
+			 * optional set of Mapped streams derived from the
+			 * Direct stream. Cache the Direct stream pointer, to
+			 * be used when constructing the subsequent mapped
+			 * streams.
+			 */
+			if (stream.type == CameraStream::Type::Direct)
+				sourceStream = &streams_.back();
 		}
 	}
 
diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp
index 94f1884caa53..154e088e1b86 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 f9504462b253..4c5078b2c26d 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_;