[vlc-commits] sgimb: convert to stream filter

Rémi Denis-Courmont git at videolan.org
Sat Jun 3 20:47:42 CEST 2017


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Mon May 22 20:42:37 2017 +0300| [23c6dd25f15af03b81258064cc5bb28d067b4e7b] | committer: Rémi Denis-Courmont

sgimb: convert to stream filter

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=23c6dd25f15af03b81258064cc5bb28d067b4e7b
---

 modules/demux/playlist/playlist.c |  4 +--
 modules/demux/playlist/sgimb.c    | 63 +++++++++++++++++++--------------------
 2 files changed, 33 insertions(+), 34 deletions(-)

diff --git a/modules/demux/playlist/playlist.c b/modules/demux/playlist/playlist.c
index a178472fb0..3370b2d073 100644
--- a/modules/demux/playlist/playlist.c
+++ b/modules/demux/playlist/playlist.c
@@ -112,8 +112,8 @@ vlc_module_begin ()
         set_callbacks( Import_ASX, NULL )
     add_submodule ()
         set_description( N_("Kasenna MediaBase parser") )
-        add_shortcut( "playlist", "sgimb" )
-        set_capability( "demux", 10 )
+        add_shortcut( "sgimb" )
+        set_capability( "stream_filter", 10 )
         set_callbacks( Import_SGIMB, Close_SGIMB )
     add_submodule ()
         set_description( N_("QuickTime Media Link importer") )
diff --git a/modules/demux/playlist/sgimb.c b/modules/demux/playlist/sgimb.c
index 9e0b5ba69d..bb7a7f69ad 100644
--- a/modules/demux/playlist/sgimb.c
+++ b/modules/demux/playlist/sgimb.c
@@ -103,7 +103,7 @@
 #endif
 
 #include <vlc_common.h>
-#include <vlc_demux.h>
+#include <vlc_access.h>
 #include "playlist.h"
 
 /*****************************************************************************
@@ -129,20 +129,20 @@ struct demux_sys_t
     bool  b_rtsp_kasenna; /* kasenna style RTSP */
 };
 
-static int Demux ( demux_t *p_demux );
+static int ReadDir( stream_t *, input_item_node_t * );
 
 /*****************************************************************************
  * Activate: initializes m3u demux structures
  *****************************************************************************/
 int Import_SGIMB( 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;
     int i_size;
 
     CHECK_FILE(p_demux);
     /* Lets check the content to see if this is a sgi mediabase file */
-    i_size = vlc_stream_Peek( p_demux->s, &p_peek, MAX_LINE );
+    i_size = vlc_stream_Peek( p_demux->p_source, &p_peek, MAX_LINE );
     i_size -= sizeof("sgiNameServerHost=") - 1;
     if ( i_size > 0 )
     {
@@ -154,21 +154,28 @@ int Import_SGIMB( vlc_object_t * p_this )
         }
         if ( !strncasecmp( (char *)p_peek, "sgiNameServerHost=", i_len ) )
         {
-            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 = false;
-            p_demux->p_sys->b_concert = false;
+            demux_sys_t *p_sys = malloc(sizeof (*p_sys));
+            if( unlikely(p_sys == NULL) )
+                return VLC_ENOMEM;
+
+            msg_Dbg( p_demux, "using SGIMB playlist reader" );
+            p_demux->pf_readdir = ReadDir;
+            p_demux->pf_control = access_vaDirectoryControlHelper;
+            p_demux->p_sys = p_sys;
+            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 = false;
+            p_sys->b_concert = false;
 
             return VLC_SUCCESS;
         }
@@ -194,7 +201,7 @@ void Close_SGIMB( vlc_object_t *p_this )
     return;
 }
 
-static int ParseLine ( demux_t *p_demux, char *psz_line )
+static int ParseLine ( stream_t *p_demux, char *psz_line )
 {
     char        *psz_bol;
     demux_sys_t *p_sys = p_demux->p_sys;
@@ -311,20 +318,13 @@ static int ParseLine ( demux_t *p_demux, char *psz_line )
     return VLC_SUCCESS;
 }
 
-/*****************************************************************************
- * Demux: reads and demuxes data packets
- *****************************************************************************
- * Returns -1 in case of error, 0 in case of EOF, 1 otherwise
- *****************************************************************************/
-static int Demux ( demux_t *p_demux )
+static int ReadDir( stream_t *p_demux, input_item_node_t *node )
 {
     demux_sys_t     *p_sys = p_demux->p_sys;
     input_item_t    *p_child = NULL;
     char            *psz_line;
 
-    input_item_t *p_current_input = GetCurrentItem(p_demux);
-
-    while( ( psz_line = vlc_stream_ReadLine( p_demux->s ) ) )
+    while( ( psz_line = vlc_stream_ReadLine( p_demux->p_source ) ) )
     {
         ParseLine( p_demux, psz_line );
         free( psz_line );
@@ -383,7 +383,6 @@ static int Demux ( demux_t *p_demux )
         return -1;
     }
 
-    input_item_CopyOptions( p_child, p_current_input );
     if( p_sys->i_packet_size && p_sys->psz_mcast_ip )
     {
         char *psz_option;
@@ -399,7 +398,7 @@ static int Demux ( demux_t *p_demux )
     if( !p_sys->psz_mcast_ip && p_sys->b_rtsp_kasenna )
         input_item_AddOption( p_child, "rtsp-kasenna", VLC_INPUT_OPTION_TRUSTED );
 
-    input_item_PostSubItem( p_current_input, p_child );
+    input_item_node_AppendItem( node, p_child );
     input_item_Release( p_child );
-    return 0; /* Needed for correct operation of go back */
+    return VLC_SUCCESS;
 }



More information about the vlc-commits mailing list