[vlc-commits] m3u: convert to stream filter
Rémi Denis-Courmont
git at videolan.org
Sat Jun 3 22:02:12 CEST 2017
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Mon May 22 20:42:37 2017 +0300| [84a0cc9fa09855b92d2c179f8976b2ef7f3368e7] | committer: Rémi Denis-Courmont
m3u: convert to stream filter
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=84a0cc9fa09855b92d2c179f8976b2ef7f3368e7
---
modules/demux/playlist/m3u.c | 69 ++++++++++++++-------------------------
modules/demux/playlist/playlist.c | 6 ++--
modules/demux/playlist/playlist.h | 1 -
3 files changed, 28 insertions(+), 48 deletions(-)
diff --git a/modules/demux/playlist/m3u.c b/modules/demux/playlist/m3u.c
index 6d3619bba0..4e25c2487d 100644
--- a/modules/demux/playlist/m3u.c
+++ b/modules/demux/playlist/m3u.c
@@ -31,23 +31,17 @@
#endif
#include <vlc_common.h>
-#include <vlc_demux.h>
+#include <vlc_access.h>
#include <vlc_charset.h>
#include "playlist.h"
-struct demux_sys_t
-{
- char *psz_prefix;
- char *(*pf_dup) (const char *);
-};
-
/*****************************************************************************
* Local prototypes
*****************************************************************************/
-static int Demux( demux_t *p_demux);
+static int ReadDir( stream_t *, input_item_node_t * );
static void parseEXTINF( char *psz_string, char **ppsz_artist, char **ppsz_name, int *pi_duration );
-static bool ContainsURL( demux_t *p_demux );
+static bool ContainsURL( stream_t *p_demux );
static char *GuessEncoding (const char *str)
{
@@ -64,40 +58,39 @@ static char *CheckUnicode (const char *str)
*****************************************************************************/
int Import_M3U( vlc_object_t *p_this )
{
- demux_t *p_demux = (demux_t *)p_this;
+ stream_t *p_demux = (stream_t *)p_this;
const uint8_t *p_peek;
char *(*pf_dup) (const char *) = GuessEncoding;
int offset = 0;
CHECK_FILE(p_demux);
- if( vlc_stream_Peek( p_demux->s, &p_peek, 3 ) == 3
+ if( vlc_stream_Peek( p_demux->p_source, &p_peek, 3 ) == 3
&& !memcmp( p_peek, "\xef\xbb\xbf", 3) )
{
pf_dup = CheckUnicode; /* UTF-8 Byte Order Mark */
offset = 3;
}
- char *type = stream_MimeType(p_demux->s);
+ char *type = stream_MimeType(p_demux->p_source);
- if( demux_IsPathExtension( p_demux, ".m3u8" )
- || demux_IsForced( p_demux, "m3u8" )
+ if( stream_HasExtension( p_demux, ".m3u8" )
|| (type != NULL && !strcasecmp(type, "application/vnd.apple.mpegurl")))
{
pf_dup = CheckUnicode; /* UTF-8 file type */
free(type);
}
else
- if( demux_IsPathExtension( p_demux, ".m3u" )
- || demux_IsPathExtension( p_demux, ".vlc" )
- || demux_IsForced( p_demux, "m3u" )
+ if( stream_HasExtension( p_demux, ".m3u" )
+ || stream_HasExtension( p_demux, ".vlc" )
|| ContainsURL( p_demux )
- || (type != NULL && !strcasecmp(type, "audio/x-mpegurl")))
+ || (type != NULL && !strcasecmp(type, "audio/x-mpegurl"))
+ || p_demux->obj.force )
free(type); /* Guess encoding */
else
{
free(type);
- if( vlc_stream_Peek( p_demux->s, &p_peek, 8 + offset ) < (8 + offset) )
+ if( vlc_stream_Peek( p_demux->p_source, &p_peek, 8 + offset ) < (8 + offset) )
return VLC_EGENERIC;
p_peek += offset;
@@ -111,21 +104,22 @@ int Import_M3U( vlc_object_t *p_this )
return VLC_EGENERIC;
}
- vlc_stream_Seek( p_demux->s, offset );
+ vlc_stream_Seek( p_demux->p_source, offset );
- STANDARD_DEMUX_INIT_MSG( "found valid M3U playlist" );
- p_demux->p_sys->psz_prefix = FindPrefix( p_demux );
- p_demux->p_sys->pf_dup = pf_dup;
+ msg_Dbg( p_demux, "found valid M3U playlist" );
+ p_demux->p_sys = pf_dup;
+ p_demux->pf_readdir = ReadDir;
+ p_demux->pf_control = access_vaDirectoryControlHelper;
return VLC_SUCCESS;
}
-static bool ContainsURL( demux_t *p_demux )
+static bool ContainsURL( stream_t *s )
{
const uint8_t *p_peek, *p_peek_end;
int i_peek;
- i_peek = vlc_stream_Peek( p_demux->s, &p_peek, 1024 );
+ i_peek = vlc_stream_Peek( s->p_source, &p_peek, 1024 );
if( i_peek <= 0 ) return false;
p_peek_end = p_peek + i_peek;
@@ -156,18 +150,7 @@ static bool ContainsURL( demux_t *p_demux )
return false;
}
-/*****************************************************************************
- * Deactivate: frees unused data
- *****************************************************************************/
-void Close_M3U( vlc_object_t *p_this )
-{
- demux_t *p_demux = (demux_t *)p_this;
- free( p_demux->p_sys->psz_prefix );
- free( p_demux->p_sys );
-}
-
-
-static int Demux( demux_t *p_demux )
+static int ReadDir( stream_t *p_demux, input_item_node_t *p_subitems )
{
char *psz_line;
char *psz_name = NULL;
@@ -176,15 +159,14 @@ static int Demux( demux_t *p_demux )
int i_parsed_duration = 0;
mtime_t i_duration = -1;
const char**ppsz_options = NULL;
- char * (*pf_dup) (const char *) = p_demux->p_sys->pf_dup;
+ char * (*pf_dup) (const char *) = p_demux->p_sys;
int i_options = 0;
bool b_cleanup = false;
input_item_t *p_input;
input_item_t *p_current_input = GetCurrentItem(p_demux);
- input_item_node_t *p_subitems = input_item_node_Create( p_current_input );
- psz_line = vlc_stream_ReadLine( p_demux->s );
+ psz_line = vlc_stream_ReadLine( p_demux->p_source );
while( psz_line )
{
char *psz_parse = psz_line;
@@ -252,7 +234,7 @@ static int Demux( demux_t *p_demux )
/* Use filename as name for relative entries */
psz_name = strdup( psz_parse );
- psz_mrl = ProcessMRL( psz_parse, p_demux->p_sys->psz_prefix );
+ psz_mrl = ProcessMRL( psz_parse, p_demux->psz_url );
b_cleanup = true;
if( !psz_mrl )
@@ -285,7 +267,7 @@ static int Demux( demux_t *p_demux )
/* Fetch another line */
free( psz_line );
- psz_line = vlc_stream_ReadLine( p_demux->s );
+ psz_line = vlc_stream_ReadLine( p_demux->p_source );
if( !psz_line ) b_cleanup = true;
if( b_cleanup )
@@ -303,8 +285,7 @@ static int Demux( demux_t *p_demux )
b_cleanup = false;
}
}
- input_item_node_PostAndDelete( p_subitems );
- return 0; /* Needed for correct operation of go back */
+ return VLC_SUCCESS; /* Needed for correct operation of go back */
}
static void parseEXTINF(char *psz_string, char **ppsz_artist,
diff --git a/modules/demux/playlist/playlist.c b/modules/demux/playlist/playlist.c
index aeb1e302d8..c3a46ada8f 100644
--- a/modules/demux/playlist/playlist.c
+++ b/modules/demux/playlist/playlist.c
@@ -65,9 +65,9 @@ vlc_module_begin ()
set_description( N_("Playlist") )
add_submodule ()
set_description( N_("M3U playlist import") )
- add_shortcut( "playlist", "m3u", "m3u8", "m3u-open" )
- set_capability( "demux", 10 )
- set_callbacks( Import_M3U, Close_M3U )
+ add_shortcut( "m3u", "m3u8" )
+ set_capability( "stream_filter", 10 )
+ set_callbacks( Import_M3U, NULL )
add_submodule ()
set_description( N_("RAM playlist import") )
set_capability( "stream_filter", 10 )
diff --git a/modules/demux/playlist/playlist.h b/modules/demux/playlist/playlist.h
index 2d5e6f71a6..e470373db6 100644
--- a/modules/demux/playlist/playlist.h
+++ b/modules/demux/playlist/playlist.h
@@ -34,7 +34,6 @@ int Import_Native ( vlc_object_t * );
void Close_Native ( vlc_object_t * );
int Import_M3U ( vlc_object_t * );
-void Close_M3U ( vlc_object_t * );
int Import_RAM ( vlc_object_t * );
More information about the vlc-commits
mailing list