]> git.sesse.net Git - vlc/commitdiff
ALSA: warn user on current alsa-lib versions if re-open fails
authorRémi Denis-Courmont <remi@remlab.net>
Tue, 10 Nov 2009 20:45:56 +0000 (22:45 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Tue, 10 Nov 2009 20:45:56 +0000 (22:45 +0200)
This bug is fixed in alsa-lib git repository. Depending on the
underlying ALSA driver, re-opening the sound card might fail if VLC
forked and executed another process. This is especially bad with
xdg-screensaver, although this could affect other -earlier- usages
of fork+exec or posix_spawn.

modules/audio_output/alsa.c

index 1594b7f8d00888739218f11204a5d23d11e90626..28d3102246ee529b4cb8165ea8e4e4d600a4f2c9 100644 (file)
@@ -45,6 +45,7 @@
 #define ALSA_PCM_NEW_HW_PARAMS_API
 #define ALSA_PCM_NEW_SW_PARAMS_API
 #include <alsa/asoundlib.h>
+#include <alsa/version.h>
 
 /*#define ALSA_DEBUG*/
 
@@ -261,10 +262,24 @@ static void Probe( aout_instance_t * p_aout,
     }
 
     var_Change( p_aout, "audio-device", VLC_VAR_CHOICESCOUNT, &val, NULL );
+#if (SND_LIB_VERSION <= 0x010015)
+# warning Please update alsa-lib to version > 1.0.21a.
+    var_Create( p_aout->p_libvlc, "alsa-working", VLC_VAR_BOOL );
+    if( val.i_int <= 0 )
+    {
+        if( var_GetBool( p_aout->p_libvlc, "alsa-working" ) )
+            dialog_FatalWait( p_aout, "ALSA version problem",
+                "VLC failed to re-open your sound card.\n"
+                "Please update alsa-lib to version 1.0.22 or higher "
+                "to fix this issue." );
+    }
+    else
+        var_SetBool( p_aout->p_libvlc, "alsa-working", true );
+#endif
     if( val.i_int <= 0 )
     {
         /* Probe() has failed. */
-        msg_Dbg( p_aout, "failed to find a usable alsa configuration" );
+        msg_Dbg( p_aout, "failed to find a usable ALSA configuration" );
         var_Destroy( p_aout, "audio-device" );
         return;
     }