# include "config.h"
#endif
-#include <vlc/vlc.h>
+#include <vlc_common.h>
#include <vlc_plugin.h>
#include <errno.h> /* ENOMEM */
/*****************************************************************************
* Local prototypes
*****************************************************************************/
-static int Open ( vlc_object_t * );
-static void Close ( vlc_object_t * );
-static void Play ( aout_instance_t * );
-static int ALSAThread ( aout_instance_t * );
-static void ALSAFill ( aout_instance_t * );
+static int Open ( vlc_object_t * );
+static void Close ( vlc_object_t * );
+static void Play ( aout_instance_t * );
+static void* ALSAThread ( vlc_object_t * );
+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 );
/*****************************************************************************
* 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,
/* 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 );
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;
/*****************************************************************************
* ALSAThread: asynchronous thread used to DMA the data to the device
*****************************************************************************/
-static int ALSAThread( aout_instance_t * p_aout )
+static void* ALSAThread( vlc_object_t* p_this )
{
+ aout_instance_t * p_aout = (aout_instance_t*)p_this;
struct aout_sys_t * p_sys = p_aout->output.p_sys;
p_sys->p_status = (snd_pcm_status_t *)malloc(snd_pcm_status_sizeof());
/* 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 );
}
cleanup:
snd_pcm_drop( p_sys->p_snd_pcm );
free( p_aout->output.p_sys->p_status );
- return 0;
+ return NULL;
}
/*****************************************************************************
* (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 );