Commit 6840bc0f authored by Benjamin Pracht's avatar Benjamin Pracht

set the samplerate before the format. The open of the device will fail when...

set the samplerate before the format. The open of the device will fail when trying to set the sample rate to a value the soundcard doesn' support afet having set the format to fl32. Now, we will fall back to s16l if the device doesn't support the rate in fl32.

parent 17b63405
...@@ -355,11 +355,11 @@ static int Open( vlc_object_t *p_this ) ...@@ -355,11 +355,11 @@ static int Open( vlc_object_t *p_this )
/* Choose the linear PCM format (read the comment above about FPU /* Choose the linear PCM format (read the comment above about FPU
and float32) */ and float32) */
if( p_aout->p_libvlc->i_cpu & CPU_CAPABILITY_FPU ) if( p_aout->p_libvlc->i_cpu & CPU_CAPABILITY_FPU )
{ /* {
i_vlc_pcm_format = VLC_FOURCC('f','l','3','2'); i_vlc_pcm_format = VLC_FOURCC('f','l','3','2');
i_snd_pcm_format = SND_PCM_FORMAT_FLOAT; i_snd_pcm_format = SND_PCM_FORMAT_FLOAT;
} }
else else */
{ {
i_vlc_pcm_format = AOUT_FMT_S16_NE; i_vlc_pcm_format = AOUT_FMT_S16_NE;
i_snd_pcm_format = SND_PCM_FORMAT_S16; i_snd_pcm_format = SND_PCM_FORMAT_S16;
...@@ -501,6 +501,24 @@ static int Open( vlc_object_t *p_this ) ...@@ -501,6 +501,24 @@ static int Open( vlc_object_t *p_this )
goto error; goto error;
} }
/* Set rate. */
i_old_rate = p_aout->output.output.i_rate;
#ifdef HAVE_ALSA_NEW_API
i_snd_rc = snd_pcm_hw_params_set_rate_near( p_sys->p_snd_pcm, p_hw,
&(p_aout->output.output.i_rate),
NULL );
#else
i_snd_rc = snd_pcm_hw_params_set_rate_near( p_sys->p_snd_pcm, p_hw,
p_aout->output.output.i_rate,
NULL );
#endif
if( i_snd_rc < 0 || p_aout->output.output.i_rate != i_old_rate )
{
msg_Warn( p_aout, "The rate %d Hz is not supported by your hardware. "
"Using %d Hz instead.\n", i_old_rate,
p_aout->output.output.i_rate );
}
/* Set format. */ /* Set format. */
if ( ( i_snd_rc = snd_pcm_hw_params_set_format( p_sys->p_snd_pcm, p_hw, if ( ( i_snd_rc = snd_pcm_hw_params_set_format( p_sys->p_snd_pcm, p_hw,
i_snd_pcm_format ) ) < 0 ) i_snd_pcm_format ) ) < 0 )
...@@ -547,24 +565,6 @@ static int Open( vlc_object_t *p_this ) ...@@ -547,24 +565,6 @@ static int Open( vlc_object_t *p_this )
goto error; goto error;
} }
/* Set rate. */
i_old_rate = p_aout->output.output.i_rate;
#ifdef HAVE_ALSA_NEW_API
i_snd_rc = snd_pcm_hw_params_set_rate_near( p_sys->p_snd_pcm, p_hw,
&p_aout->output.output.i_rate,
NULL );
#else
i_snd_rc = snd_pcm_hw_params_set_rate_near( p_sys->p_snd_pcm, p_hw,
p_aout->output.output.i_rate,
NULL );
#endif
if( i_snd_rc < 0 || p_aout->output.output.i_rate != i_old_rate )
{
msg_Warn( p_aout, "The rate %d Hz is not supported by your hardware. "
"Using %d Hz instead.\n", i_old_rate,
p_aout->output.output.i_rate );
}
/* Set buffer size. */ /* Set buffer size. */
#ifdef HAVE_ALSA_NEW_API #ifdef HAVE_ALSA_NEW_API
if ( ( i_snd_rc = snd_pcm_hw_params_set_buffer_size_near( p_sys->p_snd_pcm, if ( ( i_snd_rc = snd_pcm_hw_params_set_buffer_size_near( p_sys->p_snd_pcm,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment