X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fdemux%2Fnsc.c;h=da1f9f6bf7cdc79a1b90494f219a3be0fd7f23ab;hb=dacabfca3e9e8df3e06edf321994eecf32648787;hp=1649dbc4ed121d0ab9d178cf3284bf6cb2111a6a;hpb=b2f135326bd45c78b161219c64299359cedbe9b0;p=vlc diff --git a/modules/demux/nsc.c b/modules/demux/nsc.c index 1649dbc4ed..da1f9f6bf7 100644 --- a/modules/demux/nsc.c +++ b/modules/demux/nsc.c @@ -2,7 +2,7 @@ * nsc.c: NSC file demux and encoding decoder ***************************************************************************** * Copyright (C) 2005 the VideoLAN team - * $Id: $ + * $Id$ * * Authors: Jon Lech Johansen * Derk-Jan Hartman @@ -19,18 +19,22 @@ * * 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. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ /***************************************************************************** * Preamble *****************************************************************************/ -#include /* malloc(), free() */ -#include -#include -#include -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include +#include #define MAX_LINE 16024 /***************************************************************************** @@ -39,13 +43,13 @@ static int DemuxOpen ( vlc_object_t * ); static void DemuxClose ( vlc_object_t * ); -vlc_module_begin(); - set_description( _("Windows Media NSC metademux") ); - set_category( CAT_INPUT ); - set_subcategory( SUBCAT_INPUT_DEMUX ); - set_capability( "demux2", 2 ); - set_callbacks( DemuxOpen, DemuxClose ); -vlc_module_end(); +vlc_module_begin () + set_description( N_("Windows Media NSC metademux") ) + set_category( CAT_INPUT ) + set_subcategory( SUBCAT_INPUT_DEMUX ) + set_capability( "demux", 3 ) + set_callbacks( DemuxOpen, DemuxClose ) +vlc_module_end () static int Demux ( demux_t *p_demux ); static int Control( demux_t *p_demux, int i_query, va_list args ); @@ -136,7 +140,7 @@ static int load_byte( unsigned char encoding_type, return 0; } -char *nscdec( vlc_object_t *p_demux, char* p_encoded ) +static char *nscdec( vlc_object_t *p_demux, char* p_encoded ) { unsigned int i; unsigned char tmp; @@ -144,13 +148,8 @@ char *nscdec( vlc_object_t *p_demux, char* p_encoded ) unsigned int length; unsigned char encoding_type; - vlc_iconv_t conv; - size_t buf16_size; unsigned char *buf16; - char *p_buf16; - size_t buf8_size; char *buf8; - char *p_buf8; char *p_input = p_encoded; @@ -207,65 +206,34 @@ char *nscdec( vlc_object_t *p_demux, char* p_encoded ) return NULL; } - buf16_size = length; - buf16 = (unsigned char *)malloc( buf16_size ); + buf16 = malloc( length ); if( buf16 == NULL ) - { - msg_Err( p_demux, "Out of memory" ); return NULL; - } for( i = 0; i < length; i++ ) { if( load_byte( encoding_type, &buf16[ i ], &p_input, &j, &k ) ) { msg_Err( p_demux, "load_byte failed" ); - free( (void *)buf16 ); + free( buf16 ); return NULL; } } - buf8_size = length; - buf8 = (char *)malloc( buf8_size + 1 ); + buf8 = FromCharset( "UTF-16LE", buf16, length ); + free( buf16 ); if( buf8 == NULL ) - { - msg_Err( p_demux, "Out of memory" ); - free( (void *)buf16 ); - return NULL; - } - - conv = vlc_iconv_open( "UTF-8", "UTF-16LE" ); - if( conv == (vlc_iconv_t)-1 ) - { - msg_Err( p_demux, "iconv_open failed" ); - free( (void *)buf16 ); - free( (void *)buf8 ); - return NULL; - } - - p_buf8 = &buf8[ 0 ]; - p_buf16 = (char *)&buf16[ 0 ]; - - if( vlc_iconv( conv, &p_buf16, &buf16_size, &p_buf8, &buf8_size ) < 0 ) { msg_Err( p_demux, "iconv failed" ); return NULL; } - else - { - buf8[ length - buf8_size ] = '\0'; - } - - vlc_iconv_close( conv ); - - free( (void *)buf16 ); return buf8; } static int DemuxOpen( vlc_object_t * p_this ) { demux_t *p_demux = (demux_t *)p_this; - byte_t *p_peek; + const uint8_t *p_peek; int i_size; /* Lets check the content to see if this is a NSC file */ @@ -274,13 +242,13 @@ static int DemuxOpen( vlc_object_t * p_this ) if ( i_size > 0 ) { - while ( i_size && strncasecmp( p_peek, "NSC Format Version=", + while ( i_size && strncasecmp( (char *)p_peek, "NSC Format Version=", (int) sizeof("NSC Format Version=") - 1 ) ) { p_peek++; i_size--; } - if ( !strncasecmp( p_peek, "NSC Format Version=", + if ( !strncasecmp( (char *)p_peek, "NSC Format Version=", (int) sizeof("NSC Format Version=") -1 ) ) { p_demux->pf_demux = Demux; @@ -297,6 +265,7 @@ static int DemuxOpen( vlc_object_t * p_this ) *****************************************************************************/ static void DemuxClose( vlc_object_t *p_this ) { + VLC_UNUSED( p_this ); return; } @@ -319,7 +288,7 @@ static int ParseLine ( demux_t *p_demux, char *psz_line ) } *psz_value = '\0'; psz_value++; - + if( !strncasecmp( psz_value, "0x", 2 ) ) { int i_value; @@ -338,7 +307,7 @@ static int ParseLine ( demux_t *p_demux, char *psz_line ) if( psz_out ) { msg_Dbg( p_demux, "%s = %s", psz_bol, psz_out ); - if( psz_out) free( psz_out ); + free( psz_out ); } } return VLC_SUCCESS; @@ -356,12 +325,14 @@ static int Demux ( demux_t *p_demux ) while( ( psz_line = stream_ReadLine( p_demux->s ) ) ) { ParseLine( p_demux, psz_line ); - if( psz_line ) free( psz_line ); + free( psz_line ); } return VLC_SUCCESS; } static int Control( demux_t *p_demux, int i_query, va_list args ) { + VLC_UNUSED( p_demux ); VLC_UNUSED( i_query ); VLC_UNUSED( args ); + //FIXME return VLC_EGENERIC; }