]> git.sesse.net Git - vlc/commitdiff
Add indirection to find input from wanabee input manager object
authorRémi Denis-Courmont <remi@remlab.net>
Sun, 14 Feb 2010 09:53:53 +0000 (11:53 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Sun, 14 Feb 2010 09:53:53 +0000 (11:53 +0200)
PARENTAL ADVISORY: explicit hack

This should allow volume control to (somewhat) work in LibVLC.
Unfortunately, it will still be buggy when there are multiple players.

src/audio_output/intf.c
src/control/media_player.c
src/playlist/engine.c

index 4a589a48255ad0ba7af8a1cc50fd7f96648ccfef..57eefe3ad3ccc5767ddeda4bd574f2c49e4d8de7 100644 (file)
 
 static aout_instance_t *findAout (vlc_object_t *obj)
 {
-    input_thread_t *p_input = playlist_CurrentInput (pl_Get (obj));
+    input_thread_t *(*pf_find_input) (vlc_object_t *);
+
+    pf_find_input = var_GetAddress (obj, "find-input-callback");
+    if (unlikely(pf_find_input == NULL))
+        return NULL;
+
+    input_thread_t *p_input = pf_find_input (obj);
     if (p_input == NULL)
        return NULL;
 
index 6bc0a6ea26e9368ff4b16e3166678d7b532ff739..4901319f47340e20e9ed7db7b34b4128e4690cbe 100644 (file)
@@ -450,6 +450,19 @@ mouse_object( vlc_object_t *p_this, char const *psz_cmd,
     return VLC_SUCCESS;
 }
 
+static input_thread_t *find_input (vlc_object_t *obj)
+{
+    libvlc_media_player_t *mp = (libvlc_media_player_t *)obj;
+    input_thread_t *p_input;
+
+    lock (mp);
+    p_input = mp->p_input_thread;
+    if (p_input)
+        vlc_object_hold (p_input);
+    unlock (mp);
+    return p_input;
+}
+
 /* */
 static void libvlc_media_player_destroy( libvlc_media_player_t * );
 
@@ -530,6 +543,8 @@ libvlc_media_player_new( libvlc_instance_t *instance )
 
      /* Audio */
     var_Create (mp, "aout", VLC_VAR_STRING | VLC_VAR_DOINHERIT);
+    var_Create (mp, "find-input-callback", VLC_VAR_ADDRESS);
+    var_SetAddress (mp, "find-input-callback", find_input);
 
     mp->p_md = NULL;
     mp->state = libvlc_NothingSpecial;
index 8976ac409fafeca706694f08fb45732f4c57e29c..b0a05cea702bdfb651db1b7de18bb253faecc00d 100644 (file)
@@ -282,6 +282,12 @@ void set_current_status_node( playlist_t * p_playlist,
     pl_priv(p_playlist)->status.p_node = p_node;
 }
 
+static input_thread_t *playlist_FindInput( vlc_object_t *object )
+{
+    assert( object == VLC_OBJECT(pl_Get(object)) );
+    return playlist_CurrentInput( (playlist_t *)object );
+}
+
 static void VariablesInit( playlist_t *p_playlist )
 {
     /* These variables control updates */
@@ -316,6 +322,10 @@ static void VariablesInit( playlist_t *p_playlist )
 
     /* Variables to preserve video output parameters */
     var_Create( p_playlist, "fullscreen", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
+
+    /* FIXME: horrible hack for audio output interface code */
+    var_Create( p_playlist, "find-input-callback", VLC_VAR_ADDRESS );
+    var_SetAddress( p_playlist, "find-input-callback", playlist_FindInput );
 }
 
 playlist_item_t * playlist_CurrentPlayingItem( playlist_t * p_playlist )