X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fdemux%2Fnsc.c;h=da1f9f6bf7cdc79a1b90494f219a3be0fd7f23ab;hb=dacabfca3e9e8df3e06edf321994eecf32648787;hp=28bc922efc470b5f093ac60ee9f3ec12da93b639;hpb=4ee061441ab14ec2d81cfd6198608a62ceea0a4d;p=vlc diff --git a/modules/demux/nsc.c b/modules/demux/nsc.c index 28bc922efc..da1f9f6bf7 100644 --- a/modules/demux/nsc.c +++ b/modules/demux/nsc.c @@ -25,12 +25,16 @@ /***************************************************************************** * 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; - const char *p_buf16; - size_t buf8_size; char *buf8; - char *p_buf8; char *p_input = p_encoded; @@ -207,13 +206,9 @@ char *nscdec( vlc_object_t *p_demux, char* p_encoded ) return NULL; } - buf16_size = length; - buf16 = malloc( buf16_size ); + buf16 = malloc( length ); if( buf16 == NULL ) - { - msg_Err( p_demux, "out of memory" ); return NULL; - } for( i = 0; i < length; i++ ) { @@ -225,47 +220,20 @@ char *nscdec( vlc_object_t *p_demux, char* p_encoded ) } } - buf8_size = length; - buf8 = malloc( buf8_size + 1 ); + buf8 = FromCharset( "UTF-16LE", buf16, length ); + free( buf16 ); if( buf8 == NULL ) - { - msg_Err( p_demux, "out of memory" ); - free( 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( buf16 ); - free( buf8 ); - return NULL; - } - - p_buf8 = buf8; - p_buf16 = (const char *)buf16; - - if( vlc_iconv( conv, &p_buf16, &buf16_size, &p_buf8, &buf8_size ) == (size_t)(-1) ) { msg_Err( p_demux, "iconv failed" ); return NULL; } - else - { - buf8[ length - buf8_size ] = '\0'; - } - - vlc_iconv_close( conv ); - - free( 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 */ @@ -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; }