- 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 = var_GetBool( p_object, "volume-muted");
-
- const bool b_unmute_condition = ( b_var_mute
- && ( /* Unmute: on increments */
- ( action == INCREMENT_VOLUME )
- || /* On explicit unmute */
- ( ( action == SET_MUTE ) && !b_mute )
- || /* On toggle from muted */
- ( action == TOGGLE_MUTE )
- ));
-
- const bool b_mute_condition = ( !b_var_mute
- && ( /* explicit */
- ( ( action == SET_MUTE ) && b_mute )
- || /* or toggle */
- ( action == TOGGLE_MUTE )
- ));
-
- /* If muting or unmuting when play hasn't started */
- if ( action == SET_MUTE && !b_unmute_condition && !b_mute_condition )
- {
- if ( p_aout )
- {
- aout_unlock_volume( p_aout );
- vlc_object_release( p_aout );
- }
- return i_result;
- }
-
- /* On UnMute */
- if ( b_unmute_condition )
- {
- /* Restore saved volume */
- i_volume = var_GetInteger( p_object, "saved-volume" );
- var_SetBool( p_object, "volume-muted", false );
- }
- else if ( b_mute_condition )
- {
- /* We need an initial value to backup later */
- i_volume = config_GetInt( p_object, "volume" );
- }
-
- if ( action == INCREMENT_VOLUME )
- {
- i_volume_step = var_InheritInteger( p_object, "volume-step" );
-
- if ( !b_unmute_condition )
- i_volume = config_GetInt( p_object, "volume" );
-
- i_new_volume = (int) i_volume + i_volume_step * i_nb_steps;
-
- if ( i_new_volume > AOUT_VOLUME_MAX )
- i_volume = AOUT_VOLUME_MAX;
- else if ( i_new_volume < AOUT_VOLUME_MIN )
- i_volume = AOUT_VOLUME_MIN;
- else
- i_volume = i_new_volume;
- }
-
- var_SetInteger( p_object, "saved-volume" , i_volume );