Message ID | 20231012114642.19040-46-benjamin.gaignard@collabora.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add DELETE_BUF ioctl | expand |
Le 16/10/2023 à 12:32, Hans Verkuil a écrit : > On 12/10/2023 13:46, Benjamin Gaignard wrote: >> Change the maximum number of buffers of some capture queues in order >> to test max_num_buffers field. >> >> Allow to allocate up to: >> - 64 buffers for video capture queue. >> - 1024 buffers for sdr capture queue. >> - 32768 buffers for vbi capture queue. >> >> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com> >> --- >> drivers/media/test-drivers/vivid/vivid-core.c | 7 +++++++ >> 1 file changed, 7 insertions(+) >> >> diff --git a/drivers/media/test-drivers/vivid/vivid-core.c b/drivers/media/test-drivers/vivid/vivid-core.c >> index 394c9f81ea72..b5656330578d 100644 >> --- a/drivers/media/test-drivers/vivid/vivid-core.c >> +++ b/drivers/media/test-drivers/vivid/vivid-core.c >> @@ -876,6 +876,13 @@ static int vivid_create_queue(struct vivid_dev *dev, >> q->type = buf_type; >> q->io_modes = VB2_MMAP | VB2_DMABUF; >> q->io_modes |= V4L2_TYPE_IS_OUTPUT(buf_type) ? VB2_WRITE : VB2_READ; >> + if (buf_type == V4L2_BUF_TYPE_VIDEO_CAPTURE) >> + q->max_num_buffers = 64; >> + if (buf_type == V4L2_BUF_TYPE_SDR_CAPTURE) >> + q->max_num_buffers = 1024; >> + if (buf_type == V4L2_BUF_TYPE_VBI_CAPTURE) >> + q->max_num_buffers = 32768; > This should use the same calculation as MAX_BUFFER_INDEX. > > I wonder if those defines should move to videobuf2-core.h instead. I'm not sure about what you want here, q->max_num_buffers is clamped in vb2_core_queue_init(): /* The maximum is limited by offset cookie encoding pattern */ q->max_num_buffers = min_t(unsigned int, q->max_num_buffers, MAX_BUFFER_INDEX); Do you want to reuse MAX_BUFFER_INDEX for these drivers ? Regards, Benjamin > > Regards, > > Hans > >> + >> if (allocators[dev->inst] != 1) >> q->io_modes |= VB2_USERPTR; >> q->drv_priv = dev; >
On 16/10/2023 16:20, Benjamin Gaignard wrote: > > Le 16/10/2023 à 12:32, Hans Verkuil a écrit : >> On 12/10/2023 13:46, Benjamin Gaignard wrote: >>> Change the maximum number of buffers of some capture queues in order >>> to test max_num_buffers field. >>> >>> Allow to allocate up to: >>> - 64 buffers for video capture queue. >>> - 1024 buffers for sdr capture queue. >>> - 32768 buffers for vbi capture queue. >>> >>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com> >>> --- >>> drivers/media/test-drivers/vivid/vivid-core.c | 7 +++++++ >>> 1 file changed, 7 insertions(+) >>> >>> diff --git a/drivers/media/test-drivers/vivid/vivid-core.c b/drivers/media/test-drivers/vivid/vivid-core.c >>> index 394c9f81ea72..b5656330578d 100644 >>> --- a/drivers/media/test-drivers/vivid/vivid-core.c >>> +++ b/drivers/media/test-drivers/vivid/vivid-core.c >>> @@ -876,6 +876,13 @@ static int vivid_create_queue(struct vivid_dev *dev, >>> q->type = buf_type; >>> q->io_modes = VB2_MMAP | VB2_DMABUF; >>> q->io_modes |= V4L2_TYPE_IS_OUTPUT(buf_type) ? VB2_WRITE : VB2_READ; >>> + if (buf_type == V4L2_BUF_TYPE_VIDEO_CAPTURE) >>> + q->max_num_buffers = 64; >>> + if (buf_type == V4L2_BUF_TYPE_SDR_CAPTURE) >>> + q->max_num_buffers = 1024; >>> + if (buf_type == V4L2_BUF_TYPE_VBI_CAPTURE) >>> + q->max_num_buffers = 32768; >> This should use the same calculation as MAX_BUFFER_INDEX. >> >> I wonder if those defines should move to videobuf2-core.h instead. > > I'm not sure about what you want here, q->max_num_buffers is clamped in vb2_core_queue_init(): > > /* The maximum is limited by offset cookie encoding pattern */ > q->max_num_buffers = min_t(unsigned int, q->max_num_buffers, MAX_BUFFER_INDEX); > > Do you want to reuse MAX_BUFFER_INDEX for these drivers ? Ah, I forgot about the clamping. Add a comment like this: /* * The maximum number of buffers is 32768 if PAGE_SHIFT == 12, * see also MAX_BUFFER_INDEX in videobuf2-core.c. It will be less if * PAGE_SHIFT > 12, but then max_num_buffers will be clamped by * videobuf2-core.c to MAX_BUFFER_INDEX. */ Regards, Hans > > Regards, > Benjamin > >> >> Regards, >> >> Hans >> >>> + >>> if (allocators[dev->inst] != 1) >>> q->io_modes |= VB2_USERPTR; >>> q->drv_priv = dev; >>
diff --git a/drivers/media/test-drivers/vivid/vivid-core.c b/drivers/media/test-drivers/vivid/vivid-core.c index 394c9f81ea72..b5656330578d 100644 --- a/drivers/media/test-drivers/vivid/vivid-core.c +++ b/drivers/media/test-drivers/vivid/vivid-core.c @@ -876,6 +876,13 @@ static int vivid_create_queue(struct vivid_dev *dev, q->type = buf_type; q->io_modes = VB2_MMAP | VB2_DMABUF; q->io_modes |= V4L2_TYPE_IS_OUTPUT(buf_type) ? VB2_WRITE : VB2_READ; + if (buf_type == V4L2_BUF_TYPE_VIDEO_CAPTURE) + q->max_num_buffers = 64; + if (buf_type == V4L2_BUF_TYPE_SDR_CAPTURE) + q->max_num_buffers = 1024; + if (buf_type == V4L2_BUF_TYPE_VBI_CAPTURE) + q->max_num_buffers = 32768; + if (allocators[dev->inst] != 1) q->io_modes |= VB2_USERPTR; q->drv_priv = dev;
Change the maximum number of buffers of some capture queues in order to test max_num_buffers field. Allow to allocate up to: - 64 buffers for video capture queue. - 1024 buffers for sdr capture queue. - 32768 buffers for vbi capture queue. Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com> --- drivers/media/test-drivers/vivid/vivid-core.c | 7 +++++++ 1 file changed, 7 insertions(+)