[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,
> ¶m);
> }
> -
> -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