[vlc-devel] [PATCH 1/5] sout: remove unnecessary array

Steve Lhomme robux4 at ycbcr.xyz
Mon Oct 12 08:47:08 CEST 2020


patchset LGTM

On 2020-10-11 15:22, RĂ©mi Denis-Courmont wrote:
> ---
>   src/stream_output/stream_output.c | 39 +++++++++++++++++--------------
>   1 file changed, 22 insertions(+), 17 deletions(-)
> 
> diff --git a/src/stream_output/stream_output.c b/src/stream_output/stream_output.c
> index 70b286910d..76c479efa7 100644
> --- a/src/stream_output/stream_output.c
> +++ b/src/stream_output/stream_output.c
> @@ -821,12 +821,13 @@ static sout_stream_t *sout_StreamNew( vlc_object_t *parent, char *psz_name,
>    *  Returns a pointer to the first module.
>    */
>   sout_stream_t *sout_StreamChainNew(vlc_object_t *parent, const char *psz_chain,
> -                                sout_stream_t *p_next, sout_stream_t **pp_last)
> +                                   sout_stream_t *sink,
> +                                   sout_stream_t **restrict pp_last)
>   {
>       if(!psz_chain || !*psz_chain)
>       {
>           if(pp_last) *pp_last = NULL;
> -        return p_next;
> +        return sink;
>       }
>   
>       char *psz_parser = strdup(psz_chain);
> @@ -850,38 +851,42 @@ sout_stream_t *sout_StreamChainNew(vlc_object_t *parent, const char *psz_chain,
>           vlc_array_append_or_abort(&name, psz_name);
>       }
>   
> +    /* Instantiate modules from back to front of chain */
> +    sout_stream_t *front = sink;
>       size_t i = vlc_array_count(&name);
> -    vlc_array_t module;
> -    vlc_array_init(&module);
> +
>       while(i--)
>       {
> -        p_next = sout_StreamNew( parent, vlc_array_item_at_index(&name, i),
> -            vlc_array_item_at_index(&cfg, i), p_next);
> +        sout_stream_t *prev;
>   
> -        if(!p_next)
> +        prev = sout_StreamNew(parent, vlc_array_item_at_index(&name, i),
> +                              vlc_array_item_at_index(&cfg, i), front);
> +        if (prev == NULL)
>               goto error;
>   
> -        if(i == vlc_array_count(&name) - 1 && pp_last)
> -            *pp_last = p_next;   /* last module created in the chain */
> +        if (front == sink && pp_last != NULL)
> +            *pp_last = prev; /* last module created in the chain */
>   
> -        vlc_array_append_or_abort(&module, p_next);
> +        front = prev;
>       }
>   
>       vlc_array_clear(&name);
>       vlc_array_clear(&cfg);
> -    vlc_array_clear(&module);
>   
> -    return p_next;
> +    return front;
>   
>   error:
>   
>       i++;    /* last module couldn't be created */
>   
> -    /* destroy all modules created, starting with the last one */
> -    int modules = vlc_array_count(&module);
> -    while(modules--)
> -        sout_StreamDelete(vlc_array_item_at_index(&module, modules));
> -    vlc_array_clear(&module);
> +    /* Destroy module instances in LIFO order */
> +    while (front != sink)
> +    {
> +        sout_stream_t *next = front->p_next;
> +
> +        sout_StreamDelete(front);
> +        front = next;
> +    }
>   
>       /* then destroy all names and config which weren't destroyed by
>        * sout_StreamDelete */
> -- 
> 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