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>
This commit is contained in:
committed by
Laurent Pinchart
parent
be3e3ebc92
commit
99e1e786b4
@@ -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;
|
||||
|
||||
@@ -263,6 +263,17 @@ SizeRange StreamFormats::range(unsigned int pixelformat) const
|
||||
return range;
|
||||
}
|
||||
|
||||
/**
|
||||
* \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)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -301,6 +312,11 @@ StreamConfiguration::StreamConfiguration(const StreamFormats &formats)
|
||||
* format described in V4L2 using the V4L2_PIX_FMT_* definitions.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \var StreamConfiguration::memoryType
|
||||
* \brief The memory type the stream shall use
|
||||
*/
|
||||
|
||||
/**
|
||||
* \var StreamConfiguration::bufferCount
|
||||
* \brief Requested number of buffers to allocate for the stream
|
||||
@@ -454,18 +470,26 @@ std::unique_ptr<Buffer> Stream::createBuffer(unsigned int index)
|
||||
* \return The active configuration of the stream
|
||||
*/
|
||||
|
||||
/**
|
||||
* \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 */
|
||||
|
||||
Reference in New Issue
Block a user