[vlc-devel] [PATCH 4/4] player: associate tracks with vouts

Rémi Denis-Courmont remi at remlab.net
Wed May 29 16:18:55 CEST 2019


Le keskiviikkona 29. toukokuuta 2019, 16.32.58 EEST Thomas Guillem a écrit :
> This will allow API users to clearly identify vouts.
> ---
>  include/vlc_player.h                              |  4 +++-
>  lib/media_player.c                                |  4 +++-
>  modules/control/gestures.c                        |  9 ++++++---
>  modules/control/hotkeys.c                         |  2 ++
>  modules/gui/macosx/playlist/VLCPlayerController.m |  2 ++
>  modules/gui/qt/components/player_controller.cpp   |  2 +-
>  src/input/player.c                                | 13 +++++++++++--
>  test/src/input/player.c                           | 13 ++++++++++---
>  8 files changed, 38 insertions(+), 11 deletions(-)
> 
> diff --git a/include/vlc_player.h b/include/vlc_player.h
> index 054c4abae3..17d13fee1e 100644
> --- a/include/vlc_player.h
> +++ b/include/vlc_player.h
> @@ -836,10 +836,12 @@ struct vlc_player_cbs
>       * @param player locked player instance
>       * @param action started or stopped
>       * @param vout vout (can't be NULL)
> +     * @param track the track associated with this vout
>       * @param data opaque pointer set by vlc_player_AddListener()
>       */
>      void (*on_vout_changed)(vlc_player_t *player,
> -        enum vlc_player_vout_action action, vout_thread_t *vout, void
> *data); +        enum vlc_player_vout_action action, vout_thread_t *vout,
> +        const struct vlc_player_track *track, void *data);
> 
>      /**
>       * Called when the player is corked
> diff --git a/lib/media_player.c b/lib/media_player.c
> index fd085c3793..45b506b43d 100644
> --- a/lib/media_player.c
> +++ b/lib/media_player.c
> @@ -401,10 +401,12 @@ on_cork_changed(vlc_player_t *player, unsigned
> cork_count, void *data)
> 
>  static void
>  on_vout_changed(vlc_player_t *player, enum vlc_player_vout_action action,
> -                vout_thread_t *vout, void *data)
> +                vout_thread_t *vout, const struct vlc_player_track *track,
> +                void *data)
>  {
>      (void) action;
>      (void) vout;
> +    (void) track;
> 
>      libvlc_media_player_t *mp = data;
> 
> diff --git a/modules/control/gestures.c b/modules/control/gestures.c
> index 608747f43b..2b8b430d8a 100644
> --- a/modules/control/gestures.c
> +++ b/modules/control/gestures.c
> @@ -104,7 +104,9 @@ vlc_module_end ()
> 
>  static void player_on_vout_changed(vlc_player_t *player,
>                                     enum vlc_player_vout_action action,
> -                                   vout_thread_t *vout, void *data);
> +                                   vout_thread_t *vout,
> +                                   const struct vlc_player_track *track,
> +                                   void *data);
>  static int MovedEvent( vlc_object_t *, char const *,
>                         vlc_value_t, vlc_value_t, void * );
>  static int ButtonEvent( vlc_object_t *, char const *,
> @@ -389,9 +391,10 @@ static int ButtonEvent( vlc_object_t *p_this, char
> const *psz_var, static void
>  player_on_vout_changed(vlc_player_t *player,
>                         enum vlc_player_vout_action action,
> -                       vout_thread_t *vout, void *data)
> +                       vout_thread_t *vout,
> +                       const struct vlc_player_track *track, void *data)
>  {
> -    VLC_UNUSED(player);
> +    VLC_UNUSED(player); VLC_UNUSED(track);
>      intf_thread_t *intf = data;
>      intf_sys_t *sys = intf->p_sys;
>      switch (action)
> diff --git a/modules/control/hotkeys.c b/modules/control/hotkeys.c
> index b81debb4ea..81f0c92795 100644
> --- a/modules/control/hotkeys.c
> +++ b/modules/control/hotkeys.c
> @@ -1016,8 +1016,10 @@ ViewpointMovedCallback(vlc_object_t *obj, char const
> *var, static void
>  player_on_vout_changed(vlc_player_t *player,
>                         enum vlc_player_vout_action action, vout_thread_t
> *vout, +                       const struct vlc_player_track *track,
>                         void *data)
>  {
> +    VLC_UNUSED(track);
>      intf_thread_t *intf = data;
>      bool vrnav = var_GetBool(vout, "viewpoint-changeable");
>      switch (action)
> diff --git a/modules/gui/macosx/playlist/VLCPlayerController.m
> b/modules/gui/macosx/playlist/VLCPlayerController.m index
> 50dd9f5339..6996ad7c1d 100644
> --- a/modules/gui/macosx/playlist/VLCPlayerController.m
> +++ b/modules/gui/macosx/playlist/VLCPlayerController.m
> @@ -429,10 +429,12 @@ static void cb_player_item_meta_changed(vlc_player_t
> *p_player, static void cb_player_vout_changed(vlc_player_t *p_player,
>                                     enum vlc_player_vout_action action,
>                                     vout_thread_t *p_vout,
> +                                   const struct vlc_player_track *track,
>                                     void *p_data)
>  {
>      VLC_UNUSED(p_player);
>      VLC_UNUSED(p_vout);
> +    VLC_UNUSED(track);
>      dispatch_async(dispatch_get_main_queue(), ^{
>          VLCPlayerController *playerController = (__bridge
> VLCPlayerController *)p_data; [playerController voutListUpdated];
> diff --git a/modules/gui/qt/components/player_controller.cpp
> b/modules/gui/qt/components/player_controller.cpp index
> 37580926f3..77467cfb9e 100644
> --- a/modules/gui/qt/components/player_controller.cpp
> +++ b/modules/gui/qt/components/player_controller.cpp
> @@ -713,7 +713,7 @@ static void on_player_subitems_changed(vlc_player_t *,
> input_item_t *, input_ite }
> 
> 
> -static void on_player_vout_changed(vlc_player_t *player, enum
> vlc_player_vout_action, vout_thread_t *, void *data) +static void
> on_player_vout_changed(vlc_player_t *player, enum vlc_player_vout_action,
> vout_thread_t *,  const struct vlc_player_track *, void *data) {
>      PlayerControllerPrivate* that =
> static_cast<PlayerControllerPrivate*>(data); msg_Dbg( that->p_intf,
> "on_player_vout_list_changed");
> diff --git a/src/input/player.c b/src/input/player.c
> index a1c44c5dc0..046b74470d 100644
> --- a/src/input/player.c
> +++ b/src/input/player.c
> @@ -1792,6 +1792,7 @@ vlc_player_input_HandleVoutEvent(struct
> vlc_player_input *input, const struct vlc_input_event_vout *ev) {
>      assert(ev->vout);
> +    assert(ev->id);
> 
>      static const char osd_vars[][sizeof("deinterlace-mode")] = {
>          "aspect-ratio", "autoscale", "crop", "crop-bottom",
> @@ -1800,11 +1801,19 @@ vlc_player_input_HandleVoutEvent(struct
> vlc_player_input *input, };
> 
>      vlc_player_t *player = input->player;
> +
> +    vlc_player_track_vector *vec =
> +        vlc_player_input_GetTrackVector(input, vlc_es_id_GetCat(ev->id));
> +    struct vlc_player_track *track =
> +        vec ? vlc_player_track_vector_FindById(vec, ev->id, NULL) : NULL;
> +    if (!track)
> +        return;
> +
>      switch (ev->action)
>      {
>          case VLC_INPUT_EVENT_VOUT_ADDED:
>              vlc_player_SendEvent(player, on_vout_changed,
> -                                 VLC_PLAYER_VOUT_STARTED, ev->vout);
> +                                 VLC_PLAYER_VOUT_STARTED, ev->vout, track);
> 
>              /* Register vout callbacks after the vout list event */
>              var_AddCallback(ev->vout, "fullscreen",
> @@ -1826,7 +1835,7 @@ vlc_player_input_HandleVoutEvent(struct
> vlc_player_input *input, vlc_player_VoutOSDCallback, player);
> 
>              vlc_player_SendEvent(player, on_vout_changed,
> -                                 VLC_PLAYER_VOUT_STOPPED, ev->vout);
> +                                 VLC_PLAYER_VOUT_STOPPED, ev->vout, track);

