mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-09 15:29:16 +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``
|
- ``flags``
|
||||||
- Specifies additional buffer management attributes.
|
- Specifies additional buffer management attributes.
|
||||||
See :ref:`memory-flags`.
|
See :ref:`memory-flags`.
|
||||||
|
|
||||||
* - __u32
|
* - __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
|
- A place holder for future extensions. Drivers and applications
|
||||||
must set the array to zero.
|
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-ORPHANED-BUFS:
|
||||||
.. _V4L2-BUF-CAP-SUPPORTS-M2M-HOLD-CAPTURE-BUF:
|
.. _V4L2-BUF-CAP-SUPPORTS-M2M-HOLD-CAPTURE-BUF:
|
||||||
.. _V4L2-BUF-CAP-SUPPORTS-MMAP-CACHE-HINTS:
|
.. _V4L2-BUF-CAP-SUPPORTS-MMAP-CACHE-HINTS:
|
||||||
|
.. _V4L2-BUF-CAP-SUPPORTS-MAX-NUM-BUFFERS:
|
||||||
|
|
||||||
.. raw:: latex
|
.. 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);
|
fill_buf_caps(q, &create->capabilities);
|
||||||
validate_memory_flags(q, create->memory, &create->flags);
|
validate_memory_flags(q, create->memory, &create->flags);
|
||||||
create->index = vb2_get_num_buffers(q);
|
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)
|
if (create->count == 0)
|
||||||
return ret != -EBUSY ? ret : 0;
|
return ret != -EBUSY ? ret : 0;
|
||||||
|
|
||||||
|
@ -116,6 +116,9 @@ struct v4l2_format32 {
|
|||||||
* @flags: additional buffer management attributes (ignored unless the
|
* @flags: additional buffer management attributes (ignored unless the
|
||||||
* queue has V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS capability and
|
* queue has V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS capability and
|
||||||
* configured for MMAP streaming I/O).
|
* 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
|
* @reserved: future extensions
|
||||||
*/
|
*/
|
||||||
struct v4l2_create_buffers32 {
|
struct v4l2_create_buffers32 {
|
||||||
@ -125,7 +128,8 @@ struct v4l2_create_buffers32 {
|
|||||||
struct v4l2_format32 format;
|
struct v4l2_format32 format;
|
||||||
__u32 capabilities;
|
__u32 capabilities;
|
||||||
__u32 flags;
|
__u32 flags;
|
||||||
__u32 reserved[6];
|
__u32 max_num_buffers;
|
||||||
|
__u32 reserved[5];
|
||||||
};
|
};
|
||||||
|
|
||||||
static int get_v4l2_format32(struct v4l2_format *p64,
|
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;
|
return -EFAULT;
|
||||||
if (copy_from_user(&p64->flags, &p32->flags, sizeof(p32->flags)))
|
if (copy_from_user(&p64->flags, &p32->flags, sizeof(p32->flags)))
|
||||||
return -EFAULT;
|
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);
|
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)) ||
|
offsetof(struct v4l2_create_buffers32, format)) ||
|
||||||
put_user(p64->capabilities, &p32->capabilities) ||
|
put_user(p64->capabilities, &p32->capabilities) ||
|
||||||
put_user(p64->flags, &p32->flags) ||
|
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)))
|
copy_to_user(p32->reserved, p64->reserved, sizeof(p64->reserved)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
return put_v4l2_format32(&p64->format, &p32->format);
|
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;
|
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->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);
|
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_ORPHANED_BUFS (1 << 4)
|
||||||
#define V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF (1 << 5)
|
#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_MMAP_CACHE_HINTS (1 << 6)
|
||||||
|
#define V4L2_BUF_CAP_SUPPORTS_MAX_NUM_BUFFERS (1 << 7)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct v4l2_plane - plane info for multi-planar buffers
|
* 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
|
* @flags: additional buffer management attributes (ignored unless the
|
||||||
* queue has V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS capability
|
* queue has V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS capability
|
||||||
* and configured for MMAP streaming I/O).
|
* 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
|
* @reserved: future extensions
|
||||||
*/
|
*/
|
||||||
struct v4l2_create_buffers {
|
struct v4l2_create_buffers {
|
||||||
@ -2614,7 +2618,8 @@ struct v4l2_create_buffers {
|
|||||||
struct v4l2_format format;
|
struct v4l2_format format;
|
||||||
__u32 capabilities;
|
__u32 capabilities;
|
||||||
__u32 flags;
|
__u32 flags;
|
||||||
__u32 reserved[6];
|
__u32 max_num_buffers;
|
||||||
|
__u32 reserved[5];
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user