From 059a3399daacd4532299d04cb2dd1a472cc25a83 Mon Sep 17 00:00:00 2001 From: Laurent Aimar Date: Wed, 28 Jan 2009 20:20:21 +0100 Subject: [PATCH] Added libvlc_playlist_add_extended_untrusted and libvlc_media_add_option_untrusted. They allow to add untrusted options (needed at least for web plugin). --- include/vlc/deprecated.h | 16 ++++++++++++++++ include/vlc/libvlc.h | 18 ++++++++++++++++++ src/control/media.c | 14 ++++++++++++++ src/control/playlist.c | 30 ++++++++++++++++++++++++------ src/libvlc.sym | 2 ++ 5 files changed, 74 insertions(+), 6 deletions(-) diff --git a/include/vlc/deprecated.h b/include/vlc/deprecated.h index c683ecb99f..ba9a7be9de 100644 --- a/include/vlc/deprecated.h +++ b/include/vlc/deprecated.h @@ -215,6 +215,22 @@ VLC_DEPRECATED_API int libvlc_playlist_add_extended( libvlc_instance_t *, const const char *, int, const char **, libvlc_exception_t * ); +/** + * Append an item to the playlist. The item is added at the end, with + * additional input options from an untrusted source. + * + * \param p_instance the playlist instance + * \param psz_uri the URI to open, using VLC format + * \param psz_name a name that you might want to give or NULL + * \param i_options the number of options to add + * \param ppsz_options strings representing the options to add + * \param p_e an initialized exception pointer + * \return the identifier of the new item + */ +VLC_DEPRECATED_API int libvlc_playlist_add_extended_untrusted( libvlc_instance_t *, const char *, + const char *, int, const char **, + libvlc_exception_t * ); + /** * Delete the playlist item with the given ID. * diff --git a/include/vlc/libvlc.h b/include/vlc/libvlc.h index f2254d7c23..11c4fb94b6 100644 --- a/include/vlc/libvlc.h +++ b/include/vlc/libvlc.h @@ -278,6 +278,24 @@ VLC_PUBLIC_API void libvlc_media_add_option( libvlc_media_t * p_md, const char * ppsz_options, libvlc_exception_t * p_e ); +/** + * Add an option to the media from an untrusted source. + * + * This option will be used to determine how the media_player will + * read the media. This allows to use VLC's advanced + * reading/streaming options on a per-media basis. + * + * The options are detailed in vlc --long-help, for instance "--sout-all" + * + * \param p_instance the instance + * \param ppsz_options the options (as a string) + * \param p_e an initialized exception pointer + */ +VLC_PUBLIC_API void libvlc_media_add_option_untrusted( + libvlc_media_t * p_md, + const char * ppsz_options, + libvlc_exception_t * p_e ); + /** * Retain a reference to a media descriptor object (libvlc_media_t). Use diff --git a/src/control/media.c b/src/control/media.c index e11abeefbd..400c138bf1 100644 --- a/src/control/media.c +++ b/src/control/media.c @@ -350,6 +350,20 @@ void libvlc_media_add_option( VLC_INPUT_OPTION_UNIQUE|VLC_INPUT_OPTION_TRUSTED ); } +/************************************************************************** + * Same as libvlc_media_add_option but with untrusted source. + **************************************************************************/ +void libvlc_media_add_option_untrusted( + libvlc_media_t * p_md, + const char * ppsz_option, + libvlc_exception_t *p_e ) +{ + VLC_UNUSED(p_e); + input_item_AddOption( p_md->p_input_item, ppsz_option, + VLC_INPUT_OPTION_UNIQUE ); +} + + /************************************************************************** * Delete a media descriptor object **************************************************************************/ diff --git a/src/control/playlist.c b/src/control/playlist.c index 3764c67768..80baa5e610 100644 --- a/src/control/playlist.c +++ b/src/control/playlist.c @@ -158,10 +158,11 @@ int libvlc_playlist_add( libvlc_instance_t *p_instance, const char *psz_uri, 0, NULL, p_e ); } -int libvlc_playlist_add_extended( libvlc_instance_t *p_instance, - const char *psz_uri, const char *psz_name, - int i_options, const char **ppsz_options, - libvlc_exception_t *p_e ) +static int PlaylistAddExtended( libvlc_instance_t *p_instance, + const char *psz_uri, const char *psz_name, + int i_options, const char **ppsz_options, + unsigned i_option_flags, + libvlc_exception_t *p_e ) { assert( PL ); if( playlist_was_locked( p_instance ) ) @@ -172,10 +173,27 @@ int libvlc_playlist_add_extended( libvlc_instance_t *p_instance, } return playlist_AddExt( PL, psz_uri, psz_name, PLAYLIST_INSERT, PLAYLIST_END, -1, - i_options, ppsz_options, VLC_INPUT_OPTION_TRUSTED, + i_options, ppsz_options, i_option_flags, true, pl_Unlocked ); } - +int libvlc_playlist_add_extended( libvlc_instance_t *p_instance, + const char *psz_uri, const char *psz_name, + int i_options, const char **ppsz_options, + libvlc_exception_t *p_e ) +{ + return PlaylistAddExtended( p_instance, psz_uri, psz_name, + i_options, ppsz_options, VLC_INPUT_OPTION_TRUSTED, + p_e ); +} +int libvlc_playlist_add_extended_untrusted( libvlc_instance_t *p_instance, + const char *psz_uri, const char *psz_name, + int i_options, const char **ppsz_options, + libvlc_exception_t *p_e ) +{ + return PlaylistAddExtended( p_instance, psz_uri, psz_name, + i_options, ppsz_options, 0, + p_e ); +} int libvlc_playlist_delete_item( libvlc_instance_t *p_instance, int i_id, libvlc_exception_t *p_e ) diff --git a/src/libvlc.sym b/src/libvlc.sym index 430ca71795..498da0cbfc 100644 --- a/src/libvlc.sym +++ b/src/libvlc.sym @@ -48,6 +48,7 @@ libvlc_log_iterator_has_next libvlc_log_iterator_next libvlc_log_open libvlc_media_add_option +libvlc_media_add_option_untrusted libvlc_media_discoverer_event_manager libvlc_media_discoverer_is_running libvlc_media_discoverer_localized_name @@ -161,6 +162,7 @@ libvlc_media_subitems libvlc_new libvlc_playlist_add libvlc_playlist_add_extended +libvlc_playlist_add_extended_untrusted libvlc_playlist_clear libvlc_playlist_delete_item libvlc_playlist_get_media_player -- 2.39.2