[vlc-devel] [PATCH] stream: expose vlc_stream_Control symbol

Thomas Guillem thomas at gllm.fr
Thu Sep 17 09:50:54 CEST 2020



On Wed, Sep 16, 2020, at 21:33, Romain Vimont wrote:
> The stream "control" function is exposed in 2 variants:
>  - vlc_stream_vaControl(), with a va_list parameter;
>  - vlc_stream_Control(), with a variable number of arguments.
> 
> From Rust, the va_list version could only be called using the
> "c_variadic" feature, currently unstable:
> https://doc.rust-lang.org/std/ffi/struct.VaList.html

Since the Rust integration is still experimental, could we require a Rust unstable ?
The question is: when this unstable version will be released? After or before 4.0 ?

> 
> However, the variadic version (vlc_stream_Control()) can be called:
> https://doc.rust-lang.org/nomicon/ffi.html#variadic-functions
> 
> In practice, it was provided as a static inline helper in the header.
> Expose it with a symbol so that it can be called from Rust.
> 
> Note: In the future, we would like to get rid of variadic or va_list
> functions in API.
> ---
>  include/vlc_stream.h | 12 +-----------
>  src/input/stream.c   | 11 +++++++++++
>  src/libvlccore.sym   |  1 +
>  3 files changed, 13 insertions(+), 11 deletions(-)
> 
> diff --git a/include/vlc_stream.h b/include/vlc_stream.h
> index bc6c0d30b7..d8ba670a70 100644
> --- a/include/vlc_stream.h
> +++ b/include/vlc_stream.h
> @@ -297,17 +297,7 @@ VLC_API bool vlc_stream_Eof(const stream_t *) VLC_USED;
>  VLC_API int vlc_stream_Seek(stream_t *, uint64_t offset) VLC_USED;
>  
>  VLC_API int vlc_stream_vaControl(stream_t *s, int query, va_list args);
> -
> -static inline int vlc_stream_Control(stream_t *s, int query, ...)
> -{
> -    va_list ap;
> -    int ret;
> -
> -    va_start(ap, query);
> -    ret = vlc_stream_vaControl(s, query, ap);
> -    va_end(ap);
> -    return ret;
> -}
> +VLC_API int vlc_stream_Control(stream_t *s, int query, ...);

Otherwise, OK with this patch.

>  
>  VLC_API block_t *vlc_stream_Block(stream_t *s, size_t);
>  VLC_API char *vlc_stream_ReadLine(stream_t *);
> diff --git a/src/input/stream.c b/src/input/stream.c
> index 35c5a04870..606621cf27 100644
> --- a/src/input/stream.c
> +++ b/src/input/stream.c
> @@ -703,6 +703,17 @@ int vlc_stream_vaControl(stream_t *s, int cmd, 
> va_list args)
>      return s->pf_control(s, cmd, args);
>  }
>  
> +int vlc_stream_Control(stream_t *s, int query, ...)
> +{
> +    va_list ap;
> +    int ret;
> +
> +    va_start(ap, query);
> +    ret = vlc_stream_vaControl(s, query, ap);
> +    va_end(ap);
> +    return ret;
> +}
> +
>  /**
>   * Read data into a block.
>   *
> diff --git a/src/libvlccore.sym b/src/libvlccore.sym
> index 31fcd37cba..f78efcc11c 100644
> --- a/src/libvlccore.sym
> +++ b/src/libvlccore.sym
> @@ -372,6 +372,7 @@ vlc_stream_Tell
>  vlc_stream_NewMRL
>  vlc_stream_NewURL
>  vlc_stream_vaControl
> +vlc_stream_Control
>  vlc_stream_ReadDir
>  vlc_stream_fifo_New
>  vlc_stream_fifo_Queue
> -- 
> 2.28.0
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list