libcamera: v4l2_device: Update dequeued buffer information
Copy the information from the struct v4l2_buffer when dequeueing the buffer as applications need this information to make sense of the captured data. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
ba4dfa7471
commit
e94e52c0cb
3 changed files with 43 additions and 1 deletions
|
@ -7,6 +7,7 @@
|
|||
#ifndef __LIBCAMERA_BUFFER_H__
|
||||
#define __LIBCAMERA_BUFFER_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <vector>
|
||||
|
||||
#include <libcamera/signal.h>
|
||||
|
@ -42,14 +43,21 @@ public:
|
|||
Buffer();
|
||||
|
||||
unsigned int index() const { return index_; }
|
||||
unsigned int bytesused() const { return bytesused_; }
|
||||
uint64_t timestamp() const { return timestamp_; }
|
||||
unsigned int sequence() const { return sequence_; }
|
||||
std::vector<Plane> &planes() { return planes_; }
|
||||
|
||||
Signal<Buffer *> completed;
|
||||
|
||||
private:
|
||||
friend class BufferPool;
|
||||
friend class V4L2Device;
|
||||
|
||||
unsigned int index_;
|
||||
unsigned int bytesused_;
|
||||
uint64_t timestamp_;
|
||||
unsigned int sequence_;
|
||||
|
||||
std::vector<Plane> planes_;
|
||||
};
|
||||
|
|
|
@ -203,6 +203,32 @@ Buffer::Buffer()
|
|||
* \brief A Signal to provide notifications that the specific Buffer is ready
|
||||
*/
|
||||
|
||||
/**
|
||||
* \fn Buffer::bytesused()
|
||||
* \brief Retrieve the number of bytes occupied by the data in the buffer
|
||||
* \return Number of bytes occupied in the buffer
|
||||
*/
|
||||
|
||||
/**
|
||||
* \fn Buffer::timestamp()
|
||||
* \brief Retrieve the time when the buffer was processed
|
||||
*
|
||||
* The timestamp is expressed as a number number of nanoseconds since the epoch.
|
||||
*
|
||||
* \return Timestamp when the buffer was processed
|
||||
*/
|
||||
|
||||
/**
|
||||
* \fn Buffer::sequence()
|
||||
* \brief Retrieve the buffer sequence number
|
||||
*
|
||||
* The sequence number is a monotonically increasing number assigned to the
|
||||
* buffer processed by the stream. Gaps in the sequence numbers indicate
|
||||
* dropped frames.
|
||||
*
|
||||
* \return Sequence number of the buffer
|
||||
*/
|
||||
|
||||
/**
|
||||
* \class BufferPool
|
||||
* \brief A pool of buffers
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include <string.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/time.h>
|
||||
#include <unistd.h>
|
||||
#include <vector>
|
||||
|
||||
|
@ -723,7 +724,14 @@ Buffer *V4L2Device::dequeueBuffer()
|
|||
if (--queuedBuffersCount_ == 0)
|
||||
fdEvent_->setEnabled(false);
|
||||
|
||||
return &bufferPool_->buffers()[buf.index];
|
||||
Buffer *buffer = &bufferPool_->buffers()[buf.index];
|
||||
|
||||
buffer->bytesused_ = buf.bytesused;
|
||||
buffer->timestamp_ = buf.timestamp.tv_sec * 1000000000ULL
|
||||
+ buf.timestamp.tv_usec * 1000ULL;
|
||||
buffer->sequence_ = buf.sequence;
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue