summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo@jmondi.org>2019-06-28 10:03:02 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-07-14 16:00:58 +0300
commitbe3e3ebc92d8ffba8a03483f05e7956e33726c4e (patch)
tree57a9b71ab3033d242da11449117d9100c499f2fc /src
parent5085bc03bc14234bced8b194f4ed61f221d81852 (diff)
libcamera: stream: Shorten access to the bufferPool
All interactions with the Stream's buffers currently go through the BufferPool. In order to shorten accessing the buffers array, and eventually restrict access to the Stream's internal buffer pool, provide operations to access, create and destroy buffers. It is still possible to access the pool for pipeline handlers to populate it by exporting buffers from a video device to Stream's pool. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Diffstat (limited to 'src')
-rw-r--r--src/cam/capture.cpp2
-rw-r--r--src/libcamera/camera.cpp4
-rw-r--r--src/libcamera/stream.cpp36
-rw-r--r--src/qcam/main_window.cpp2
4 files changed, 38 insertions, 6 deletions
diff --git a/src/cam/capture.cpp b/src/cam/capture.cpp
index 66ec1aba..5ffa4ae2 100644
--- a/src/cam/capture.cpp
+++ b/src/cam/capture.cpp
@@ -154,7 +154,7 @@ void Capture::requestComplete(Request *request, const std::map<Stream *, Buffer
for (auto it = buffers.begin(); it != buffers.end(); ++it) {
Stream *stream = it->first;
Buffer *buffer = it->second;
- BufferMemory *mem = &stream->bufferPool().buffers()[buffer->index()];
+ BufferMemory *mem = &stream->buffers()[buffer->index()];
const std::string &name = streamName_[stream];
info << " " << name
diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
index 1f307654..61d3e821 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->bufferPool().createBuffers(cfg.bufferCount);
+ stream->createBuffers(cfg.bufferCount);
}
state_ = CameraConfigured;
@@ -744,7 +744,7 @@ int Camera::freeBuffers()
* All mappings must be destroyed before buffers can be freed
* by the V4L2 device that has allocated them.
*/
- stream->bufferPool().destroyBuffers();
+ stream->destroyBuffers();
}
state_ = CameraConfigured;
diff --git a/src/libcamera/stream.cpp b/src/libcamera/stream.cpp
index 6d80646b..12067c08 100644
--- a/src/libcamera/stream.cpp
+++ b/src/libcamera/stream.cpp
@@ -435,20 +435,52 @@ std::unique_ptr<Buffer> Stream::createBuffer(unsigned int index)
* \fn Stream::bufferPool()
* \brief Retrieve the buffer pool for the stream
*
- * The buffer pool handles the buffers used to capture frames at the output of
- * the stream. It is initially created empty and shall be populated with
+ * The buffer pool handles the memory buffers used to store frames for the
+ * stream. It is initially created empty and shall be populated with
* buffers before being used.
*
* \return A reference to the buffer pool
*/
/**
+ * \fn Stream::buffers()
+ * \brief Retrieve the memory buffers in the Stream's buffer pool
+ * \return The list of stream's memory buffers
+ */
+
+/**
* \fn Stream::configuration()
* \brief Retrieve the active configuration of the stream
* \return The active configuration of the stream
*/
/**
+ * \brief Create buffers for the stream
+ * \param[in] count The number of buffers to create
+ *
+ * Create \a count empty buffers in the Stream's buffer pool.
+ */
+void Stream::createBuffers(unsigned int count)
+{
+ destroyBuffers();
+ if (count == 0)
+ return;
+
+ bufferPool_.createBuffers(count);
+}
+
+/**
+ * \brief Destroy buffers in the stream
+ *
+ * If no buffers have been created or if buffers have already been destroyed no
+ * operation is performed.
+ */
+void Stream::destroyBuffers()
+{
+ bufferPool_.destroyBuffers();
+}
+
+/**
* \var Stream::bufferPool_
* \brief The pool of buffers associated with the stream
*
diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
index 7023e115..92f88832 100644
--- a/src/qcam/main_window.cpp
+++ b/src/qcam/main_window.cpp
@@ -235,7 +235,7 @@ void MainWindow::requestComplete(Request *request,
<< " fps: " << std::fixed << std::setprecision(2) << fps
<< std::endl;
- BufferMemory *mem = &stream->bufferPool().buffers()[buffer->index()];
+ BufferMemory *mem = &stream->buffers()[buffer->index()];
display(buffer, mem);
request = camera_->createRequest();