Commit 4e14e85a authored by Gildas Bazin's avatar Gildas Bazin

* src/playlist/playlist.c: bugfix for when we delete the last playlist
   element (I'll get this one right... eventually ;).
* modules/demux/m3u.c: allow forcing the demux to be used by specifying the
   asx or m3u demux.
parent 9b11af62
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* m3u.c: a meta demux to parse m3u and asx playlists * m3u.c: a meta demux to parse m3u and asx playlists
***************************************************************************** *****************************************************************************
* Copyright (C) 2001 VideoLAN * Copyright (C) 2001 VideoLAN
* $Id: m3u.c,v 1.2 2002/11/13 11:09:56 gbazin Exp $ * $Id: m3u.c,v 1.3 2002/11/13 12:58:19 gbazin Exp $
* *
* Authors: Sigmund Augdal <sigmunau@idi.ntnu.no> * Authors: Sigmund Augdal <sigmunau@idi.ntnu.no>
* Gildas Bazin <gbazin@netcourrier.com> * Gildas Bazin <gbazin@netcourrier.com>
...@@ -51,7 +51,8 @@ struct demux_sys_t ...@@ -51,7 +51,8 @@ struct demux_sys_t
/***************************************************************************** /*****************************************************************************
* Local prototypes * Local prototypes
*****************************************************************************/ *****************************************************************************/
static int Init ( vlc_object_t * ); static int Activate ( vlc_object_t * );
static void Deactivate( vlc_object_t * );
static int Demux ( input_thread_t * ); static int Demux ( input_thread_t * );
/***************************************************************************** /*****************************************************************************
...@@ -60,13 +61,15 @@ static int Demux ( input_thread_t * ); ...@@ -60,13 +61,15 @@ static int Demux ( input_thread_t * );
vlc_module_begin(); vlc_module_begin();
set_description( "m3u/asx metademux" ); set_description( "m3u/asx metademux" );
set_capability( "demux", 10 ); set_capability( "demux", 10 );
set_callbacks( Init, NULL ); set_callbacks( Activate, Deactivate );
add_shortcut( "m3u" );
add_shortcut( "asx" );
vlc_module_end(); vlc_module_end();
/***************************************************************************** /*****************************************************************************
* Init: initializes ES structures * Activate: initializes m3u demux structures
*****************************************************************************/ *****************************************************************************/
static int Init( vlc_object_t * p_this ) static int Activate( vlc_object_t * p_this )
{ {
input_thread_t *p_input = (input_thread_t *)p_this; input_thread_t *p_input = (input_thread_t *)p_this;
char *psz_ext; char *psz_ext;
...@@ -85,11 +88,13 @@ static int Init( vlc_object_t * p_this ) ...@@ -85,11 +88,13 @@ static int Init( vlc_object_t * p_this )
/* Check for m3u/asx file extension */ /* Check for m3u/asx file extension */
psz_ext = strrchr ( p_input->psz_name, '.' ); psz_ext = strrchr ( p_input->psz_name, '.' );
if( !strcasecmp( psz_ext, ".m3u") ) if( !strcasecmp( psz_ext, ".m3u") ||
( p_input->psz_demux && !strncmp(p_input->psz_demux, "m3u", 3) ) )
{ {
i_type = TYPE_M3U; i_type = TYPE_M3U;
} }
else if( !strcasecmp( psz_ext, ".asx") ) else if( !strcasecmp( psz_ext, ".asx") ||
( p_input->psz_demux && !strncmp(p_input->psz_demux, "asx", 3) ) )
{ {
i_type = TYPE_ASX; i_type = TYPE_ASX;
} }
...@@ -110,6 +115,22 @@ static int Init( vlc_object_t * p_this ) ...@@ -110,6 +115,22 @@ static int Init( vlc_object_t * p_this )
return 0; return 0;
} }
/*****************************************************************************
* Deactivate: frees unused data
*****************************************************************************/
static void Deactivate( vlc_object_t *p_this )
{
input_thread_t *p_input = (input_thread_t *)p_this;
demux_sys_t *p_m3u = (demux_sys_t *)p_input->p_demux_data ;
free( p_m3u );
}
/*****************************************************************************
* Demux: reads and demuxes data packets
*****************************************************************************
* Returns -1 in case of error, 0 in case of EOF, 1 otherwise
*****************************************************************************/
static int Demux ( input_thread_t *p_input ) static int Demux ( input_thread_t *p_input )
{ {
data_packet_t *p_data; data_packet_t *p_data;
...@@ -189,12 +210,13 @@ static int Demux ( input_thread_t *p_input ) ...@@ -189,12 +210,13 @@ static int Demux ( input_thread_t *p_input )
else else
{ {
/* We are dealing with ASX files. /* We are dealing with ASX files.
* We are looking for href html markups that begins with * We are looking for "href" or "param" html markups that
* "mms://" */ * begins with "mms://" */
char *psz_eol; char *psz_eol;
while( *psz_bol && strncasecmp( psz_bol, "href", while( *psz_bol &&
sizeof("href") - 1 ) ) strncasecmp( psz_bol, "href", sizeof("href") - 1 ) &&
strncasecmp( psz_bol, "param", sizeof("param") - 1 ) )
psz_bol++; psz_bol++;
if( !*psz_bol ) continue; if( !*psz_bol ) continue;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* playlist.c : Playlist management functions * playlist.c : Playlist management functions
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2001 VideoLAN * Copyright (C) 1999-2001 VideoLAN
* $Id: playlist.c,v 1.19 2002/11/13 11:09:56 gbazin Exp $ * $Id: playlist.c,v 1.20 2002/11/13 12:58:19 gbazin Exp $
* *
* Authors: Samuel Hocevar <sam@zoy.org> * Authors: Samuel Hocevar <sam@zoy.org>
* *
...@@ -203,7 +203,7 @@ int playlist_Delete( playlist_t * p_playlist, int i_pos ) ...@@ -203,7 +203,7 @@ int playlist_Delete( playlist_t * p_playlist, int i_pos )
/* XXX: what if the item is still in use? */ /* XXX: what if the item is still in use? */
free( p_playlist->pp_items[i_pos] ); free( p_playlist->pp_items[i_pos] );
if( i_pos < p_playlist->i_index ) if( i_pos <= p_playlist->i_index )
{ {
p_playlist->i_index--; p_playlist->i_index--;
} }
...@@ -310,11 +310,9 @@ static void RunThread ( playlist_t *p_playlist ) ...@@ -310,11 +310,9 @@ static void RunThread ( playlist_t *p_playlist )
{ {
playlist_Delete( p_playlist, p_playlist->i_index ); playlist_Delete( p_playlist, p_playlist->i_index );
} }
else
{
/* Select the next playlist item */ /* Select the next playlist item */
SkipItem( p_playlist, 1 ); SkipItem( p_playlist, 1 );
}
/* Destroy input */ /* Destroy input */
input_DestroyThread( p_input ); input_DestroyThread( p_input );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment