mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 08:19:28 +00:00
media: vb2: add vb2_find_timestamp()
Use v4l2_timeval_to_ns instead of timeval_to_ns to ensure that both kernelspace and userspace will use the same conversion function. Next add a new vb2_find_timestamp() function to find buffers with a specific timestamp. This function will only look at DEQUEUED and DONE buffers, i.e. buffers that are already processed. Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:
parent
c2eb8effb2
commit
245ede423b
2 changed files with 35 additions and 1 deletions
|
@ -143,7 +143,7 @@ static void __copy_timestamp(struct vb2_buffer *vb, const void *pb)
|
|||
* and the timecode field and flag if needed.
|
||||
*/
|
||||
if (q->copy_timestamp)
|
||||
vb->timestamp = timeval_to_ns(&b->timestamp);
|
||||
vb->timestamp = v4l2_timeval_to_ns(&b->timestamp);
|
||||
vbuf->flags |= b->flags & V4L2_BUF_FLAG_TIMECODE;
|
||||
if (b->flags & V4L2_BUF_FLAG_TIMECODE)
|
||||
vbuf->timecode = b->timecode;
|
||||
|
@ -589,6 +589,23 @@ static const struct vb2_buf_ops v4l2_buf_ops = {
|
|||
.copy_timestamp = __copy_timestamp,
|
||||
};
|
||||
|
||||
int vb2_find_timestamp(const struct vb2_queue *q, u64 timestamp,
|
||||
unsigned int start_idx)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = start_idx; i < q->num_buffers; i++) {
|
||||
struct vb2_buffer *vb = q->bufs[i];
|
||||
|
||||
if ((vb->state == VB2_BUF_STATE_DEQUEUED ||
|
||||
vb->state == VB2_BUF_STATE_DONE) &&
|
||||
vb->timestamp == timestamp)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(vb2_find_timestamp);
|
||||
|
||||
/*
|
||||
* vb2_querybuf() - query video buffer information
|
||||
* @q: videobuf queue
|
||||
|
|
|
@ -55,6 +55,23 @@ struct vb2_v4l2_buffer {
|
|||
#define to_vb2_v4l2_buffer(vb) \
|
||||
container_of(vb, struct vb2_v4l2_buffer, vb2_buf)
|
||||
|
||||
/**
|
||||
* vb2_find_timestamp() - Find buffer with given timestamp in the queue
|
||||
*
|
||||
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
||||
* @timestamp: the timestamp to find. Only buffers in state DEQUEUED or DONE
|
||||
* are considered.
|
||||
* @start_idx: the start index (usually 0) in the buffer array to start
|
||||
* searching from. Note that there may be multiple buffers
|
||||
* with the same timestamp value, so you can restart the search
|
||||
* by setting @start_idx to the previously found index + 1.
|
||||
*
|
||||
* Returns the buffer index of the buffer with the given @timestamp, or
|
||||
* -1 if no buffer with @timestamp was found.
|
||||
*/
|
||||
int vb2_find_timestamp(const struct vb2_queue *q, u64 timestamp,
|
||||
unsigned int start_idx);
|
||||
|
||||
int vb2_querybuf(struct vb2_queue *q, struct v4l2_buffer *b);
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue