[vlc-devel] [RFC PATCH 03/10] playlist: Add playlist_SetRenderer

Rémi Denis-Courmont remi at remlab.net
Thu Sep 7 16:53:55 CEST 2017


Le torstaina 7. syyskuuta 2017, 15.45.59 EEST Hugo Beauzée-Luyssen a écrit :
> ---
>  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          | 50
> ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 64 insertions(+)
>  create mode 100644 src/playlist/renderer.c
> 
> 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..eb1da914a7
> --- /dev/null
> +++ b/src/playlist/renderer.c
> @@ -0,0 +1,50 @@
> +/**************************************************************************
> *** + * 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 ) +{
> +    PL_LOCK;
> +
> +    playlist_private_t* p_priv = pl_priv( p_playlist );
> +    if( p_priv->p_renderer )
> +        vlc_renderer_item_release( p_priv->p_renderer );

Can be moved out of contention.

> +    p_priv->p_renderer = p_item;
> +    if( p_item )
> +        vlc_renderer_item_hold( p_item );

Ditto.

> +    if( p_priv->p_input )
> +    {
> +        input_Control( p_priv->p_input, INPUT_SET_RENDERER, p_item );
> +    }
> +
> +    PL_UNLOCK;
> +    return VLC_SUCCESS;
> +}

-- 
雷米‧德尼-库尔蒙
https://www.remlab.net/



More information about the vlc-devel mailing list