[vlc-devel] [RFC 04/10] stream_extractor: add vlc_stream_extractor_Attach
Filip Roséen
filip at atch.se
Mon Nov 28 03:22:23 CET 2016
The documentation associated with these changes should explain what
the function does in detail, and why it is necessary. In short the
function simply tries to attach a stream-extractor to a stream_t.
---
include/vlc_stream_extractor.h | 24 ++++++++++++++++++++++++
src/input/stream_extractor.c | 30 ++++++++++++++++++++++++++++++
src/libvlccore.sym | 1 +
3 files changed, 55 insertions(+)
diff --git a/include/vlc_stream_extractor.h b/include/vlc_stream_extractor.h
index f01dc9b..1f6d01a 100644
--- a/include/vlc_stream_extractor.h
+++ b/include/vlc_stream_extractor.h
@@ -67,6 +67,30 @@ struct stream_extractor_t {
typedef struct stream_extractor_t stream_extractor_t;
/**
+ * Construct a new stream_extractor-based stream
+ *
+ * This function is used to create a stream_t where the underlying
+ * resurce is a stream_extractor.
+ *
+ * If \p identifier is NULL the resulting stream_t (if any) is
+ * guaranteed to refer to a directory, otherwise the \p identifier
+ * denotes the specific subentry that one would like to access within
+ * the stream.
+ *
+ * If \p identifier is not NULL, the resulting stream_t (if any)
+ * will refer to the entity in question.
+ *
+ * \param source the stream the stream_extractor will read from
+ * \param identifier NULL or a c-style string referring to the desired entity
+ * \param module_name NULL or the explicit stream-extractor name * requested
+ *
+ * \return NULL on error, otherwise a handle into the extracted data
+ **/
+
+VLC_API int vlc_stream_extractor_Attach( stream_t** source,
+ char const* identifier,
+ char const* module_name );
+/**
* @}
*/
diff --git a/src/input/stream_extractor.c b/src/input/stream_extractor.c
index a926363..78800e4 100644
--- a/src/input/stream_extractor.c
+++ b/src/input/stream_extractor.c
@@ -166,6 +166,36 @@ se_InitStream( struct stream_extractor_private* priv, stream_t* source )
return VLC_SUCCESS;
}
+int
+vlc_stream_extractor_Attach( stream_t** source, char const* identifier,
+ char const* module_name )
+{
+ struct stream_extractor_private* priv = vlc_custom_create(
+ (*source)->obj.parent, sizeof( *priv ), "stream_extractor" );
+
+ if( unlikely( !priv ) )
+ return VLC_ENOMEM;
+
+ priv->public.identifier = identifier ? strdup( identifier ) : NULL;
+
+ if( unlikely( identifier && !priv->public.identifier ) )
+ goto error;
+
+ priv->public.source = *source;
+ priv->module = module_need( &priv->public, "stream_extractor",
+ module_name, true );
+
+ if( !priv->module || se_InitStream( priv, *source ) )
+ goto error;
+
+ *source = priv->stream;
+ return VLC_SUCCESS;
+
+error:
+ se_Release( priv );
+ return VLC_EGENERIC;
+}
+
/**
* @}
**/
diff --git a/src/libvlccore.sym b/src/libvlccore.sym
index d967523..cd8d0b5 100644
--- a/src/libvlccore.sym
+++ b/src/libvlccore.sym
@@ -395,6 +395,7 @@ spu_ChangeFilters
spu_Render
spu_RegisterChannel
spu_ClearChannel
+vlc_stream_extractor_Attach
vlc_stream_Block
vlc_stream_CommonNew
vlc_stream_Delete
--
2.10.2
More information about the vlc-devel
mailing list