From 74c432a3c72ec295fc6ae3974f5bf42f041a342e Mon Sep 17 00:00:00 2001 From: Francois Cartegnie Date: Mon, 2 Dec 2013 19:47:46 +0100 Subject: [PATCH] demux: playlist: asx: handle common mime type for asx playlist and asf http://gonze.com/playlists/playlist-format-survey.html#ASX --- modules/demux/playlist/asx.c | 10 ++++++++++ modules/demux/playlist/m3u.c | 19 ------------------- modules/demux/playlist/playlist.c | 26 ++++++++++++++++++++++++++ modules/demux/playlist/playlist.h | 2 ++ 4 files changed, 38 insertions(+), 19 deletions(-) diff --git a/modules/demux/playlist/asx.c b/modules/demux/playlist/asx.c index 1898cddcbf..e09cf48087 100644 --- a/modules/demux/playlist/asx.c +++ b/modules/demux/playlist/asx.c @@ -134,6 +134,13 @@ static void ReadElement( xml_reader_t *p_xml_reader, char **ppsz_txt ) */ } +static bool PeekASX( demux_t *p_demux ) +{ + const uint8_t *p_peek; + return ( stream_Peek( p_demux->s, &p_peek, 12 ) == 12 + && !memcmp( p_peek, "s, "video/x-ms-asf" ) && PeekASX( p_demux ) + ) || demux_IsForced( p_demux, "asx-open" ) ) { STANDARD_DEMUX_INIT_MSG( "found valid ASX playlist" ); diff --git a/modules/demux/playlist/m3u.c b/modules/demux/playlist/m3u.c index 58f6006deb..02a95984d5 100644 --- a/modules/demux/playlist/m3u.c +++ b/modules/demux/playlist/m3u.c @@ -48,7 +48,6 @@ struct demux_sys_t static int Demux( demux_t *p_demux); static void parseEXTINF( char *psz_string, char **ppsz_artist, char **ppsz_name, int *pi_duration ); static bool ContainsURL( demux_t *p_demux ); -static bool CheckContentType( stream_t * p_stream, const char * psz_ctype ); static char *GuessEncoding (const char *str) { @@ -149,24 +148,6 @@ static bool ContainsURL( demux_t *p_demux ) return false; } -static bool CheckContentType( stream_t * p_stream, const char * psz_ctype ) -{ - char *psz_check = stream_ContentType( p_stream ); - if( !psz_check ) return false; - - int i_len = strlen( psz_check ); - if ( i_len == 0 ) - { - free( psz_check ); - return false; - } - - int i_res = strncasecmp( psz_check, psz_ctype, i_len ); - free( psz_check ); - - return ( i_res == 0 ) ? true : false; -} - /***************************************************************************** * Deactivate: frees unused data *****************************************************************************/ diff --git a/modules/demux/playlist/playlist.c b/modules/demux/playlist/playlist.c index cae528dba4..ed0e54d68b 100644 --- a/modules/demux/playlist/playlist.c +++ b/modules/demux/playlist/playlist.c @@ -224,3 +224,29 @@ char *ProcessMRL( const char *psz_mrl, const char *psz_prefix ) uri: return vlc_path2uri( psz_mrl, NULL ); } + +/** + * Checks stream Content-Type against a known one + */ +bool CheckContentType( stream_t * p_stream, const char * psz_ctype ) +{ + char *psz_check = stream_ContentType( p_stream ); + if( !psz_check ) return false; + + int i_len = strlen( psz_check ); + if ( i_len == 0 ) + { + free( psz_check ); + return false; + } + + /* check for Content-Type: foo-type; charset=... */ + const char * psz_sep = index( psz_check, ';' ); + if ( psz_sep ) + i_len = __MIN( i_len, psz_sep - psz_check ); + + int i_res = strncasecmp( psz_check, psz_ctype, i_len ); + free( psz_check ); + + return ( i_res == 0 ) ? true : false; +} diff --git a/modules/demux/playlist/playlist.h b/modules/demux/playlist/playlist.h index 9ae6e30b15..5eb98de4d9 100644 --- a/modules/demux/playlist/playlist.h +++ b/modules/demux/playlist/playlist.h @@ -81,6 +81,8 @@ void Close_ZPL ( vlc_object_t * ); extern input_item_t * GetCurrentItem(demux_t *p_demux); +bool CheckContentType( stream_t * p_stream, const char * psz_ctype ); + #define STANDARD_DEMUX_INIT_MSG( msg ) do { \ DEMUX_INIT_COMMON(); \ msg_Dbg( p_demux, "%s", msg ); } while(0) -- 2.39.2