I would not expect a track in the stopped event, TBH.
How do you foresee the event to change ES<->vout mapping?

> break;
>          default:
>              vlc_assert_unreachable();
> diff --git a/test/src/input/player.c b/test/src/input/player.c
> index 8406e4352f..20df9d00bc 100644
> --- a/test/src/input/player.c
> +++ b/test/src/input/player.c
> @@ -79,6 +79,7 @@ struct report_vout
>  {
>      enum vlc_player_vout_action action;
>      vout_thread_t *vout;
> +    struct vlc_player_track *track;
>  };
> 
>  struct report_media_subitems
> @@ -434,14 +435,17 @@ player_on_statistics_changed(vlc_player_t *player,
>  static void
>  player_on_vout_changed(vlc_player_t *player,
>                              enum vlc_player_vout_action action,
> -                            vout_thread_t *vout, void *data)
> +                            vout_thread_t *vout,
> +                            const struct vlc_player_track *track,
> +                            void *data)
>  {
>      struct ctx *ctx = get_ctx(player, data);
>      struct report_vout report = {
>          .action = action,
> -        .vout = vout,
> +        .vout = vout_Hold(vout),
> +        .track = vlc_player_track_Dup(track),
>      };
> -    vout_Hold(vout);
> +    assert(report.track);
>      VEC_PUSH(on_vout_changed, report);
>  }
> 
> @@ -570,7 +574,10 @@ ctx_reset(struct ctx *ctx)
>      {
>          struct report_vout report;
>          FOREACH_VEC(report, on_vout_changed)
> +        {
>              vout_Release(report.vout);
> +            vlc_player_track_Delete(report.track);
> +        }
>      }
> 
>      {


-- 
Rémi Denis-Courmont
http://www.remlab.net/





More information about the vlc-devel mailing list