[vlc-devel] [PATCH 06/21] input/stream: stream-fragments: add vlc_stream_CreateFragmentMRL

Filip Roséen filip at atch.se
Sun Jul 31 22:42:15 CEST 2016


If an implementation implements functionality such as that associated
with "stream_t.pf_readdir", it will need to be able to generate MRLs
for the entries within.

This commit adds the function "vlc_stream_CreateFragmentMRL"; see the
documentation for more information.
---
 include/vlc_stream.h | 15 +++++++++++++++
 src/input/stream.c   | 21 +++++++++++++++++++++
 src/libvlccore.sym   |  1 +
 3 files changed, 37 insertions(+)

diff --git a/include/vlc_stream.h b/include/vlc_stream.h
index e81005b..0771b76 100644
--- a/include/vlc_stream.h
+++ b/include/vlc_stream.h
@@ -534,6 +534,21 @@ do { \
  **/
 
 /**
+ * \ingroup stream_fragments
+ *
+ * This function will create an MRL that will refer to an entity named \p
+ * resource that logically exists within the stream referred to by \p s.
+ *
+ * See ::vlc_stream_PopFragment for more information.
+ *
+ * \note It is the responsibility of the caller to free the returned value.
+ * \param s the stream
+ * \param resource the resource which the MRL shall refer to
+ * \return the created MRL, or NULL on error
+ **/
+VLC_API char* vlc_stream_CreateFragmentedMRL( stream_t * s, char const * resource );
+
+/**
  * @}
  */
 
diff --git a/src/input/stream.c b/src/input/stream.c
index 304dd33..8b7b9a3 100644
--- a/src/input/stream.c
+++ b/src/input/stream.c
@@ -751,6 +751,27 @@ int vlc_stream_ReadDir( stream_t *s, input_item_node_t *p_node )
     return s->pf_readdir( s, p_node );
 }
 
+char* vlc_stream_CreateFragmentedMRL( stream_t* s, char const * fragment )
+{
+    stream_priv_t *priv = (stream_priv_t*)s;
+
+    size_t   offset = priv->fragments.offset;
+    char**     data = priv->fragments.data;
+    char* mrl_cache = data[offset - 1];
+
+    char* payload;
+    char* result;
+
+    if( PrepareFragment( &payload, fragment, offset ) )
+        return NULL;
+
+    int ret = asprintf( &result, "%s%s", mrl_cache, payload );
+
+    free( payload );
+
+    return ret != -1 ? result : NULL;
+}
+
 static int EscapeFragment( char** out, char const* data )
 {
     size_t out_len = 0;
diff --git a/src/libvlccore.sym b/src/libvlccore.sym
index ae86025..463efd1 100644
--- a/src/libvlccore.sym
+++ b/src/libvlccore.sym
@@ -403,6 +403,7 @@ spu_RegisterChannel
 spu_ClearChannel
 vlc_stream_Block
 vlc_stream_CommonNew
+vlc_stream_CreateFragmentedMRL
 vlc_stream_Delete
 vlc_stream_Eof
 vlc_stream_FilterNew
-- 
2.9.2



More information about the vlc-devel mailing list