[vlc-commits] cli: move player callback registration to player.c

Rémi Denis-Courmont git at videolan.org
Sat Oct 17 20:35:42 CEST 2020


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sat Oct 17 12:21:24 2020 +0300| [1bc4ded1928d74f268f64f9a831d9ef68a5e2a6e] | committer: Rémi Denis-Courmont

cli: move player callback registration to player.c

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1bc4ded1928d74f268f64f9a831d9ef68a5e2a6e
---

 modules/control/cli/cli.c    | 34 +++++----------------------
 modules/control/cli/cli.h    |  9 ++++---
 modules/control/cli/player.c | 56 ++++++++++++++++++++++++++++++++++++++++++--
 3 files changed, 64 insertions(+), 35 deletions(-)

diff --git a/modules/control/cli/cli.c b/modules/control/cli/cli.c
index 32eeab82b4..63549d7e79 100644
--- a/modules/control/cli/cli.c
+++ b/modules/control/cli/cli.c
@@ -749,7 +749,6 @@ static int Activate( vlc_object_t *p_this )
     p_sys->last_state = VLC_PLAYER_STATE_STOPPED;
     p_sys->b_input_buffering = false;
     p_sys->playlist = vlc_intf_GetMainPlaylist(p_intf);;
-    vlc_player_t *player = vlc_playlist_GetPlayer(p_sys->playlist);
 
     /* Non-buffered stdout */
     setvbuf( stdout, (char *)NULL, _IOLBF, 0 );
@@ -762,35 +761,18 @@ static int Activate( vlc_object_t *p_this )
         intf_consoleIntroMsg( p_intf );
 #endif
 
-    if( vlc_clone( &p_sys->thread, Run, p_intf, VLC_THREAD_PRIORITY_LOW ) )
+    p_sys->player_cli = RegisterPlayer(p_intf);
+    if (unlikely(p_sys->player_cli == NULL))
         goto error;
 
-    msg_rc( "%s", _("Remote control interface initialized. Type `help' for help.") );
-
-    vlc_player_Lock(player);
-    p_sys->player_listener =
-        vlc_player_AddListener(player, &player_cbs, p_intf);
-    if (!p_sys->player_listener)
-    {
-        vlc_player_Unlock(player);
+    if( vlc_clone( &p_sys->thread, Run, p_intf, VLC_THREAD_PRIORITY_LOW ) )
         goto error;
-    }
 
-    p_sys->player_aout_listener =
-        vlc_player_aout_AddListener(player, &player_aout_cbs, p_intf);
-    vlc_player_Unlock(player);
-    if (!p_sys->player_aout_listener)
-        goto error;
+    msg_rc( "%s", _("Remote control interface initialized. Type `help' for help.") );
 
     return VLC_SUCCESS;
 
 error:
-    if (p_sys->player_listener)
-    {
-        vlc_player_Lock(player);
-        vlc_player_RemoveListener(player, p_sys->player_listener);
-        vlc_player_Unlock(player);
-    }
     net_ListenClose( pi_socket );
     free( psz_unix_path );
     free( p_sys );
@@ -805,15 +787,11 @@ static void Deactivate( vlc_object_t *p_this )
     intf_thread_t *p_intf = (intf_thread_t*)p_this;
     intf_sys_t *p_sys = p_intf->p_sys;
 
-    vlc_player_t *player = vlc_playlist_GetPlayer(p_sys->playlist);
-    vlc_player_Lock(player);
-    vlc_player_aout_RemoveListener(player, p_sys->player_aout_listener);
-    vlc_player_RemoveListener(player, p_sys->player_listener);
-    vlc_player_Unlock(player);
-
     vlc_cancel( p_sys->thread );
     vlc_join( p_sys->thread, NULL );
 
+    DeregisterPlayer(p_intf, p_sys->player_cli);
+
     net_ListenClose( p_sys->pi_socket_listen );
     if( p_sys->i_socket != -1 )
         net_Close( p_sys->i_socket );
