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

Steve Lhomme robux4 at ycbcr.xyz
Wed Jul 31 13:44:51 CEST 2019


Did you test it or anyone ?
I have nothing to build or test it.

On 2019-07-31 13:26, Thomas Guillem wrote:
> 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
> _______________________________________________
> 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