Commit 72f289cb authored by Rafaël Carré's avatar Rafaël Carré

alsa: use the pcm status to compute the delay. fix #894 (spdif passthrough)

Please report loudly any regression, using spdif or not.
parent 22053c46
...@@ -826,28 +826,12 @@ static void ALSAFill( aout_instance_t * p_aout ) ...@@ -826,28 +826,12 @@ static void ALSAFill( aout_instance_t * p_aout )
{ {
/* Here the device should be in RUNNING state. /* Here the device should be in RUNNING state.
* p_status is valid. */ * p_status is valid. */
snd_pcm_sframes_t delay = snd_pcm_status_get_delay( p_status );
#if 0 int i_bytes = snd_pcm_frames_to_bytes( p_sys->p_snd_pcm, delay );
/* This apparently does not work correctly in Alsa 1.0.11 */ next_date = mdate() + ( (mtime_t)i_bytes * 1000000
snd_pcm_status_get_tstamp( p_status, &ts_next ); / p_aout->output.output.i_bytes_per_frame
next_date = (mtime_t)ts_next.tv_sec * 1000000 + ts_next.tv_usec;
if( next_date )
{
next_date += (mtime_t)snd_pcm_status_get_delay(p_status)
* 1000000 / p_aout->output.output.i_rate;
}
else
#endif
{
/* With screwed ALSA drivers the timestamp is always zero;
* use another method then */
snd_pcm_sframes_t delay = 0;
snd_pcm_delay( p_sys->p_snd_pcm, &delay );
next_date = mdate() + (mtime_t)(delay) * 1000000
/ p_aout->output.output.i_rate / p_aout->output.output.i_rate
* p_aout->output.output.i_frame_length; * p_aout->output.output.i_frame_length );
}
} }
p_buffer = aout_OutputNextBuffer( p_aout, next_date, p_buffer = aout_OutputNextBuffer( p_aout, next_date,
......
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