]> git.sesse.net Git - vlc/blobdiff - src/audio_output/intf.c
Release the display mode when we are done with it.
[vlc] / src / audio_output / intf.c
index 4a589a48255ad0ba7af8a1cc50fd7f96648ccfef..017ece22599c726817ffb802045b7c32f5bc9286 100644 (file)
 
 static aout_instance_t *findAout (vlc_object_t *obj)
 {
-    input_thread_t *p_input = playlist_CurrentInput (pl_Get (obj));
+    input_thread_t *(*pf_find_input) (vlc_object_t *);
+
+    pf_find_input = var_GetAddress (obj, "find-input-callback");
+    if (unlikely(pf_find_input == NULL))
+        return NULL;
+
+    input_thread_t *p_input = pf_find_input (obj);
     if (p_input == NULL)
        return NULL;
 
@@ -98,14 +104,16 @@ int doVolumeChanges( unsigned action, vlc_object_t * p_object, int i_nb_steps,
 
     if ( p_aout ) aout_lock_volume( p_aout );
 
-    b_var_mute = (bool)var_GetBool( p_object->p_libvlc, "volume-muted");
+    b_var_mute = var_GetBool( p_object, "volume-muted");
 
-    const bool b_unmute_condition = ( /* Also unmute on increments */
+    const bool b_unmute_condition = ( b_var_mute
+                && ( /* Unmute: on increments */
                     ( action == INCREMENT_VOLUME )
                     || /* On explicit unmute */
-                    ( ( action == SET_MUTE ) && ( b_var_mute && !b_mute ) )
+                    ( ( action == SET_MUTE ) && !b_mute )
                     || /* On toggle from muted */
-                    ( ( action == TOGGLE_MUTE ) && b_var_mute ) );
+                    ( action == TOGGLE_MUTE )
+                ));
 
     const bool b_mute_condition = ( !b_var_mute
                     && ( /* explicit */
@@ -114,14 +122,23 @@ int doVolumeChanges( unsigned action, vlc_object_t * p_object, int i_nb_steps,
                         ( 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 */
-        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 );
+        i_volume = var_GetInteger( p_object, "saved-volume" );
+        var_SetBool( p_object, "volume-muted", false );
     }
     else if ( b_mute_condition )
     {
@@ -131,7 +148,7 @@ int doVolumeChanges( unsigned action, vlc_object_t * p_object, int i_nb_steps,
 
     if ( action == INCREMENT_VOLUME )
     {
-        i_volume_step = config_GetInt( p_object->p_libvlc, "volume-step" );
+        i_volume_step = var_InheritInteger( p_object, "volume-step" );
 
         if ( !b_unmute_condition )
             i_volume = config_GetInt( p_object, "volume" );
@@ -144,19 +161,15 @@ int doVolumeChanges( unsigned action, vlc_object_t * p_object, int i_nb_steps,
             i_volume = AOUT_VOLUME_MIN;
         else
             i_volume = i_new_volume;
-
-        if ( i_return_volume != NULL )
-            *i_return_volume = i_volume;
     }
 
-    var_Create( p_object->p_libvlc, "saved-volume", VLC_VAR_INTEGER );
-    var_SetInteger( p_object->p_libvlc, "saved-volume" , i_volume );
+    var_SetInteger( p_object, "saved-volume" , i_volume );
 
     /* On Mute */
     if ( b_mute_condition )
     {
         i_volume = AOUT_VOLUME_MIN;
-        var_SetBool( p_object->p_libvlc, "volume-muted", true );
+        var_SetBool( p_object, "volume-muted", true );
     }
 
     /* Commit volume changes */
@@ -173,7 +186,7 @@ int doVolumeChanges( unsigned action, vlc_object_t * p_object, int i_nb_steps,
     }
 
     /* trigger callbacks */
-    var_TriggerCallback( p_object->p_libvlc, "volume-change");
+    var_TriggerCallback( p_object, "volume-change" );
     if ( p_aout )
     {
         var_SetBool( p_aout, "intf-change", true );
@@ -181,6 +194,8 @@ int doVolumeChanges( unsigned action, vlc_object_t * p_object, int i_nb_steps,
         vlc_object_release( p_aout );
     }
 
+    if ( i_return_volume != NULL )
+         *i_return_volume = i_volume;
     return i_result;
 }
 
@@ -273,7 +288,7 @@ bool aout_IsMuted( vlc_object_t * p_object )
     bool b_return_val;
     aout_instance_t * p_aout = findAout( p_object );
     if ( p_aout ) aout_lock_volume( p_aout );
-    b_return_val = var_GetBool( p_object->p_libvlc, "volume-muted");
+    b_return_val = var_GetBool( p_object, "volume-muted");
     if ( p_aout )
     {
         aout_unlock_volume( p_aout );
@@ -497,7 +512,7 @@ void aout_EnableFilter( vlc_object_t *p_this, const char *psz_name,
 {
     aout_instance_t *p_aout = findAout( p_this );
 
-    if( AoutChangeFilterString( p_this, p_aout, "audio-filter", psz_name, b_add ) )
+    if( aout_ChangeFilterString( p_this, p_aout, "audio-filter", psz_name, b_add ) )
     {
         if( p_aout )
             AoutInputsMarkToRestart( p_aout );