else return a;
}
+/* Malloc with automatic error */
+#define MALLOC_VOID( var, type ) { var = (type*)malloc( sizeof( type) ); \
+ if( !var ) return; }
+#define MALLOC_NULL( var, type ) { var = (type*)malloc( sizeof( type) ); \
+ if( !var ) return NULL; }
+#define MALLOC_ERR( var, type ) { var = (type*)malloc( sizeof( type) ); \
+ if( !var ) return VLC_ENOMEM; }
+#define MALLOC_GOTOERR( var, type ) { var = (type*)malloc( sizeof( type) ); \
+ if( !var ) goto error; }
+#define DECMALLOC_VOID( var, type ) type* var = (type*)malloc( sizeof(type) );\
+ if( !var ) return;
+#define DECMALLOC_NULL( var, type ) type* var = (type*)malloc( sizeof(type) );\
+ if( !var ) return NULL;
+
/* Dynamic array handling: realloc array, move data, increment position */
#if defined( _MSC_VER ) && _MSC_VER < 1300 && !defined( UNDER_CE )
# define VLCCVP (void**) /* Work-around for broken compiler */
va_end( args );
return i_result;
}
+
+/*************************************************************************
+ * Miscellaneous helpers for demuxers
+ *************************************************************************/
+
+static inline vlc_bool_t isExtension( demux_t *p_demux, char *psz_requested )
+{
+ char *psz_ext;
+ psz_ext = strrchr ( p_demux->psz_path, '.' );
+ if( !psz_ext || strcmp( psz_ext, psz_requested ) )
+ return VLC_FALSE;
+ return VLC_TRUE;
+}
+static inline vlc_bool_t isDemux( demux_t *p_demux, char *psz_requested )
+{
+ if( !p_demux->psz_demux || strcmp( p_demux->psz_demux, psz_requested ) )
+ return VLC_FALSE;
+ return VLC_TRUE;
+}
+
+#define STANDARD_DEMUX_INIT \
+ p_demux->pf_control = Control; \
+ p_demux->pf_demux = Demux; \
+ MALLOC_ERR( p_demux->p_sys, demux_sys_t );
+
+#define STANDARD_DEMUX_INIT_MSG( msg ) \
+ p_demux->pf_control = Control; \
+ p_demux->pf_demux = Demux; \
+ MALLOC_ERR( p_demux->p_sys, demux_sys_t ); \
+ msg_Dbg( p_demux, msg ); \
+
+#define DEMUX_BY_EXTENSION( ext ) \
+ demux_t *p_demux = (demux_t *)p_this; \
+ if( !isExtension( p_demux, ext ) ) \
+ return VLC_EGENERIC; \
+ STANDARD_DEMUX_INIT;
+
+#define DEMUX_BY_EXTENSION_MSG( ext, msg ) \
+ demux_t *p_demux = (demux_t *)p_this; \
+ if( !isExtension( p_demux, ext ) ) \
+ return VLC_EGENERIC; \
+ STANDARD_DEMUX_INIT_MSG( msg );
+
+#define DEMUX_BY_EXTENSION_OR_FORCED( ext, module ) \
+ demux_t *p_demux = (demux_t *)p_this; \
+ if( !isExtension( p_demux, ext ) && !isDemux( p_demux, module ) ) \
+ return VLC_EGENERIC; \
+ STANDARD_DEMUX_INIT;
+
+#define DEMUX_BY_EXTENSION_OR_FORCED_MSG( ext, module, msg ) \
+ demux_t *p_demux = (demux_t *)p_this; \
+ if( !isExtension( p_demux, ext ) && !isDemux( p_demux, module ) ) \
+ return VLC_EGENERIC; \
+ STANDARD_DEMUX_INIT_MSG( msg );
+
+#define CHECK_PEEK( zepeek, size ) \
+ if( stream_Peek( p_demux->s , &zepeek, size ) < size ){ \
+ msg_Dbg( p_demux, "not enough data" ); return VLC_EGENERIC; }
+
+#define CHECK_PEEK_GOTO( zepeek, size ) \
+ if( stream_Peek( p_demux->s , &zepeek, size ) < size ) { \
+ msg_Dbg( p_demux, "not enough data" ); goto error; }
+
+#define CHECK_DISCARD_PEEK( size ) { uint8_t *p_peek; \
+ if( stream_Peek( p_demux->s , &p_peek, size ) < size ) return VLC_EGENERIC;}
+
+#define POKE( peek, stuff, size ) (strncasecmp( (char *)peek, stuff, size )==0)
+
+
+#define CREATE_PACKETIZER( a,b,c,d ) \
+ p_sys->p_packetizer = vlc_object_create( p_demux, VLC_OBJECT_DECODER ); \
+ p_sys->p_packetizer->pf_decode_audio = 0; \
+ p_sys->p_packetizer->pf_decode_video = 0; \
+ p_sys->p_packetizer->pf_decode_sub = 0; \
+ p_sys->p_packetizer->pf_packetize = 0; \
+ es_format_Init( &p_sys->p_packetizer->fmt_in, AUDIO_ES, \
+ VLC_FOURCC( a, b, c, d ) );
+
+/* BEWARE ! This can lead to memory leaks ! */
+#define LOAD_PACKETIZER_OR_FAIL( msg ) \
+ p_sys->p_packetizer->p_module = \
+ module_Need( p_sys->p_packetizer, "packetizer", NULL, 0 ); \
+ \
+ if( p_sys->p_packetizer->p_module == NULL ) \
+ { \
+ vlc_object_destroy( p_sys->p_packetizer ); \
+ msg_Err( p_demux, "cannot find packetizer for " # msg ); \
+ free( p_sys ); \
+ return VLC_EGENERIC; \
+ }
+
/**
* @}
*/
}
/* Have a peep at the show. */
- if( stream_Peek( p_demux->s, &p_peek, i_peek + A52_MAX_HEADER_SIZE * 2 ) <
- i_peek + A52_MAX_HEADER_SIZE * 2 )
- {
- /* Stream too short */
- msg_Warn( p_demux, "cannot peek()" );
- return VLC_EGENERIC;
- }
+ CHECK_PEEK( p_peek, i_peek + A52_MAX_HEADER_SIZE * 2 );
if( CheckSync( p_peek + i_peek, &b_big_endian ) != VLC_SUCCESS )
{
}
/* Fill p_demux fields */
- p_demux->pf_demux = Demux;
- p_demux->pf_control = Control;
- p_demux->p_sys = p_sys = malloc( sizeof( demux_sys_t ) );
+ STANDARD_DEMUX_INIT; p_sys = p_demux->p_sys;
p_sys->b_start = VLC_TRUE;
p_sys->i_mux_rate = 0;
p_sys->b_big_endian = b_big_endian;
- /*
- * Load the A52 packetizer
- */
+ /* Load the A52 packetizer */
p_sys->p_packetizer = vlc_object_create( p_demux, VLC_OBJECT_DECODER );
p_sys->p_packetizer->pf_decode_audio = 0;
p_sys->p_packetizer->pf_decode_video = 0;
stream_Read( p_demux->s, NULL, 12 );
/* Fill p_demux field */
- p_demux->pf_demux = Demux;
- p_demux->pf_control = Control;
- p_demux->p_sys = p_sys = malloc( sizeof( demux_sys_t ) );
-
+ STANDARD_DEMUX_INIT; p_sys = p_demux->p_sys;
es_format_Init( &p_sys->fmt, UNKNOWN_ES, 0 );
p_sys->i_time = 1;
p_sys->i_ssnd_pos = -1;
{
uint32_t i_size;
- if( stream_Peek( p_demux->s, &p_peek, 8 ) < 8 )
- {
- msg_Dbg( p_demux, "cannot peek()" );
- goto error;
- }
+ CHECK_PEEK_GOTO( p_peek, 8 );
i_size = GetDWBE( &p_peek[4] );
msg_Dbg( p_demux, "chunk fcc=%4.4s size=%d", p_peek, i_size );
if( !strncmp( (char *)&p_peek[0], "COMM", 4 ) )
{
- if( stream_Peek( p_demux->s, &p_peek, 18 + 8 ) < 18 + 8 )
- {
- msg_Dbg( p_demux, "cannot peek()" );
- goto error;
- }
+ CHECK_PEEK_GOTO( p_peek, 18+8 );
es_format_Init( &p_sys->fmt, AUDIO_ES, VLC_FOURCC( 't', 'w', 'o', 's' ) );
p_sys->fmt.audio.i_channels = GetWBE( &p_peek[8] );
p_sys->fmt.audio.i_bitspersample = GetWBE( &p_peek[14] );
}
else if( !strncmp( (char *)&p_peek[0], "SSND", 4 ) )
{
- if( stream_Peek( p_demux->s, &p_peek, 8 + 8 ) < 8 + 8 )
- {
- msg_Dbg( p_demux, "cannot peek()" );
- goto error;
- }
-
+ CHECK_PEEK_GOTO( p_peek, 8+8 );
p_sys->i_ssnd_pos = stream_Tell( p_demux->s );
p_sys->i_ssnd_size = i_size;
p_sys->i_ssnd_offset = GetDWBE( &p_peek[8] );
int i_header_size;
};
-static int DemuxPCM( demux_t * );
+static int Demux( demux_t * );
static int Control ( demux_t *, int i_query, va_list args );
/*****************************************************************************
int i_cat;
int i_samples, i_modulo;
- if( stream_Peek( p_demux->s, &p_peek, 4 ) < 4 ) return VLC_EGENERIC;
+ CHECK_PEEK( p_peek, 4 );
if( memcmp( p_peek, ".snd", 4 ) )
{
return VLC_EGENERIC;
}
- p_sys = p_demux->p_sys = malloc( sizeof( demux_sys_t ) );
+ STANDARD_DEMUX_INIT; p_sys = p_demux->p_sys;
p_sys->i_time = 1;
p_sys->i_header_size = GetDWBE( &hdr[0] );
(mtime_t)i_samples /
(mtime_t)p_sys->fmt.audio.i_rate;
- /* finish to set up p_demux */
- p_demux->pf_demux = DemuxPCM;
- p_demux->pf_control = Control;
-
return VLC_SUCCESS;
}
/*****************************************************************************
- * DemuxPCM: read packet and send them to decoders
+ * Demux: read packet and send them to decoders
*****************************************************************************
* Returns -1 in case of error, 0 in case of EOF, 1 otherwise
*****************************************************************************/
-static int DemuxPCM( demux_t *p_demux )
+static int Demux( demux_t *p_demux )
{
demux_sys_t *p_sys = p_demux->p_sys;
block_t *p_block;
}
/* Have a peep at the show. */
- if( stream_Peek( p_demux->s, &p_peek, i_peek + DTS_MAX_HEADER_SIZE * 2 ) <
- i_peek + DTS_MAX_HEADER_SIZE * 2 )
- {
- /* Stream too short */
- msg_Warn( p_demux, "cannot peek()" );
- return VLC_EGENERIC;
- }
+ CHECK_PEEK( p_peek, i_peek + DTS_MAX_HEADER_SIZE * 2 );
if( CheckSync( p_peek + i_peek ) != VLC_SUCCESS )
{
"continuing anyway" );
}
- p_demux->pf_demux = Demux;
- p_demux->pf_control = Control;
- p_demux->p_sys = p_sys = malloc( sizeof( demux_sys_t ) );
- p_sys->b_start = VLC_TRUE;
- p_sys->i_mux_rate = 0;
-
- /*
- * Load the DTS packetizer
- */
- p_sys->p_packetizer = vlc_object_create( p_demux, VLC_OBJECT_DECODER );
- p_sys->p_packetizer->pf_decode_audio = 0;
- p_sys->p_packetizer->pf_decode_video = 0;
- p_sys->p_packetizer->pf_decode_sub = 0;
- p_sys->p_packetizer->pf_packetize = 0;
-
- /* Initialization of decoder structure */
- es_format_Init( &p_sys->p_packetizer->fmt_in, AUDIO_ES,
- VLC_FOURCC( 'd', 't', 's', ' ' ) );
-
- p_sys->p_packetizer->p_module =
- module_Need( p_sys->p_packetizer, "packetizer", NULL, 0 );
- if( !p_sys->p_packetizer->p_module )
- {
- msg_Err( p_demux, "cannot find DTS packetizer" );
- return VLC_EGENERIC;
- }
+ STANDARD_DEMUX_INIT; p_sys = p_demux->p_sys;
+
+ INIT_PACKETIZER( 'd','t','s',' ' );
+ LOAD_PACKETIZER_OR_FAIL( "DTS" );
p_sys->p_es = es_out_Add( p_demux->out, &p_sys->p_packetizer->fmt_in );
int E_(Import_ASX)( vlc_object_t *p_this )
{
demux_t *p_demux = (demux_t *)p_this;
- demux_sys_t *p_sys;
char *psz_ext;
if( ( psz_ext && !strcasecmp( psz_ext, ".asx") ) ||
( psz_ext && !strcasecmp( psz_ext, ".wax") ) ||
( psz_ext && !strcasecmp( psz_ext, ".wvx") ) ||
- ( p_demux->psz_demux && !strcmp(p_demux->psz_demux, "asx-open") ) )
+ isDemux( p_demux, "asx-open" ) )
{
;
}
{
return VLC_EGENERIC;
}
- msg_Dbg( p_demux, "using asx playlist import");
-
- p_demux->pf_control = Control;
- p_demux->pf_demux = Demux;
- p_demux->p_sys = p_sys = malloc( sizeof(demux_sys_t) );
- if( p_sys == NULL )
- {
- msg_Err( p_demux, "out of memory" );
- return VLC_ENOMEM;
- }
- p_sys->psz_prefix = E_(FindPrefix)( p_demux );
- p_sys->psz_data = NULL;
- p_sys->i_data_len = -1;
- p_sys->b_utf8 = VLC_FALSE;
+ STANDARD_DEMUX_INIT_MSG( "using ASX playlist reader" );
+ p_demux->p_sys->psz_prefix = E_(FindPrefix)( p_demux );
+ p_demux->p_sys->psz_data = NULL;
+ p_demux->p_sys->i_data_len = -1;
+ p_demux->p_sys->b_utf8 = VLC_FALSE;
return VLC_SUCCESS;
}
static int Control( demux_t *p_demux, int i_query, va_list args )
{
return VLC_EGENERIC;
-}
\ No newline at end of file
+}
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
#include <ctype.h> /* isspace() */
#include <vlc/vlc.h>
#include <vlc/input.h>
#include <vlc/intf.h>
-#include <errno.h> /* ENOMEM */
#include "playlist.h"
#include "vlc_xml.h"
*****************************************************************************/
int E_(Import_B4S)( vlc_object_t *p_this )
{
- demux_t *p_demux = (demux_t *)p_this;
- demux_sys_t *p_sys;
-
- char *psz_ext;
-
- psz_ext = strrchr ( p_demux->psz_path, '.' );
-
- if( ( psz_ext && !strcasecmp( psz_ext, ".b4s") ) ||
- ( p_demux->psz_demux && !strcmp(p_demux->psz_demux, "b4s-open") ) )
- {
- ;
- }
- else
- {
- return VLC_EGENERIC;
- }
- msg_Dbg( p_demux, "using b4s playlist import");
-
- p_demux->pf_control = Control;
- p_demux->pf_demux = Demux;
- p_demux->p_sys = p_sys = malloc( sizeof(demux_sys_t) );
- if( p_sys == NULL )
- {
- msg_Err( p_demux, "out of memory" );
- return VLC_ENOMEM;
- }
- p_sys->psz_prefix = E_(FindPrefix)( p_demux );
- p_sys->p_xml = NULL;
- p_sys->p_xml_reader = NULL;
-
+ DEMUX_BY_EXTENSION_OR_FORCED_MSG( ".b4s", "b4s-open",
+ "using B4S playlist reader" );
+ p_demux->p_sys->psz_prefix = E_(FindPrefix)( p_demux );
+ p_demux->p_sys->p_xml = NULL;
+ p_demux->p_sys->p_xml_reader = NULL;
return VLC_SUCCESS;
}
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
-
#include <vlc/vlc.h>
#include <vlc/input.h>
#include <vlc/intf.h>
demux_t *p_demux = (demux_t *)p_this;
uint8_t *p_peek;
int i_peek;
- char *psz_ext;
vlc_bool_t b_valid = VLC_FALSE;
- psz_ext = strrchr ( p_demux->psz_path, '.' );
-
- if( !( psz_ext && !strncasecmp( psz_ext, ".conf", 5 ) ) &&
- !p_demux->b_force ) return VLC_EGENERIC;
+ if( !isExtension( p_demux, ".conf" ) && !p_demux->b_force )
+ return VLC_EGENERIC;
/* Check if this really is a channels file */
if( (i_peek = stream_Peek( p_demux->s, &p_peek, 1024 )) > 0 )
if( !b_valid ) return VLC_EGENERIC;
msg_Dbg( p_demux, "found valid DVB conf playlist file");
-
p_demux->pf_control = Control;
p_demux->pf_demux = Demux;
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
-
#include <vlc/vlc.h>
#include <vlc/input.h>
#include <vlc/intf.h>
int E_(Import_GVP)( vlc_object_t *p_this )
{
demux_t *p_demux = (demux_t *)p_this;
- demux_sys_t *p_sys;
int i_size;
byte_t *p_peek;
return VLC_EGENERIC;
}
- msg_Dbg( p_demux, "using Google Video Playlist (gvp) import");
-
+ STANDARD_DEMUX_INIT_MSG( "using Google Video Playlist (gvp) import" )
p_demux->pf_control = Control;
p_demux->pf_demux = Demux;
- p_demux->p_sys = p_sys = malloc( sizeof(demux_sys_t) );
- if( p_sys == NULL )
- {
- msg_Err( p_demux, "out of memory" );
- return VLC_ENOMEM;
- }
-
- p_sys->p_playlist = NULL;
+ MALLOC_ERR( p_demux->p_sys, demux_sys_t );
+ p_demux->p_sys->p_playlist = NULL;
return VLC_SUCCESS;
}
( psz_ext && !strcasecmp( psz_ext, ".rm") ) ||
( psz_ext && !strcasecmp( psz_ext, ".vlc") ) ||
/* A .ram file can contain a single rtsp link */
- ( p_demux->psz_demux && !strcmp(p_demux->psz_demux, "m3u") ) )
+ isDemux( p_demux, "m3u" ) )
{
;
}
{
return VLC_EGENERIC;
}
- msg_Dbg( p_demux, "found valid M3U playlist file");
-
- p_demux->pf_control = Control;
- p_demux->pf_demux = Demux;
- p_demux->p_sys = malloc( sizeof(demux_sys_t) );
- if( p_demux->p_sys == NULL )
- {
- msg_Err( p_demux, "Out of memory" );
- return VLC_ENOMEM;
- }
+ STANDARD_DEMUX_INIT_MSG( "found valid M3U playlist" );
p_demux->p_sys->psz_prefix = E_(FindPrefix)( p_demux );
return VLC_SUCCESS;
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
-
#include <vlc/vlc.h>
#include <vlc/input.h>
#include <vlc/intf.h>
#include "charset.h"
-#include <errno.h> /* ENOMEM */
-
#define PLAYLIST_FILE_HEADER "# vlc playlist file version 0.5"
/*****************************************************************************
if( strncmp( (char *)p_peek, PLAYLIST_FILE_HEADER , 31 ) ) return VLC_EGENERIC;
msg_Dbg( p_demux, "found valid old playlist file");
-
p_demux->pf_control = Control;
p_demux->pf_demux = Demux;
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
-
#include <vlc/vlc.h>
#include <vlc/input.h>
#include <vlc/intf.h>
-#include <errno.h> /* ENOMEM */
#include "playlist.h"
struct demux_sys_t
int E_(Import_PLS)( vlc_object_t *p_this )
{
demux_t *p_demux = (demux_t *)p_this;
-
uint8_t *p_peek;
- char *psz_ext;
-
- if( stream_Peek( p_demux->s , &p_peek, 7 ) < 7 ) return VLC_EGENERIC;
- psz_ext = strrchr ( p_demux->psz_path, '.' );
+ CHECK_PEEK( p_peek, 7 );
- if( !strncasecmp( (char *)p_peek, "[playlist]", 10 ) )
- {
- ;
- }
- else if( ( psz_ext && !strcasecmp( psz_ext, ".pls") ) ||
- ( p_demux->psz_demux && !strcmp(p_demux->psz_demux, "pls") ) )
+ if( POKE( p_peek, "[playlist]", 10 ) ||
+ isExtension( p_demux, ".pls" ) || isDemux( p_demux, "pls" ) )
{
;
}
else return VLC_EGENERIC;
- msg_Dbg( p_demux, "found valid PLS playlist file");
-
- p_demux->pf_control = Control;
- p_demux->pf_demux = Demux;
- p_demux->p_sys = malloc( sizeof(demux_sys_t) );
- if( p_demux->p_sys == NULL )
- {
- msg_Err( p_demux, "out of memory" );
- return VLC_ENOMEM;
- }
+ STANDARD_DEMUX_INIT_MSG( "found valid PLS playlist file");
p_demux->p_sys->psz_prefix = E_(FindPrefix)( p_demux );
return VLC_SUCCESS;
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
#include <ctype.h> /* isspace() */
#include <vlc/vlc.h>
#include <vlc/input.h>
#include <vlc/intf.h>
-#include <errno.h> /* ENOMEM */
#include "playlist.h"
#include "vlc_xml.h"
int E_(Import_podcast)( vlc_object_t *p_this )
{
demux_t *p_demux = (demux_t *)p_this;
- demux_sys_t *p_sys;
- char *psz_ext;
-
- psz_ext = strrchr ( p_demux->psz_path, '.' );
-
- if( p_demux->psz_demux && !strcmp(p_demux->psz_demux, "podcast") )
- {
- ;
- }
- else
- {
+ if( !isDemux( p_demux, "podcast" ) )
return VLC_EGENERIC;
- }
- msg_Dbg( p_demux, "using podcast playlist import");
-
- p_demux->pf_control = Control;
- p_demux->pf_demux = Demux;
- p_demux->p_sys = p_sys = malloc( sizeof(demux_sys_t) );
- if( p_sys == NULL )
- {
- msg_Err( p_demux, "out of memory" );
- return VLC_ENOMEM;
- }
- p_sys->psz_prefix = E_(FindPrefix)( p_demux );
- p_sys->p_playlist = NULL;
- p_sys->p_xml = NULL;
- p_sys->p_xml_reader = NULL;
+
+ STANDARD_DEMUX_INIT_MSG( "using podcast reader" );
+ p_demux->p_sys->psz_prefix = E_(FindPrefix)( p_demux );
+ p_demux->p_sys->p_playlist = NULL;
+ p_demux->p_sys->p_xml = NULL;
+ p_demux->p_sys->p_xml_reader = NULL;
return VLC_SUCCESS;
}
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
#include <ctype.h> /* isspace() */
#include <vlc/vlc.h>
#include <vlc/input.h>
#include <vlc/intf.h>
-#include <errno.h> /* ENOMEM */
#include "playlist.h"
#include "vlc_xml.h"
*****************************************************************************/
int E_(Import_QTL)( vlc_object_t *p_this )
{
- demux_t *p_demux = (demux_t *)p_this;
- demux_sys_t *p_sys;
-
- char *psz_ext;
-
- psz_ext = strrchr ( p_demux->psz_path, '.' );
-
- if( strcmp( psz_ext, ".qtl" ) )
- {
- return VLC_EGENERIC;
- }
- msg_Dbg( p_demux, "using QuickTime Media Link playlist import");
-
- p_demux->pf_control = Control;
- p_demux->pf_demux = Demux;
- p_demux->p_sys = p_sys = malloc( sizeof(demux_sys_t) );
- if( p_sys == NULL )
- {
- msg_Err( p_demux, "out of memory" );
- return VLC_ENOMEM;
- }
-
- p_sys->p_playlist = NULL;
- p_sys->p_xml = NULL;
- p_sys->p_xml_reader = NULL;
-
+ DEMUX_BY_EXTENSION_MSG( ".qtl", "using QuickTime Media Link reader" );
+ p_demux->p_sys->p_playlist = NULL;
+ p_demux->p_sys->p_xml = NULL;
+ p_demux->p_sys->p_xml_reader = NULL;
return VLC_SUCCESS;
}
int E_(Import_SGIMB)( vlc_object_t * p_this )
{
demux_t *p_demux = (demux_t *)p_this;
- demux_sys_t *p_sys;
byte_t *p_peek;
int i_size;
}
if ( !strncasecmp( (char *)p_peek, "sgiNameServerHost=", i_len ) )
{
- p_demux->pf_demux = Demux;
- p_demux->pf_control = Control;
-
- p_demux->p_sys = p_sys = malloc( sizeof( demux_sys_t ) );
- p_sys->psz_uri = NULL;
- p_sys->psz_server = NULL;
- p_sys->psz_location = NULL;
- p_sys->psz_name = NULL;
- p_sys->psz_user = NULL;
- p_sys->psz_password = NULL;
- p_sys->psz_mcast_ip = NULL;
- p_sys->i_mcast_port = 0;
- p_sys->i_packet_size = 0;
- p_sys->i_duration = 0;
- p_sys->i_port = 0;
- p_sys->i_sid = 0;
- p_sys->b_rtsp_kasenna = VLC_FALSE;
- p_sys->b_concert = VLC_FALSE;
+ STANDARD_DEMUX_INIT_MSG( "using SGIMB playlist reader" );
+ p_demux->p_sys->psz_uri = NULL;
+ p_demux->p_sys->psz_server = NULL;
+ p_demux->p_sys->psz_location = NULL;
+ p_demux->p_sys->psz_name = NULL;
+ p_demux->p_sys->psz_user = NULL;
+ p_demux->p_sys->psz_password = NULL;
+ p_demux->p_sys->psz_mcast_ip = NULL;
+ p_demux->p_sys->i_mcast_port = 0;
+ p_demux->p_sys->i_packet_size = 0;
+ p_demux->p_sys->i_duration = 0;
+ p_demux->p_sys->i_port = 0;
+ p_demux->p_sys->i_sid = 0;
+ p_demux->p_sys->b_rtsp_kasenna = VLC_FALSE;
+ p_demux->p_sys->b_concert = VLC_FALSE;
- msg_Dbg( p_demux, "using sgimb playlist import");
-
return VLC_SUCCESS;
}
}
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
#include <ctype.h> /* isspace() */
#include <vlc/vlc.h>
int E_(Import_Shoutcast)( vlc_object_t *p_this )
{
demux_t *p_demux = (demux_t *)p_this;
- demux_sys_t *p_sys;
- char *psz_ext;
-
- psz_ext = strrchr ( p_demux->psz_path, '.' );
-
- if( !p_demux->psz_demux || strcmp(p_demux->psz_demux, "shout-winamp") )
- {
+ if( !isDemux( p_demux, "shout-winamp" ) )
return VLC_EGENERIC;
- }
- msg_Dbg( p_demux, "using shoutcast playlist import");
-
- p_demux->pf_control = Control;
- p_demux->pf_demux = Demux;
- p_demux->p_sys = p_sys = malloc( sizeof(demux_sys_t) );
- if( p_sys == NULL )
- {
- msg_Err( p_demux, "out of memory" );
- return VLC_ENOMEM;
- }
-
- p_sys->p_playlist = NULL;
- p_sys->p_xml = NULL;
- p_sys->p_xml_reader = NULL;
+
+ STANDARD_DEMUX_INIT_MSG( "using shoutcast playlist reader" );
+ p_demux->p_sys->p_playlist = NULL;
+ p_demux->p_sys->p_xml = NULL;
+ p_demux->p_sys->p_xml_reader = NULL;
/* Do we want to list adult content ? */
var_Create( p_demux, "shoutcast-show-adult",
VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
- p_sys->b_adult = var_GetBool( p_demux, "shoutcast-show-adult" );
+ p_demux->p_sys->b_adult = var_GetBool( p_demux, "shoutcast-show-adult" );
return VLC_SUCCESS;
}
int i_identifier;
};
+static int Control( demux_t *, int, va_list );
+static int Demux( demux_t * );
+
/**
* \brief XSPF submodule initialization function
*/
int E_(xspf_import_Activate)( vlc_object_t *p_this )
{
- demux_t *p_demux = (demux_t *)p_this;
- char *psz_ext;
-
- psz_ext = strrchr( p_demux->psz_path, '.' );
-
- if( ( psz_ext && !strcasecmp( psz_ext, ".xspf") ) ||
- ( p_demux->psz_demux && !strcmp(p_demux->psz_demux, "xspf-open") ) )
- {
- ;
- }
- else
- {
- return VLC_EGENERIC;
- }
- msg_Dbg( p_demux, "using xspf playlist import");
-
- p_demux->p_sys = (demux_sys_t*)malloc(sizeof(demux_sys_t ) );
-
- p_demux->pf_control = xspf_import_Control;
- p_demux->pf_demux = xspf_import_Demux;
-
+ DEMUX_BY_EXTENSION_OR_FORCED_MSG( ".xspf", "xspf-open",
+ "using XSPF playlist reader" );
return VLC_SUCCESS;
}
/**
* \brief demuxer function for XSPF parsing
*/
-int xspf_import_Demux( demux_t *p_demux )
+int Demux( demux_t *p_demux )
{
int i_ret = VLC_SUCCESS;
xml_t *p_xml = NULL;
}
/** \brief dummy function for demux callback interface */
-int xspf_import_Control( demux_t *p_demux, int i_query, va_list args )
+static int Control( demux_t *p_demux, int i_query, va_list args )
{
return VLC_EGENERIC;
}
const char *psz_element)
/* prototypes */
-int xspf_import_Demux( demux_t *);
-int xspf_import_Control( demux_t *, int, va_list );
-
static vlc_bool_t parse_playlist_node COMPLEX_INTERFACE;
static vlc_bool_t parse_tracklist_node COMPLEX_INTERFACE;
static vlc_bool_t parse_track_node COMPLEX_INTERFACE;
{
/** FIXME !!!!! don't find playlist each time */
playlist_t *p_playlist = (playlist_t *)vlc_object_find( p_obj, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
- playlist_item_t * p_item;
- p_item = malloc( sizeof( playlist_item_t ) );
- if( p_item == NULL ) return NULL;
+ DECMALLOC_NULL( p_item, playlist_item_t );
p_item->p_input = p_input;
vlc_gc_incref( p_item->p_input );