]> git.sesse.net Git - vlc/blobdiff - modules/stream_out/bridge.c
rtp sout: implement rtptime parameter
[vlc] / modules / stream_out / bridge.c
index 53893110e56382d278264fe94a8ef790b173ae9e..aec3854732abb542ecfa4a2858b31fefadbb6587 100644 (file)
@@ -88,43 +88,43 @@ static void CloseIn ( vlc_object_t * );
 #define SOUT_CFG_PREFIX_OUT "sout-bridge-out-"
 #define SOUT_CFG_PREFIX_IN "sout-bridge-in-"
 
-vlc_module_begin();
-    set_shortname( N_("Bridge"));
-    set_description( N_("Bridge stream output"));
-    add_submodule();
-    set_section( N_("Bridge out"), NULL );
-    set_capability( "sout stream", 50 );
-    add_shortcut( "bridge-out" );
+vlc_module_begin ()
+    set_shortname( N_("Bridge"))
+    set_description( N_("Bridge stream output"))
+    add_submodule ()
+    set_section( N_("Bridge out"), NULL )
+    set_capability( "sout stream", 50 )
+    add_shortcut( "bridge-out" )
     /* Only usable with VLM. No category so not in gui preferences
-    set_category( CAT_SOUT );
-    set_subcategory( SUBCAT_SOUT_STREAM );*/
+    set_category( CAT_SOUT )
+    set_subcategory( SUBCAT_SOUT_STREAM )*/
     add_integer( SOUT_CFG_PREFIX_OUT "id", 0, NULL, ID_TEXT, ID_LONGTEXT,
-                 false );
+                 false )
     add_string( SOUT_CFG_PREFIX_OUT "in-name", "default", NULL,
-                DEST_TEXT, DEST_LONGTEXT, false );
-    set_callbacks( OpenOut, CloseOut );
-
-    add_submodule();
-    set_section( N_("Bridge in"), NULL );
-    set_capability( "sout stream", 50 );
-    add_shortcut( "bridge-in" );
-    /*set_category( CAT_SOUT );
-    set_subcategory( SUBCAT_SOUT_STREAM );*/
+                DEST_TEXT, DEST_LONGTEXT, false )
+    set_callbacks( OpenOut, CloseOut )
+
+    add_submodule ()
+    set_section( N_("Bridge in"), NULL )
+    set_capability( "sout stream", 50 )
+    add_shortcut( "bridge-in" )
+    /*set_category( CAT_SOUT )
+    set_subcategory( SUBCAT_SOUT_STREAM )*/
     add_integer( SOUT_CFG_PREFIX_IN "delay", 0, NULL, DELAY_TEXT,
-                 DELAY_LONGTEXT, false );
+                 DELAY_LONGTEXT, false )
     add_integer( SOUT_CFG_PREFIX_IN "id-offset", 8192, NULL, ID_OFFSET_TEXT,
-                 ID_OFFSET_LONGTEXT, false );
+                 ID_OFFSET_LONGTEXT, false )
     add_string( SOUT_CFG_PREFIX_IN "name", "default", NULL,
-                NAME_TEXT, NAME_LONGTEXT, false );
+                NAME_TEXT, NAME_LONGTEXT, false )
     add_bool( SOUT_CFG_PREFIX_IN "placeholder", false, NULL,
-              PLACEHOLDER_TEXT, PLACEHOLDER_LONGTEXT, false );
+              PLACEHOLDER_TEXT, PLACEHOLDER_LONGTEXT, false )
     add_integer( SOUT_CFG_PREFIX_IN "placeholder-delay", 200, NULL,
-                 PLACEHOLDER_DELAY_TEXT, PLACEHOLDER_DELAY_LONGTEXT, false );
+                 PLACEHOLDER_DELAY_TEXT, PLACEHOLDER_DELAY_LONGTEXT, false )
     add_bool( SOUT_CFG_PREFIX_IN "placeholder-switch-on-iframe", true, NULL,
-              PLACEHOLDER_IFRAME_TEXT, PLACEHOLDER_IFRAME_LONGTEXT, false );
-    set_callbacks( OpenIn, CloseIn );
+              PLACEHOLDER_IFRAME_TEXT, PLACEHOLDER_IFRAME_LONGTEXT, false )
+    set_callbacks( OpenIn, CloseIn )
 
