[vlc-devel] commit: M3U playlist detection (bl4 )
git version control
git at videolan.org
Sun Jun 15 15:21:02 CEST 2008
vlc | branch: master | bl4 <bl4 at playker.info> | Sun Jun 15 14:58:40 2008 +0200| [f2f15f46eca071e5118bd115fc298cb507872fe4]
M3U playlist detection
Signed-off-by: Rémi Denis-Courmont <rdenis at simphalempin.com>
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f2f15f46eca071e5118bd115fc298cb507872fe4
---
modules/demux/playlist/m3u.c | 38 +++++++++++++++++++++++++++++++++++++-
1 files changed, 37 insertions(+), 1 deletions(-)
diff --git a/modules/demux/playlist/m3u.c b/modules/demux/playlist/m3u.c
index 1a054a2..49e4869 100644
--- a/modules/demux/playlist/m3u.c
+++ b/modules/demux/playlist/m3u.c
@@ -47,6 +47,7 @@ struct demux_sys_t
static int Demux( demux_t *p_demux);
static int Control( demux_t *p_demux, int i_query, va_list args );
static void parseEXTINF( char *psz_string, char **ppsz_artist, char **ppsz_name, int *pi_duration );
+static bool ContainsURL( demux_t *p_demux );
/*****************************************************************************
* Import_M3U: main import function
@@ -61,7 +62,7 @@ int Import_M3U( vlc_object_t *p_this )
demux_IsPathExtension( p_demux, ".m3u" ) || demux_IsPathExtension( p_demux, ".vlc" ) ||
/* A .ram file can contain a single rtsp link */
demux_IsPathExtension( p_demux, ".ram" ) || demux_IsPathExtension( p_demux, ".rm" ) ||
- demux_IsForced( p_demux, "m3u" ) ) )
+ demux_IsForced( p_demux, "m3u" ) || ContainsURL( p_demux ) ) )
return VLC_EGENERIC;
STANDARD_DEMUX_INIT_MSG( "found valid M3U playlist" );
@@ -70,6 +71,41 @@ int Import_M3U( vlc_object_t *p_this )
return VLC_SUCCESS;
}
+static bool ContainsURL( demux_t *p_demux )
+{
+ uint8_t *p_peek;
+ int i_peek;
+ uint8_t *p_peek_end;
+
+ i_peek = stream_Peek( p_demux->s, &p_peek, 1024 );
+ if( i_peek <= 0 ) return false;
+ p_peek_end = p_peek + i_peek;
+
+ while( p_peek + sizeof( "https://" ) < p_peek_end )
+ {
+ /* One line starting with an URL is enough */
+ if( !strncasecmp( p_peek, "http://", sizeof( "http://" ) - 1 ) ||
+ !strncasecmp( p_peek, "mms://", sizeof( "mms://" ) - 1 ) ||
+ !strncasecmp( p_peek, "rtsp://", sizeof( "rtsp://" ) - 1 ) ||
+ !strncasecmp( p_peek, "https://", sizeof( "https://" ) - 1 ) ||
+ !strncasecmp( p_peek, "ftp://", sizeof( "ftp://" ) - 1 ) )
+ {
+ return true;
+ }
+ /* Comments and blank lines are ignored */
+ else if( *p_peek != '#' && *p_peek != '\n' && *p_peek != '\r')
+ {
+ return false;
+ }
+
+ while( p_peek < p_peek_end && *p_peek != '\n' )
+ p_peek++;
+ if ( *p_peek == '\n' )
+ p_peek++;
+ }
+ return false;
+}
+
/*****************************************************************************
* Deactivate: frees unused data
*****************************************************************************/
More information about the vlc-devel
mailing list