vlc | branch: master | Thomas Guillem <[email protected]> | Thu May 9 17:10:58 2019 +0200| [95c40bb76d9f1bb6035a6d5e73709bf53d0e763c] | committer: Thomas Guillem
resource: add input_resource_HoldDummyVout > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=95c40bb76d9f1bb6035a6d5e73709bf53d0e763c --- src/input/resource.c | 23 ++++++++++++++++++++--- src/input/resource.h | 5 +++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/input/resource.c b/src/input/resource.c index 14726aa063..70942b5317 100644 --- a/src/input/resource.c +++ b/src/input/resource.c @@ -58,6 +58,7 @@ struct input_resource_t sout_instance_t *p_sout; vout_thread_t *p_vout_free; + vout_thread_t *p_vout_dummy; bool b_vout_free_paused; /* This lock is used to protect vout resources access (for hold) @@ -293,6 +294,13 @@ input_resource_t *input_resource_New( vlc_object_t *p_parent ) if( !p_resource ) return NULL; + p_resource->p_vout_dummy = vout_CreateDummy(p_parent); + if( !p_resource->p_vout_dummy ) + { + free( p_resource ); + return NULL; + } + vlc_atomic_rc_init( &p_resource->rc ); p_resource->p_parent = p_parent; vlc_mutex_init( &p_resource->lock ); @@ -312,6 +320,7 @@ void input_resource_Release( input_resource_t *p_resource ) vlc_mutex_destroy( &p_resource->lock_hold ); vlc_mutex_destroy( &p_resource->lock ); + vout_Release( p_resource->p_vout_dummy ); free( p_resource ); } @@ -395,7 +404,12 @@ vout_thread_t *input_resource_GetVout(input_resource_t *p_resource, cfg = &cfg_buf; if (cfg_buf.vout == NULL) { - cfg_buf.vout = vout = vout_Create(p_resource->p_parent); + /* Use the dummy vout as the parent of the future main vout. This + * will allow the future vout to inherit all parameters + * pre-configured on this dummy vout. */ + vlc_object_t *parent = p_resource->i_vout == 0 ? + VLC_OBJECT(p_resource->p_vout_dummy) : p_resource->p_parent; + cfg_buf.vout = vout = vout_Create(parent); if (vout == NULL) goto out; @@ -408,12 +422,10 @@ vout_thread_t *input_resource_GetVout(input_resource_t *p_resource, #ifndef NDEBUG { - vlc_mutex_lock(&p_resource->lock_hold); int index; TAB_FIND(p_resource->i_vout, p_resource->pp_vout, cfg->vout, index ); assert(index >= 0); assert(p_resource->p_vout_free == NULL); - vlc_mutex_unlock(&p_resource->lock_hold); } #endif @@ -449,6 +461,11 @@ vout_thread_t *input_resource_HoldVout( input_resource_t *p_resource ) return p_vout; } +vout_thread_t *input_resource_HoldDummyVout( input_resource_t *p_resource ) +{ + return vout_Hold(p_resource->p_vout_dummy); +} + void input_resource_HoldVouts( input_resource_t *p_resource, vout_thread_t ***ppp_vout, size_t *pi_vout ) { diff --git a/src/input/resource.h b/src/input/resource.h index 5d779ca3e1..9aaa7d6464 100644 --- a/src/input/resource.h +++ b/src/input/resource.h @@ -49,6 +49,11 @@ void input_resource_PutVout(input_resource_t *, vout_thread_t *); vout_thread_t *input_resource_HoldVout( input_resource_t * ); /** + * This function returns the dummy vout. It will be the parent of the future + * main vout and can be used to pre-configure it. */ +vout_thread_t *input_resource_HoldDummyVout( input_resource_t * ); + +/** * This function returns all current vouts if any. * * You must call vout_Release() on all values returned (if non NULL). _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
