[FFmpeg-devel] [PATCH v4 00/16] Add a Vulkan compute based FFv1 hwaccel

Lynne dev at lynne.ee
Sat Mar 15 18:57:56 EET 2025


On 13/03/2025 18:03, Lynne wrote:
> This series of commits adds a fully compliant version 3 and 4 hardware
> accelerator code for FFv1 written in Vulkan.
> 
> Changes from the previous version:
>   - Use the exported host_map code in hwcontext_vulkan.c
>   - Add a buffer_ref argument to FFHWAccel.start_frame
>   - Various optimizations in the shader code
> 
> Lynne (16):
>    pixfmt: add AV_PIX_FMT_GBRAP32
>    vulkan: rename ff_vk_set_descriptor_image to ff_vk_shader_update_img
>    vulkan: add ff_vk_create_imageview
>    vulkan: copy host-mapping buffer code from hwcontext
>    hwcontext_vulkan: use the common host map function to map frame data
>    vulkan: workaround BGR storage image undefined behaviour
>    vulkan_decode: support software-defined decoders
>    vulkan_decode: support multiple image views
>    vulkan_decode: adjust number of async contexts created
>    ffv1enc_vulkan: refactor shaders slightly to support sharing
>    vulkan: unify handling of BGR and simplify ffv1_rct
>    vulkan: add ff_vk_exec_add_dep_wait_sem()
>    vulkan: add support for AV_PIX_FMT_GBRAP32
>    ffv1dec: add support for hwaccels
>    FFHWAccel: add buffer_ref argument to start_frame
>    ffv1: add a Vulkan-based decoder
> 
>   configure                             |    2 +
>   libavcodec/Makefile                   |    3 +-
>   libavcodec/av1dec.c                   |    3 +-
>   libavcodec/d3d12va_av1.c              |    5 +-
>   libavcodec/d3d12va_h264.c             |    5 +-
>   libavcodec/d3d12va_hevc.c             |    5 +-
>   libavcodec/d3d12va_mpeg2.c            |    5 +-
>   libavcodec/d3d12va_vc1.c              |    5 +-
>   libavcodec/d3d12va_vp9.c              |    5 +-
>   libavcodec/dxva2_av1.c                |    1 +
>   libavcodec/dxva2_h264.c               |    1 +
>   libavcodec/dxva2_hevc.c               |    1 +
>   libavcodec/dxva2_mpeg2.c              |    1 +
>   libavcodec/dxva2_vc1.c                |    1 +
>   libavcodec/dxva2_vp9.c                |    1 +
>   libavcodec/ffv1.h                     |    2 +
>   libavcodec/ffv1_vulkan.c              |  123 +++
>   libavcodec/ffv1_vulkan.h              |   61 ++
>   libavcodec/ffv1dec.c                  |   87 +-
>   libavcodec/ffv1enc_vulkan.c           |  236 ++---
>   libavcodec/h263dec.c                  |    2 +-
>   libavcodec/h264dec.c                  |    8 +-
>   libavcodec/hevc/hevcdec.c             |    5 +-
>   libavcodec/hwaccel_internal.h         |    4 +-
>   libavcodec/hwaccels.h                 |    1 +
>   libavcodec/mjpegdec.c                 |    2 +-
>   libavcodec/mpeg12dec.c                |    2 +-
>   libavcodec/nvdec_av1.c                |    4 +-
>   libavcodec/nvdec_h264.c               |    1 +
>   libavcodec/nvdec_hevc.c               |    1 +
>   libavcodec/nvdec_mjpeg.c              |    4 +-
>   libavcodec/nvdec_mpeg12.c             |    3 +-
>   libavcodec/nvdec_mpeg4.c              |    3 +-
>   libavcodec/nvdec_vc1.c                |    3 +-
>   libavcodec/nvdec_vp8.c                |    3 +-
>   libavcodec/nvdec_vp9.c                |    3 +-
>   libavcodec/proresdec.c                |    2 +-
>   libavcodec/vaapi_av1.c                |    1 +
>   libavcodec/vaapi_h264.c               |    1 +
>   libavcodec/vaapi_hevc.c               |    1 +
>   libavcodec/vaapi_mjpeg.c              |    1 +
>   libavcodec/vaapi_mpeg2.c              |    5 +-
>   libavcodec/vaapi_mpeg4.c              |    5 +-
>   libavcodec/vaapi_vc1.c                |    5 +-
>   libavcodec/vaapi_vp8.c                |    1 +
>   libavcodec/vaapi_vp9.c                |    1 +
>   libavcodec/vaapi_vvc.c                |    1 +
>   libavcodec/vc1dec.c                   |    6 +-
>   libavcodec/vdpau_av1.c                |    3 +-
>   libavcodec/vdpau_h264.c               |    1 +
>   libavcodec/vdpau_hevc.c               |    1 +
>   libavcodec/vdpau_mpeg12.c             |    1 +
>   libavcodec/vdpau_mpeg4.c              |    1 +
>   libavcodec/vdpau_vc1.c                |    1 +
>   libavcodec/vdpau_vp9.c                |    3 +-
>   libavcodec/videotoolbox.c             |    8 +-
>   libavcodec/videotoolbox_av1.c         |    1 +
>   libavcodec/videotoolbox_vp9.c         |    1 +
>   libavcodec/vp8.c                      |    2 +-
>   libavcodec/vp9.c                      |    2 +-
>   libavcodec/vt_internal.h              |    1 +
>   libavcodec/vulkan/Makefile            |    6 +
>   libavcodec/vulkan/common.comp         |   95 ++
>   libavcodec/vulkan/ffv1_common.comp    |   25 +-
>   libavcodec/vulkan/ffv1_dec.comp       |  290 ++++++
>   libavcodec/vulkan/ffv1_dec_rct.comp   |   88 ++
>   libavcodec/vulkan/ffv1_dec_setup.comp |  138 +++
>   libavcodec/vulkan/ffv1_enc_rct.comp   |   17 +-
>   libavcodec/vulkan/ffv1_enc_setup.comp |   18 +-
>   libavcodec/vulkan/ffv1_rct.comp       |   90 ++
>   libavcodec/vulkan/ffv1_reset.comp     |    3 +-
>   libavcodec/vulkan/ffv1_vlc.comp       |   37 +
>   libavcodec/vulkan/rangecoder.comp     |  101 +-
>   libavcodec/vulkan_av1.c               |    5 +-
>   libavcodec/vulkan_decode.c            |  257 +++--
>   libavcodec/vulkan_decode.h            |   23 +-
>   libavcodec/vulkan_ffv1.c              | 1296 +++++++++++++++++++++++++
>   libavcodec/vulkan_h264.c              |    5 +-
>   libavcodec/vulkan_hevc.c              |    5 +-
>   libavcodec/vvc/dec.c                  |   12 +-
>   libavutil/hwcontext_vulkan.c          |  191 ++--
>   libavutil/pixdesc.c                   |   28 +
>   libavutil/pixfmt.h                    |    4 +
>   libavutil/vulkan.c                    |  351 ++++++-
>   libavutil/vulkan.h                    |   42 +-
>   85 files changed, 3290 insertions(+), 495 deletions(-)
>   create mode 100644 libavcodec/ffv1_vulkan.c
>   create mode 100644 libavcodec/ffv1_vulkan.h
>   create mode 100644 libavcodec/vulkan/ffv1_dec.comp
>   create mode 100644 libavcodec/vulkan/ffv1_dec_rct.comp
>   create mode 100644 libavcodec/vulkan/ffv1_dec_setup.comp
>   create mode 100644 libavcodec/vulkan/ffv1_rct.comp
>   create mode 100644 libavcodec/vulkan_ffv1.c
> 

Anyone have any more comments?


More information about the ffmpeg-devel mailing list