diff options
author | Yonit Halperin <yhalperi@redhat.com> | 2013-02-18 14:26:25 -0500 |
---|---|---|
committer | Yonit Halperin <yhalperi@redhat.com> | 2013-03-11 11:11:32 -0400 |
commit | 3d9cc451b8c09059dad75abfbac40f51f8302773 (patch) | |
tree | c3ecd7e3feed7f2335ddf65cce8444dd45f0a5bc | |
parent | 063f4dd3855048bf26e5a9e12f7d10959f4b7489 (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.h | 1 | ||||
-rw-r--r-- | common/messages.h | 18 | ||||
m--------- | spice-protocol | 0 | ||||
-rw-r--r-- | spice.proto | 18 |
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 6f8a0f19d00f102e8879482e17bca227594e158 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 { |