android: camera_stream: Add sourceStream

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>
This commit is contained in:
Hirokazu Honda 2022-05-27 18:34:36 +09:00 committed by Jacopo Mondi
parent b4d4b78c82
commit fec64fb75a
3 changed files with 23 additions and 4 deletions

View file

@ -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();
}
}

View file

@ -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)
{
}

View file

@ -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_;