X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faudio_output%2Falsa.c;h=e16a05f78543c0b3397431cfe6be22ec4db28e57;hb=a82e5fcaf2e1520a3f5bc7af1a8b163c66086a60;hp=4380a170f7d7baf7ae430f72d83376b0c6cd4f89;hpb=df61d33b06e2b3cbbe746b2f5a9bea5b370c24ff;p=vlc diff --git a/modules/audio_output/alsa.c b/modules/audio_output/alsa.c index 4380a170f7..e16a05f785 100644 --- a/modules/audio_output/alsa.c +++ b/modules/audio_output/alsa.c @@ -31,7 +31,8 @@ # include "config.h" #endif -#include +#include +#include #include /* ENOMEM */ #include @@ -100,11 +101,11 @@ static int FindDevicesCallback( vlc_object_t *p_this, char const *psz_name, /***************************************************************************** * Module descriptor *****************************************************************************/ -static const char *ppsz_devices[] = { "default" }; -static const char *ppsz_devices_text[] = { N_("Default") }; +static const char *const ppsz_devices[] = { "default" }; +static const char *const ppsz_devices_text[] = { N_("Default") }; vlc_module_begin(); set_shortname( "ALSA" ); - set_description( _("ALSA audio output") ); + set_description( N_("ALSA audio output") ); set_category( CAT_AUDIO ); set_subcategory( SUBCAT_AUDIO_AOUT ); add_string( "alsadev", DEFAULT_ALSA_DEVICE, aout_FindAndRestart, @@ -312,14 +313,11 @@ static int Open( vlc_object_t *p_this ) /* Allocate structures */ p_aout->output.p_sys = p_sys = malloc( sizeof( aout_sys_t ) ); if( p_sys == NULL ) - { - msg_Err( p_aout, "out of memory" ); return VLC_ENOMEM; - } p_sys->b_playing = false; p_sys->start_date = 0; vlc_cond_init( p_aout, &p_sys->wait ); - vlc_mutex_init( p_aout, &p_sys->lock ); + vlc_mutex_init( &p_sys->lock ); /* Get device name */ if( (psz_device = config_GetPsz( p_aout, "alsadev" )) == NULL ) @@ -732,12 +730,15 @@ static void Close( vlc_object_t *p_this ) struct aout_sys_t * p_sys = p_aout->output.p_sys; int i_snd_rc; + /* Make sure that the thread will stop once it is waken up */ + vlc_object_kill( p_aout ); + /* make sure the audio output thread is waken up */ vlc_mutex_lock( &p_aout->output.p_sys->lock ); vlc_cond_signal( &p_aout->output.p_sys->wait ); vlc_mutex_unlock( &p_aout->output.p_sys->lock ); - vlc_object_kill( p_aout ); + /* */ vlc_thread_join( p_aout ); p_aout->b_die = false; @@ -766,16 +767,16 @@ static int ALSAThread( aout_instance_t * p_aout ) /* Wait for the exact time to start playing (avoids resampling) */ vlc_mutex_lock( &p_sys->lock ); - while( !p_sys->start_date && !p_aout->b_die ) + while( !p_sys->start_date && vlc_object_alive (p_aout) ) vlc_cond_wait( &p_sys->wait, &p_sys->lock ); vlc_mutex_unlock( &p_sys->lock ); - if( p_aout->b_die ) + if( !vlc_object_alive (p_aout) ) goto cleanup; mwait( p_sys->start_date - AOUT_PTS_TOLERANCE / 4 ); - while ( !p_aout->b_die ) + while ( vlc_object_alive (p_aout) ) { ALSAFill( p_aout ); } @@ -878,7 +879,7 @@ static void ALSAFill( aout_instance_t * p_aout ) * (stream is suspended and waiting for an application recovery) */ msg_Dbg( p_aout, "entering in suspend mode, trying to resume..." ); - while( !p_aout->b_die && !p_aout->p_libvlc->b_die && + while( vlc_object_alive (p_aout) && vlc_object_alive (p_aout->p_libvlc) && ( i_snd_rc = snd_pcm_resume( p_sys->p_snd_pcm ) ) == -EAGAIN ) { msleep( 1000000 );