<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Oct 26, 2020 at 6:16 PM Thomas Guillem <<a href="mailto:thomas@gllm.fr">thomas@gllm.fr</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
<br>
On Mon, Oct 26, 2020, at 13:33, Prince Gupta wrote:<br>
> ---<br>
>  src/player/osd.c    | 41 +++++++++++++++++++++++++++++++++++++++++<br>
>  src/player/player.c | 11 +++++++++--<br>
>  src/player/player.h |  3 +++<br>
>  3 files changed, 53 insertions(+), 2 deletions(-)<br>
> <br>
> diff --git a/src/player/osd.c b/src/player/osd.c<br>
> index ca163da215..b3469b5b03 100644<br>
> --- a/src/player/osd.c<br>
> +++ b/src/player/osd.c<br>
> @@ -25,6 +25,7 @@<br>
>  #include <limits.h><br>
>  <br>
>  #include <vlc_common.h><br>
> +#include <vlc_memstream.h><br>
>  #include "player.h"<br>
>  #include "input/resource.h"<br>
>  <br>
> @@ -199,6 +200,46 @@ vlc_player_osd_Track(vlc_player_t *player, <br>
> vlc_es_id_t *id, bool select)<br>
>      vlc_player_osd_Message(player, _("%s track: %s"), cat_name, <br>
> track_name);<br>
>  }<br>
>  <br>
> +void<br>
> +vlc_player_osd_Tracks(vlc_player_t *player, vlc_es_id_t **selected, <br>
> vlc_es_id_t *unselect)<br>
> +{<br>
> +    if ( !selected )<br>
> +        return;<br>
> +    const enum es_format_category_e cat = vlc_es_id_GetCat( <br>
> selected[0] );<br>
> +    const char *cat_name = es_format_category_to_string(cat);<br>
> +    int tracks_count = 0;<br>
> +    struct vlc_memstream stream;<br>
> +    vlc_memstream_open(&stream);<br>
> +<br>
> +    for (size_t i = 0; selected[i] != NULL; i++)<br>
> +    {<br>
> +        if ( unselect && !strcmp( vlc_es_id_GetStrId( selected[i] ), <br>
> vlc_es_id_GetStrId( unselect )) )<br>
> +            continue;<br>
> +<br>
> +        const struct vlc_player_track *track =<br>
> +            vlc_player_GetTrack(player, selected[i]);<br>
> +        if ( track )<br>
> +        {<br>
> +            if ( tracks_count != 0 )<br>
> +                vlc_memstream_puts(&stream, ", ");<br>
> +            vlc_memstream_puts(&stream, track->name);<br>
> +            tracks_count++;<br>
> +        }<br>
> +    }<br>
> +    if (vlc_memstream_close(&stream) == 0 && tracks_count != 0)<br>
> +    {<br>
> +        if ( tracks_count == 1 )<br>
> +            vlc_player_osd_Message(player, _("%s track: %s"), cat_name,<br>
> +                                   stream.ptr);<br>
> +        else<br>
> +            vlc_player_osd_Message(player, _("%s tracks: %s"), <br>
> cat_name,<br>
> +                                   stream.ptr);<br>
> +        free(stream.ptr);<br>
> +    } else if (tracks_count == 0) {<br>
> +        vlc_player_osd_Message(player, _("%s track: %s"), cat_name, <br>
> _("N/A"));<br>
> +    }<br>
> +}<br>
> +<br>
>  void<br>
>  vlc_player_osd_Program(vlc_player_t *player, const char *name)<br>
>  {<br>
> diff --git a/src/player/player.c b/src/player/player.c<br>
> index 669df87649..b8d7b38de2 100644<br>
> --- a/src/player/player.c<br>
> +++ b/src/player/player.c<br>
> @@ -701,8 +701,15 @@ vlc_player_UnselectEsId(vlc_player_t *player, <br>
> vlc_es_id_t *id)<br>
>  <br>
>      int ret = input_ControlPushEsHelper(input->thread, INPUT_CONTROL_UNSET_ES,<br>
>                                          id);<br>
> -    if (ret == VLC_SUCCESS)<br>
> -        vlc_player_osd_Track(player, id, false);<br>
> +    if ( ret != VLC_SUCCESS )<br>
> +        return;<br>
> +<br>
> +    const enum es_format_category_e cat = vlc_es_id_GetCat( id );<br>
> +    vlc_es_id_t ** selected_es = vlc_player_GetEsIdList( player, cat, NULL );<br>
> +    if ( !selected_es )<br>
> +        return;<br>
> +<br>
> +    vlc_player_osd_Tracks( player, selected_es, id );<br>
<br>
You leak selected_es. Maybe it should be fetched from the vlc_player_osd_Tracks() function.<br>
<br>
This function could take a selected_id and a unselected_id.<br>
It fetches the list internally, and compare with selected_id, unselected_id accordingly.<br>
<br>
Because, here you are using it from vlc_player_UnselectEsId(), but why not using it from vlc_player_SelectEsId() ?<br></blockquote><div><br></div><div>didn't want to touch that function, will use it there too :)</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
>  }<br>
>  <br>
>  void<br>
> diff --git a/src/player/player.h b/src/player/player.h<br>
> index fde4b1dbf3..2f168741e3 100644<br>
> --- a/src/player/player.h<br>
> +++ b/src/player/player.h<br>
> @@ -518,6 +518,9 @@ vlc_player_vout_OSDCallback(vlc_object_t *this, <br>
> const char *var,<br>
>  void<br>
>  vlc_player_osd_Track(vlc_player_t *player, vlc_es_id_t *id, bool <br>
> select);<br>
>  <br>
> +void<br>
> +vlc_player_osd_Tracks(vlc_player_t *player, vlc_es_id_t **selected, <br>
> vlc_es_id_t *unselect);<br>
> +<br>
>  void<br>
>  vlc_player_osd_Program(vlc_player_t *player, const char *name);<br>
>  <br>
> -- <br>
> 2.25.1<br>
> <br>
> _______________________________________________<br>
> vlc-devel mailing list<br>
> To unsubscribe or modify your subscription options:<br>
> <a href="https://mailman.videolan.org/listinfo/vlc-devel" rel="noreferrer" target="_blank">https://mailman.videolan.org/listinfo/vlc-devel</a><br>
_______________________________________________<br>
vlc-devel mailing list<br>
To unsubscribe or modify your subscription options:<br>
<a href="https://mailman.videolan.org/listinfo/vlc-devel" rel="noreferrer" target="_blank">https://mailman.videolan.org/listinfo/vlc-devel</a></blockquote></div></div>