From: RĂ©mi Denis-Courmont Date: Sun, 14 Sep 2008 07:46:43 +0000 (+0300) Subject: Remove the useless announce handler object X-Git-Tag: 1.0.0-pre1~3269 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=e91e53cb83cb53a0aaa62522b26623c86bdbd7ec;p=vlc Remove the useless announce handler object It merely wrappeded the SAP object. --- diff --git a/include/vlc_common.h b/include/vlc_common.h index ab422c8e09..2cb64a02f1 100644 --- a/include/vlc_common.h +++ b/include/vlc_common.h @@ -265,8 +265,6 @@ typedef struct sout_stream_sys_t sout_stream_sys_t; typedef struct config_chain_t config_chain_t; typedef struct session_descriptor_t session_descriptor_t; typedef struct announce_method_t announce_method_t; -typedef struct announce_handler_t announce_handler_t; -typedef struct sap_handler_t sap_handler_t; typedef struct sout_param_t sout_param_t; typedef struct sout_pcat_t sout_pcat_t; diff --git a/src/libvlc.c b/src/libvlc.c index 03b6a61cd4..f1d42d887d 100644 --- a/src/libvlc.c +++ b/src/libvlc.c @@ -83,10 +83,7 @@ #include "audio_output/aout_internal.h" #include - #include -#include "stream_output/stream_output.h" - #include #include "libvlc.h" @@ -1026,20 +1023,6 @@ int libvlc_InternalCleanup( libvlc_int_t *p_libvlc ) stats_TimersDumpAll( p_libvlc ); stats_TimersCleanAll( p_libvlc ); -#ifdef ENABLE_SOUT - announce_handler_t * p_announce; - - /* Free announce handler(s?) */ - while( (p_announce = vlc_object_find( p_libvlc, VLC_OBJECT_ANNOUNCE, - FIND_CHILD ) ) ) - { - msg_Dbg( p_libvlc, "removing announce handler" ); - vlc_object_detach( p_announce ); - vlc_object_release( p_announce ); - announce_HandlerDestroy( p_announce ); - } -#endif - bool b_clean = true; FOREACH_ARRAY( input_item_t *p_del, priv->input_items ) msg_Err( p_libvlc, "input item %p has not been deleted properly: refcount %d, name %s", diff --git a/src/libvlc.h b/src/libvlc.h index 729bf1bead..015f9d88a5 100644 --- a/src/libvlc.h +++ b/src/libvlc.h @@ -191,6 +191,8 @@ struct vlc_object_internals_t #define vlc_internals( obj ) (((vlc_object_internals_t*)(VLC_OBJECT(obj)))-1) +typedef struct sap_handler_t sap_handler_t; + /** * Private LibVLC instance data. */ @@ -229,6 +231,9 @@ typedef struct libvlc_priv_t vlm_t *p_vlm; ///< the VLM singleton (or NULL) interaction_t *p_interaction; ///< interface interaction object httpd_t *p_httpd; ///< HTTP daemon (src/network/httpd.c) +#ifdef ENABLE_SOUT + sap_handler_t *p_sap; ///< SAP SDP advertiser +#endif } libvlc_priv_t; static inline libvlc_priv_t *libvlc_priv (libvlc_int_t *libvlc) diff --git a/src/misc/objects.c b/src/misc/objects.c index fb0020f50b..bfd2061e89 100644 --- a/src/misc/objects.c +++ b/src/misc/objects.c @@ -238,10 +238,6 @@ void * __vlc_object_create( vlc_object_t *p_this, int i_type ) i_size = sizeof( vout_thread_t ); psz_type = "opengl"; break; - case VLC_OBJECT_ANNOUNCE: - i_size = sizeof( announce_handler_t ); - psz_type = "announce"; - break; default: assert( i_type > 0 ); /* unknown type?! */ i_size = i_type; diff --git a/src/stream_output/announce.c b/src/stream_output/announce.c index 25a62ca2f6..9ba878b981 100644 --- a/src/stream_output/announce.c +++ b/src/stream_output/announce.c @@ -31,17 +31,10 @@ #include #include #include "stream_output.h" +#include "libvlc.h" #include -/* Private functions for the announce handler */ -static announce_handler_t* announce_HandlerCreate( vlc_object_t *); -static int announce_Register( announce_handler_t *p_announce, - session_descriptor_t *p_session, - announce_method_t *p_method ); -static int announce_UnRegister( announce_handler_t *p_announce, - session_descriptor_t *p_session ); - struct announce_method_t { } sap_method; @@ -50,8 +43,13 @@ struct announce_method_t * Sout-side functions ****************************************************************************/ +static void sap_destroy (vlc_object_t *p_this) +{ + libvlc_priv (p_this->p_libvlc)->p_sap = NULL; +} + /** - * Register a new session with the announce handler, using a pregenerated SDP + * Registers a new session with the announce handler, using a pregenerated SDP * * \param p_sout a sout instance structure * \param psz_sdp the SDP to register @@ -61,26 +59,16 @@ struct announce_method_t */ session_descriptor_t * sout_AnnounceRegisterSDP( sout_instance_t *p_sout, const char *psz_sdp, - const char *psz_dst, announce_method_t *p_method ) + const char *psz_dst, announce_method_t *p_method ) { - session_descriptor_t *p_session; - announce_handler_t *p_announce = (announce_handler_t*) - vlc_object_find( p_sout, - VLC_OBJECT_ANNOUNCE, - FIND_ANYWHERE ); - if( !p_announce ) - { - msg_Dbg( p_sout, "no announce handler found, creating one" ); - p_announce = announce_HandlerCreate( VLC_OBJECT( p_sout ) ); - if( !p_announce ) - { - msg_Err( p_sout, "Creation failed" ); - return NULL; - } - vlc_object_yield( p_announce ); - } + assert (p_method == &sap_method); + (void) p_method; + + session_descriptor_t *p_session = malloc (sizeof (*p_session)); + + if (!p_session) + return NULL; - p_session = malloc( sizeof( *p_session ) ); memset( p_session, 0, sizeof( *p_session ) ); p_session->psz_sdp = strdup( psz_sdp ); @@ -94,14 +82,38 @@ sout_AnnounceRegisterSDP( sout_instance_t *p_sout, const char *psz_sdp, vlc_freeaddrinfo (res); } - announce_Register( p_announce, p_session, p_method ); + vlc_value_t lockval; + if (var_Create (p_sout->p_libvlc, "sap_mutex", VLC_VAR_MUTEX) + || var_Get (p_sout->p_libvlc, "sap_mutex", &lockval)) + goto error; + + vlc_mutex_lock (lockval.p_address); + sap_handler_t *p_sap = libvlc_priv (p_sout->p_libvlc)->p_sap; + if (p_sap == NULL) + { + p_sap = SAP_Create (VLC_OBJECT (p_sout->p_libvlc)); + libvlc_priv (p_sout->p_libvlc)->p_sap = p_sap; + vlc_object_set_destructor ((vlc_object_t *)p_sap, sap_destroy); + } + else + vlc_object_yield ((vlc_object_t *)p_sap); + vlc_mutex_unlock (lockval.p_address); + + if (p_sap == NULL) + goto error; - vlc_object_release( p_announce ); + msg_Dbg (p_sout, "adding SAP session"); + SAP_Add (p_sap, p_session ); return p_session; + +error: + free (p_session->psz_sdp); + free (p_session); + return NULL; } /** - * UnRegister an existing session + * Unregisters an existing session * * \param p_sout a sout instance structure * \param p_session the session descriptor @@ -110,23 +122,22 @@ sout_AnnounceRegisterSDP( sout_instance_t *p_sout, const char *psz_sdp, int sout_AnnounceUnRegister( sout_instance_t *p_sout, session_descriptor_t *p_session ) { - int i_ret; - announce_handler_t *p_announce = (announce_handler_t*) - vlc_object_find( p_sout, - VLC_OBJECT_ANNOUNCE, - FIND_ANYWHERE ); - if( !p_announce ) - { - msg_Dbg( p_sout, "unable to remove announce: no announce handler" ); - return VLC_ENOOBJ; - } - i_ret = announce_UnRegister( p_announce, p_session ); - if( i_ret == 0 ) - free( p_session ); + sap_handler_t *p_sap = libvlc_priv (p_sout->p_libvlc)->p_sap; + + msg_Dbg (p_sout, "removing SAP session"); + SAP_Del (p_sap, p_session); - vlc_object_release( p_announce ); + vlc_value_t lockval; + var_Create (p_sout->p_libvlc, "sap_mutex", VLC_VAR_MUTEX); + var_Get (p_sout->p_libvlc, "sap_mutex", &lockval); + vlc_mutex_lock (lockval.p_address); + vlc_object_release ((vlc_object_t *)p_sap); + vlc_mutex_unlock (lockval.p_address); - return i_ret; + free (p_session->psz_sdp); + free (p_session); + + return 0; } /** @@ -141,90 +152,3 @@ void sout_MethodRelease (announce_method_t *m) { assert (m == &sap_method); } - -/************************************************************************ - * Announce handler functions (private) - ************************************************************************/ - -/** - * Create the announce handler object - * - * \param p_this a vlc_object structure - * \return the new announce handler or NULL on error - */ -static announce_handler_t *announce_HandlerCreate( vlc_object_t *p_this ) -{ - announce_handler_t *p_announce; - - p_announce = vlc_object_create( p_this, VLC_OBJECT_ANNOUNCE ); - - if( !p_announce ) - return NULL; - - p_announce->p_sap = NULL; - vlc_object_attach( p_announce, p_this->p_libvlc); - - return p_announce; -} - -/** - * Destroy a announce handler object - * - * \param p_announce the announce handler to destroy - * \return VLC_SUCCESS or an error - */ -int announce_HandlerDestroy( announce_handler_t *p_announce ) -{ - if( p_announce->p_sap ) - SAP_Destroy( p_announce->p_sap ); - - /* Free the structure */ - vlc_object_release( p_announce ); - - return VLC_SUCCESS; -} - -/* Register an announce */ -static int announce_Register( announce_handler_t *p_announce, - session_descriptor_t *p_session, - announce_method_t *p_method ) -{ - if (p_method == NULL) - return VLC_EGENERIC; - - msg_Dbg( p_announce, "registering announce"); - if( p_method == &sap_method ) - { - /* Do we already have a SAP announce handler ? */ - if( !p_announce->p_sap ) - { - sap_handler_t *p_sap = SAP_Create (VLC_OBJECT(p_announce)); - msg_Dbg( p_announce, "creating SAP announce handler"); - if( !p_sap ) - { - msg_Err( p_announce, "SAP handler creation failed" ); - return VLC_ENOOBJ; - } - p_announce->p_sap = p_sap; - } - /* this will set p_session->p_sap for later deletion */ - msg_Dbg( p_announce, "adding SAP session"); - SAP_Add( p_announce->p_sap, p_session ); - } - else - { - msg_Err( p_announce, "announce type unsupported" ); - return VLC_EGENERIC; - } - return VLC_SUCCESS; -} - - -/* Unregister an announce */ -static int announce_UnRegister( announce_handler_t *p_announce, - session_descriptor_t *p_session ) -{ - msg_Dbg( p_announce, "unregistering announce" ); - SAP_Del( p_announce->p_sap, p_session ); - return VLC_SUCCESS; -} diff --git a/src/stream_output/stream_output.h b/src/stream_output/stream_output.h index 49b3efa0da..40e5a05bc1 100644 --- a/src/stream_output/stream_output.h +++ b/src/stream_output/stream_output.h @@ -67,19 +67,9 @@ struct session_descriptor_t bool b_ssm; }; -/* The main announce handler object */ -struct announce_handler_t -{ - VLC_COMMON_MEMBERS - - sap_handler_t *p_sap; -}; - -int announce_HandlerDestroy( announce_handler_t * ); - -sap_handler_t *SAP_Create (vlc_object_t *); -void SAP_Destroy (sap_handler_t *); -int SAP_Add (sap_handler_t *, session_descriptor_t *); -void SAP_Del (sap_handler_t *, const session_descriptor_t *); +struct sap_handler_t *SAP_Create (vlc_object_t *); +void SAP_Destroy (struct sap_handler_t *); +int SAP_Add (struct sap_handler_t *, session_descriptor_t *); +void SAP_Del (struct sap_handler_t *, const session_descriptor_t *); #endif