[vlc-devel] [PATCH 1/2] vout: android: only use a local pool for opaque surfaces

Thomas Guillem thomas at gllm.fr
Wed Jul 31 13:26:36 CEST 2019


OK for the set

On Wed, Jul 31, 2019, at 12:21, Steve Lhomme wrote:
> For non-opaque we copy in a local surface during prepare. It was already using
> a single surface exposed as a pool. We do not use a pool in this case anymore.
> 
> We can remove is_slow as the core allocates its own "fast" pool in this case.
> ---
>  modules/video_output/android/display.c | 50 +++++++++++++++++---------
>  1 file changed, 34 insertions(+), 16 deletions(-)
> 
> diff --git a/modules/video_output/android/display.c 
> b/modules/video_output/android/display.c
> index edf335a8c7..195cdb8e80 100644
> --- a/modules/video_output/android/display.c
> +++ b/modules/video_output/android/display.c
> @@ -121,6 +121,8 @@ struct vout_display_sys_t
>      android_window *p_window;
>      android_window *p_sub_window;
>  
> +    picture_t *p_prepared_pic; // local surface
> +
>      bool b_displayed;
>      bool b_sub_invalid;
>      filter_t *p_spu_blend;
> @@ -600,12 +602,28 @@ static int OpenCommon(vout_display_t *vd, const 
> vout_display_cfg_t *cfg,
>  
>      *fmtp = fmt;
>      /* Setup vout_display */
> -    vd->pool    = Pool;
> +    if (sys->p_window->b_opaque)
> +        vd->pool    = Pool;
> +    else
> +    {
> +        if (AndroidWindow_Setup(sys, sys->p_window, 1) != 0)
> +            goto error;
> +
> +        sys->p_prepared_pic = PictureAlloc(sys, &sys->p_window->fmt, false);
> +        if (sys->p_prepared_pic == NULL)
> +        {
> +            msg_Err(vd, "cannot allocate prepare surface");
> +            goto error;
> +        }
> +        msg_Dbg(vd, "PictureAlloc: got a frame");
> +
> +        UpdateVideoSize(sys, &sys->p_window->fmt);
> +    }
> +
>      vd->prepare = Prepare;
>      vd->display = Display;
>      vd->control = Control;
>      vd->close = Close;
> -    vd->info.is_slow = !sys->p_window->b_opaque;
>  
>      return VLC_SUCCESS;
>  
> @@ -711,6 +729,8 @@ static void Close(vout_display_t *vd)
>          AndroidWindow_Destroy(vd, sys->p_window);
>      }
>  
> +    if (sys->p_prepared_pic)
> +        picture_Release(sys->p_prepared_pic);
>      if (sys->p_sub_pic)
>          picture_Release(sys->p_sub_pic);
>      if (sys->p_spu_blend)
> @@ -779,8 +799,7 @@ static picture_pool_t *PoolAlloc(vout_display_t 
> *vd, unsigned requested_count)
>  
>      for (i = 0; i < requested_count; i++)
>      {
> -        picture_t *p_pic = PictureAlloc(sys, &sys->p_window->fmt,
> -                                        sys->p_window->b_opaque);
> +        picture_t *p_pic = PictureAlloc(sys, &sys->p_window->fmt, true);
>          if (!p_pic)
>              goto error;
>  
> @@ -791,16 +810,8 @@ static picture_pool_t *PoolAlloc(vout_display_t 
> *vd, unsigned requested_count)
>      memset(&pool_cfg, 0, sizeof(pool_cfg));
>      pool_cfg.picture_count = requested_count;
>      pool_cfg.picture       = pp_pics;
> -    if (sys->p_window->b_opaque)
> -    {
> -        pool_cfg.lock      = PoolLockOpaquePicture;
> -        pool_cfg.unlock    = PoolUnlockOpaquePicture;
> -    }
> -    else
> -    {
> -        pool_cfg.lock      = PoolLockPicture;
> -        pool_cfg.unlock    = PoolUnlockPicture;
> -    }
> +    pool_cfg.lock      = PoolLockOpaquePicture;
> +    pool_cfg.unlock    = PoolUnlockOpaquePicture;
>      pool = picture_pool_NewExtended(&pool_cfg);
>  
>  error:
> @@ -950,6 +961,15 @@ static void Prepare(vout_display_t *vd, picture_t *picture,
>  {
>      vout_display_sys_t *sys = vd->sys;
>  
> +    if (!sys->p_window->b_opaque)
> +    {
> +        if (PoolLockPicture(sys->p_prepared_pic) == 0)
> +        {
> +            picture_Copy(sys->p_prepared_pic, picture);
> +            PoolUnlockPicture(sys->p_prepared_pic);
> +        }
> +    }
> +
>      if (subpicture && sys->p_sub_window) {
>          if (sys->b_sub_invalid) {
>              sys->b_sub_invalid = false;
> @@ -1009,8 +1029,6 @@ static void Display(vout_display_t *vd, picture_t 
> *picture)
>  
>      if (sys->p_window->b_opaque)
>          AndroidOpaquePicture_Release(picture->p_sys, true);
> -    else
> -        AndroidWindow_UnlockPicture(sys, sys->p_window, picture);
>  
>      if (sys->p_sub_pic)
>          AndroidWindow_UnlockPicture(sys, sys->p_sub_window, sys->p_sub_pic);
> -- 
> 2.17.1
> 
> _______________________________________________
> 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