[vlc-devel] [PATCH 03/13] resource: also hold free vouts
Thomas Guillem
thomas at gllm.fr
Mon Apr 15 15:50:48 CEST 2019
Small reminder: a "free vout" is just a stopped vout, not used by any video
decoders.
---
src/input/resource.c | 22 +++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/src/input/resource.c b/src/input/resource.c
index 01a2889655..322d6ed251 100644
--- a/src/input/resource.c
+++ b/src/input/resource.c
@@ -199,7 +199,7 @@ static vout_thread_t *HoldVout( input_resource_t *p_resource )
/* TODO FIXME: p_resource->pp_vout order is NOT stable */
vlc_mutex_lock( &p_resource->lock_hold );
- vout_thread_t *p_vout = p_resource->i_vout > 0 ? p_resource->pp_vout[0] : NULL;
+ vout_thread_t *p_vout = p_resource->i_vout > 0 ? p_resource->pp_vout[0] : p_resource->p_vout_free;
if( p_vout )
vout_Hold(p_vout);
@@ -218,20 +218,28 @@ static void HoldVouts( input_resource_t *p_resource, vout_thread_t ***ppp_vout,
vlc_mutex_lock( &p_resource->lock_hold );
- if( p_resource->i_vout <= 0 )
+ size_t count = p_resource->i_vout;
+ if( count == 0 && p_resource->p_vout_free )
+ count = 1;
+ if( count <= 0 )
goto exit;
- pp_vout = vlc_alloc( p_resource->i_vout, sizeof(*pp_vout) );
+ pp_vout = vlc_alloc( count, sizeof(*pp_vout) );
if( !pp_vout )
goto exit;
*ppp_vout = pp_vout;
- *pi_vout = p_resource->i_vout;
+ *pi_vout = count;
- for( int i = 0; i < p_resource->i_vout; i++ )
+ if( count == 1 && !p_resource->pp_vout )
{
- pp_vout[i] = p_resource->pp_vout[i];
- vout_Hold(pp_vout[i]);
+ assert( p_resource->p_vout_free );
+ pp_vout[0] = vout_Hold( p_resource->p_vout_free );
+ }
+ else
+ {
+ for( int i = 0; i < p_resource->i_vout; i++ )
+ pp_vout[i] = vout_Hold( p_resource->pp_vout[i] );
}
exit:
--
2.20.1
More information about the vlc-devel
mailing list