[Spice-devel] [RFC] Allow guest-video codec hot-swap

Kevin Pouget kpouget at redhat.com
Wed Jul 31 08:36:32 UTC 2019


Hello,

this is the first version of the patch series that allows hot-swapping
the codec used for guest video streaming.

* in spice-server, the behavior is similar to what I did for host-side
  video streaming: when the user (through the client) or the admin
  (through the QMP interface) changes the codec list, the guest
  streams are reset. SPICE will automatically restart them, picking up
  the new most suitable codec.
    * it is on purpose that I didn't implement any check (eg, check
      that the preferred codec actually changed) before triggering the
      stream restart. The streaming-agent also tries to compute the
      most suitable codec for all its clients, so I think we should
      have another discussion to settle where/when the codec choices
      should be done.

* in spice-streaming-agent, I had to 1) update the main loop to
  perform a full restart, instead of only stop sending frame on
  start/stop requests; 2) update the GST plugin to allow multiple
  plugin instances to registered, one for each codec (listed in the
  command-line).

* in spice-gtk, I had to update a bit the code, to ensure that the
  drawing area used by the native MJPEG renderer is visible when we
  swap the codec, otherwise the GST area always remained on top and
  the MJPEG video was not visible on screen. This part is really RFC,
  if someone knows a better place for this line, feel free!


please, let me know if you have any comments!

best regards,


Kevin

---

# spice-server

Kevin Pouget (1):
  streaming: Restart guest video streams on video-codec changes

 server/dcc.c               |  4 +++-
 server/display-channel.c   |  2 +-
 server/red-stream-device.c | 15 +++++++++++++++
 server/red-stream-device.h |  1 +
 server/reds.c              | 11 +++++++++++
 server/reds.h              |  1 +
 server/stream-channel.c    | 34 ++++++++++++++++++++++++++++++----
 server/video-stream.c      |  8 ++++++++
 server/video-stream.h      |  1 +
 9 files changed, 71 insertions(+), 6 deletions(-)

# spice-streaming-agent

Kevin Pouget (2):
  gst-plugin: allow the instantiation of multiple GST encoder plugins
  spice-streaming-agent: fully reset the capture loop on start/stop
    requests

 src/gst-plugin.cpp            | 50 ++++++++++++++++++++++-------------
 src/spice-streaming-agent.cpp |  9 +++++--
 2 files changed, 38 insertions(+), 21 deletions(-)

# spice-gtk

Kevin Pouget (1):
  spice-widget: make draw-area visible on update_image

 src/spice-widget.c | 2 ++
 1 file changed, 2 insertions(+)

--
2.21.0


More information about the Spice-devel mailing list