[vlc-devel] [PATCH] video_output: wait half the extra time we have without getting the display_lock

Thomas Guillem thomas at gllm.fr
Fri Feb 19 13:07:00 UTC 2021


You should put the commit log as a comment.

Maybe max_time_to_render / 2 is too big ? Why not (max_time_to_render - max_time_to_render / 10) for example?


On Fri, Feb 19, 2021, at 12:16, Steve Lhomme wrote:
> Since f1bf7ce5b4480a3d38d54c7ae1d1564f0670d83f we start the rendering much
> earlier than before, so we have more time to do things if necessary.
> 
> The problem is that for almost all the duration of the call display_lock is
> held. So it's blocking all other UI related events from being handled. Even if
> we are going to spend most of the time waiting until we can do the display.
> 
> This patch waits a bit before locking the display_lock when we estimate we will
> have so extra time before doing the display/swap.
> 
> Fixes #25479
> ---
>  src/video_output/video_output.c | 17 +++++++++++++++++
>  1 file changed, 17 insertions(+)
> 
> diff --git a/src/video_output/video_output.c 
> b/src/video_output/video_output.c
> index d04d3f4d111..c176c274334 100644
> --- a/src/video_output/video_output.c
> +++ b/src/video_output/video_output.c
> @@ -1119,6 +1119,23 @@ static int 
> ThreadDisplayRenderPicture(vout_thread_sys_t *vout, bool render_now)
>      if (filtered->date != sys->displayed.current->date)
>          msg_Warn(&vout->obj, "Unsupported timestamp modifications done 
> by chain_interactive");
>  
> +    if (!render_now)
> +    {
> +        vlc_tick_t now = vlc_tick_now();
> +        vlc_tick_t system_pts = vlc_clock_ConvertToSystem(sys->clock, 
> now, filtered->date, sys->rate);
> +        if (unlikely(system_pts != INT64_MAX))
> +        {
> +            const vlc_tick_t late = now - system_pts;
> +            if (unlikely(late <= 0))
> +            {
> +                // wait half the extra time we have without the 
> display_lock
> +                vlc_tick_t max_time_to_render = sys->render.avg;
> +                vlc_clock_Wait(sys->clock, now , filtered->date - 
> max_time_to_render / 2, sys->rate,
> +                            VOUT_REDISPLAY_DELAY);
> +            }
> +        }
> +    }
> +
>      vout_display_t *vd = sys->display;
>  
>      vlc_mutex_lock(&sys->display_lock);
> -- 
> 2.29.2
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list