[libcamera-devel] [PATCH v2 6/9] android: camera_device: Maintain a vector of CameraStream
Kieran Bingham
kieran.bingham at ideasonboard.com
Thu Jul 2 23:36:51 CEST 2020
Introduce a vector storing a CameraStream to track and maintain
state between an Android stream (camera3_stream_t) and a libcamera
Stream.
Only the index of the libcamera stream is stored, to facilitate identifying
the correct index for both the StreamConfiguration and Stream vectors.
Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
---
src/android/camera_device.cpp | 18 ++++++++++++++++--
src/android/camera_device.h | 6 ++++++
2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 77083219d8a1..fc3962dac230 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -952,6 +952,14 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
return -EINVAL;
}
+ streams_.reserve(stream_list->num_streams);
+
+ /*
+ * Track actually created streams, as there may not be a 1:1 mapping of
+ * camera3 streams to libcamera streams.
+ */
+ unsigned int streamIndex = 0;
+
for (unsigned int i = 0; i < stream_list->num_streams; ++i) {
camera3_stream_t *stream = stream_list->streams[i];
@@ -967,6 +975,9 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
if (!format.isValid())
return -EINVAL;
+ /* Maintain internal state of all stream mappings. */
+ streams_[i].androidStream = stream;
+
StreamConfiguration streamConfiguration;
streamConfiguration.size.width = stream->width;
@@ -974,6 +985,7 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
streamConfiguration.pixelFormat = format;
config_->addConfiguration(streamConfiguration);
+ streams_[i].libcameraIndex = streamIndex++;
}
switch (config_->validate()) {
@@ -991,10 +1003,12 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
for (unsigned int i = 0; i < stream_list->num_streams; ++i) {
camera3_stream_t *stream = stream_list->streams[i];
- StreamConfiguration &streamConfiguration = config_->at(i);
+ CameraStream *cameraStream = &streams_[i];
+
+ StreamConfiguration &cfg = config_->at(cameraStream->libcameraIndex);
/* Use the bufferCount confirmed by the validation process. */
- stream->max_buffers = streamConfiguration.bufferCount;
+ stream->max_buffers = cfg.bufferCount;
}
/*
diff --git a/src/android/camera_device.h b/src/android/camera_device.h
index 5bd6cf416156..275760f0aa26 100644
--- a/src/android/camera_device.h
+++ b/src/android/camera_device.h
@@ -25,6 +25,11 @@
class CameraMetadata;
+struct CameraStream {
+ camera3_stream *androidStream;
+ unsigned int libcameraIndex;
+};
+
class CameraDevice : protected libcamera::Loggable
{
public:
@@ -89,6 +94,7 @@ private:
std::vector<Camera3StreamConfiguration> streamConfigurations_;
std::map<int, libcamera::PixelFormat> formatsMap_;
+ std::vector<CameraStream> streams_;
int facing_;
int orientation_;
--
2.25.1
More information about the libcamera-devel
mailing list