[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [PATCH] spice: support streaming-video parameter



On 05/03/2011 03:05 PM, Alon Levy wrote:
This adds a streaming-video=filter|all|off attribute. It is used to change
the behavior of video stream detection in spice, the default is filter (the
default for libvirt is not to specify it - the actual default is defined in
libspice-server.so).

Usage:

     <graphics type='spice' autoport='yes'>
       <streaming mode='off'/>
     </graphics>

Tested with the above and with tests/qemuxml2argvtest.

Signed-off-by: Alon Levy<alevy redhat com>

bla
missed this?
---
  docs/schemas/domain.rng                            |   12 ++++++++
  src/conf/domain_conf.c                             |   30 ++++++++++++++++++++
  src/conf/domain_conf.h                             |   11 +++++++
  src/libvirt_private.syms                           |    2 +
  src/qemu/qemu_command.c                            |    3 ++
  .../qemuxml2argv-graphics-spice.args               |    2 +-
  .../qemuxml2argv-graphics-spice.xml                |    1 +
  7 files changed, 60 insertions(+), 1 deletions(-)

It would also be nice to add documentation to docs/formatdomain.html.in so it is not an undocumented feature.

diff --git a/docs/schemas/domain.rng b/docs/schemas/domain.rng
index 7163c6e..9083ff9 100644
--- a/docs/schemas/domain.rng
+++ b/docs/schemas/domain.rng
@@ -1334,6 +1334,18 @@
                  <empty/>
                </element>
              </optional>
+<optional>
+<element name="streaming">
+<attribute name="mode">
+<choice>
+<value>filter</value>
+<value>all</value>
+<value>off</value>
+</choice>
+</attribute>
+<empty/>
+</element>
+</optional>
            </interleave>
          </group>
          <group>
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 2a681d9..eb9f587 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -352,6 +352,13 @@ VIR_ENUM_IMPL(virDomainGraphicsSpicePlaybackCompression,
                "on",
                "off");

+VIR_ENUM_IMPL(virDomainGraphicsSpiceStreamingMode,
+              VIR_DOMAIN_GRAPHICS_SPICE_STREAMING_MODE_LAST,
+              "default",
+              "filter",
+              "all",
+              "off");
+
  VIR_ENUM_IMPL(virDomainHostdevMode, VIR_DOMAIN_HOSTDEV_MODE_LAST,
                "subsystem",
                "capabilities")
@@ -4082,6 +4089,26 @@ virDomainGraphicsDefParseXML(xmlNodePtr node, int flags) {
                      VIR_FREE(compression);

                      def->data.spice.playback = compressionVal;
+                } else if (xmlStrEqual(cur->name, BAD_CAST "streaming")) {
+                    const char *mode = virXMLPropString(cur, "mode");
+                    int modeVal;
+
+                    if (!mode) {
+                        virDomainReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                                             _("spice streaming missing mode"));
Although it is still our coding style, it is not internal but user error. However, it shows we need better error code for cases like this. But that's another cup of tea.
+                        goto error;
+                    }
+                    if ((modeVal =
+                         virDomainGraphicsSpiceStreamingModeTypeFromString(mode))<= 0) {
+                        virDomainReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                                             _("unknown spice streaming mode"));
+                        VIR_FREE(mode);
+                        goto error;
+
+                    }
+                    VIR_FREE(mode);
+
+                    def->data.spice.streaming = modeVal;
                  }
              }
              cur = cur->next;
