This series adds support for virtio-video decoder devices in Qemu and also provides a vhost-user-video vmm implementation.
The vhost-user-video vmm currently parses virtio-vido v3 protocol (as that is what the Linux frontend driver implements). It then converts that to a v4l2 mem2mem stateful decoder device. Currently this has been tested using v4l2 vicodec test driver in Linux [1] but it is intended to be used with Arm SoCs which often implement v4l2 stateful decoders/encoders drivers for their video accelerators.
The primary goal so far has been to allow continuing development of virtio-video Linux frontend driver and testing with Qemu. Using vicodec on the host allows a purely virtual dev env, and allows for ci integration in the future by kernelci etc.
This series also adds the virtio_video.h header and adds the FWHT format which is used by vicodec driver.
I have tested this VMM using v4l2-ctl from v4l2 utils in the guest to do a video decode to a file. This can then be validated using ffplay v4l2-compliance tool in the guest has also been run which stresses the interface and issues lots of syscall level tests
See the README.md for example commands on how to configure guest kernel and do a video decode using Qemu, vicodec using this VMM.
Linux virtio-video frontend driver code: https://github.com/petegriffin/linux/commits/v5.10-virtio-video-latest
Qemu vmm code: https://github.com/petegriffin/qemu/tree/vhost-virtio-video-master-v1
This is part of a wider initiative by Linaro called "project Stratos" for which you can find information here:
https://collaborate.linaro.org/display/STR/Stratos+Home
Applies cleanly to git://git.qemu.org/qemu.git master(a3607def89).
Thanks,
Peter.
[1] https://lwn.net/Articles/760650/
Peter Griffin (8): vhost-user-video: Add a README.md with cheat sheet of commands MAINTAINERS: Add virtio-video section vhost-user-video: boiler plate code for vhost-user-video device vhost-user-video: add meson subdir build logic standard-headers: Add virtio_video.h virtio_video: Add Fast Walsh-Hadamard Transform format hw/display: add vhost-user-video-pci tools/vhost-user-video: Add initial vhost-user-video vmm
MAINTAINERS | 8 + hw/display/Kconfig | 5 + hw/display/meson.build | 3 + hw/display/vhost-user-video-pci.c | 82 + hw/display/vhost-user-video.c | 386 ++++ include/hw/virtio/vhost-user-video.h | 41 + include/standard-headers/linux/virtio_video.h | 484 +++++ tools/meson.build | 9 + tools/vhost-user-video/50-qemu-rpmb.json.in | 5 + tools/vhost-user-video/README.md | 98 + tools/vhost-user-video/main.c | 1680 ++++++++++++++++ tools/vhost-user-video/meson.build | 10 + tools/vhost-user-video/v4l2_backend.c | 1777 +++++++++++++++++ tools/vhost-user-video/v4l2_backend.h | 99 + tools/vhost-user-video/virtio_video_helpers.c | 462 +++++ tools/vhost-user-video/virtio_video_helpers.h | 166 ++ tools/vhost-user-video/vuvideo.h | 43 + 17 files changed, 5358 insertions(+) create mode 100644 hw/display/vhost-user-video-pci.c create mode 100644 hw/display/vhost-user-video.c create mode 100644 include/hw/virtio/vhost-user-video.h create mode 100644 include/standard-headers/linux/virtio_video.h create mode 100644 tools/vhost-user-video/50-qemu-rpmb.json.in create mode 100644 tools/vhost-user-video/README.md create mode 100644 tools/vhost-user-video/main.c create mode 100644 tools/vhost-user-video/meson.build create mode 100644 tools/vhost-user-video/v4l2_backend.c create mode 100644 tools/vhost-user-video/v4l2_backend.h create mode 100644 tools/vhost-user-video/virtio_video_helpers.c create mode 100644 tools/vhost-user-video/virtio_video_helpers.h create mode 100644 tools/vhost-user-video/vuvideo.h