[vlc-devel] [PATCH] libvlc: rename media slave to associated media

Hugo Beauzée-Luyssen hugo at beauzee.fr
Tue Sep 11 11:59:15 CEST 2018


On Tue, Sep 11, 2018, at 11:49 AM, Thomas Guillem wrote:
> This term is not technically correct. Indeed, it refers to the current
> implementation detail where the associated input is driven by the main input
> thread. We already discussed about using a thread for each associated inputs.
> In that case, it won't be driven by the main input thread anymore.
> Furthermore, with the future vlc_clock, the audio track (that could come from
> an associated media) is very likely to drive the clock and have an impact on
> the video track (that could come from the main input).
> 
> The old slave API is deprecated but still available in VLC 4.0 (but will be
> gone after).
> 
> There are still references of slave in the input_thread.h CORE API. But this
> API will be replaced by the future vlc_player.
> ---
>  include/vlc/deprecated.h          | 124 ++++++++++++++++++++++++++++++
>  include/vlc/libvlc_media.h        |  81 +++++++++----------
>  include/vlc/libvlc_media_player.h |  22 +++---
>  lib/libvlc.sym                    |   5 ++
>  lib/media.c                       |  87 +++++++++++++--------
>  lib/media_player.c                |  15 +++-
>  6 files changed, 250 insertions(+), 84 deletions(-)
> 
> diff --git a/include/vlc/deprecated.h b/include/vlc/deprecated.h
> index bc73e493c2..27ec80b944 100644
> --- a/include/vlc/deprecated.h
> +++ b/include/vlc/deprecated.h
> @@ -90,6 +90,130 @@ libvlc_media_parse_async( libvlc_media_t *p_md );
>  LIBVLC_DEPRECATED LIBVLC_API int
>     libvlc_media_is_parsed( libvlc_media_t *p_md );
>  
> +/**
> + * Type of a media slave: subtitle or audio.
> + * @deprecated Use @ref libvlc_associated_media_type_t instead.
> + */
> +typedef enum libvlc_media_slave_type_t
> +{
> +    libvlc_media_slave_type_subtitle,
> +    libvlc_media_slave_type_audio,
> +} libvlc_media_slave_type_t;
> +
> +/**
> + * A slave of a libvlc_media_t
> + * @deprecated Use @ref libvlc_associated_media_t instead.
> + * \see libvlc_media_slaves_get
> + */
> +typedef struct libvlc_media_slave_t
> +{
> +    char *                          psz_uri;
> +    libvlc_media_slave_type_t       i_type;
> +    unsigned int                    i_priority;
> +} libvlc_media_slave_t;
> +
> +/**
> + * Add a slave to the current media.
> + *
> + * A slave is an external input source that may contains an additional subtitle
> + * track (like a .srt) or an additional audio track (like a .ac3).
> + *
> + * \note This function must be called before the media is parsed (via
> + * libvlc_media_parse_with_options()) or before the media is played (via
> + * libvlc_media_player_play())
> + *
> + * @deprecated Use @ref libvlc_media_add_associated_media instead.
> + * \version LibVLC 3.0.0 and later.
> + *
> + * \param p_md media descriptor object
> + * \param i_type subtitle or audio
> + * \param i_priority from 0 (low priority) to 4 (high priority)
> + * \param psz_uri Uri of the slave (should contain a valid scheme).
> + *
> + * \return 0 on success, -1 on error.
> + */
> +LIBVLC_DEPRECATED LIBVLC_API
> +int libvlc_media_slaves_add( libvlc_media_t *p_md,
> +                             libvlc_media_slave_type_t i_type,
> +                             unsigned int i_priority,
> +                             const char *psz_uri );
> +
> +/**
> + * Clear all slaves previously added by libvlc_media_slaves_add() or
> + * internally.
> + *
> + * @deprecated Use @ref libvlc_media_clear_associated_medias instead.
> + * \version LibVLC 3.0.0 and later.
> + *
> + * \param p_md media descriptor object
> + */
> +LIBVLC_DEPRECATED LIBVLC_API
> +void libvlc_media_slaves_clear( libvlc_media_t *p_md );
> +
> +/**
> + * Get a media descriptor's slave list
> + *
> + * The list will contain slaves parsed by VLC or previously added by
> + * libvlc_media_slaves_add(). The typical use case of this function is to save
> + * a list of slave in a database for a later use.
> + *
> + * @deprecated Use @ref libvlc_media_get_associated_medias instead.
> + * \version LibVLC 3.0.0 and later.
> + *
> + * \see libvlc_media_slaves_add
> + *
> + * \param p_md media descriptor object
> + * \param ppp_slaves address to store an allocated array of slaves (must be
> + * freed with libvlc_media_slaves_release()) [OUT]
> + *
> + * \return the number of slaves (zero on error)
> + */
> +LIBVLC_DEPRECATED LIBVLC_API
> +unsigned int libvlc_media_slaves_get( libvlc_media_t *p_md,
> +                                      libvlc_media_slave_t ***ppp_slaves );
> +
> +/**
> + * Release a media descriptor's slave list
> + *
> + * @deprecated Use @ref libvlc_media_get_associated_medias instead.
> + * \version LibVLC 3.0.0 and later.
> + *
> + * \param pp_slaves slave array to release
> + * \param i_count number of elements in the array
> + */
> +LIBVLC_DEPRECATED LIBVLC_API
> +void libvlc_media_slaves_release( libvlc_media_slave_t **pp_slaves,
> +                                  unsigned int i_count );
> +
> +/** @}*/
> +
> +/**
> + * \ingroup libvlc libvlc_media_player
> + */
> +
> +/**
> + * Add a slave to the current media player.
> + *
> + * \note If the player is playing, the slave will be added directly. This call
> + * will also update the slave list of the attached libvlc_media_t.
> + *
> + * @deprecated Use @ref libvlc_media_player_add_associated_media instead.
> + * \version LibVLC 3.0.0 and later.
> + *
> + * \see libvlc_media_slaves_add
> + *
> + * \param p_mi the media player
> + * \param i_type subtitle or audio
> + * \param psz_uri Uri of the slave (should contain a valid scheme).
> + * \param b_select True if this slave should be selected when it's loaded
> + *
> + * \return 0 on success, -1 on error.
> + */
> +LIBVLC_DEPRECATED LIBVLC_API
> +int libvlc_media_player_add_slave( libvlc_media_player_t *p_mi,
> +                                   libvlc_media_slave_type_t i_type,
> +                                   const char *psz_uri, bool b_select );
> +
>  /** @}*/
>  
>  /**
> diff --git a/include/vlc/libvlc_media.h b/include/vlc/libvlc_media.h
> index 314d5c20b8..03b11e2a56 100644
> --- a/include/vlc/libvlc_media.h
> +++ b/include/vlc/libvlc_media.h
> @@ -294,24 +294,24 @@ typedef enum libvlc_media_parsed_status_t
>  } libvlc_media_parsed_status_t;
>  
>  /**
> - * Type of a media slave: subtitle or audio.
> + * Type of an associated media: subtitle or audio.
>   */
> -typedef enum libvlc_media_slave_type_t
> +typedef enum libvlc_associated_media_type_t
>  {
> -    libvlc_media_slave_type_subtitle,
> -    libvlc_media_slave_type_audio,
> -} libvlc_media_slave_type_t;
> +    libvlc_associated_media_type_subtitle,
> +    libvlc_associated_media_type_audio,
> +} libvlc_associated_media_type_t;
>  
>  /**
> - * A slave of a libvlc_media_t
> - * \see libvlc_media_slaves_get
> + * A media associated with of a libvlc_media_t
> + * \see libvlc_media_get_associated_medias
>   */
> -typedef struct libvlc_media_slave_t
> +typedef struct libvlc_associated_media_t
>  {
>      char *                          psz_uri;
> -    libvlc_media_slave_type_t       i_type;
> +    libvlc_associated_media_type_t  i_type;
>      unsigned int                    i_priority;
> -} libvlc_media_slave_t;
> +} libvlc_associated_media_t;
>  
>  /**
>   * Callback prototype to open a custom bitstream input media.
> @@ -789,7 +789,7 @@ void 
> libvlc_media_tracks_release( libvlc_media_track_t **p_tracks,
>  /**
>   * Get the media type of the media descriptor object
>   *
> - * \version LibVLC 3.0.0 and later.
> + * \version LibVLC 4.0.0 and later.
>   *
>   * \see libvlc_media_type_t
>   *
> @@ -801,73 +801,74 @@ LIBVLC_API
>  libvlc_media_type_t libvlc_media_get_type( libvlc_media_t *p_md );
>  
>  /**
> - * Add a slave to the current media.
> + * Add a media associated with the current media.
>   *
> - * A slave is an external input source that may contains an additional subtitle
> - * track (like a .srt) or an additional audio track (like a .ac3).
> + * An associated is an external input source that may contains an additional
> + * subtitle track (like a .srt) or an additional audio track (like a .ac3).
>   *
>   * \note This function must be called before the media is parsed (via
>   * libvlc_media_parse_with_options()) or before the media is played (via
>   * libvlc_media_player_play())
>   *
> - * \version LibVLC 3.0.0 and later.
> + * \version LibVLC 4.0.0 and later.
>   *
>   * \param p_md media descriptor object
>   * \param i_type subtitle or audio
>   * \param i_priority from 0 (low priority) to 4 (high priority)
> - * \param psz_uri Uri of the slave (should contain a valid scheme).
> + * \param psz_uri Uri of the associated media (should contain a valid scheme).
>   *
>   * \return 0 on success, -1 on error.
>   */
>  LIBVLC_API
> -int libvlc_media_slaves_add( libvlc_media_t *p_md,
> -                             libvlc_media_slave_type_t i_type,
> -                             unsigned int i_priority,
> -                             const char *psz_uri );
> +int libvlc_media_add_associated_media( libvlc_media_t *p_md,
> +                                       libvlc_associated_media_type_t i_type,
> +                                       unsigned int i_priority,
> +                                       const char *psz_uri );
>  
>  /**
> - * Clear all slaves previously added by libvlc_media_slaves_add() or
> - * internally.
> + * Clear all associated media previously added by
> + * libvlc_media_add_associated_media() or internally.
>   *
> - * \version LibVLC 3.0.0 and later.
> + * \version LibVLC 4.0.0 and later.
>   *
>   * \param p_md media descriptor object
>   */
>  LIBVLC_API
> -void libvlc_media_slaves_clear( libvlc_media_t *p_md );
> +void libvlc_media_clear_associated_medias( libvlc_media_t *p_md );
>  
>  /**
> - * Get a media descriptor's slave list
> + * Get the list of associated medias
>   *
> - * The list will contain slaves parsed by VLC or previously added by
> - * libvlc_media_slaves_add(). The typical use case of this function is 
> to save
> - * a list of slave in a database for a later use.
> + * The list will contain associated medias parsed by VLC or previously 
> added by
> + * libvlc_media_add_associated_media(). The typical use case of this 
> function
> + * is to save a list of associated medias in a database for a later 
> use.
>   *
> - * \version LibVLC 3.0.0 and later.
> + * \version LibVLC 4.0.0 and later.
>   *
> - * \see libvlc_media_slaves_add
> + * \see libvlc_media_add_associated_media
>   *
>   * \param p_md media descriptor object
> - * \param ppp_slaves address to store an allocated array of slaves 
> (must be
> - * freed with libvlc_media_slaves_release()) [OUT]
> + * \param ppp_amedias address to store an allocated array of associated 
> medias
> + * (must be freed with libvlc_associated_medias_release()) [OUT]
>   *
> - * \return the number of slaves (zero on error)
> + * \return the number of associated medias (zero on error)
>   */
>  LIBVLC_API
> -unsigned int libvlc_media_slaves_get( libvlc_media_t *p_md,
> -                                      libvlc_media_slave_t 
> ***ppp_slaves );
> +unsigned int libvlc_media_get_associated_medias( libvlc_media_t *p_md,
> +                                      libvlc_associated_media_t 
> ***ppp_amedias );
>  
>  /**
> - * Release a media descriptor's slave list
> + * Release a list of associated medias
>   *
> - * \version LibVLC 3.0.0 and later.
> + * \version LibVLC 4.0.0 and later.
>   *
> - * \param pp_slaves slave array to release
> + * \param pp_medias associated media array to release (returned by
> + * libvlc_media_get_associated_medias())
>   * \param i_count number of elements in the array
>   */
>  LIBVLC_API
> -void libvlc_media_slaves_release( libvlc_media_slave_t **pp_slaves,
> -                                  unsigned int i_count );
> +void libvlc_associated_medias_release( libvlc_associated_media_t **pp_medias,
> +                                       unsigned int i_count );
>  
>  /** @}*/
>  
> diff --git a/include/vlc/libvlc_media_player.h b/include/vlc/
> libvlc_media_player.h
> index 73dadda3ba..babd1e0f91 100644
> --- a/include/vlc/libvlc_media_player.h
> +++ b/include/vlc/libvlc_media_player.h
> @@ -1087,26 +1087,28 @@ LIBVLC_API void 
> libvlc_media_player_navigate( libvlc_media_player_t* p_mi,
>  LIBVLC_API void 
> libvlc_media_player_set_video_title_display( libvlc_media_player_t 
> *p_mi, libvlc_position_t position, unsigned int timeout );
>  
>  /**
> - * Add a slave to the current media player.
> + * Add an associated media to the current media player.
>   *
> - * \note If the player is playing, the slave will be added directly. 
> This call
> - * will also update the slave list of the attached libvlc_media_t.
> + * \note If the player is playing, the associated media will be added 
> directly.
> + * This call will also update the associated media list of the attached
> + * libvlc_media_t.
>   *
> - * \version LibVLC 3.0.0 and later.
> + * \version LibVLC 4.0.0 and later.
>   *
> - * \see libvlc_media_slaves_add
> + * \see libvlc_media_add_associated_media
>   *
>   * \param p_mi the media player
>   * \param i_type subtitle or audio
> - * \param psz_uri Uri of the slave (should contain a valid scheme).
> - * \param b_select True if this slave should be selected when it's 
> loaded
> + * \param psz_uri Uri of the associated media (should contain a valid 
> scheme).
> + * \param b_select True if this associated media should be selected 
> when it's
> + * loaded
>   *
>   * \return 0 on success, -1 on error.
>   */
>  LIBVLC_API
> -int libvlc_media_player_add_slave( libvlc_media_player_t *p_mi,
> -                                   libvlc_media_slave_type_t i_type,
> -                                   const char *psz_uri, bool 
> b_select );
> +int libvlc_media_player_add_associated_media( libvlc_media_player_t 
> *p_mi,
> +                                              
> libvlc_associated_media_type_t i_type,
> +                                              const char *psz_uri, bool 
> b_select );
>  
>  /**
>   * Release (free) libvlc_track_description_t
> diff --git a/lib/libvlc.sym b/lib/libvlc.sym
> index 9a896ce7b2..1311e5cfac 100644
> --- a/lib/libvlc.sym
> +++ b/lib/libvlc.sym
> @@ -3,6 +3,7 @@ libvlc_clearerr
>  libvlc_printerr
>  libvlc_vprinterr
>  libvlc_add_intf
> +libvlc_associated_medias_release
>  libvlc_audio_equalizer_get_amp_at_index
>  libvlc_audio_equalizer_get_band_count
>  libvlc_audio_equalizer_get_band_frequency
> @@ -60,8 +61,10 @@ libvlc_log_get_object
>  libvlc_log_set
>  libvlc_log_set_file
>  libvlc_log_unset
> +libvlc_media_add_associated_media
>  libvlc_media_add_option
>  libvlc_media_add_option_flag
> +libvlc_media_clear_associated_medias
>  libvlc_media_discoverer_is_running
>  libvlc_media_discoverer_media_list
>  libvlc_media_discoverer_new
> @@ -72,6 +75,7 @@ libvlc_media_discoverer_start
>  libvlc_media_discoverer_stop
>  libvlc_media_duplicate
>  libvlc_media_event_manager
> +libvlc_media_get_associated_medias
>  libvlc_media_get_codec_description
>  libvlc_media_get_duration
>  libvlc_media_get_meta
> @@ -131,6 +135,7 @@ libvlc_media_parse_async
>  libvlc_media_parse_with_options
>  libvlc_media_parse_stop
>  libvlc_media_player_add_slave
> +libvlc_media_player_add_associated_media
>  libvlc_media_player_can_pause
>  libvlc_media_player_program_scrambled
>  libvlc_media_player_next_frame
> diff --git a/lib/media.c b/lib/media.c
> index 17deae436e..e907af37a5 100644
> --- a/lib/media.c
> +++ b/lib/media.c
> @@ -1092,10 +1092,10 @@ libvlc_media_type_t 
> libvlc_media_get_type( libvlc_media_t *p_md )
>      }
>  }
>  
> -int libvlc_media_slaves_add( libvlc_media_t *p_md,
> -                             libvlc_media_slave_type_t i_type,
> -                             unsigned int i_priority,
> -                             const char *psz_uri )
> +int libvlc_media_add_associated_media( libvlc_media_t *p_md,
> +                                       libvlc_associated_media_type_t 
> i_type,
> +                                       unsigned int i_priority,
> +                                       const char *psz_uri )
>  {
>      assert( p_md && psz_uri );
>      input_item_t *p_input_item = p_md->p_input_item;
> @@ -1143,7 +1143,7 @@ int libvlc_media_slaves_add( libvlc_media_t *p_md,
>      return input_item_AddSlave( p_input_item, p_slave ) == 
> VLC_SUCCESS ? 0 : -1;
>  }
>  
> -void libvlc_media_slaves_clear( libvlc_media_t *p_md )
> +void libvlc_media_clear_associated_medias( libvlc_media_t *p_md )
>  {
>      assert( p_md );
>      input_item_t *p_input_item = p_md->p_input_item;
> @@ -1155,12 +1155,12 @@ void libvlc_media_slaves_clear( libvlc_media_t *p_md )
>      vlc_mutex_unlock( &p_input_item->lock );
>  }
>  
> -unsigned int libvlc_media_slaves_get( libvlc_media_t *p_md,
> -                                      libvlc_media_slave_t ***ppp_slaves )
> +unsigned int libvlc_media_get_associated_medias( libvlc_media_t *p_md,
> +                                    libvlc_associated_media_t ***ppp_amedias )
>  {
> -    assert( p_md && ppp_slaves );
> +    assert( p_md && ppp_amedias );
>      input_item_t *p_input_item = p_md->p_input_item;
> -    *ppp_slaves = NULL;
> +    *ppp_amedias = NULL;
>  
>      vlc_mutex_lock( &p_input_item->lock );
>  
> @@ -1168,8 +1168,8 @@ unsigned int 
> libvlc_media_slaves_get( libvlc_media_t *p_md,
>      if( i_count <= 0 )
>          return vlc_mutex_unlock( &p_input_item->lock ), 0;
>  
> -    libvlc_media_slave_t **pp_slaves = calloc( i_count, 
> sizeof(*pp_slaves) );
> -    if( pp_slaves == NULL )
> +    libvlc_associated_media_t **pp_amedias = calloc( i_count, 
> sizeof(*pp_amedias) );
> +    if( pp_amedias == NULL )
>          return vlc_mutex_unlock( &p_input_item->lock ), 0;
>  
>      for( int i = 0; i < i_count; ++i )
> @@ -1178,24 +1178,24 @@ unsigned int 
> libvlc_media_slaves_get( libvlc_media_t *p_md,
>          assert( p_item_slave->i_priority >= 
> SLAVE_PRIORITY_MATCH_NONE );
>  
>          /* also allocate psz_uri buffer at the end of the struct */
> -        libvlc_media_slave_t *p_slave = malloc( sizeof(*p_slave) +
> +        libvlc_associated_media_t *p_amedia = malloc( sizeof(*p_amedia) +
>                                                  strlen( p_item_slave->psz_uri )
>                                                  + 1 );
> -        if( p_slave == NULL )
> +        if( p_amedia == NULL )
>          {
> -            libvlc_media_slaves_release(pp_slaves, i);
> +            libvlc_associated_medias_release(pp_amedias, i);
>              return vlc_mutex_unlock( &p_input_item->lock ), 0;
>          }
> -        p_slave->psz_uri = (char *) ((uint8_t *)p_slave) + sizeof(*p_slave);
> -        strcpy( p_slave->psz_uri, p_item_slave->psz_uri );
> +        p_amedia->psz_uri = (char *) ((uint8_t *)p_amedia) + sizeof(*p_amedia);
> +        strcpy( p_amedia->psz_uri, p_item_slave->psz_uri );
>  
>          switch( p_item_slave->i_type )
>          {
>          case SLAVE_TYPE_SPU:
> -            p_slave->i_type = libvlc_media_slave_type_subtitle;
> +            p_amedia->i_type = libvlc_media_slave_type_subtitle;
>              break;
>          case SLAVE_TYPE_AUDIO:
> -            p_slave->i_type = libvlc_media_slave_type_audio;
> +            p_amedia->i_type = libvlc_media_slave_type_audio;
>              break;
>          default:
>              vlc_assert_unreachable();
> @@ -1204,39 +1204,66 @@ unsigned int 
> libvlc_media_slaves_get( libvlc_media_t *p_md,
>          switch( p_item_slave->i_priority )
>          {
>          case SLAVE_PRIORITY_MATCH_NONE:
> -            p_slave->i_priority = 0;
> +            p_amedia->i_priority = 0;
>              break;
>          case SLAVE_PRIORITY_MATCH_RIGHT:
> -            p_slave->i_priority = 1;
> +            p_amedia->i_priority = 1;
>              break;
>          case SLAVE_PRIORITY_MATCH_LEFT:
> -            p_slave->i_priority = 2;
> +            p_amedia->i_priority = 2;
>              break;
>          case SLAVE_PRIORITY_MATCH_ALL:
> -            p_slave->i_priority = 3;
> +            p_amedia->i_priority = 3;
>              break;
>          case SLAVE_PRIORITY_USER:
> -            p_slave->i_priority = 4;
> +            p_amedia->i_priority = 4;
>              break;
>          default:
>              vlc_assert_unreachable();
>          }
> -        pp_slaves[i] = p_slave;
> +        pp_amedias[i] = p_amedia;
>      }
>      vlc_mutex_unlock( &p_input_item->lock );
>  
> -    *ppp_slaves = pp_slaves;
> +    *ppp_amedias = pp_amedias;
>      return i_count;
>  }
>  
> -void libvlc_media_slaves_release( libvlc_media_slave_t **pp_slaves,
> -                                  unsigned int i_count )
> +void libvlc_associated_medias_release( libvlc_associated_media_t 
> **pp_amedias,
> +                                       unsigned int i_count )
>  {
>      if( i_count > 0 )
>      {
> -        assert( pp_slaves );
> +        assert( pp_amedias );
>          for( unsigned int i = 0; i < i_count; ++i )
> -            free( pp_slaves[i] );
> +            free( pp_amedias[i] );
>      }
> -    free( pp_slaves );
> +    free( pp_amedias );
> +}
> +
> +int libvlc_media_slaves_add( libvlc_media_t *p_md,
> +                             libvlc_media_slave_type_t i_type,
> +                             unsigned int i_priority,
> +                             const char *psz_uri )
> +{
> +    return libvlc_media_add_associated_media( p_md, i_type, i_priority, 
> psz_uri );
> +}
> +
> +void libvlc_media_slaves_clear( libvlc_media_t *p_md )
> +{
> +    libvlc_media_clear_associated_medias( p_md );
> +}
> +
> +unsigned int libvlc_media_slaves_get( libvlc_media_t *p_md,
> +                                      libvlc_media_slave_t 
> ***ppp_amedias )
> +{
> +    return libvlc_media_get_associated_medias( p_md,
> +                                              
> (libvlc_associated_media_t ***)ppp_amedias );
> +}
> +
> +void libvlc_media_slaves_release( libvlc_media_slave_t **pp_amedias,
> +                                  unsigned int i_count )
> +{
> +    libvlc_associated_medias_release( (libvlc_associated_media_t 
> **)pp_amedias,
> +                                      i_count );
>  }
> diff --git a/lib/media_player.c b/lib/media_player.c
> index e299f823b3..e7cbe27c35 100644
> --- a/lib/media_player.c
> +++ b/lib/media_player.c
> @@ -1934,9 +1934,9 @@ void 
> libvlc_media_player_set_video_title_display( libvlc_media_player_t 
> *p_mi, l
>      }
>  }
>  
> -int libvlc_media_player_add_slave( libvlc_media_player_t *p_mi,
> -                                   libvlc_media_slave_type_t i_type,
> -                                   const char *psz_uri, bool b_select )
> +int libvlc_media_player_add_associated_media( libvlc_media_player_t 
> *p_mi,
> +                                              
> libvlc_associated_media_type_t i_type,
> +                                              const char *psz_uri, bool 
> b_select )
>  {
>      input_thread_t *p_input_thread = libvlc_get_input_thread ( p_mi );
>  
> @@ -1946,7 +1946,8 @@ int 
> libvlc_media_player_add_slave( libvlc_media_player_t *p_mi,
>          if( p_media == NULL )
>              return -1;
>  
> -        int i_ret = libvlc_media_slaves_add( p_media, i_type, 4, 
> psz_uri );
> +        int i_ret = libvlc_media_add_associated_media( p_media, i_type, 
> 4,
> +                                                       psz_uri );
>          libvlc_media_release( p_media );
>          return i_ret;
>      }
> @@ -1959,6 +1960,12 @@ int 
> libvlc_media_player_add_slave( libvlc_media_player_t *p_mi,
>          return i_ret == VLC_SUCCESS ? 0 : -1;
>      }
>  }
> +int libvlc_media_player_add_slave( libvlc_media_player_t *p_mi,
> +                                   libvlc_media_slave_type_t i_type,
> +                                   const char *psz_uri, bool b_select )
> +{
> +    return libvlc_media_player_add_associated_media( p_mi, i_type, 
> psz_uri, b_select );
> +}
>  
>  /**
>   * Maximum size of a formatted equalizer amplification band frequency value.
> -- 
> 2.18.0
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel

Hi,

Strong +1 on my end.

Regards,

-- 
  Hugo Beauzée-Luyssen
  hugo at beauzee.fr


More information about the vlc-devel mailing list