@@ -7979,6 +8006,9 @@ virDomainGraphicsDefFormat(virBufferPtr buf,
          if (def->data.spice.playback)
              virBufferVSprintf(buf, "<playback compression='%s'/>\n",
                                virDomainGraphicsSpicePlaybackCompressionTypeToString(def->data.spice.playback));
+        if (def->data.spice.streaming)
+            virBufferVSprintf(buf, "<streaming mode='%s'/>\n",
+                              virDomainGraphicsSpiceStreamingModeTypeToString(def->data.spice.streaming));
      }

      if (children) {
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 1dadf98..7a1f29a 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -696,6 +696,15 @@ enum virDomainGraphicsSpicePlaybackCompression {
      VIR_DOMAIN_GRAPHICS_SPICE_PLAYBACK_COMPRESSION_LAST
  };

+enum virDomainGraphicsSpiceStreamingMode {
+    VIR_DOMAIN_GRAPHICS_SPICE_STREAMING_MODE_DEFAULT = 0,
+    VIR_DOMAIN_GRAPHICS_SPICE_STREAMING_MODE_FILTER,
+    VIR_DOMAIN_GRAPHICS_SPICE_STREAMING_MODE_ALL,
+    VIR_DOMAIN_GRAPHICS_SPICE_STREAMING_MODE_OFF,
+
+    VIR_DOMAIN_GRAPHICS_SPICE_STREAMING_MODE_LAST
+};
+
  typedef struct _virDomainGraphicsDef virDomainGraphicsDef;
  typedef virDomainGraphicsDef *virDomainGraphicsDefPtr;
  struct _virDomainGraphicsDef {
@@ -737,6 +746,7 @@ struct _virDomainGraphicsDef {
              int jpeg;
              int zlib;
              int playback;
+            int streaming;
          } spice;
      } data;
  };
@@ -1476,6 +1486,7 @@ VIR_ENUM_DECL(virDomainGraphicsSpiceImageCompression)
  VIR_ENUM_DECL(virDomainGraphicsSpiceJpegCompression)
  VIR_ENUM_DECL(virDomainGraphicsSpiceZlibCompression)
  VIR_ENUM_DECL(virDomainGraphicsSpicePlaybackCompression)
+VIR_ENUM_DECL(virDomainGraphicsSpiceStreamingMode)
  /* from libvirt.h */
  VIR_ENUM_DECL(virDomainState)
  VIR_ENUM_DECL(virDomainSeclabel)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 1b22be6..2e25202 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -273,6 +273,8 @@ virDomainGraphicsSpicePlaybackCompressionTypeFromString;
  virDomainGraphicsSpicePlaybackCompressionTypeToString;
  virDomainGraphicsSpiceZlibCompressionTypeFromString;
  virDomainGraphicsSpiceZlibCompressionTypeToString;
+virDomainGraphicsSpiceStreamingModeTypeFromString;
+virDomainGraphicsSpiceStreamingModeTypeToString;
  virDomainGraphicsTypeFromString;
  virDomainGraphicsTypeToString;
  virDomainHostdevDefFree;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 2205ed1..8036f0c 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -4037,6 +4037,9 @@ qemuBuildCommandLine(virConnectPtr conn,
          if (def->graphics[0]->data.spice.playback)
              virBufferVSprintf(&opt, ",playback-compression=%s",
                                virDomainGraphicsSpicePlaybackCompressionTypeToString(def->graphics[0]->data.spice.playback));
+        if (def->graphics[0]->data.spice.streaming)
+            virBufferVSprintf(&opt, ",streaming-video=%s",
+                              virDomainGraphicsSpiceStreamingModeTypeToString(def->graphics[0]->data.spice.streaming));

          virCommandAddArg(cmd, "-spice");
          virCommandAddArgBuffer(cmd,&opt);
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args
index 70cd35b..084a100 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args
@@ -4,6 +4,6 @@ unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -hda \
  /dev/HostVG/QEMUGuest1 -usb -spice port=5903,tls-port=5904,addr=127.0.0.1,\
  x509-dir=/etc/pki/libvirt-spice,tls-channel=main,plaintext-channel=inputs,\
  image-compression=auto_glz,jpeg-wan-compression=auto,zlib-glz-wan-compression=auto,\
-playback-compression=on -vga \
+playback-compression=on,streaming-video=filter -vga \
  qxl -global qxl.vram_size=18874368 -device qxl,id=video1,vram_size=33554432,bus=pci.0,addr=0x4 \
  -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.xml b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.xml
index a29f50d..0d3dd48 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.xml
+++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.xml
@@ -28,6 +28,7 @@
        <jpeg compression='auto'/>
        <zlib compression='auto'/>
        <playback compression='on'/>
+<streaming mode='filter'/>
      </graphics>
      <video>
        <model type='qxl' vram='18432' heads='1'/>

Otherwise looking good.

Michal

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]