[Spice-devel] [spice-gtk 2/2] RFC: Allow to limit the latency introduced by lip sync
Marc-André Lureau
mlureau at redhat.com
Wed Mar 15 21:30:37 UTC 2017
Hi
----- Original Message -----
> This patch allows to reduce the time the client wait to display frames.
> It can make the lip sync not working but it allows to see the
> video latency introduced by this code.
> This patch is meant to be used mainly for debugging.
How does it help with debugging? I can't find a good reason to have a maximized delay for debugging reasons, or for user-experience, however a warning for delay > X seconds could be useful.
>
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
> src/channel-display-gst.c | 1 +
> src/channel-display-mjpeg.c | 14 ++++++++++++++
> src/channel-display-priv.h | 3 +++
> 3 files changed, 18 insertions(+)
>
> diff --git a/src/channel-display-gst.c b/src/channel-display-gst.c
> index 9c62e67..379c935 100644
> --- a/src/channel-display-gst.c
> +++ b/src/channel-display-gst.c
> @@ -184,6 +184,7 @@ static void schedule_frame(SpiceGstDecoder *decoder)
>
> SpiceStreamDataHeader *op = spice_msg_in_parsed(frame->msg);
> gint32 time_diff = compute_mm_time_diff(op->multi_media_time, now);
> + time_diff = MIN(time_diff, max_frame_delay_ms);
> if (time_diff >= 0) {
> decoder->timer_id = g_timeout_add(time_diff,
> display_frame, decoder);
> diff --git a/src/channel-display-mjpeg.c b/src/channel-display-mjpeg.c
> index 1b7373b..5c778a9 100644
> --- a/src/channel-display-mjpeg.c
> +++ b/src/channel-display-mjpeg.c
> @@ -182,6 +182,19 @@ static gboolean mjpeg_decoder_decode_frame(gpointer
> video_decoder)
>
> /* ---------- VideoDecoder's queue scheduling ---------- */
>
> +enum { MAX_DELAY_MS = 2000 };
> +gint32 max_frame_delay_ms = MAX_DELAY_MS;
> +
> +SPICE_CONSTRUCTOR_FUNC(max_delay_init)
> +{
> + const char *str_delay = g_getenv("SPICE_MAX_FRAME_DELAY");
> + if (str_delay) {
> + int delay = atoi(str_delay);
> + if (delay >= 0 && delay <= MAX_DELAY_MS)
> + max_frame_delay_ms = delay;
> + }
> +}
> +
> static void mjpeg_decoder_schedule(MJpegDecoder *decoder)
> {
> SPICE_DEBUG("%s", __FUNCTION__);
> @@ -196,6 +209,7 @@ static void mjpeg_decoder_schedule(MJpegDecoder *decoder)
> if (frame_msg) {
> SpiceStreamDataHeader *op = spice_msg_in_parsed(frame_msg);
> gint32 time_diff = compute_mm_time_diff(op->multi_media_time,
> time);
> + time_diff = MIN(time_diff, max_frame_delay_ms);
> if (time_diff >= 0) {
> decoder->cur_frame_msg = frame_msg;
> decoder->timer_id = g_timeout_add(time_diff,
> mjpeg_decoder_decode_frame, decoder);
> diff --git a/src/channel-display-priv.h b/src/channel-display-priv.h
> index 3cd0727..1254f9d 100644
> --- a/src/channel-display-priv.h
> +++ b/src/channel-display-priv.h
> @@ -157,6 +157,9 @@ static inline gint32 compute_mm_time_diff(guint32 time1,
> guint32 time2)
> return (gint32) (guint32) (time1 - time2);
> }
>
> +/* maximum delay for frames */
> +extern gint32 max_frame_delay_ms;
> +
> G_END_DECLS
>
> #endif // CHANNEL_DISPLAY_PRIV_H_
> --
> 2.9.3
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
>
More information about the Spice-devel
mailing list