summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo@jmondi.org>2019-06-28 09:13:34 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-07-14 16:01:02 +0300
commit99e1e786b475f3d6f4f8d9f5cd21db6c524ba60f (patch)
tree00992fa3519e69c1e01d02b1746be0762b5de4af /src
parentbe3e3ebc92d8ffba8a03483f05e7956e33726c4e (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.cpp2
-rw-r--r--src/libcamera/stream.cpp35
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 */