Hi Vivek

On Thu, May 29, 2025 at 9:16 AM Vivek Kasireddy
<vivek.kasire...@intel.com> wrote:
>
> To address the limitation that this option is incompatible with
> remote clients, this patch series adds an option to select a
> preferred codec and also enable gl=on option for clients that
> are connected via the network. In other words, with this option
> enabled (and the below linked Spice series merged), it would be
> possible to have Qemu share a dmabuf fd with Spice, which would
> then forward it to a hardware or software based encoder and
> eventually send the data associated with the fd to a client that
> could be located on a different machine.
>
> Essentially, this patch series provides a hardware accelerated,
> opensource VDI option for users using Qemu and Spice by leveraging
> the iGPU/dGPU on the host machine to encode the Guest FB via the
> Gstreamer framework.
>

I tested the series on fedora with intel-media-driver installed from rpmfusion.

Without explicit video-codecs argument I get:
qemu-system-x86_64: warning: Spice:
../server/dcc-send.cpp:1780:red_marshall_gl_draw_stream: No video
encoder available for this stream
qemu-system-x86_64: warning: spice: no gl-draw-done within one second

If I specify video-codecs=gstreamer:h264, then it seems to work fine.

I wish all of this would be better documented or more explicit, as
each step took me a while to figure out (why it didn't pick a
compatible encoder, what was the argument for video-codecs, why gst
didn't support h264enc, where to find the encoder, ...). I am not even
sure I am doing all this  correctly. Maybe there should be some
docs/interop/spice.rst to document qemu -spice and video-codecs
usages? (and move docs/spice-port-fqdn.txt content there too)

I suppose the issue with better default for video-codecs is on
spice-server side, so for this series:
Reviewed-by: Marc-André Lureau <marcandre.lur...@redhat.com>


> v4  -> v5 (suggestions from Marc-André):
> - Fix the errors (mostly 80 chars limit violations) identified by
>   scripts/checkpatch.pl
> - Rename the globals to have a spice_ prefix for consistency
> - Rename MAX_REFRESH_RATE to DEFAULT_MAX_REFRESH_RATE
> - Added comments to explain how/when the gl_draw request is submitted
>   to spice server in the remote clients case
> - Fix the mem_obj leak that would occur when the associated texture
>   is destroyed or when an error is encountered while creating a
>   texture from an fd (Dmitry and Michael)
> - Merged Michael's patch to fix the mem_obj leak into this series and
>   added his Co-developed-by tag to the relevant patches
>
> v3 -> v4 (suggestions from Marc-André):
> - Add a new parameter to make max_refresh_rate configurable
> - Have surface_gl_create_texture_from_fd() return bool after checking
>   for errors
> - Remove the check for PIXMAN_r5g6b5() in spice_gl_replace_fd_texture()
> - Report errors in spice_gl_replace_fd_texture() when someting fails
> - Use glGetError() correctly by adding an additional (dummy) call
>   before checking for actual errors (Dmitry)
> - Add a new patch to check fd values in egl_dmabuf_export_texture()
> - Rebase on Qemu master
>
> v2 -> v3:
> - Check for errors after invoking glImportMemoryFdEXT() using
>   glGetError() and report the error to user (Dmitry)
>
> v1 -> v2:
> - Replace the option name preferred-codec with video-codecs (Marc-André)
> - Add a warning when an fd cannot be created from texture (Marc-André)
> - Add a new patch to blit the scanout texture into a linear one to
>   make it work with virgl
> - Rebased and tested against the latest Spice master
>
> Tested with the following Qemu parameters:
> -device virtio-vga,max_outputs=1,xres=1920,yres=1080,blob=true
> -spice port=3001,gl=on,disable-ticketing=on,video-codecs=gstreamer:h264
>
> and remote-viewer --spice-debug spice://x.x.x.x:3001 on the client side.
>
> Associated Spice server MR (merged):
> https://gitlab.freedesktop.org/spice/spice/-/merge_requests/229
>
> ---
> Cc: Gerd Hoffmann <kra...@redhat.com>
> Cc: Marc-André Lureau <marcandre.lur...@redhat.com>
> Cc: Dmitry Osipenko <dmitry.osipe...@collabora.com>
> Cc: Frediano Ziglio <fredd...@gmail.com>
> Cc: Michael Scherle <michael.sche...@rz.uni-freiburg.de>
> Cc: Dongwon Kim <dongwon....@intel.com>
> Cc: Alex Bennée <alex.ben...@linaro.org>
>
> Vivek Kasireddy (7):
>   ui/egl-helpers: Error check the fds in egl_dmabuf_export_texture()
>   ui/spice: Add an option for users to provide a preferred codec
>   ui/spice: Enable gl=on option for non-local or remote clients
>   ui/spice: Add an option to submit gl_draw requests at fixed rate
>   ui/console-gl: Add a helper to create a texture with linear memory
>     layout
>   ui/spice: Create a new texture with linear layout when gl=on is
>     enabled
>   ui/spice: Blit the scanout texture if its memory layout is not linear
>
>  include/ui/console.h       |   3 +
>  include/ui/spice-display.h |   5 +
>  include/ui/surface.h       |   1 +
>  qemu-options.hx            |  10 ++
>  ui/console-gl.c            |  54 +++++++++
>  ui/egl-helpers.c           |   6 +
>  ui/spice-core.c            |  28 +++++
>  ui/spice-display.c         | 226 ++++++++++++++++++++++++++++++++++---
>  8 files changed, 317 insertions(+), 16 deletions(-)
>
> --
> 2.49.0
>
>


-- 
Marc-André Lureau

Reply via email to