static sout_instance_t *RequestSout( input_resource_t *p_resource, sout_instance_t *p_sout, const char *psz_sout ) { #ifdef ENABLE_SOUT if( !p_sout && !psz_sout ) { if( p_resource->p_sout ) msg_Dbg( p_resource->p_sout, "destroying useless sout" ); DestroySout( p_resource ); return NULL; } assert( p_resource->p_input ); assert( !p_sout || ( !p_resource->p_sout && !psz_sout ) ); /* Check the validity of the sout */ if( p_resource->p_sout && strcmp( p_resource->p_sout->psz_sout, psz_sout ) ) { msg_Dbg( p_resource->p_parent, "destroying unusable sout" ); DestroySout( p_resource ); } if( psz_sout ) { if( p_resource->p_sout ) { /* Reuse it */ msg_Dbg( p_resource->p_parent, "reusing sout" ); msg_Dbg( p_resource->p_parent, "you probably want to use gather stream_out" ); } else { /* Create a new one */ p_resource->p_sout = sout_NewInstance( p_resource->p_parent, psz_sout ); } p_sout = p_resource->p_sout; p_resource->p_sout = NULL; return p_sout; } else { p_resource->p_sout = p_sout; return NULL; } #else return NULL; #endif }
static void Destructor( gc_object_t *p_gc ) { input_resource_t *p_resource = vlc_priv( p_gc, input_resource_t ); DestroySout( p_resource ); DestroyVout( p_resource ); DestroyAout( p_resource ); vlc_mutex_destroy( &p_resource->lock_hold ); vlc_mutex_destroy( &p_resource->lock ); free( p_resource ); }
void input_resource_Release( input_resource_t *p_resource ) { if( atomic_fetch_sub( &p_resource->refs, 1 ) != 1 ) return; DestroySout( p_resource ); DestroyVout( p_resource ); if( p_resource->p_aout != NULL ) aout_Destroy( p_resource->p_aout ); vlc_mutex_destroy( &p_resource->lock_hold ); vlc_mutex_destroy( &p_resource->lock ); free( p_resource ); }