[vlc-devel] [PATCH 09/26] input: resource: split input_resource_GetVout()

Thomas Guillem thomas at gllm.fr
Mon Sep 23 15:41:53 CEST 2019


Maybe the input resource should only handle the initial vout creation / holding, and left the user (mainly decoder.c) handling DecDevice and VD creation.

On Fri, Sep 20, 2019, at 16:28, Steve Lhomme wrote:
> So we can create the display separately, when the video context will be created.
> 
> The first call creates/gets the vout and the decoder device. The other call
> creates/gets the display module.
> ---
>  src/input/decoder.c  | 21 +++++++++++++++------
>  src/input/resource.c | 20 ++++++++++++++------
>  src/input/resource.h |  1 +
>  3 files changed, 30 insertions(+), 12 deletions(-)
> 
> diff --git a/src/input/decoder.c b/src/input/decoder.c
> index f2f69a05fd1..c834ee5504a 100644
> --- a/src/input/decoder.c
> +++ b/src/input/decoder.c
> @@ -562,12 +562,21 @@ static int ModuleThread_UpdateVideoFormat( 
> decoder_t *p_dec )
>          }
>          enum vlc_vout_order order;
>          vlc_decoder_device *dec_dev = NULL;
> -        p_vout = input_resource_GetVoutHoldDevice( p_owner->p_resource,
> -            &(vout_configuration_t) {
> -                .vout = p_vout, .clock = p_owner->p_clock, .fmt = &fmt,
> -                .dpb_size = dpb_size + p_dec->i_extra_picture_buffers 
> + 1,
> -                .mouse_event = MouseEvent, .mouse_opaque = p_dec
> -            }, &order, &dec_dev );
> +        vout_configuration_t cfg = {
> +            .vout = p_vout, .clock = p_owner->p_clock, .fmt = &fmt,
> +            .dpb_size = dpb_size + p_dec->i_extra_picture_buffers + 1,
> +            .mouse_event = MouseEvent, .mouse_opaque = p_dec
> +        };
> +        p_vout = input_resource_GetVoutHoldDevice( 
> p_owner->p_resource, &cfg, &order, &dec_dev );
> +        if (p_vout)
> +        {
> +            cfg.vout = p_vout;
> +            if (input_resource_GetDisplay( p_owner->p_resource, &cfg) 
> != 0)
> +            {
> +                p_vout = NULL;
> +            }
> +        }
> +
>          if (p_vout)
>              decoder_Notify(p_owner, on_vout_added, p_vout, order);
>  
> diff --git a/src/input/resource.c b/src/input/resource.c
> index d5521822752..3374b8f0bf8 100644
> --- a/src/input/resource.c
> +++ b/src/input/resource.c
> @@ -432,15 +432,25 @@ vout_thread_t 
> *input_resource_GetVoutHoldDevice(input_resource_t *p_resource,
>          return NULL;
>      }
>  
> +    vout = cfg->vout;
> +
> +out:
> +    vlc_mutex_unlock( &p_resource->lock );
> +    return vout;
> +}
> +
> +int input_resource_GetDisplay(input_resource_t *p_resource,
> +                              const vout_configuration_t *cfg)
> +{
> +    vlc_mutex_lock( &p_resource->lock );
>      int res = vout_RequestDisplay(cfg, p_resource->p_input);
>      if (res != 0) {
>          input_resource_PutVoutLocked(p_resource, cfg->vout, false);
>          vlc_mutex_unlock(&p_resource->lock);
> -        return NULL;
> +        return res;
>      }
>  
> -    vout = cfg->vout;
> -    DisplayVoutTitle(p_resource, vout);
> +    DisplayVoutTitle(p_resource, cfg->vout);
>  
>      /* Send original viewpoint to the input in order to update other 
> ESes */
>      if (p_resource->p_input != NULL)
> @@ -449,10 +459,8 @@ vout_thread_t 
> *input_resource_GetVoutHoldDevice(input_resource_t *p_resource,
>          input_ControlPush(p_resource->p_input, 
> INPUT_CONTROL_SET_INITIAL_VIEWPOINT,
>                            &param);
>      }
> -
> -out:
>      vlc_mutex_unlock( &p_resource->lock );
> -    return vout;
> +    return 0;
>  }
>  
>  vout_thread_t *input_resource_HoldVout( input_resource_t *p_resource )
> diff --git a/src/input/resource.h b/src/input/resource.h
> index ab456d7ce5d..07b5ff78603 100644
> --- a/src/input/resource.h
> +++ b/src/input/resource.h
> @@ -41,6 +41,7 @@ vout_thread_t 
> *input_resource_GetVoutHoldDevice(input_resource_t *,
>                                        const vout_configuration_t *,
>                                        enum vlc_vout_order *order,
>                                        vlc_decoder_device **);
> +int input_resource_GetDisplay(input_resource_t *, const 
> vout_configuration_t *);
>  void input_resource_PutVout(input_resource_t *, vout_thread_t *);
>  
>  /**
> -- 
> 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