[libcamera-devel] [PATCH v3 1/5] android: camera_stream: Add sourceStream
Jacopo Mondi
jacopo at jmondi.org
Sat Jun 4 11:30:21 CEST 2022
From: Hirokazu Honda <hiroh at 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 at chromium.org>
Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at 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(-)
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_;
--
2.35.1
More information about the libcamera-devel
mailing list