[Spice-devel] [PATCH spice-common 1/2] add stream report messages

Yonit Halperin yhalperi at redhat.com
Tue Feb 26 10:04:49 PST 2013


If the server & client support SPICE_DISPLAY_CAP_STREAM_REPORT,
the server first sends SPICE_MSG_DISPLAY_STREAM_ACTIVATE_REPORT. Then,
the client periodically sends SPICE_MSGC_DISPLAY_STREAM_REPORT
messages that supply the server details about the current quality of
the video streaming on the client side. The server analyses the
report and adjust the stream parameters accordingly.
---
 common/client_marshallers.h |  1 +
 common/messages.h           | 18 ++++++++++++++++++
 spice-protocol              |  2 +-
 spice.proto                 | 18 ++++++++++++++++++
 4 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/common/client_marshallers.h b/common/client_marshallers.h
index 9a2385d..85051a0 100644
--- a/common/client_marshallers.h
+++ b/common/client_marshallers.h
@@ -44,6 +44,7 @@ typedef struct {
     void (*msgc_main_agent_token)(SpiceMarshaller *m, SpiceMsgcMainAgentTokens *msg);
     void (*msgc_main_migrate_dst_do_seamless)(SpiceMarshaller *m, SpiceMsgcMainMigrateDstDoSeamless *msg);
     void (*msgc_display_init)(SpiceMarshaller *m, SpiceMsgcDisplayInit *msg);
+    void (*msgc_display_stream_report)(SpiceMarshaller *m, SpiceMsgcDisplayStreamReport *msg);
     void (*msgc_inputs_key_down)(SpiceMarshaller *m, SpiceMsgcKeyDown *msg);
     void (*msgc_inputs_key_up)(SpiceMarshaller *m, SpiceMsgcKeyUp *msg);
     void (*msgc_inputs_key_modifiers)(SpiceMarshaller *m, SpiceMsgcKeyModifiers *msg);
diff --git a/common/messages.h b/common/messages.h
index b145cfc..1d30b87 100644
--- a/common/messages.h
+++ b/common/messages.h
@@ -357,6 +357,24 @@ typedef struct SpiceMsgDisplayStreamDestroy {
     uint32_t id;
 } SpiceMsgDisplayStreamDestroy;
 
+typedef struct SpiceMsgDisplayStreamActivateReport {
+    uint32_t stream_id;
+    uint32_t unique_id;
+    uint32_t max_window_size;
+    uint32_t timeout_ms;
+} SpiceMsgDisplayStreamActivateReport;
+
+typedef struct SpiceMsgcDisplayStreamReport {
+    uint32_t stream_id;
+    uint32_t unique_id;
+    uint32_t start_frame_mm_time;
+    uint32_t end_frame_mm_time;
+    uint32_t num_frames;
+    uint32_t num_drops;
+    int32_t last_frame_delay;
+    uint32_t audio_delay;
+} SpiceMsgcDisplayStreamReport;
+
 typedef struct SpiceMsgCursorInit {
     SpicePoint16 position;
     uint16_t trail_length;
diff --git a/spice-protocol b/spice-protocol
index 720af3d..95c4e58 160000
--- a/spice-protocol
+++ b/spice-protocol
@@ -1 +1 @@
-Subproject commit 720af3dff75ef42cd77f8ccec78f5cd23358ed9b
+Subproject commit 95c4e58868f6821112e9cd30385f0112eb6d5ea3
diff --git a/spice.proto b/spice.proto
index 655352a..97d1e1b 100644
--- a/spice.proto
+++ b/spice.proto
@@ -890,6 +890,13 @@ channel DisplayChannel : BaseChannel {
 	} data;
     } draw_composite;
 
+    message {
+        uint32 stream_id;
+        uint32 unique_id;
+        uint32 max_window_size;
+        uint32 timeout_ms;
+    } stream_activate_report;
+
  client:
     message {
 	uint8 pixmap_cache_id;
@@ -897,6 +904,17 @@ channel DisplayChannel : BaseChannel {
 	uint8 glz_dictionary_id;
 	int32 glz_dictionary_window_size;  // in pixels
     } init = 101;
+
+    message {
+        uint32 stream_id;
+        uint32 unique_id;
+        uint32 start_frame_mm_time;
+        uint32 end_frame_mm_time;
+        uint32 num_frames;
+        uint32 num_drops;
+        int32 last_frame_delay;
+        uint32 audio_delay;
+    } stream_report;
 };
 
 flags16 keyboard_modifier_flags {
-- 
1.8.1



More information about the Spice-devel mailing list