[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