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;
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 * );
/* 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;
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 */
/* 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 )