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 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel