/*****************************************************************************
* 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>
/*****************************************************************************
* 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")
#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 )
"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;
};
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 );
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)",
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 )
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 );
}
/*****************************************************************************
/*****************************************************************************
* 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;
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 );
}