]> git.sesse.net Git - vlc/commitdiff
Remove the useless announce handler object
authorRémi Denis-Courmont <rdenis@simphalempin.com>
Sun, 14 Sep 2008 07:46:43 +0000 (10:46 +0300)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Sun, 14 Sep 2008 07:46:43 +0000 (10:46 +0300)
It merely wrappeded the SAP object.

include/vlc_common.h
src/libvlc.c
src/libvlc.h
src/misc/objects.c
src/stream_output/announce.c
src/stream_output/stream_output.h

index ab422c8e09e9b3b7f7195d0a69f0de3b59d4d9c9..2cb64a02f172c4a2de92ee10141fdb7463b87db5 100644 (file)
@@ -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;
index 03b6a61cd438b15996f83e4a6ec5c5c877c5aaa4..f1d42d887dcfae76a9bddd6af337d7d37b74de8f 100644 (file)
 #include "audio_output/aout_internal.h"
 
 #include <vlc_vout.h>
-
 #include <vlc_sout.h>
-#include "stream_output/stream_output.h"
-
 #include <vlc_charset.h>
 
 #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",
index 729bf1beadcae768118abca4eac77ae4ede4fb23..015f9d88a5bf3e0701f7222f050b872d1ed0efb2 100644 (file)
@@ -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)
index fb0020f50b743b5ac83cca372a9bb91081be3169..bfd2061e897e701a4f45e38b0834d81da0eb9604 100644 (file)
@@ -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;
index 25a62ca2f6ad1e22129fabe858a8b217299aec61..9ba878b981416871f5f1f71f96e99bebfc5bf9ee 100644 (file)
 #include <vlc_common.h>
 #include <vlc_sout.h>
 #include "stream_output.h"
+#include "libvlc.h"
 
 #include <assert.h>
 
-/* 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;
-}
index 49b3efa0da09903f0635717b4b218b3fcdadb413..40e5a05bc1df1e85b636d8d252b9a025157ba201 100644 (file)
@@ -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