vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Mon Jul 27 14:05:37 2015 +0300| [5f1b7491084e73b6ed732d6d6746a60cbf6dc65e] | committer: Rémi Denis-Courmont
libvlc: expose event for audio volume change (fixes #14568) Cc: Harald Sitter <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=5f1b7491084e73b6ed732d6d6746a60cbf6dc65e --- include/vlc/libvlc_events.h | 11 +++++++++++ lib/event.c | 2 ++ lib/media_player.c | 35 +++++++++++++++++++++++++++++++++++ src/audio_output/output.c | 11 +++++++++++ src/playlist/engine.c | 1 + 5 files changed, 60 insertions(+) diff --git a/include/vlc/libvlc_events.h b/include/vlc/libvlc_events.h index a997d22..b0e6bc2 100644 --- a/include/vlc/libvlc_events.h +++ b/include/vlc/libvlc_events.h @@ -81,6 +81,8 @@ enum libvlc_event_e { libvlc_MediaPlayerUncorked, libvlc_MediaPlayerMuted, libvlc_MediaPlayerUnmuted, + libvlc_MediaPlayerAudioVolume, + libvlc_MediaPlayerAudioDevice, libvlc_MediaListItemAdded=0x200, libvlc_MediaListWillAddItem, @@ -244,6 +246,15 @@ typedef struct libvlc_event_t libvlc_track_type_t i_type; int i_id; } media_player_es_changed; + + struct + { + float volume; + } media_player_audio_volume; + + struct + { + } u; /**< Type-dependent event description */ } libvlc_event_t; diff --git a/lib/event.c b/lib/event.c index f26af5c..7b42c53 100644 --- a/lib/event.c +++ b/lib/event.c @@ -287,6 +287,8 @@ static const event_name_t event_list[] = { DEF(MediaPlayerUncorked) 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 5cf5bf1..778ef80 100644 --- a/lib/media_player.c +++ b/lib/media_player.c @@ -75,6 +75,10 @@ static int mute_changed(vlc_object_t *obj, const char *name, vlc_value_t old, vlc_value_t cur, void *opaque); +static int +volume_changed(vlc_object_t *obj, const char *name, vlc_value_t old, + vlc_value_t cur, void *opaque); + static void add_es_callbacks( input_thread_t *p_input_thread, libvlc_media_player_t *p_mi ); @@ -487,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) { @@ -504,6 +521,19 @@ static int mute_changed(vlc_object_t *obj, const char *name, vlc_value_t old, return VLC_SUCCESS; } +static int volume_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_MediaPlayerAudioVolume; + event.u.media_player_audio_volume.volume = cur.f_float; + libvlc_event_send(mp->p_event_manager, &event); + VLC_UNUSED(name); VLC_UNUSED(old); VLC_UNUSED(opaque); + return VLC_SUCCESS; +} + /************************************************************************** * Create a Media Instance object. * @@ -604,6 +634,7 @@ libvlc_media_player_new( libvlc_instance_t *instance ) /* Audio */ var_Create (mp, "aout", VLC_VAR_STRING | VLC_VAR_DOINHERIT); + var_Create (mp, "audio-device", VLC_VAR_STRING); var_Create (mp, "mute", VLC_VAR_BOOL); var_Create (mp, "volume", VLC_VAR_FLOAT); var_Create (mp, "corks", VLC_VAR_INTEGER); @@ -683,7 +714,9 @@ libvlc_media_player_new( libvlc_instance_t *instance ) register_event(mp, Uncorked); 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); /* Snapshot initialization */ register_event(mp, SnapshotTaken); @@ -735,7 +768,9 @@ static void libvlc_media_player_destroy( libvlc_media_player_t *p_mi ) "snapshot-file", snapshot_was_taken, 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 */ diff --git a/src/audio_output/output.c b/src/audio_output/output.c index 2be34e7..d3c1bb9 100644 --- a/src/audio_output/output.c +++ b/src/audio_output/output.c @@ -64,6 +64,15 @@ static int var_Copy (vlc_object_t *src, const char *name, vlc_value_t prev, return var_Set (dst, name, value); } +static int var_CopyDevice (vlc_object_t *src, const char *name, + vlc_value_t prev, vlc_value_t value, void *data) +{ + vlc_object_t *dst = data; + + (void) src; (void) name; (void) prev; + return var_Set (dst, "audio-device", value); +} + /** * Supply or update the current custom ("hardware") volume. * @note This only makes sense after calling aout_VolumeHardInit(). @@ -192,6 +201,7 @@ audio_output_t *aout_New (vlc_object_t *parent) var_Create (aout, "mute", VLC_VAR_BOOL | VLC_VAR_DOINHERIT); var_AddCallback (aout, "mute", var_Copy, parent); var_Create (aout, "device", VLC_VAR_STRING); + var_AddCallback (aout, "device", var_CopyDevice, parent); aout->event.volume_report = aout_VolumeNotify; aout->event.mute_report = aout_MuteNotify; @@ -324,6 +334,7 @@ void aout_Destroy (audio_output_t *aout) aout_OutputUnlock (aout); var_DelCallback (aout, "audio-filter", FilterCallback, NULL); + var_DelCallback (aout, "device", var_CopyDevice, aout->p_parent); var_DelCallback (aout, "mute", var_Copy, aout->p_parent); var_SetFloat (aout, "volume", -1.f); var_DelCallback (aout, "volume", var_Copy, aout->p_parent); diff --git a/src/playlist/engine.c b/src/playlist/engine.c index c34be2d..6000a37 100644 --- a/src/playlist/engine.c +++ b/src/playlist/engine.c @@ -480,6 +480,7 @@ static void VariablesInit( playlist_t *p_playlist ) var_Create( p_playlist, "video-wallpaper", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); /* Audio output parameters */ + var_Create( p_playlist, "audio-device", VLC_VAR_STRING ); var_Create( p_playlist, "mute", VLC_VAR_BOOL ); var_Create( p_playlist, "volume", VLC_VAR_FLOAT ); var_SetFloat( p_playlist, "volume", -1.f ); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
