summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYonit Halperin <yhalperi@redhat.com>2013-02-18 14:26:25 -0500
committerYonit Halperin <yhalperi@redhat.com>2013-04-22 11:34:20 -0400
commit7cdf8de00a573b6bdb4ec4582c87aa79b25796d3 (patch)
tree3e700c52e6e58403312f76b7bab3c6400d5c4304
parent5ebeee51146f9441474377e77bbc15ec69530d54 (diff)
add stream report messages
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.
-rw-r--r--common/client_marshallers.h1
-rw-r--r--common/messages.h18
m---------spice-protocol0
-rw-r--r--spice.proto18
4 files changed, 37 insertions, 0 deletions
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
-Subproject df6bc6269ebd3144663cbdb8457fbe71d9202b6
+Subproject a04cc68ba16c5ad8cf1f35b61c1464ef96bdfb0
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 {