mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-08 15:04:45 +00:00
media: core: Report the maximum possible number of buffers for the queue
Use one of the struct v4l2_create_buffers reserved bytes to report the maximum possible number of buffers for the queue. V4l2 framework set V4L2_BUF_CAP_SUPPORTS_MAX_NUM_BUFFERS flags in queue capabilities so userland can know when the field is valid. Does the same change in v4l2_create_buffers32 structure. Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
parent
c838530d23
commit
d055a76c00
@ -116,9 +116,13 @@ than the number requested.
|
||||
- ``flags``
|
||||
- Specifies additional buffer management attributes.
|
||||
See :ref:`memory-flags`.
|
||||
|
||||
* - __u32
|
||||
- ``reserved``\ [6]
|
||||
- ``max_num_buffers``
|
||||
- If the V4L2_BUF_CAP_SUPPORTS_MAX_NUM_BUFFERS capability flag is set
|
||||
this field indicates the maximum possible number of buffers
|
||||
for this queue.
|
||||
* - __u32
|
||||
- ``reserved``\ [5]
|
||||
- A place holder for future extensions. Drivers and applications
|
||||
must set the array to zero.
|
||||
|
||||
|
@ -120,6 +120,7 @@ aborting or finishing any DMA in progress, an implicit
|
||||
.. _V4L2-BUF-CAP-SUPPORTS-ORPHANED-BUFS:
|
||||
.. _V4L2-BUF-CAP-SUPPORTS-M2M-HOLD-CAPTURE-BUF:
|
||||
.. _V4L2-BUF-CAP-SUPPORTS-MMAP-CACHE-HINTS:
|
||||
.. _V4L2-BUF-CAP-SUPPORTS-MAX-NUM-BUFFERS:
|
||||
|
||||
.. raw:: latex
|
||||
|
||||
|
@ -756,6 +756,8 @@ int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create)
|
||||
fill_buf_caps(q, &create->capabilities);
|
||||
validate_memory_flags(q, create->memory, &create->flags);
|
||||
create->index = vb2_get_num_buffers(q);
|
||||
create->max_num_buffers = q->max_num_buffers;
|
||||
create->capabilities |= V4L2_BUF_CAP_SUPPORTS_MAX_NUM_BUFFERS;
|
||||
if (create->count == 0)
|
||||
return ret != -EBUSY ? ret : 0;
|
||||
|
||||
|
@ -116,6 +116,9 @@ struct v4l2_format32 {
|
||||
* @flags: additional buffer management attributes (ignored unless the
|
||||
* queue has V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS capability and
|
||||
* configured for MMAP streaming I/O).
|
||||
* @max_num_buffers: if V4L2_BUF_CAP_SUPPORTS_MAX_NUM_BUFFERS capability flag is set
|
||||
* this field indicate the maximum possible number of buffers
|
||||
* for this queue.
|
||||
* @reserved: future extensions
|
||||
*/
|
||||
struct v4l2_create_buffers32 {
|
||||
@ -125,7 +128,8 @@ struct v4l2_create_buffers32 {
|
||||
struct v4l2_format32 format;
|
||||
__u32 capabilities;
|
||||
__u32 flags;
|
||||
__u32 reserved[6];
|
||||
__u32 max_num_buffers;
|
||||
__u32 reserved[5];
|
||||
};
|
||||
|
||||
static int get_v4l2_format32(struct v4l2_format *p64,
|
||||
@ -175,6 +179,9 @@ static int get_v4l2_create32(struct v4l2_create_buffers *p64,
|
||||
return -EFAULT;
|
||||
if (copy_from_user(&p64->flags, &p32->flags, sizeof(p32->flags)))
|
||||
return -EFAULT;
|
||||
if (copy_from_user(&p64->max_num_buffers, &p32->max_num_buffers,
|
||||
sizeof(p32->max_num_buffers)))
|
||||
return -EFAULT;
|
||||
return get_v4l2_format32(&p64->format, &p32->format);
|
||||
}
|
||||
|
||||
@ -221,6 +228,7 @@ static int put_v4l2_create32(struct v4l2_create_buffers *p64,
|
||||
offsetof(struct v4l2_create_buffers32, format)) ||
|
||||
put_user(p64->capabilities, &p32->capabilities) ||
|
||||
put_user(p64->flags, &p32->flags) ||
|
||||
put_user(p64->max_num_buffers, &p32->max_num_buffers) ||
|
||||
copy_to_user(p32->reserved, p64->reserved, sizeof(p64->reserved)))
|
||||
return -EFAULT;
|
||||
return put_v4l2_format32(&p64->format, &p32->format);
|
||||
|
@ -483,9 +483,9 @@ static void v4l_print_create_buffers(const void *arg, bool write_only)
|
||||
{
|
||||
const struct v4l2_create_buffers *p = arg;
|
||||
|
||||
pr_cont("index=%d, count=%d, memory=%s, capabilities=0x%08x, ",
|
||||
pr_cont("index=%d, count=%d, memory=%s, capabilities=0x%08x, max num buffers=%u",
|
||||
p->index, p->count, prt_names(p->memory, v4l2_memory_names),
|
||||
p->capabilities);
|
||||
p->capabilities, p->max_num_buffers);
|
||||
v4l_print_format(&p->format, write_only);
|
||||
}
|
||||
|
||||
|
@ -1035,6 +1035,7 @@ struct v4l2_requestbuffers {
|
||||
#define V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS (1 << 4)
|
||||
#define V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF (1 << 5)
|
||||
#define V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS (1 << 6)
|
||||
#define V4L2_BUF_CAP_SUPPORTS_MAX_NUM_BUFFERS (1 << 7)
|
||||
|
||||
/**
|
||||
* struct v4l2_plane - plane info for multi-planar buffers
|
||||
@ -2605,6 +2606,9 @@ struct v4l2_dbg_chip_info {
|
||||
* @flags: additional buffer management attributes (ignored unless the
|
||||
* queue has V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS capability
|
||||
* and configured for MMAP streaming I/O).
|
||||
* @max_num_buffers: if V4L2_BUF_CAP_SUPPORTS_MAX_NUM_BUFFERS capability flag is set
|
||||
* this field indicate the maximum possible number of buffers
|
||||
* for this queue.
|
||||
* @reserved: future extensions
|
||||
*/
|
||||
struct v4l2_create_buffers {
|
||||
@ -2614,7 +2618,8 @@ struct v4l2_create_buffers {
|
||||
struct v4l2_format format;
|
||||
__u32 capabilities;
|
||||
__u32 flags;
|
||||
__u32 reserved[6];
|
||||
__u32 max_num_buffers;
|
||||
__u32 reserved[5];
|
||||
};
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user