diff options
author | Jacopo Mondi <jacopo@jmondi.org> | 2019-06-28 09:13:34 +0200 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2019-07-14 16:01:02 +0300 |
commit | 99e1e786b475f3d6f4f8d9f5cd21db6c524ba60f (patch) | |
tree | 00992fa3519e69c1e01d02b1746be0762b5de4af /src | |
parent | be3e3ebc92d8ffba8a03483f05e7956e33726c4e (diff) |
libcamera: stream: Add Stream memory type
Define the memory type a Stream uses and allow application to set it
through the associated StreamConfiguration.
A Stream can use either internal or external memory allocation methods,
depending on where the data produced by the stream is actually saved.
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/libcamera/camera.cpp | 2 | ||||
-rw-r--r-- | src/libcamera/stream.cpp | 35 |
2 files changed, 33 insertions, 4 deletions
diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp index 61d3e821..af69607b 100644 --- a/src/libcamera/camera.cpp +++ b/src/libcamera/camera.cpp @@ -683,7 +683,7 @@ int Camera::configure(CameraConfiguration *config) * Allocate buffer objects in the pool. * Memory will be allocated and assigned later. */ - stream->createBuffers(cfg.bufferCount); + stream->createBuffers(cfg.memoryType, cfg.bufferCount); } state_ = CameraConfigured; diff --git a/src/libcamera/stream.cpp b/src/libcamera/stream.cpp index 12067c08..37a9bc0a 100644 --- a/src/libcamera/stream.cpp +++ b/src/libcamera/stream.cpp @@ -264,6 +264,17 @@ SizeRange StreamFormats::range(unsigned int pixelformat) const } /** + * \enum MemoryType + * \brief Define the memory type used by a Stream + * \var MemoryType::InternalMemory + * The Stream uses memory allocated internally by the library and exported to + * applications. + * \var MemoryType::ExternalMemory + * The Stream uses memory allocated externally by application and imported in + * the library. + */ + +/** * \struct StreamConfiguration * \brief Configuration parameters for a stream * @@ -276,7 +287,7 @@ SizeRange StreamFormats::range(unsigned int pixelformat) const * handlers provied StreamFormats. */ StreamConfiguration::StreamConfiguration() - : stream_(nullptr) + : memoryType(InternalMemory), stream_(nullptr) { } @@ -284,7 +295,7 @@ StreamConfiguration::StreamConfiguration() * \brief Construct a configuration with stream formats */ StreamConfiguration::StreamConfiguration(const StreamFormats &formats) - : stream_(nullptr), formats_(formats) + : memoryType(InternalMemory), stream_(nullptr), formats_(formats) { } @@ -302,6 +313,11 @@ StreamConfiguration::StreamConfiguration(const StreamFormats &formats) */ /** + * \var StreamConfiguration::memoryType + * \brief The memory type the stream shall use + */ + +/** * \var StreamConfiguration::bufferCount * \brief Requested number of buffers to allocate for the stream */ @@ -455,17 +471,25 @@ std::unique_ptr<Buffer> Stream::createBuffer(unsigned int index) */ /** + * \fn Stream::memoryType() + * \brief Retrieve the stream memory type + * \return The memory type used by the stream + */ + +/** * \brief Create buffers for the stream * \param[in] count The number of buffers to create + * \param[in] memory The stream memory type * * Create \a count empty buffers in the Stream's buffer pool. */ -void Stream::createBuffers(unsigned int count) +void Stream::createBuffers(MemoryType memory, unsigned int count) { destroyBuffers(); if (count == 0) return; + memoryType_ = memory; bufferPool_.createBuffers(count); } @@ -497,4 +521,9 @@ void Stream::destroyBuffers() * next call to Camera::configure() regardless of if it includes the stream. */ +/** + * \var Stream::memoryType_ + * \brief The stream memory type + */ + } /* namespace libcamera */ |