+ int i_result = VLC_SUCCESS;
+ int i_volume_step = 1, i_new_volume = 0;
+ bool b_var_mute = false;
+ aout_instance_t *p_aout = findAout( p_object );
+
+ if ( p_aout ) aout_lock_volume( p_aout );
+
+ b_var_mute = (bool)var_GetBool( p_object->p_libvlc, "volume-muted");
+
+ const bool b_unmute_condition = ( /* Also unmute on increments */
+ ( action == INCREMENT_VOLUME )
+ || /* On explicit unmute */
+ ( ( action == SET_MUTE ) && ( b_var_mute && !b_mute ) )
+ || /* On toggle from muted */
+ ( ( action == TOGGLE_MUTE ) && b_var_mute ) );
+
+ const bool b_mute_condition = ( !b_var_mute
+ && ( /* explicit */
+ ( ( action == SET_MUTE ) && b_mute )
+ || /* or toggle */
+ ( action == TOGGLE_MUTE )
+ ));
+
+ /* On UnMute */
+ if ( b_unmute_condition )
+ {
+ /* Restore saved volume */
+ var_Create( p_object->p_libvlc, "saved-volume", VLC_VAR_INTEGER );
+ i_volume = (audio_volume_t)var_GetInteger( p_object->p_libvlc,
+ "saved-volume" );
+ var_SetBool( p_object->p_libvlc, "volume-muted", false );
+ }
+ else if ( b_mute_condition )
+ {
+ /* We need an initial value to backup later */
+ i_volume = config_GetInt( p_object, "volume" );
+ }