vlc | branch: master | Filip Roséen <[email protected]> | Tue Nov 22 00:50:36 2016 +0100| [709924819e41ace9f7c09f00badd76c9c7a7a924] | committer: Thomas Guillem
stream_extractor: add vlc_stream_extractor_Attach 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. Signed-off-by: Thomas Guillem <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=709924819e41ace9f7c09f00badd76c9c7a7a924 --- include/vlc_stream_extractor.h | 27 +++++++++++++++++++++++++++ src/input/stream_extractor.c | 30 ++++++++++++++++++++++++++++++ src/libvlccore.sym | 1 + 3 files changed, 58 insertions(+) diff --git a/include/vlc_stream_extractor.h b/include/vlc_stream_extractor.h index 1fe13b4..0d0e63e 100644 --- a/include/vlc_stream_extractor.h +++ b/include/vlc_stream_extractor.h @@ -87,6 +87,33 @@ struct stream_extractor_t { typedef struct stream_extractor_t stream_extractor_t; /** + * Construct a new stream_extractor-based stream + * + * This function is used to attach a stream to an already existing + * stream, where the underlying, attached, stream is a + * stream_extractor. + * + * If \p identifier is `NULL`, `*stream` is guaranteed to refer to a + * directory, otherwise \p identifier denotes the specific subentry + * that one would like to access within the stream. + * + * If \p identifier is not NULL, `*stream` will refer to data for the + * entity in question. + * + * \param[out] stream a pointer-to-pointer to stream, `*stream` will + * refer to the attached stream on success, and left + * untouched on failure. + * \param identifier NULL or a c-style string referring to the desired entity + * \param module_name NULL or an explicit stream-extractor module name + * + * \return VLC_SUCCESS if a stream-extractor was successfully + * attached, an error-code on failure. + **/ + +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 523e17e..82b04cc 100644 --- a/src/input/stream_extractor.c +++ b/src/input/stream_extractor.c @@ -189,6 +189,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 4e08ad6..cdb8f31 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 _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
