]> git.sesse.net Git - vlc/blobdiff - modules/stream_out/langfromtelx.c
sout: constify format parameter to sout_stream_t.pf_add
[vlc] / modules / stream_out / langfromtelx.c
index ac8320f7e2be7a1ec1db33da60f3d64cbe9abd1d..15b21ecfb096600e0acff04f3ba6b2031a6cc950 100644 (file)
@@ -1,35 +1,35 @@
 /*****************************************************************************
  * langfromtelx.c: dynamic language setting from telx
  *****************************************************************************
- * Copyright (C) 2009, 2011 VideoLAN
+ * Copyright © 2009-2011 VLC authors and VideoLAN
  * $Id$
  *
  * Authors: Christophe Massiot <massiot@via.ecp.fr>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
  *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
 /*****************************************************************************
  * Preamble
  *****************************************************************************/
-#include <ctype.h>
-
 #ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
 
+#include <ctype.h>
+
 #include <vlc_common.h>
 #include <vlc_plugin.h>
 #include <vlc_sout.h>
@@ -38,7 +38,8 @@
 /*****************************************************************************
  * Module descriptor
  *****************************************************************************/
-#define ID_TEXT N_("ID")
+
+#define ID_TEXT N_("Elementary Stream ID")
 #define ID_LONGTEXT N_( \
     "Specify an identifier integer for this elementary stream to change" )
 #define MAGAZINE_TEXT N_("Magazine")
@@ -57,10 +58,13 @@ static void Close   ( vlc_object_t * );
 #define SOUT_CFG_PREFIX "sout-langfromtelx-"
 
 vlc_module_begin()
-    set_shortname( _("langfromtelx"))
-    set_description( _("Dynamic language setting from telx"))
+    set_shortname( N_("Lang From Telx"))
+    set_description( N_("Dynamic language setting from teletext"))
     set_capability( "sout stream", 50 )
     add_shortcut( "langfromtelx" )
+    set_category( CAT_SOUT )
+    set_subcategory( SUBCAT_SOUT_STREAM )
+
     set_callbacks( Open, Close )
     add_integer( SOUT_CFG_PREFIX "id", 0, ID_TEXT, ID_LONGTEXT,
                  false )
@@ -80,16 +84,15 @@ static const char *ppsz_sout_options[] = {
     "id", "magazine", "page", "row", NULL
 };
 
-static sout_stream_id_t *Add   ( sout_stream_t *, es_format_t * );
-static int               Del   ( sout_stream_t *, sout_stream_id_t * );
-static int               Send  ( sout_stream_t *, sout_stream_id_t *, block_t * );
+static sout_stream_id_sys_t *Add   ( sout_stream_t *, es_format_t * );
+static void              Del   ( sout_stream_t *, sout_stream_id_sys_t * );
+static int               Send  ( sout_stream_t *, sout_stream_id_sys_t *, block_t * );
 
 struct sout_stream_sys_t
 {
-    sout_stream_t *p_out;
     int i_id, i_magazine, i_page, i_row;
     char *psz_language, *psz_old_language;
-    sout_stream_id_t *p_id, *p_telx;
+    sout_stream_id_sys_t *p_id, *p_telx;
     int i_current_page;
 };
 
@@ -101,17 +104,16 @@ static int Open( vlc_object_t *p_this )
     sout_stream_t     *p_stream = (sout_stream_t*)p_this;
     sout_stream_sys_t *p_sys;
 
-    p_sys = malloc( sizeof( sout_stream_sys_t ) );
-    if( unlikely( !p_sys ) )
-        return VLC_ENOMEM;
-
     if( !p_stream->p_next )
     {
         msg_Err( p_stream, "cannot create chain" );
-        free( p_sys );
         return VLC_EGENERIC;
     }
 
+    p_sys = malloc( sizeof( sout_stream_sys_t ) );
+    if( unlikely( !p_sys ) )
+        return VLC_ENOMEM;
+
     config_ChainParse( p_stream, SOUT_CFG_PREFIX, ppsz_sout_options,
                        p_stream->p_cfg );
 
