/*****************************************************************************
* nsc.c: NSC file demux and encoding decoder
*****************************************************************************
- * Copyright (C) 2005 the VideoLAN team
- * $Id: $
+ * Copyright (C) 2005 VLC authors and VideoLAN
+ * $Id$
*
- * Authors: Jon Lech Johansen <jon@nanocrew.net>
- * Derk-Jan Hartman <hartman at videolan dot org>
+ * Authors: Derk-Jan Hartman <hartman at videolan dot org>
+ * based on work from Jon Lech Johansen <jon@nanocrew.net>
*
- * 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 <stdlib.h> /* malloc(), free() */
-#include <ctype.h>
-#include <vlc/vlc.h>
-#include <vlc/input.h>
-#include <vlc_playlist.h>
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <vlc_common.h>
+#include <vlc_plugin.h>
+#include <vlc_demux.h>
+#include <vlc_charset.h>
+#include <ctype.h>
#define MAX_LINE 16024
/*****************************************************************************
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 );
if( encoding_type == 1 )
{
- if( isxdigit( **input ) == 0 )
+ if( isxdigit( (unsigned char)**input ) == 0 )
return -1;
- if( isdigit( **input ) == 0 )
- *output = (toupper( **input ) - 7) * 16;
+ if( isdigit( (unsigned char)**input ) == 0 )
+ *output = (toupper( (unsigned char)**input ) - 7) * 16;
else
*output = **input * 16;
(*input)++;
- if( isxdigit( **input ) == 0 )
+ if( isxdigit( (unsigned char)**input ) == 0 )
return -1;
- if( isdigit( **input ) == 0 )
- *output |= toupper( **input ) - 0x37;
+ if( isdigit( (unsigned char)**input ) == 0 )
+ *output |= toupper( (unsigned char)**input ) - 0x37;
else
*output |= **input - 0x30;
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;
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;
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 */
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;
*****************************************************************************/
static void DemuxClose( vlc_object_t *p_this )
{
- demux_t *p_demux = (demux_t*)p_this;
+ VLC_UNUSED( p_this );
return;
}
}
*psz_value = '\0';
psz_value++;
-
+
if( !strncasecmp( psz_value, "0x", 2 ) )
{
int i_value;
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;
*****************************************************************************/
static int Demux ( demux_t *p_demux )
{
- demux_sys_t *p_sys = p_demux->p_sys;
char *psz_line;
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;
}