[Spice-devel] [RFC PATCH spice-server v4 00/22] Allows guests to send display data as video streams

Frediano Ziglio fziglio at redhat.com
Fri Aug 25 09:53:47 UTC 2017


This patcheset add a device to allow guest machines with assigned
hardware devices to send encoded video and other informations that
will be handled as a normal display by Spice.

New GPU devices are capable to capture and encode video in an
efficient way. As the GPU in this case is assigned to the guest
and not the host is easier if the guest do the hard job.

This patchset add a new "com.redhat.stream.0" device visible to
the guests. This device will be used by the guest to send streaming
data. The host will forward the data to the client.

To do so a new StreamChannel class, implementing the protocol
DisplayChannel is implemented.

Changes since git publish v3:
- dynamically allocate channels. This solve the fixed ID
  problem and make easier in the future to implement
  multiple monitors. This required 2 additional patches,
  one to find next free ID and another that send new
  channel information to the client;
- fixed some typos;
- renamed "channel" field to "stream_channel" to avoid
  confusing them;
- updated commit messages.

Changes since git publish v2:
- define PRIMARY_SURFACE_ID mnemonic to make code more readable;
- renamed ask_new_stream to request_new_stream;
- miscellaneous comment updates;
- use NUM_STREAMS instead of fixed 40 value;
- pass time to StreamChannel sending data;
- add finalize method to free memory;
- add support for cursor move.

Frediano Ziglio (22):
  Avoid to use global variable for channel IDs
  Notify client of the creation of new channels dynamically
  stream-device: Add device to handle streaming
  stream-device: Start parsing new protocol from guest
  stream-channel: Write a really base channel to implement the streaming
  stream-channel: Start implementing DisplayChannel properly
  stream-device: Create channel for stream device
  stream-channel: Initialize blank display on client connection
  stream-device: Handle streaming data from device to channel
  stream-channel: Allows not fixed size
  stream-channel: Allows to register callback to get new stream request
  stream-channel: Support client connection/disconnection
  stream-channel: Do not show an empty blank screen on start
  char-device: Do not stop and clear interface on reset
  stream-device: Start supporting resetting device when close/open on
    guest
  stream-device: Create channel when needed
  stream-device: Limit sending queue from guest to server
  stream-channel: Activate streaming report from client
  cursor-channel: Allow to not handle a QXL device
  WIP stream-device: handle cursor from device
  WIP: Try to reduce delay
  stream-device: Implement mouse movement

 server/Makefile.am           |   3 +
 server/char-device.c         |   2 -
 server/char-device.h         |   1 +
 server/cursor-channel.c      |   8 +-
 server/cursor-channel.h      |   4 +-
 server/main-channel-client.c |  50 ++++
 server/main-channel-client.h |   3 +
 server/main-channel.c        |   6 +
 server/main-channel.h        |   3 +
 server/red-worker.c          |   2 +-
 server/reds.c                |  44 +++-
 server/reds.h                |   1 +
 server/spicevmc.c            |  10 +-
 server/stream-channel.c      | 573 +++++++++++++++++++++++++++++++++++++++++++
 server/stream-channel.h      |  82 +++++++
 server/stream-device.c       | 524 +++++++++++++++++++++++++++++++++++++++
 16 files changed, 1305 insertions(+), 11 deletions(-)
 create mode 100644 server/stream-channel.c
 create mode 100644 server/stream-channel.h
 create mode 100644 server/stream-device.c

-- 
2.13.5



More information about the Spice-devel mailing list