summaryrefslogtreecommitdiff
path: root/src/libcamera
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcamera')
-rw-r--r--src/libcamera/buffer.cpp25
-rw-r--r--src/libcamera/request.cpp3
2 files changed, 27 insertions, 1 deletions
diff --git a/src/libcamera/buffer.cpp b/src/libcamera/buffer.cpp
index e2d1cf04..21abdcce 100644
--- a/src/libcamera/buffer.cpp
+++ b/src/libcamera/buffer.cpp
@@ -196,7 +196,7 @@ void *Plane::mem()
*/
Buffer::Buffer()
- : index_(-1)
+ : index_(-1), request_(nullptr)
{
}
@@ -249,6 +249,22 @@ Buffer::Buffer()
*/
/**
+ * \fn Buffer::request()
+ * \brief Retrieve the request this buffer belongs to
+ *
+ * The intended callers of this method are buffer completion handlers that
+ * need to associate a buffer to the request it belongs to.
+ *
+ * A Buffer is associated to a request by Request::prepare() and the
+ * association is valid until the buffer completes. The returned request
+ * pointer is valid only during that interval.
+ *
+ * \return The Request the Buffer belongs to, or nullptr if the buffer is
+ * either completed or not associated with a request
+ * \sa Buffer::setRequest()
+ */
+
+/**
* \brief Mark a buffer as cancel by setting its status to BufferCancelled
*/
void Buffer::cancel()
@@ -260,6 +276,13 @@ void Buffer::cancel()
}
/**
+ * \fn Buffer::setRequest()
+ * \brief Set the request this buffer belongs to
+ *
+ * The intended callers are Request::prepare() and Request::completeBuffer().
+ */
+
+/**
* \class BufferPool
* \brief A pool of buffers
*
diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
index 7088a479..433c6f83 100644
--- a/src/libcamera/request.cpp
+++ b/src/libcamera/request.cpp
@@ -141,6 +141,7 @@ int Request::prepare()
for (auto const &pair : bufferMap_) {
Buffer *buffer = pair.second;
+ buffer->setRequest(this);
pending_.insert(buffer);
}
@@ -177,6 +178,8 @@ bool Request::completeBuffer(Buffer *buffer)
int ret = pending_.erase(buffer);
ASSERT(ret == 1);
+ buffer->setRequest(nullptr);
+
return !hasPendingBuffers();
}