Commit e91e53cb authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Remove the useless announce handler object

It merely wrappeded the SAP object.
parent 62a433eb
......@@ -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;
......
......@@ -83,10 +83,7 @@
#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",
......
......@@ -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)
......
......@@ -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;
......
......@@ -31,17 +31,10 @@
#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;
}
......@@ -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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment