Re: [PATCH v19 0/9] Add DELETE_BUF ioctl

From: Hans Verkuil
Date: Tue Feb 06 2024 - 03:58:54 EST


On 06/02/2024 09:02, Benjamin Gaignard wrote:
> Unlike when resolution change on keyframes, dynamic resolution change
> on inter frames doesn't allow to do a stream off/on sequence because
> it is need to keep all previous references alive to decode inter frames.
> This constraint have two main problems:
> - more memory consumption.
> - more buffers in use.
> To solve these issue this series introduce DELETE_BUFS ioctl and remove
> the 32 buffers limit per queue.

This v19 looks good. There are three outstanding issues that I need to take a
look at:

1) Can we still signal support for DELETE_BUFS in the V4L2_BUF_CAP_ caps?
It would be nice to have, but I'm not sure if and how that can be done.

2) I want to take another look at providing a next version of the VIDIOC_CREATE_BUFS
ioctl and how that would possibly influence the design of DELETE_BUFS.
Just to make sure we're not blocking anything or making life harder.

3) Review the v4l2-compliance tests. I haven't spend much time on that, so
I need to take a look at v7 and see if I can come up with more tests.

I'll try to make time for this either tomorrow or next week.

Regards,

Hans

>
> VP9 conformance tests using fluster give a score of 210/305.
> The 23 of the 24 resize inter tests (vp90-2-21-resize_inter_* files) are ok
> but require to use postprocessor.
>
> Kernel branch is available here:
> https://gitlab.collabora.com/benjamin.gaignard/for-upstream/-/commits/remove_vb2_queue_limit_v19
>
> GStreamer branch to use DELETE_BUF ioctl and testing dynamic resolution
> change is here:
> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer/-/commits/VP9_drc
>
> changes in version 19:
> - Fix typo in commit message.
> - Fix ioctl domentation
> - Rework q->is_busy patch following Hans's comments
> - Change where DELETE_BUFS is enabled
>
> changes in version 18:
> - rebased on top of:
> https://patchwork.linuxtv.org/project/linux-media/patch/20240118121452.29151-1-benjamin.gaignard@xxxxxxxxxxxxx/
> https://patchwork.linuxtv.org/project/linux-media/patch/92975c06-d6e1-4ba6-8d03-b2ef0b199c21@xxxxxxxxx/
> - Add a patch to update vb2_is_busy() logic.
> - fix __vb2_queue_alloc() parameters descriptions.
> - rework bitmap free range finding loop
> - remove per queue capability flag.
> - rework v4l_delete_bufs() to check if VIDIOC_CREATE_BUFS is enabled
> and if vidioc_delete_bufs pointer is valid.
> - update documentation.
> - Direclty use vb2_core_delete_bufs() in v4l2_m2m_ioctl_delete_bufs().
> Remove useless static functions.
>
> changes in version 17:
> - rebased on top of:
> https://patchwork.linuxtv.org/project/linux-media/patch/20240118121452.29151-1-benjamin.gaignard@xxxxxxxxxxxxx/
> https://patchwork.linuxtv.org/project/linux-media/patch/92975c06-d6e1-4ba6-8d03-b2ef0b199c21@xxxxxxxxx/
> - rewrite min_reqbufs_allocation field documentation.
> - rewrite vb2_core_create_bufs() first_index parameter documentation.
> - rework bitmap allocation usage in __vb2_queue_alloc().
> - remove useless i < q->max_num_buffers checks.
> - rework DELETE_BUFS documentation.
> - change split between patch 7 and patch 8
> - v4l2_m2m_delete_bufs() is now a static function.
>
>
> Benjamin Gaignard (9):
> media: videobuf2: Update vb2_is_busy() logic
> videobuf2: Add min_reqbufs_allocation field to vb2_queue structure
> media: test-drivers: Set REQBUFS minimum number of buffers
> media: core: Rework how create_buf index returned value is computed
> media: core: Add bitmap manage bufs array entries
> media: core: Free range of buffers
> media: v4l2: Add DELETE_BUFS ioctl
> media: v4l2: Add mem2mem helpers for DELETE_BUFS ioctl
> media: verisilicon: Support deleting buffers on capture queue
>
> .../userspace-api/media/v4l/user-func.rst | 1 +
> .../media/v4l/vidioc-delete-bufs.rst | 79 +++++++
> .../media/common/videobuf2/videobuf2-core.c | 223 ++++++++++++------
> .../media/common/videobuf2/videobuf2-v4l2.c | 26 +-
> .../media/platform/verisilicon/hantro_v4l2.c | 1 +
> .../media/test-drivers/vicodec/vicodec-core.c | 1 +
> drivers/media/test-drivers/vim2m.c | 1 +
> .../media/test-drivers/vimc/vimc-capture.c | 3 +-
> drivers/media/test-drivers/visl/visl-video.c | 1 +
> drivers/media/test-drivers/vivid/vivid-core.c | 5 +-
> drivers/media/v4l2-core/v4l2-dev.c | 3 +
> drivers/media/v4l2-core/v4l2-ioctl.c | 24 ++
> drivers/media/v4l2-core/v4l2-mem2mem.c | 10 +
> include/media/v4l2-ioctl.h | 4 +
> include/media/v4l2-mem2mem.h | 2 +
> include/media/videobuf2-core.h | 52 +++-
> include/media/videobuf2-v4l2.h | 2 +
> include/uapi/linux/videodev2.h | 16 ++
> 18 files changed, 369 insertions(+), 85 deletions(-)
> create mode 100644 Documentation/userspace-api/media/v4l/vidioc-delete-bufs.rst
>