]> git.sesse.net Git - vlc/blobdiff - modules/audio_output/alsa.c
Drop the icons resolution from its name when installing
[vlc] / modules / audio_output / alsa.c
index e03f8bc063c68e7eb0336955dd765f9030214b84..ffb1c80e77b9321a2b0a733eed68320cfa41e388 100644 (file)
@@ -97,6 +97,8 @@ static void* ALSAThread   ( void * );
 static void  ALSAFill     ( aout_instance_t * );
 static int FindDevicesCallback( vlc_object_t *p_this, char const *psz_name,
                                 vlc_value_t newval, vlc_value_t oldval, void *p_unused );
+static void GetDevicesForCard( vlc_object_t *, module_config_t *, int card );
+static void GetDevices( vlc_object_t *, module_config_t * );
 
 /*****************************************************************************
  * Module descriptor
@@ -251,7 +253,7 @@ static void Probe( aout_instance_t * p_aout,
             text.psz_string = (char*)N_("A/52 over S/PDIF");
             var_Change( p_aout, "audio-device",
                         VLC_VAR_ADDCHOICE, &val, &text );
-            if( var_InheritInteger( p_aout, "spdif" ) )
+            if( var_InheritBool( p_aout, "spdif" ) )
                 var_Set( p_aout, "audio-device", val );
 
             snd_pcm_close( p_sys->p_snd_pcm );
@@ -270,7 +272,7 @@ static void Probe( aout_instance_t * p_aout,
     if( val.i_int <= 0 )
     {
         if( var_GetBool( p_aout->p_libvlc, "alsa-working" ) )
-            dialog_FatalWait( p_aout, "ALSA version problem",
+            dialog_Fatal( p_aout, "ALSA version problem",
                 "VLC failed to re-initialize your sound output device.\n"
                 "Please update alsa-lib to version 1.0.22 or higher "
                 "to fix this issue." );
@@ -281,8 +283,21 @@ static void Probe( aout_instance_t * p_aout,
     if( val.i_int <= 0 )
     {
         /* Probe() has failed. */
+#if (SND_LIB_VERSION <= 0x010017)
+# warning Please update alsa-lib to version > 1.0.23.
+        var_Create( p_aout->p_libvlc, "alsa-broken", VLC_VAR_BOOL );
+        if( !var_GetBool( p_aout->p_libvlc, "alsa-broken" ) )
+        {
+            var_SetBool( p_aout->p_libvlc, "alsa-broken", true );
+            dialog_Fatal( p_aout, "Potential ALSA version problem",
+                "VLC failed to initialize your sound output device (if any).\n"
+                "Please update alsa-lib to version 1.0.24 or higher "
+                "to try to fix this issue." );
+        }
+#endif
         msg_Dbg( p_aout, "failed to find a usable ALSA configuration" );
         var_Destroy( p_aout, "audio-device" );
+        GetDevices( VLC_OBJECT(p_aout), NULL );
         return;
     }
 
@@ -908,9 +923,6 @@ error:
     msleep(p_sys->i_period_time / 2);
 }
 
-static void GetDevicesForCard( vlc_object_t *, module_config_t *, int card );
-static void GetDevices( vlc_object_t *, module_config_t * );
-
 /*****************************************************************************
  * config variable callback
  *****************************************************************************/
@@ -1000,15 +1012,25 @@ static void GetDevicesForCard( vlc_object_t *obj, module_config_t *p_item,
             break;
         }
 
-        p_item->ppsz_list = xrealloc( p_item->ppsz_list,
-                              (p_item->i_list + 2) * sizeof(char *) );
-        p_item->ppsz_list_text = xrealloc( p_item->ppsz_list_text,
-                              (p_item->i_list + 2) * sizeof(char *) );
-        p_item->ppsz_list[ p_item->i_list ] = psz_device;
-        p_item->ppsz_list_text[ p_item->i_list ] = psz_descr;
-        p_item->i_list++;
-        p_item->ppsz_list[ p_item->i_list ] = NULL;
-        p_item->ppsz_list_text[ p_item->i_list ] = NULL;
+        msg_Dbg( obj, "  %s", psz_descr );
+
+        if( p_item )
+        {
+            p_item->ppsz_list = xrealloc( p_item->ppsz_list,
+                                  (p_item->i_list + 2) * sizeof(char *) );
+            p_item->ppsz_list_text = xrealloc( p_item->ppsz_list_text,
+                                  (p_item->i_list + 2) * sizeof(char *) );
+            p_item->ppsz_list[ p_item->i_list ] = psz_device;
+            p_item->ppsz_list_text[ p_item->i_list ] = psz_descr;
+            p_item->i_list++;
+            p_item->ppsz_list[ p_item->i_list ] = NULL;
+            p_item->ppsz_list_text[ p_item->i_list ] = NULL;
+        }
+        else
+        {
+            free( psz_device );
+            free( psz_descr );
+        }
     }
 
     snd_ctl_close( p_ctl );
@@ -1020,6 +1042,7 @@ static void GetDevices( vlc_object_t *obj, module_config_t *p_item )
     int i_card = -1;
     int i_err;
 
+    msg_Dbg( obj, "Available alsa output devices:" );
     while( (i_err = snd_card_next( &i_card )) == 0 && i_card > -1 )
         GetDevicesForCard( obj, p_item, i_card );