vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Mon Jul 27 16:30:33 2015 +0300| [fc15c20e7299e563c619f97b80a9aebcb3b406e2] | committer: Rémi Denis-Courmont
libvlc: expose event for audio output device change > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=fc15c20e7299e563c619f97b80a9aebcb3b406e2 --- include/vlc/libvlc_events.h | 6 ++++++ lib/event.c | 1 + lib/media_player.c | 16 ++++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/include/vlc/libvlc_events.h b/include/vlc/libvlc_events.h index 3ee57c1..a770b06 100644 --- a/include/vlc/libvlc_events.h +++ b/include/vlc/libvlc_events.h @@ -82,6 +82,7 @@ enum libvlc_event_e { libvlc_MediaPlayerMuted, libvlc_MediaPlayerUnmuted, libvlc_MediaPlayerAudioVolume, + libvlc_MediaPlayerAudioDevice, libvlc_MediaListItemAdded=0x200, libvlc_MediaListWillAddItem, @@ -250,6 +251,11 @@ typedef struct libvlc_event_t { float volume; } media_player_audio_volume; + + struct + { + const char *device; + } media_player_audio_device; } u; /**< Type-dependent event description */ } libvlc_event_t; diff --git a/lib/event.c b/lib/event.c index b13fc92..7b42c53 100644 --- a/lib/event.c +++ b/lib/event.c @@ -288,6 +288,7 @@ static const event_name_t event_list[] = { DEF(MediaPlayerMuted) DEF(MediaPlayerUnmuted) DEF(MediaPlayerAudioVolume) + DEF(MediaPlayerAudioDevice) DEF(MediaListItemAdded) DEF(MediaListWillAddItem) diff --git a/lib/media_player.c b/lib/media_player.c index 87b33c9..ba7158e 100644 --- a/lib/media_player.c +++ b/lib/media_player.c @@ -491,6 +491,19 @@ static int corks_changed(vlc_object_t *obj, const char *name, vlc_value_t old, return VLC_SUCCESS; } +static int audio_device_changed(vlc_object_t *obj, const char *name, + vlc_value_t old, vlc_value_t cur, void *opaque) +{ + libvlc_media_player_t *mp = (libvlc_media_player_t *)obj; + libvlc_event_t event; + + event.type = libvlc_MediaPlayerAudioDevice; + event.u.media_player_audio_device.device = cur.psz_string; + libvlc_event_send(mp->p_event_manager, &event); + VLC_UNUSED(name); VLC_UNUSED(old); VLC_UNUSED(opaque); + return VLC_SUCCESS; +} + static int mute_changed(vlc_object_t *obj, const char *name, vlc_value_t old, vlc_value_t cur, void *opaque) { @@ -702,8 +715,10 @@ libvlc_media_player_new( libvlc_instance_t *instance ) register_event(mp, Muted); register_event(mp, Unmuted); register_event(mp, AudioVolume); + register_event(mp, AudioDevice); var_AddCallback(mp, "corks", corks_changed, NULL); + var_AddCallback(mp, "audio-device", audio_device_changed, NULL); var_AddCallback(mp, "mute", mute_changed, NULL); var_AddCallback(mp, "volume", volume_changed, NULL); @@ -759,6 +774,7 @@ static void libvlc_media_player_destroy( libvlc_media_player_t *p_mi ) /* Detach callback from the media player / input manager object */ var_DelCallback( p_mi, "volume", volume_changed, NULL ); var_DelCallback( p_mi, "mute", mute_changed, NULL ); + var_DelCallback( p_mi, "audio-device", audio_device_changed, NULL ); var_DelCallback( p_mi, "corks", corks_changed, NULL ); /* No need for lock_input() because no other threads knows us anymore */ _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
