From d7b943b0df121c87a7a633b41001681ed337c2ae Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rafa=C3=ABl=20Carr=C3=A9?= Date: Tue, 2 Oct 2007 17:59:31 +0000 Subject: [PATCH] alsa: resume output when waking up, fix #1286. some coding style cleanup --- modules/audio_output/alsa.c | 71 ++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/modules/audio_output/alsa.c b/modules/audio_output/alsa.c index 17c2056d8b..4b3393740d 100644 --- a/modules/audio_output/alsa.c +++ b/modules/audio_output/alsa.c @@ -874,6 +874,18 @@ static void ALSAFill( aout_instance_t * p_aout ) i_snd_rc = snd_pcm_writei( p_sys->p_snd_pcm, p_buffer->p_buffer, p_buffer->i_nb_samples ); + if( i_snd_rc == -ESTRPIPE ) + { /* a suspend event occurred + * (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 && + ( i_snd_rc = snd_pcm_resume( p_sys->p_snd_pcm ) ) == -EAGAIN ) + msleep( 100000 ); + i_snd_rc = snd_pcm_writei( p_sys->p_snd_pcm, p_buffer->p_buffer, + p_buffer->i_nb_samples ); + + } + if( i_snd_rc < 0 ) { msg_Err( p_aout, "write failed (%s)", @@ -884,7 +896,7 @@ static void ALSAFill( aout_instance_t * p_aout ) } } -static void GetDevicesForCard(module_config_t *p_item, int i_card); +static void GetDevicesForCard( module_config_t *p_item, int i_card ); static void GetDevices( module_config_t *p_item ); /***************************************************************************** @@ -924,7 +936,7 @@ static int FindDevicesCallback( vlc_object_t *p_this, char const *psz_name, } -static void GetDevicesForCard(module_config_t *p_item, int i_card) +static void GetDevicesForCard( module_config_t *p_item, int i_card ) { int i_pcm_device = -1; int i_err = 0; @@ -932,43 +944,37 @@ static void GetDevicesForCard(module_config_t *p_item, int i_card) snd_ctl_t *p_ctl; char psz_dev[64]; char *psz_card_name; - - sprintf(psz_dev, "hw:%i", i_card); - - if (( i_err = snd_ctl_open(&p_ctl, psz_dev, 0)) < 0 ) - { + + sprintf( psz_dev, "hw:%i", i_card ); + + if( ( i_err = snd_ctl_open( &p_ctl, psz_dev, 0 ) ) < 0 ) return; - } - - if ((i_err = snd_card_get_name(i_card, &psz_card_name)) != 0) - { + + if( ( i_err = snd_card_get_name( i_card, &psz_card_name ) ) != 0) psz_card_name = _("Unknown soundcard"); - } - snd_pcm_info_alloca(&p_pcm_info); + snd_pcm_info_alloca( &p_pcm_info ); for (;;) { char *psz_device, *psz_descr; - if ((i_err = snd_ctl_pcm_next_device(p_ctl, &i_pcm_device)) < 0) - { + if( ( i_err = snd_ctl_pcm_next_device( p_ctl, &i_pcm_device ) ) < 0 ) i_pcm_device = -1; - } - if ( i_pcm_device < 0 ) + if( i_pcm_device < 0 ) break; - snd_pcm_info_set_device(p_pcm_info, i_pcm_device); - snd_pcm_info_set_subdevice(p_pcm_info, 0); - snd_pcm_info_set_stream(p_pcm_info, SND_PCM_STREAM_PLAYBACK); + snd_pcm_info_set_device( p_pcm_info, i_pcm_device ); + snd_pcm_info_set_subdevice( p_pcm_info, 0 ); + snd_pcm_info_set_stream( p_pcm_info, SND_PCM_STREAM_PLAYBACK ); - if ((i_err = snd_ctl_pcm_info(p_ctl, p_pcm_info)) < 0) + if( ( i_err = snd_ctl_pcm_info( p_ctl, p_pcm_info ) ) < 0 ) { - if (i_err != -ENOENT) + if( i_err != -ENOENT ) { -/* printf("get_devices_for_card(): " + /*printf( "get_devices_for_card(): " "snd_ctl_pcm_info() " "failed (%d:%d): %s.\n", i_card, - i_pcm_device, snd_strerror(-i_err));*/ + i_pcm_device, snd_strerror( -i_err ) );*/ } continue; } @@ -999,20 +1005,19 @@ static void GetDevices( module_config_t *p_item ) { int i_card = -1; int i_err = 0; - - if ((i_err = snd_card_next(&i_card)) != 0) + + if( ( i_err = snd_card_next( &i_card ) ) != 0 ) { -// g_warning("snd_next_card() failed: %s", snd_strerror(-err)); + /*printf( "snd_card_next() failed: %s", snd_strerror( -i_err ) );*/ return; } - - while (i_card > -1) + + while( i_card > -1 ) { - GetDevicesForCard(p_item, i_card); - if ((i_err = snd_card_next(&i_card)) != 0) + GetDevicesForCard( p_item, i_card ); + if( ( i_err = snd_card_next( &i_card ) ) != 0 ) { -// g_warning("snd_next_card() failed: %s", -// snd_strerror(-err)); + /*printf( "snd_card_next() failed: %s", snd_strerror( -i_err ) );*/ break; } } -- 2.20.1