diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2019-07-12 22:32:01 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2019-07-14 16:01:07 +0300 |
commit | 689e8916caf11942286a1f1264e55dcb709d3939 (patch) | |
tree | a82d5d6e858c2a0e3cd1b939198fa87ba5efa3f2 /src/libcamera | |
parent | f1199a1011a22f00e863473ae241c781f4bd999d (diff) |
libcamera: buffer: Add an accessor to the BufferMemory
Buffer instances reference memory, which is modelled internally by a
BufferMemory instance. Store a pointer to the BufferMemory in the Buffer
class, and populate it when the buffer is queued to the camera through a
request. This is useful for applications to access the buffer memory in
the buffer or request completion handler.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Diffstat (limited to 'src/libcamera')
-rw-r--r-- | src/libcamera/buffer.cpp | 11 | ||||
-rw-r--r-- | src/libcamera/camera.cpp | 4 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/libcamera/buffer.cpp b/src/libcamera/buffer.cpp index 99358633..fe29c2f6 100644 --- a/src/libcamera/buffer.cpp +++ b/src/libcamera/buffer.cpp @@ -301,6 +301,17 @@ Buffer::Buffer(unsigned int index, const Buffer *metadata) */ /** + * \fn Buffer::mem() + * \brief Retrieve the BufferMemory this buffer is associated with + * + * The association between the buffer and a BufferMemory instance is valid from + * the time the request containing this buffer is queued to a camera to the end + * of that request's completion handler. + * + * \return The BufferMemory this buffer is associated with + */ + +/** * \fn Buffer::bytesused() * \brief Retrieve the number of bytes occupied by the data in the buffer * \return Number of bytes occupied in the buffer diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp index af69607b..db15fd46 100644 --- a/src/libcamera/camera.cpp +++ b/src/libcamera/camera.cpp @@ -811,10 +811,14 @@ int Camera::queueRequest(Request *request) for (auto const &it : request->buffers()) { Stream *stream = it.first; + Buffer *buffer = it.second; + if (activeStreams_.find(stream) == activeStreams_.end()) { LOG(Camera, Error) << "Invalid request"; return -EINVAL; } + + buffer->mem_ = &stream->buffers()[buffer->index_]; } int ret = request->prepare(); |