-vlc_module_end();
+vlc_module_end ()
 
 
 /*****************************************************************************
@@ -167,24 +167,6 @@ typedef struct bridge_t
     int i_es_num;
 } bridge_t;
 
-#define GetBridge(a,b) __GetBridge( VLC_OBJECT(a), b )
-static bridge_t *__GetBridge( vlc_object_t *p_object, const char *psz_name )
-{
-    bridge_t *p_bridge;
-    vlc_value_t val;
-
-    if( var_Get( p_object->p_libvlc, psz_name, &val ) )
-    {
-        p_bridge = NULL;
-    }
-    else
-    {
-        p_bridge = val.p_address;
-    }
-
-    return p_bridge;
-}
-
 
 /*
  * Bridge out
@@ -213,6 +195,8 @@ static int OpenOut( vlc_object_t *p_this )
                    p_stream->p_cfg );
 
     p_sys          = malloc( sizeof( out_sout_stream_sys_t ) );
+    if( unlikely( !p_sys ) )
+        return VLC_ENOMEM;
     p_sys->b_inited = false;
 
     var_Create( p_this->p_libvlc, "bridge-lock", VLC_VAR_MUTEX );
@@ -272,17 +256,13 @@ static sout_stream_id_t * AddOut( sout_stream_t *p_stream, es_format_t *p_fmt )
 
     vlc_mutex_lock( p_sys->p_lock );
 
-    p_bridge = GetBridge( p_stream, p_sys->psz_name );
+    p_bridge = var_GetAddress( p_stream->p_libvlc, p_sys->psz_name );
     if ( p_bridge == NULL )
     {
-        vlc_object_t *p_libvlc = VLC_OBJECT( p_stream->p_libvlc );
-        vlc_value_t val;
-
-        p_bridge = malloc( sizeof( bridge_t ) );
+        p_bridge = xmalloc( sizeof( bridge_t ) );
 
-        var_Create( p_libvlc, p_sys->psz_name, VLC_VAR_ADDRESS );
-        val.p_address = p_bridge;
-        var_Set( p_libvlc, p_sys->psz_name, val );
+        var_Create( p_stream->p_libvlc, p_sys->psz_name, VLC_VAR_ADDRESS );
+        var_SetAddress( p_stream->p_libvlc, p_sys->psz_name, p_bridge );
 
         p_bridge->i_es_num = 0;
         p_bridge->pp_es = NULL;
@@ -296,11 +276,10 @@ static sout_stream_id_t * AddOut( sout_stream_t *p_stream, es_format_t *p_fmt )
 
     if ( i == p_bridge->i_es_num )
     {
-        p_bridge->pp_es = realloc( p_bridge->pp_es,
-                                   (p_bridge->i_es_num + 1)
-                                     * sizeof(bridged_es_t *) );
+        p_bridge->pp_es = xrealloc( p_bridge->pp_es,
+                          (p_bridge->i_es_num + 1) * sizeof(bridged_es_t *) );
         p_bridge->i_es_num++;
-        p_bridge->pp_es[i] = malloc( sizeof(bridged_es_t) );
+        p_bridge->pp_es[i] = xmalloc( sizeof(bridged_es_t) );
     }
 
     p_sys->p_es = p_es = p_bridge->pp_es[i];
@@ -413,6 +392,8 @@ static int OpenIn( vlc_object_t *p_this )
     vlc_value_t val;
 
     p_sys          = malloc( sizeof( in_sout_stream_sys_t ) );
+    if( unlikely( !p_sys ) )
+        return VLC_ENOMEM;
 
     p_sys->p_out = sout_StreamNew( p_stream->p_sout, p_stream->psz_next );
     if( !p_sys->p_out )
@@ -557,7 +538,7 @@ static int SendIn( sout_stream_t *p_stream, sout_stream_id_t *id,
     /* Then check all bridged streams */
     vlc_mutex_lock( p_sys->p_lock );
 
-    p_bridge = GetBridge( p_stream, p_sys->psz_name );
+    p_bridge = var_GetAddress( p_stream->p_libvlc, p_sys->psz_name );
 
     if( p_bridge )
     {
@@ -695,12 +676,11 @@ static int SendIn( sout_stream_t *p_stream, sout_stream_id_t *id,
 
     if( b_no_es )
     {
-        vlc_object_t *p_libvlc = VLC_OBJECT( p_stream->p_libvlc );
         for ( i = 0; i < p_bridge->i_es_num; i++ )
             free( p_bridge->pp_es[i] );
         free( p_bridge->pp_es );
         free( p_bridge );
-        var_Destroy( p_libvlc, p_sys->psz_name );
+        var_Destroy( p_stream->p_libvlc, p_sys->psz_name );
     }
     }