diff --git a/modules/control/cli/cli.h b/modules/control/cli/cli.h
index 4f4e57e108..f6b3ea6db2 100644
--- a/modules/control/cli/cli.h
+++ b/modules/control/cli/cli.h
@@ -27,11 +27,10 @@
 struct intf_sys_t
 {
     vlc_thread_t thread;
+    void *player_cli;
 
     /* playlist */
     vlc_playlist_t              *playlist;
-    vlc_player_listener_id      *player_listener;
-    vlc_player_aout_listener_id *player_aout_listener;
 
     /* status changes */
     vlc_mutex_t             status_lock;
@@ -54,9 +53,6 @@ void msg_print(intf_thread_t *p_intf, const char *psz_fmt, ...);
 #define msg_rc(...) msg_print(p_intf, __VA_ARGS__)
 #define STATUS_CHANGE "status change: "
 
-extern const struct vlc_player_cbs player_cbs;
-extern const struct vlc_player_aout_cbs player_aout_cbs;
-
 void PlayerPause(intf_thread_t *intf);
 void PlayerFastForward(intf_thread_t *intf);
 void PlayerRewind(intf_thread_t *intf);
@@ -82,6 +78,9 @@ void AudioChannel(intf_thread_t *intf, char const *cmd, vlc_value_t cur);
 void Statistics(intf_thread_t *intf);
 void IsPlaying(intf_thread_t *intf);
 
+void *RegisterPlayer(intf_thread_t *intf);
+void DeregisterPlayer(intf_thread_t *intf, void *);
+
 void PlaylistPrev(intf_thread_t *intf);
 void PlaylistNext(intf_thread_t *intf);
 void PlaylistPlay(intf_thread_t *intf);
diff --git a/modules/control/cli/player.c b/modules/control/cli/player.c
index 74d7aa3c84..bdb9671ffd 100644
--- a/modules/control/cli/player.c
+++ b/modules/control/cli/player.c
@@ -36,6 +36,11 @@
 
 #include "cli.h"
 
+struct player_cli {
+    vlc_player_listener_id *player_listener;
+    vlc_player_aout_listener_id *player_aout_listener;
+};
+
 /********************************************************************
  * Status callback routines
  ********************************************************************/
@@ -99,7 +104,7 @@ player_on_position_changed(vlc_player_t *player,
     vlc_mutex_unlock(&sys->status_lock);
 }
 
-const struct vlc_player_cbs player_cbs =
+static const struct vlc_player_cbs player_cbs =
 {
     .on_state_changed = player_on_state_changed,
     .on_buffering_changed = player_on_buffering_changed,
@@ -117,7 +122,7 @@ player_aout_on_volume_changed(audio_output_t *aout, float volume, void *data)
     vlc_mutex_unlock(&p_intf->p_sys->status_lock);
 }
 
-const struct vlc_player_aout_cbs player_aout_cbs =
+static const struct vlc_player_aout_cbs player_aout_cbs =
 {
     .on_volume_changed = player_aout_on_volume_changed,
 };
@@ -715,3 +720,50 @@ void IsPlaying(intf_thread_t *intf)
               sys->last_state == VLC_PLAYER_STATE_PLAYING ||
               sys->last_state == VLC_PLAYER_STATE_PAUSED);
 }
+
+void *RegisterPlayer(intf_thread_t *intf)
+{
+    vlc_playlist_t *playlist = vlc_intf_GetMainPlaylist(intf);;
+    vlc_player_t *player = vlc_playlist_GetPlayer(playlist);
+    struct player_cli *pc = malloc(sizeof (*pc));
+
+    if (unlikely(pc == NULL))
+        return NULL;
+
+    vlc_player_Lock(player);
+    pc->player_listener = vlc_player_AddListener(player, &player_cbs, intf);
+
+    if (unlikely(pc->player_listener == NULL))
+        goto error;
+
+    pc->player_aout_listener =
+        vlc_player_aout_AddListener(player, &player_aout_cbs, intf);
+
+    if (pc->player_aout_listener == NULL)
+    {
+        vlc_player_RemoveListener(player, pc->player_listener);
+        goto error;
+    }
+
+    vlc_player_Unlock(player);
+    return pc;
+
+error:
+    vlc_player_Unlock(player);
+    free(pc);
+    return NULL;
+}
+
+void DeregisterPlayer(intf_thread_t *intf, void *data)
+{
+    vlc_playlist_t *playlist = vlc_intf_GetMainPlaylist(intf);;
+    vlc_player_t *player = vlc_playlist_GetPlayer(playlist);
+    struct player_cli *pc = data;
+
+    vlc_player_Lock(player);
+    vlc_player_aout_RemoveListener(player, pc->player_aout_listener);
+    vlc_player_RemoveListener(player, pc->player_listener);
+    vlc_player_Unlock(player);
+    free(pc);
+    (void) intf;
+}



More information about the vlc-commits mailing list