[vlc-devel] [PATCH 04/26] video_output: split vout_Request into vout_HoldDevice and vout_RequestDisplay
Steve Lhomme
robux4 at ycbcr.xyz
Mon Sep 23 15:52:19 CEST 2019
On 2019-09-23 15:33, Thomas Guillem wrote:
>
>
> On Fri, Sep 20, 2019, at 16:28, Steve Lhomme wrote:
>> This will be used by the HW decoder to get the "decoder device". Then
>> when the VA
>> is created (or not) based on this "decoder device", the display will be
>> created.
>>
>> Don't create a new display in vout_RequestDisplay() if there's already one.
>> Maybe we need to check if the format changed to know if a new display is needed.
>> ---
>> src/video_output/video_output.c | 35 ++++++++++++++++++++++++--------
>> src/video_output/vout_internal.h | 26 ++++++++++++++++++++++++
>> 2 files changed, 53 insertions(+), 8 deletions(-)
>>
>> diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c
>> index 2a38bd677c4..cd33834f1d2 100644
>> --- a/src/video_output/video_output.c
>> +++ b/src/video_output/video_output.c
>> @@ -1862,6 +1862,16 @@ vout_thread_t *vout_Hold(vout_thread_t *vout)
>>
>> int vout_Request(const vout_configuration_t *cfg, vlc_decoder_device
>> **dec_dev,
>> input_thread_t *input)
>> +{
>> + int res = vout_HoldDevice(cfg, dec_dev);
>> + if (res == 0)
>> + {
>> + res = vout_RequestDisplay(cfg, input);
>> + }
>> + return res;
>> +}
>> +
>> +int vout_HoldDevice(const vout_configuration_t *cfg,
>> vlc_decoder_device **dec_dev)
>> {
>> vout_thread_t *vout = cfg->vout;
>> vout_thread_sys_t *sys = vout->p;
>> @@ -1917,7 +1927,9 @@ int vout_Request(const vout_configuration_t *cfg,
>> vlc_decoder_device **dec_dev,
>>
>> if (vout_window_Enable(sys->display_cfg.window, &wcfg)) {
>> vlc_mutex_unlock(&sys->window_lock);
>> - goto error;
>> + msg_Err(vout, "window enabling failed");
>> + video_format_Clean(&sys->original);
>> + return -1;
>> }
>> sys->window_enabled = true;
>>
>> @@ -1931,8 +1943,22 @@ int vout_Request(const vout_configuration_t
>> *cfg, vlc_decoder_device **dec_dev,
>> sys->clock = cfg->clock;
>> sys->delay = 0;
>>
>> + if (dec_dev)
>> + *dec_dev = sys->dec_device ? vlc_decoder_device_Hold(
>> sys->dec_device ) : NULL;
>> +
>> vlc_mutex_unlock(&sys->window_lock);
>>
>> + return 0;
>> +}
>> +
>> +int vout_RequestDisplay(const vout_configuration_t *cfg, input_thread_t *input)
>> +{
>> + vout_thread_t *vout = cfg->vout;
>> + vout_thread_sys_t *sys = vout->p;
>> +
>> + if (sys->display != NULL)
>> + return VLC_SUCCESS;
>> +
>> if (vout_Start(vout, cfg))
>> {
>> vlc_mutex_lock(&sys->window_lock);
>> @@ -1954,13 +1980,6 @@ error:
>> return -1;
>> }
>>
>> - if (dec_dev)
>> - {
>> - vlc_mutex_lock(&sys->window_lock);
>> - *dec_dev = sys->dec_device ? vlc_decoder_device_Hold(
>> sys->dec_device ) : NULL;
>> - vlc_mutex_unlock(&sys->window_lock);
>> - }
>> -
>> if (input != NULL && sys->spu)
>> spu_Attach(sys->spu, input);
>> vout_IntfReinit(vout);
>> diff --git a/src/video_output/vout_internal.h
>> b/src/video_output/vout_internal.h
>> index 1f88997779c..cf0ca124f54 100644
>> --- a/src/video_output/vout_internal.h
>> +++ b/src/video_output/vout_internal.h
>> @@ -197,6 +197,32 @@ vout_thread_t *vout_Create(vlc_object_t *obj)
>> VLC_USED;
>>
>> vout_thread_t *vout_CreateDummy(vlc_object_t *obj) VLC_USED;
>>
>> +/**
>> + * Returns a suitable vout with an associated decoder device.
>> + *
>> + * \param cfg the video configuration requested.
>> + * \param dec_dev pointer to receive the decoder device reference to
>> use with the vout or NULL
>> + * \retval 0 on success
>> + * \retval -1 on error
>> + */
>> +int vout_HoldDevice(const vout_configuration_t *cfg,
>> vlc_decoder_device **dec_dev);
>> +
>> +/**
>> + * Returns a suitable vout or release the given one.
>
> It's weird since this function returns an int.
>
> Are you creating a vout or starting a display module of an existing vout ? It's not that obvious with the comment/function_name that are not matching.
It's not creating a vout, there's vout_Create() for that. It's not
starting a display module either, which is done by vout_RequestDisplay().
I'll update the function documentation which was mostly copy/pasted.
More information about the vlc-devel
mailing list