@@ -141,12 +143,16 @@ static void Close( vlc_object_t * p_this )
     free( p_sys );
 }
 
-static sout_stream_id_t * Add( sout_stream_t *p_stream, es_format_t *p_fmt )
+static sout_stream_id_sys_t * Add( sout_stream_t *p_stream, es_format_t *p_fmt )
 {
     sout_stream_sys_t *p_sys = (sout_stream_sys_t *)p_stream->p_sys;
+    sout_stream_id_sys_t *id;
+    es_format_t fmt;
 
     if ( p_fmt->i_id == p_sys->i_id )
     {
+        fmt = *p_fmt;
+
         p_sys->psz_old_language = p_fmt->psz_language;
         msg_Dbg( p_stream,
                  "changing language of ID %d (magazine %d page %x row %d)",
@@ -157,28 +163,26 @@ static sout_stream_id_t * Add( sout_stream_t *p_stream, es_format_t *p_fmt )
         else
             strcpy( p_fmt->psz_language, "unk" );
         p_fmt->psz_language[3] = '\0';
-
-        p_sys->p_id = p_sys->p_out->pf_add( p_sys->p_out, p_fmt );
-        return p_sys->p_id;
     }
 
-    if ( p_fmt->i_codec == VLC_CODEC_TELETEXT )
-    {
-        p_sys->p_telx = p_sys->p_out->pf_add( p_sys->p_out, p_fmt );
-        return p_sys->p_telx;
-    }
+    id = sout_StreamIdAdd( p_stream->p_next, p_fmt );
+
+    if( p_fmt->i_id == p_sys->i_id )
+        p_sys->p_id = id;
+    if( p_fmt->i_codec == VLC_CODEC_TELETEXT )
+        p_sys->p_telx = id;
 
-    return p_sys->p_out->pf_add( p_sys->p_out, p_fmt );
+    return id;
 }
 
-static int Del( sout_stream_t *p_stream, sout_stream_id_t *id )
+static void Del( sout_stream_t *p_stream, sout_stream_id_sys_t *id )
 {
     sout_stream_sys_t *p_sys = (sout_stream_sys_t *)p_stream->p_sys;
 
     if ( id == p_sys->p_id ) p_sys->p_id = NULL;
     if ( id == p_sys->p_telx ) p_sys->p_telx = NULL;
 
-    return p_sys->p_out->pf_del( p_sys->p_out, id );
+    p_stream->p_next->pf_del( p_stream->p_next, id );
 }
 
 static void SetLanguage( sout_stream_t *p_stream, char *psz_language )
@@ -188,7 +192,7 @@ static void SetLanguage( sout_stream_t *p_stream, char *psz_language )
     if ( strncmp( p_sys->psz_language, psz_language, 3 ) )
         msg_Dbg( p_stream, "changing language to %s", psz_language );
 
-    strncpy( p_sys->psz_language, psz_language, 3 );
+    strncpy( p_sys->psz_language, (const char *)psz_language, 3 );
 }
 
 /*****************************************************************************
@@ -301,7 +305,7 @@ static void HandleTelx( sout_stream_t *p_stream, block_t *p_block )
 /*****************************************************************************
  * Send:
  *****************************************************************************/
-static int Send( sout_stream_t *p_stream, sout_stream_id_t *id,
+static int Send( sout_stream_t *p_stream, sout_stream_id_sys_t *id,
                  block_t *p_buffer )
 {
     sout_stream_sys_t *p_sys = (sout_stream_sys_t *)p_stream->p_sys;
@@ -309,5 +313,5 @@ static int Send( sout_stream_t *p_stream, sout_stream_id_t *id,
     if ( id == p_sys->p_telx )
         HandleTelx( p_stream, p_buffer );
 
-    return p_sys->p_out->pf_send( p_sys->p_out, id, p_buffer );
+    return p_stream->p_next->pf_send( p_stream->p_next, id, p_buffer );
 }