[vlc-devel] [PATCH 07/11] input: decoder: rework CreateVoutIfNeeded()
Thomas Guillem
thomas at gllm.fr
Tue Jun 30 17:27:18 CEST 2020
Remove out variables since they are stored in p_owner. Externalise dec_device
handling.
---
src/input/decoder.c | 56 ++++++++++++++-------------------------------
1 file changed, 17 insertions(+), 39 deletions(-)
diff --git a/src/input/decoder.c b/src/input/decoder.c
index 4bb809610dd..ed7cb6803b8 100644
--- a/src/input/decoder.c
+++ b/src/input/decoder.c
@@ -404,16 +404,14 @@ static int ModuleThread_UpdateAudioFormat( decoder_t *p_dec )
return 0;
}
-static int CreateVoutIfNeeded(vlc_input_decoder_t *, vout_thread_t **, enum vlc_vout_order *, vlc_decoder_device **);
+static int CreateVoutIfNeeded(vlc_input_decoder_t *);
static int ModuleThread_UpdateVideoFormat( decoder_t *p_dec, vlc_video_context *vctx )
{
vlc_input_decoder_t *p_owner = dec_get_owner( p_dec );
- enum vlc_vout_order vout_order;
- vout_thread_t *p_vout = NULL;
- int created_vout = CreateVoutIfNeeded(p_owner, &p_vout, &vout_order, NULL);
+ int created_vout = CreateVoutIfNeeded(p_owner);
if (created_vout == -1)
return -1; // error
if (created_vout == 0)
@@ -422,6 +420,8 @@ static int ModuleThread_UpdateVideoFormat( decoder_t *p_dec, vlc_video_context *
if (vctx != NULL && p_owner->vctx == vctx)
return 0;
}
+ assert(p_owner->p_vout);
+
if (p_owner->vctx)
vlc_video_context_Release(p_owner->vctx);
p_owner->vctx = vctx ? vlc_video_context_Hold(vctx) : NULL;
@@ -465,29 +465,28 @@ static int ModuleThread_UpdateVideoFormat( decoder_t *p_dec, vlc_video_context *
}
if (p_owner->vout_thread_started)
{
- int res = vout_ChangeSource(p_vout, &p_dec->fmt_out.video);
+ int res = vout_ChangeSource(p_owner->p_vout, &p_dec->fmt_out.video);
if (res == 0)
// the display/thread is started and can handle the new source format
return 0;
}
vout_configuration_t cfg = {
- .vout = p_vout, .clock = p_owner->p_clock, .fmt = &p_dec->fmt_out.video,
+ .vout = p_owner->p_vout, .clock = p_owner->p_clock, .fmt = &p_dec->fmt_out.video,
.mouse_event = MouseEvent, .mouse_opaque = p_dec,
};
- p_vout = input_resource_RequestVout( p_owner->p_resource, vctx, &cfg, NULL);
+ vout_thread_t *p_vout =
+ input_resource_RequestVout(p_owner->p_resource, vctx, &cfg, NULL);
if (p_vout != NULL)
{
p_owner->vout_thread_started = true;
- decoder_Notify(p_owner, on_vout_started, p_vout, vout_order);
+ decoder_Notify(p_owner, on_vout_started, p_vout, p_owner->vout_order);
return 0;
}
return -1;
}
-static int CreateVoutIfNeeded(vlc_input_decoder_t *p_owner,
- vout_thread_t **pp_vout, enum vlc_vout_order *order,
- vlc_decoder_device **pp_dec_dev)
+static int CreateVoutIfNeeded(vlc_input_decoder_t *p_owner)
{
decoder_t *p_dec = &p_owner->dec;
bool need_vout = false;
@@ -534,17 +533,7 @@ static int CreateVoutIfNeeded(vlc_input_decoder_t *p_owner,
}
if( !need_vout )
- {
- if (pp_vout || pp_dec_dev)
- {
- if ( pp_vout )
- *pp_vout = p_owner->p_vout;
- if ( pp_dec_dev )
- *pp_dec_dev = vout_GetDevice(p_owner->p_vout);
- *order = p_owner->vout_order;
- }
return 0; // vout unchanged
- }
vlc_mutex_lock( &p_owner->lock );
@@ -552,16 +541,13 @@ static int CreateVoutIfNeeded(vlc_input_decoder_t *p_owner,
p_owner->p_vout = NULL; // the DecoderThread should not use the old vout anymore
vlc_mutex_unlock( &p_owner->lock );
- if ( pp_dec_dev )
- *pp_dec_dev = NULL;
+ enum vlc_vout_order order;
const vout_configuration_t cfg = { .vout = p_vout, .fmt = NULL };
- p_vout = input_resource_RequestVout( p_owner->p_resource, NULL, &cfg, order );
- if (pp_vout)
- *pp_vout = p_vout;
+ p_vout = input_resource_RequestVout( p_owner->p_resource, NULL, &cfg, &order );
vlc_mutex_lock( &p_owner->lock );
p_owner->p_vout = p_vout;
- p_owner->vout_order = *order;
+ p_owner->vout_order = order;
DecoderUpdateFormatLocked( p_owner );
p_owner->fmt.video.i_chroma = p_dec->fmt_out.i_codec;
@@ -579,9 +565,6 @@ static int CreateVoutIfNeeded(vlc_input_decoder_t *p_owner,
return -1;
}
- if (pp_dec_dev != NULL)
- *pp_dec_dev = vout_GetDevice(p_owner->p_vout);
-
vlc_fifo_Lock( p_owner->p_fifo );
p_owner->reset_out_state = true;
vlc_fifo_Unlock( p_owner->p_fifo );
@@ -597,19 +580,14 @@ static vlc_decoder_device * ModuleThread_GetDecoderDevice( decoder_t *p_dec )
if( !var_InheritBool( p_dec, "hw-dec" ) )
return NULL;
- enum vlc_vout_order vout_order;
- vlc_decoder_device *dec_device = NULL;
- int created_vout = CreateVoutIfNeeded(p_owner, NULL, &vout_order, &dec_device);
+ int created_vout = CreateVoutIfNeeded(p_owner);
if (created_vout == -1)
- {
- if ( dec_device )
- vlc_decoder_device_Release( dec_device );
return NULL; // error
- }
+
+ assert(p_owner->p_vout);
+ vlc_decoder_device *dec_device = vout_GetDevice(p_owner->p_vout);
if (created_vout == 1)
- {
return dec_device; // new vout was created with a decoder device
- }
bool need_format_update = false;
if ( memcmp( &p_dec->fmt_out.video.mastering,
--
2.20.1
More information about the vlc-devel
mailing list