[vlc-devel] [PATCH 1/3] libvlc: introduce 'Muted' as a whole state, not as volume 0

Francois Cartegnie fcvlcdev at free.fr
Thu Jan 7 20:18:29 CET 2010


---
 include/vlc_aout.h      |    2 ++
 src/audio_output/intf.c |   26 +++++++++++++++++++++++---
 src/libvlc.c            |    1 +
 src/libvlccore.sym      |    2 ++
 4 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/include/vlc_aout.h b/include/vlc_aout.h
index cd31564..5025f34 100644
--- a/include/vlc_aout.h
+++ b/include/vlc_aout.h
@@ -320,6 +320,8 @@ VLC_EXPORT( int, __aout_VolumeUp, ( vlc_object_t *, int, audio_volume_t * ) );
 VLC_EXPORT( int, __aout_VolumeDown, ( vlc_object_t *, int, audio_volume_t * ) );
 #define aout_ToggleMute(a, b) __aout_ToggleMute(VLC_OBJECT(a), b)
 VLC_EXPORT( int, __aout_ToggleMute, ( vlc_object_t *, audio_volume_t * ) );
+VLC_EXPORT( int, aout_SetMute, ( vlc_object_t *, audio_volume_t *, bool ) );
+VLC_EXPORT( bool, aout_IsMuted, ( vlc_object_t * ) );
 VLC_EXPORT( int, aout_FindAndRestart, ( vlc_object_t *, const char *, vlc_value_t, vlc_value_t, void * ) );
 VLC_EXPORT( int, aout_ChannelsRestart, ( vlc_object_t *, const char *, vlc_value_t, vlc_value_t, void * ) );
 
diff --git a/src/audio_output/intf.c b/src/audio_output/intf.c
index 3476ad3..9dfd027 100644
--- a/src/audio_output/intf.c
+++ b/src/audio_output/intf.c
@@ -132,7 +132,6 @@ int __aout_VolumeSet( vlc_object_t * p_object, audio_volume_t i_volume )
 int __aout_VolumeUp( vlc_object_t * p_object, int i_nb_steps,
                    audio_volume_t * pi_volume )
 {
-
     const int i_volume_step = config_GetInt( p_object->p_libvlc, "volume-step" );
 
     int i_volume = config_GetInt( p_object, "volume" ) +
@@ -167,11 +166,33 @@ int __aout_VolumeDown( vlc_object_t * p_object, int i_nb_steps,
  *****************************************************************************/
 int __aout_ToggleMute( vlc_object_t * p_object, audio_volume_t * pi_volume )
 {
+    return aout_SetMute( p_object, pi_volume, !aout_IsMuted( p_object ) );
+}
+
+/*****************************************************************************
+ * aout_IsMuted : Get the output volume mute status
+ *****************************************************************************/
+bool aout_IsMuted( vlc_object_t * p_object )
+{
+    return (bool)var_GetBool( p_object->p_libvlc, "volume-muted");
+}
+
+/*****************************************************************************
+ * aout_SetMute : Sets mute status
+ *****************************************************************************
+ * If pi_volume != NULL, *pi_volume will contain the volume at the end of the
+ * function (muted => 0).
+ *****************************************************************************/
+int aout_SetMute( vlc_object_t * p_object, audio_volume_t * pi_volume,
+                  bool b_mute )
+{
     int i_result;
     audio_volume_t i_volume;
 
+    var_SetBool( p_object->p_libvlc, "volume-muted", (bool)b_mute );
     i_volume = (audio_volume_t)config_GetInt( p_object, "volume" );
-    if ( i_volume != 0 )
+
+    if ( b_mute )
     {
         /* Mute */
         i_result = aout_VolumeSet( p_object, AOUT_VOLUME_MIN );
@@ -188,7 +209,6 @@ int __aout_ToggleMute( vlc_object_t * p_object, audio_volume_t * pi_volume )
         i_result = aout_VolumeSet( p_object, i_volume );
         if ( pi_volume != NULL ) *pi_volume = i_volume;
     }
-
     return i_result;
 }
 
diff --git a/src/libvlc.c b/src/libvlc.c
index 358a298..ff61233 100644
--- a/src/libvlc.c
+++ b/src/libvlc.c
@@ -859,6 +859,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
     /* Create volume callback system. (this variable must be created before
        all interfaces as they can use it) */
     var_Create( p_libvlc, "volume-change", VLC_VAR_BOOL );
+    var_Create( p_libvlc, "volume-muted", VLC_VAR_BOOL );
 
     psz_modules = var_CreateGetNonEmptyString( p_libvlc, "extraintf" );
     psz_control = var_CreateGetNonEmptyString( p_libvlc, "control" );
diff --git a/src/libvlccore.sym b/src/libvlccore.sym
index 9217093..966d9c2 100644
--- a/src/libvlccore.sym
+++ b/src/libvlccore.sym
@@ -25,6 +25,8 @@ aout_OutputNextBuffer
 __aout_VolumeDown
 __aout_VolumeGet
 __aout_ToggleMute
+aout_IsMuted
+aout_SetMute
 aout_VolumeNoneInit
 __aout_VolumeSet
 aout_VolumeSoftInit
-- 
1.6.4.4




More information about the vlc-devel mailing list