[vlc-commits] playlist: Add playlist_SetRenderer
Hugo Beauzée-Luyssen
git at videolan.org
Tue Sep 19 11:49:15 CEST 2017
vlc | branch: master | Hugo Beauzée-Luyssen <hugo at beauzee.fr> | Wed Jul 19 11:00:56 2017 +0200| [20196581e9d31433334e7210a208c57a93281aaf] | committer: Hugo Beauzée-Luyssen
playlist: Add playlist_SetRenderer
refs #18605
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=20196581e9d31433334e7210a208c57a93281aaf
---
include/vlc_playlist.h | 8 +++++++
src/Makefile.am | 1 +
src/libvlccore.sym | 1 +
src/playlist/engine.c | 3 +++
src/playlist/playlist_internal.h | 1 +
src/playlist/renderer.c | 51 ++++++++++++++++++++++++++++++++++++++++
6 files changed, 65 insertions(+)
diff --git a/include/vlc_playlist.h b/include/vlc_playlist.h
index b320e98b50..b74d9b3e55 100644
--- a/include/vlc_playlist.h
+++ b/include/vlc_playlist.h
@@ -358,6 +358,14 @@ VLC_API bool playlist_IsServicesDiscoveryLoaded( playlist_t *,const char *) VLC_
/** Query a services discovery */
VLC_API int playlist_ServicesDiscoveryControl( playlist_t *, const char *, int, ... );
+/********************** Renderer ***********************/
+/**
+ * Sets a renderer or remove the current one
+ * @param p_item The renderer item to be used, or NULL to disable the current
+ * one. If a renderer is provided, its reference count will be
+ * incremented.
+ */
+VLC_API int playlist_SetRenderer( playlist_t* p_pl, vlc_renderer_item_t* p_item );
/********************************************************
diff --git a/src/Makefile.am b/src/Makefile.am
index 512ee10bf7..9712483bb8 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -225,6 +225,7 @@ libvlccore_la_SOURCES = \
playlist/item.c \
playlist/search.c \
playlist/services_discovery.c \
+ playlist/renderer.c \
input/item.c \
input/access.c \
input/clock.c \
diff --git a/src/libvlccore.sym b/src/libvlccore.sym
index 929a6dcc1f..4f0bf20dbc 100644
--- a/src/libvlccore.sym
+++ b/src/libvlccore.sym
@@ -362,6 +362,7 @@ playlist_VolumeSet
playlist_VolumeUp
playlist_MuteSet
playlist_MuteGet
+playlist_SetRenderer
sdp_AddAttribute
sdp_AddMedia
secstotimestr
diff --git a/src/playlist/engine.c b/src/playlist/engine.c
index 0b0c82ee92..680366cd09 100644
--- a/src/playlist/engine.c
+++ b/src/playlist/engine.c
@@ -34,6 +34,7 @@
#include <vlc_playlist.h>
#include <vlc_interface.h>
#include <vlc_http.h>
+#include <vlc_renderer_discovery.h>
#include "playlist_internal.h"
#include "input/resource.h"
@@ -310,6 +311,8 @@ void playlist_Destroy( playlist_t *p_playlist )
/* Release input resources */
assert( p_sys->p_input == NULL );
input_resource_Release( p_sys->p_input_resource );
+ if( p_sys->p_renderer )
+ vlc_renderer_item_release( p_sys->p_renderer );
if( p_playlist->p_media_library != NULL )
playlist_MLDump( p_playlist );
diff --git a/src/playlist/playlist_internal.h b/src/playlist/playlist_internal.h
index ed40679f8f..3515a898bd 100644
--- a/src/playlist/playlist_internal.h
+++ b/src/playlist/playlist_internal.h
@@ -58,6 +58,7 @@ typedef struct playlist_private_t
input_thread_t * p_input; /**< the input thread associated
* with the current item */
input_resource_t * p_input_resource; /**< input resources */
+ vlc_renderer_item_t *p_renderer;
struct {
/* Current status. These fields are readonly, only the playlist
* main loop can touch it*/
diff --git a/src/playlist/renderer.c b/src/playlist/renderer.c
new file mode 100644
index 0000000000..5ad0805948
--- /dev/null
+++ b/src/playlist/renderer.c
@@ -0,0 +1,51 @@
+/*****************************************************************************
+ * renderer.c : Manage renderer modules
+ *****************************************************************************
+ * Copyright (C) 1999-2017 VLC authors, VideoLAN and VideoLabs
+ *
+ * Authors: Hugo Beauzée-Luyssen <hugo at beauzee.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <vlc_common.h>
+#include <vlc_playlist.h>
+#include <vlc_renderer_discovery.h>
+
+#include "playlist/playlist_internal.h"
+
+int playlist_SetRenderer( playlist_t* p_playlist, vlc_renderer_item_t* p_item )
+{
+ if( p_item )
+ vlc_renderer_item_hold( p_item );
+
+ PL_LOCK;
+
+ playlist_private_t *p_priv = pl_priv( p_playlist );
+ vlc_renderer_item_t *p_prev_renderer = p_priv->p_renderer;
+ p_priv->p_renderer = p_item;
+ if( p_priv->p_input )
+ input_Control( p_priv->p_input, INPUT_SET_RENDERER, p_item );
+
+ PL_UNLOCK;
+
+ if( p_prev_renderer )
+ vlc_renderer_item_release( p_prev_renderer );
+ return VLC_SUCCESS;
+}
More information about the vlc-commits
mailing list