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
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 );
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." );
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;
}
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
*****************************************************************************/
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 );
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 );