vulkan video decoding: anv status
After cleaning up the radv stuff I decided to go back and dig into the anv support for H264.
The current status of this work is in a branch[1]. This work is all against the current EXT decode beta extensions in the spec.
This
contains an initial implementation of H264 Intel GPUs that anv supports. I've only tested it on Kabylake equivalents so far. It decodes some of the basic streams I've thrown at it from ffmpeg. Now this isn't as far along as the AMD implementation, but I'm also not sure I'm programming the hardware correctly. The Windows DXVA API has 2 ways to decode H264, short and long. I believe but I'm not 100% sure the current Vulkan API is quite close to "short", but the only Intel implementations I've found source for are for "long". I've bridged this gap by writing a slice header parser in mesa, but I think the hw might be capable of taking over that task, and I could in theory dump a bunch of code. But the programming guides for the hw block are a bit vague on some of the details around how "long" works. Maybe at some point someone in Intel can tell me :-)
Building:
git clone https://gitlab.freedesktop.org/airlied/mesagit checkout anv-vulkan-video-prelim-decode
mkdir build
meson build -Dvulkan-beta=true -Dvulkan-drivers=intel -Dvideo-codecs=h264dec --prefix=<prefix>
cd build
ninja
ninja install
Running:
export VK_ICD_FILENAMES=<prefix>/share/vulkan/icd.d/intel_icd.x86_64.jsonexport ANV_VIDEO_DECODE=1
vulkaninfo
This should show support for VK_KHR_video_queue, VK_KHR_video_decode_queue, VK_EXT_video_decode_h264.
[1] https://gitlab.freedesktop.org/airlied/mesa/-/tree/anv-vulkan-video-prelim-decode
Any chance of a quick a VK_AIRLIED_video_decode_av1 extension? :)
ReplyDeletewe are considering a mesa one
ReplyDelete