mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-29 05:40:25 -04:00
Clean up using gettimestamp()
Introduce a new local function gettimestamp() to get the current timestamp.
This commit is contained in:
parent
7379b061eb
commit
683c8bc4a2
8 changed files with 28 additions and 66 deletions
|
|
@ -367,11 +367,8 @@ static int snd_pcm_dmix_sync_ptr(snd_pcm_t *pcm)
|
||||||
if (avail > dmix->avail_max)
|
if (avail > dmix->avail_max)
|
||||||
dmix->avail_max = avail;
|
dmix->avail_max = avail;
|
||||||
if (avail >= pcm->stop_threshold) {
|
if (avail >= pcm->stop_threshold) {
|
||||||
struct timeval tv;
|
|
||||||
snd_timer_stop(dmix->timer);
|
snd_timer_stop(dmix->timer);
|
||||||
gettimeofday(&tv, 0);
|
gettimestamp(&dmix->trigger_tstamp);
|
||||||
dmix->trigger_tstamp.tv_sec = tv.tv_sec;
|
|
||||||
dmix->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
|
|
||||||
if (dmix->state == SND_PCM_STATE_RUNNING) {
|
if (dmix->state == SND_PCM_STATE_RUNNING) {
|
||||||
dmix->state = SND_PCM_STATE_XRUN;
|
dmix->state = SND_PCM_STATE_XRUN;
|
||||||
return -EPIPE;
|
return -EPIPE;
|
||||||
|
|
@ -422,12 +419,8 @@ static int snd_pcm_dmix_status(snd_pcm_t *pcm, snd_pcm_status_t * status)
|
||||||
status->trigger_tstamp = dmix->trigger_tstamp;
|
status->trigger_tstamp = dmix->trigger_tstamp;
|
||||||
if (pcm->tstamp_mode == SND_PCM_TSTAMP_MMAP)
|
if (pcm->tstamp_mode == SND_PCM_TSTAMP_MMAP)
|
||||||
status->tstamp = snd_pcm_hw_fast_tstamp(dmix->spcm);
|
status->tstamp = snd_pcm_hw_fast_tstamp(dmix->spcm);
|
||||||
else {
|
else
|
||||||
struct timeval tv;
|
gettimestamp(&status->tstamp);
|
||||||
gettimeofday(&tv, 0);
|
|
||||||
status->tstamp.tv_sec = tv.tv_sec;
|
|
||||||
status->tstamp.tv_nsec = tv.tv_usec * 1000L;
|
|
||||||
}
|
|
||||||
status->avail = snd_pcm_mmap_playback_avail(pcm);
|
status->avail = snd_pcm_mmap_playback_avail(pcm);
|
||||||
status->avail_max = status->avail > dmix->avail_max ? status->avail : dmix->avail_max;
|
status->avail_max = status->avail > dmix->avail_max ? status->avail : dmix->avail_max;
|
||||||
dmix->avail_max = 0;
|
dmix->avail_max = 0;
|
||||||
|
|
@ -532,7 +525,6 @@ static int snd_pcm_dmix_start(snd_pcm_t *pcm)
|
||||||
{
|
{
|
||||||
snd_pcm_direct_t *dmix = pcm->private_data;
|
snd_pcm_direct_t *dmix = pcm->private_data;
|
||||||
snd_pcm_sframes_t avail;
|
snd_pcm_sframes_t avail;
|
||||||
struct timeval tv;
|
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (dmix->state != SND_PCM_STATE_PREPARED)
|
if (dmix->state != SND_PCM_STATE_PREPARED)
|
||||||
|
|
@ -547,9 +539,7 @@ static int snd_pcm_dmix_start(snd_pcm_t *pcm)
|
||||||
return err;
|
return err;
|
||||||
snd_pcm_dmix_sync_area(pcm);
|
snd_pcm_dmix_sync_area(pcm);
|
||||||
}
|
}
|
||||||
gettimeofday(&tv, 0);
|
gettimestamp(&dmix->trigger_tstamp);
|
||||||
dmix->trigger_tstamp.tv_sec = tv.tv_sec;
|
|
||||||
dmix->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -194,11 +194,8 @@ static int snd_pcm_dshare_sync_ptr(snd_pcm_t *pcm)
|
||||||
if (avail > dshare->avail_max)
|
if (avail > dshare->avail_max)
|
||||||
dshare->avail_max = avail;
|
dshare->avail_max = avail;
|
||||||
if (avail >= pcm->stop_threshold) {
|
if (avail >= pcm->stop_threshold) {
|
||||||
struct timeval tv;
|
|
||||||
snd_timer_stop(dshare->timer);
|
snd_timer_stop(dshare->timer);
|
||||||
gettimeofday(&tv, 0);
|
gettimestamp(&dshare->trigger_tstamp);
|
||||||
dshare->trigger_tstamp.tv_sec = tv.tv_sec;
|
|
||||||
dshare->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
|
|
||||||
if (dshare->state == SND_PCM_STATE_RUNNING) {
|
if (dshare->state == SND_PCM_STATE_RUNNING) {
|
||||||
dshare->state = SND_PCM_STATE_XRUN;
|
dshare->state = SND_PCM_STATE_XRUN;
|
||||||
return -EPIPE;
|
return -EPIPE;
|
||||||
|
|
@ -231,12 +228,8 @@ static int snd_pcm_dshare_status(snd_pcm_t *pcm, snd_pcm_status_t * status)
|
||||||
status->trigger_tstamp = dshare->trigger_tstamp;
|
status->trigger_tstamp = dshare->trigger_tstamp;
|
||||||
if (pcm->tstamp_mode == SND_PCM_TSTAMP_MMAP)
|
if (pcm->tstamp_mode == SND_PCM_TSTAMP_MMAP)
|
||||||
status->tstamp = snd_pcm_hw_fast_tstamp(dshare->spcm);
|
status->tstamp = snd_pcm_hw_fast_tstamp(dshare->spcm);
|
||||||
else {
|
else
|
||||||
struct timeval tv;
|
gettimestamp(&status->tstamp);
|
||||||
gettimeofday(&tv, 0);
|
|
||||||
status->tstamp.tv_sec = tv.tv_sec;
|
|
||||||
status->tstamp.tv_nsec = tv.tv_usec * 1000L;
|
|
||||||
}
|
|
||||||
status->avail = snd_pcm_mmap_playback_avail(pcm);
|
status->avail = snd_pcm_mmap_playback_avail(pcm);
|
||||||
status->avail_max = status->avail > dshare->avail_max ? status->avail : dshare->avail_max;
|
status->avail_max = status->avail > dshare->avail_max ? status->avail : dshare->avail_max;
|
||||||
dshare->avail_max = 0;
|
dshare->avail_max = 0;
|
||||||
|
|
@ -342,7 +335,6 @@ static int snd_pcm_dshare_start(snd_pcm_t *pcm)
|
||||||
{
|
{
|
||||||
snd_pcm_direct_t *dshare = pcm->private_data;
|
snd_pcm_direct_t *dshare = pcm->private_data;
|
||||||
snd_pcm_sframes_t avail;
|
snd_pcm_sframes_t avail;
|
||||||
struct timeval tv;
|
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (dshare->state != SND_PCM_STATE_PREPARED)
|
if (dshare->state != SND_PCM_STATE_PREPARED)
|
||||||
|
|
@ -357,9 +349,7 @@ static int snd_pcm_dshare_start(snd_pcm_t *pcm)
|
||||||
return err;
|
return err;
|
||||||
snd_pcm_dshare_sync_area(pcm);
|
snd_pcm_dshare_sync_area(pcm);
|
||||||
}
|
}
|
||||||
gettimeofday(&tv, 0);
|
gettimestamp(&dshare->trigger_tstamp);
|
||||||
dshare->trigger_tstamp.tv_sec = tv.tv_sec;
|
|
||||||
dshare->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -141,10 +141,7 @@ static int snd_pcm_dsnoop_sync_ptr(snd_pcm_t *pcm)
|
||||||
if (pcm->stop_threshold >= pcm->boundary) /* don't care */
|
if (pcm->stop_threshold >= pcm->boundary) /* don't care */
|
||||||
return 0;
|
return 0;
|
||||||
if ((avail = snd_pcm_mmap_capture_hw_avail(pcm)) >= pcm->stop_threshold) {
|
if ((avail = snd_pcm_mmap_capture_hw_avail(pcm)) >= pcm->stop_threshold) {
|
||||||
struct timeval tv;
|
gettimestamp(&dsnoop->trigger_tstamp);
|
||||||
gettimeofday(&tv, 0);
|
|
||||||
dsnoop->trigger_tstamp.tv_sec = tv.tv_sec;
|
|
||||||
dsnoop->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
|
|
||||||
dsnoop->state = SND_PCM_STATE_XRUN;
|
dsnoop->state = SND_PCM_STATE_XRUN;
|
||||||
dsnoop->avail_max = avail;
|
dsnoop->avail_max = avail;
|
||||||
return -EPIPE;
|
return -EPIPE;
|
||||||
|
|
@ -177,12 +174,8 @@ static int snd_pcm_dsnoop_status(snd_pcm_t *pcm, snd_pcm_status_t * status)
|
||||||
status->trigger_tstamp = dsnoop->trigger_tstamp;
|
status->trigger_tstamp = dsnoop->trigger_tstamp;
|
||||||
if (pcm->tstamp_mode == SND_PCM_TSTAMP_MMAP)
|
if (pcm->tstamp_mode == SND_PCM_TSTAMP_MMAP)
|
||||||
status->tstamp = snd_pcm_hw_fast_tstamp(dsnoop->spcm);
|
status->tstamp = snd_pcm_hw_fast_tstamp(dsnoop->spcm);
|
||||||
else {
|
else
|
||||||
struct timeval tv;
|
gettimestamp(&status->tstamp);
|
||||||
gettimeofday(&tv, 0);
|
|
||||||
status->tstamp.tv_sec = tv.tv_sec;
|
|
||||||
status->tstamp.tv_nsec = tv.tv_usec * 1000L;
|
|
||||||
}
|
|
||||||
status->avail = snd_pcm_mmap_capture_avail(pcm);
|
status->avail = snd_pcm_mmap_capture_avail(pcm);
|
||||||
status->avail_max = status->avail > dsnoop->avail_max ? status->avail : dsnoop->avail_max;
|
status->avail_max = status->avail > dsnoop->avail_max ? status->avail : dsnoop->avail_max;
|
||||||
dsnoop->avail_max = 0;
|
dsnoop->avail_max = 0;
|
||||||
|
|
@ -271,7 +264,6 @@ static int snd_pcm_dsnoop_reset(snd_pcm_t *pcm)
|
||||||
static int snd_pcm_dsnoop_start(snd_pcm_t *pcm)
|
static int snd_pcm_dsnoop_start(snd_pcm_t *pcm)
|
||||||
{
|
{
|
||||||
snd_pcm_direct_t *dsnoop = pcm->private_data;
|
snd_pcm_direct_t *dsnoop = pcm->private_data;
|
||||||
struct timeval tv;
|
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (dsnoop->state != SND_PCM_STATE_PREPARED)
|
if (dsnoop->state != SND_PCM_STATE_PREPARED)
|
||||||
|
|
@ -282,9 +274,7 @@ static int snd_pcm_dsnoop_start(snd_pcm_t *pcm)
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
dsnoop->state = SND_PCM_STATE_RUNNING;
|
dsnoop->state = SND_PCM_STATE_RUNNING;
|
||||||
gettimeofday(&tv, 0);
|
gettimestamp(&dsnoop->trigger_tstamp);
|
||||||
dsnoop->trigger_tstamp.tv_sec = tv.tv_sec;
|
|
||||||
dsnoop->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -438,7 +438,6 @@ static int snd_pcm_ioplug_sw_params(snd_pcm_t *pcm, snd_pcm_sw_params_t *params)
|
||||||
static int snd_pcm_ioplug_start(snd_pcm_t *pcm)
|
static int snd_pcm_ioplug_start(snd_pcm_t *pcm)
|
||||||
{
|
{
|
||||||
ioplug_priv_t *io = pcm->private_data;
|
ioplug_priv_t *io = pcm->private_data;
|
||||||
struct timeval tv;
|
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (io->data->state != SND_PCM_STATE_PREPARED)
|
if (io->data->state != SND_PCM_STATE_PREPARED)
|
||||||
|
|
@ -448,9 +447,7 @@ static int snd_pcm_ioplug_start(snd_pcm_t *pcm)
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
gettimeofday(&tv, 0);
|
gettimestamp(&io->trigger_tstamp);
|
||||||
io->trigger_tstamp.tv_sec = tv.tv_sec;
|
|
||||||
io->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
|
|
||||||
io->data->state = SND_PCM_STATE_RUNNING;
|
io->data->state = SND_PCM_STATE_RUNNING;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -459,16 +456,13 @@ static int snd_pcm_ioplug_start(snd_pcm_t *pcm)
|
||||||
static int snd_pcm_ioplug_drop(snd_pcm_t *pcm)
|
static int snd_pcm_ioplug_drop(snd_pcm_t *pcm)
|
||||||
{
|
{
|
||||||
ioplug_priv_t *io = pcm->private_data;
|
ioplug_priv_t *io = pcm->private_data;
|
||||||
struct timeval tv;
|
|
||||||
|
|
||||||
if (io->data->state == SND_PCM_STATE_OPEN)
|
if (io->data->state == SND_PCM_STATE_OPEN)
|
||||||
return -EBADFD;
|
return -EBADFD;
|
||||||
|
|
||||||
io->data->callback->stop(io->data);
|
io->data->callback->stop(io->data);
|
||||||
|
|
||||||
gettimeofday(&tv, 0);
|
gettimestamp(&io->trigger_tstamp);
|
||||||
io->trigger_tstamp.tv_sec = tv.tv_sec;
|
|
||||||
io->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
|
|
||||||
io->data->state = SND_PCM_STATE_SETUP;
|
io->data->state = SND_PCM_STATE_SETUP;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -838,3 +838,13 @@ typedef union snd_tmp_double {
|
||||||
double d;
|
double d;
|
||||||
int64_t l;
|
int64_t l;
|
||||||
} snd_tmp_double_t;
|
} snd_tmp_double_t;
|
||||||
|
|
||||||
|
/* get the current timestamp */
|
||||||
|
static inline void gettimestamp(snd_htimestamp_t *tstamp)
|
||||||
|
{
|
||||||
|
struct timeval tv;
|
||||||
|
|
||||||
|
gettimeofday(&tv, 0);
|
||||||
|
tstamp->tv_sec = tv.tv_sec;
|
||||||
|
tstamp->tv_nsec = tv.tv_usec * 1000L;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -82,13 +82,10 @@ static int snd_pcm_null_info(snd_pcm_t *pcm, snd_pcm_info_t * info)
|
||||||
static int snd_pcm_null_status(snd_pcm_t *pcm, snd_pcm_status_t * status)
|
static int snd_pcm_null_status(snd_pcm_t *pcm, snd_pcm_status_t * status)
|
||||||
{
|
{
|
||||||
snd_pcm_null_t *null = pcm->private_data;
|
snd_pcm_null_t *null = pcm->private_data;
|
||||||
struct timeval tv;
|
|
||||||
memset(status, 0, sizeof(*status));
|
memset(status, 0, sizeof(*status));
|
||||||
status->state = null->state;
|
status->state = null->state;
|
||||||
status->trigger_tstamp = null->trigger_tstamp;
|
status->trigger_tstamp = null->trigger_tstamp;
|
||||||
gettimeofday(&tv, 0);
|
gettimestamp(&status->tstamp);
|
||||||
status->tstamp.tv_sec = tv.tv_sec;
|
|
||||||
status->tstamp.tv_nsec = tv.tv_usec * 1000L;
|
|
||||||
status->avail = pcm->buffer_size;
|
status->avail = pcm->buffer_size;
|
||||||
status->avail_max = status->avail;
|
status->avail_max = status->avail;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -1090,7 +1090,6 @@ static int snd_pcm_rate_start(snd_pcm_t *pcm)
|
||||||
{
|
{
|
||||||
snd_pcm_rate_t *rate = pcm->private_data;
|
snd_pcm_rate_t *rate = pcm->private_data;
|
||||||
snd_pcm_uframes_t avail;
|
snd_pcm_uframes_t avail;
|
||||||
struct timeval tv;
|
|
||||||
|
|
||||||
if (pcm->stream == SND_PCM_STREAM_CAPTURE)
|
if (pcm->stream == SND_PCM_STREAM_CAPTURE)
|
||||||
return snd_pcm_start(rate->gen.slave);
|
return snd_pcm_start(rate->gen.slave);
|
||||||
|
|
@ -1098,9 +1097,7 @@ static int snd_pcm_rate_start(snd_pcm_t *pcm)
|
||||||
if (snd_pcm_state(rate->gen.slave) != SND_PCM_STATE_PREPARED)
|
if (snd_pcm_state(rate->gen.slave) != SND_PCM_STATE_PREPARED)
|
||||||
return -EBADFD;
|
return -EBADFD;
|
||||||
|
|
||||||
gettimeofday(&tv, 0);
|
gettimestamp(&rate->trigger_tstamp);
|
||||||
rate->trigger_tstamp.tv_sec = tv.tv_sec;
|
|
||||||
rate->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
|
|
||||||
|
|
||||||
avail = snd_pcm_mmap_playback_hw_avail(rate->gen.slave);
|
avail = snd_pcm_mmap_playback_hw_avail(rate->gen.slave);
|
||||||
if (avail == 0) {
|
if (avail == 0) {
|
||||||
|
|
|
||||||
|
|
@ -914,7 +914,6 @@ static int snd_pcm_share_start(snd_pcm_t *pcm)
|
||||||
snd_pcm_share_t *share = pcm->private_data;
|
snd_pcm_share_t *share = pcm->private_data;
|
||||||
snd_pcm_share_slave_t *slave = share->slave;
|
snd_pcm_share_slave_t *slave = share->slave;
|
||||||
snd_pcm_t *spcm = slave->pcm;
|
snd_pcm_t *spcm = slave->pcm;
|
||||||
struct timeval tv;
|
|
||||||
int err = 0;
|
int err = 0;
|
||||||
if (share->state != SND_PCM_STATE_PREPARED)
|
if (share->state != SND_PCM_STATE_PREPARED)
|
||||||
return -EBADFD;
|
return -EBADFD;
|
||||||
|
|
@ -970,9 +969,7 @@ static int snd_pcm_share_start(snd_pcm_t *pcm)
|
||||||
}
|
}
|
||||||
slave->running_count++;
|
slave->running_count++;
|
||||||
_snd_pcm_share_update(pcm);
|
_snd_pcm_share_update(pcm);
|
||||||
gettimeofday(&tv, 0);
|
gettimestamp(&share->trigger_tstamp);
|
||||||
share->trigger_tstamp.tv_sec = tv.tv_sec;
|
|
||||||
share->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
|
|
||||||
_end:
|
_end:
|
||||||
Pthread_mutex_unlock(&slave->mutex);
|
Pthread_mutex_unlock(&slave->mutex);
|
||||||
return err;
|
return err;
|
||||||
|
|
@ -1099,16 +1096,13 @@ static void _snd_pcm_share_stop(snd_pcm_t *pcm, snd_pcm_state_t state)
|
||||||
{
|
{
|
||||||
snd_pcm_share_t *share = pcm->private_data;
|
snd_pcm_share_t *share = pcm->private_data;
|
||||||
snd_pcm_share_slave_t *slave = share->slave;
|
snd_pcm_share_slave_t *slave = share->slave;
|
||||||
struct timeval tv;
|
|
||||||
#if 0
|
#if 0
|
||||||
if (!pcm->mmap_channels) {
|
if (!pcm->mmap_channels) {
|
||||||
/* PCM closing already begun in the main thread */
|
/* PCM closing already begun in the main thread */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
gettimeofday(&tv, 0);
|
gettimestamp(&share->trigger_tstamp);
|
||||||
share->trigger_tstamp.tv_sec = tv.tv_sec;
|
|
||||||
share->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
|
|
||||||
if (pcm->stream == SND_PCM_STREAM_CAPTURE) {
|
if (pcm->stream == SND_PCM_STREAM_CAPTURE) {
|
||||||
snd_pcm_areas_copy(pcm->stopped_areas, 0,
|
snd_pcm_areas_copy(pcm->stopped_areas, 0,
|
||||||
pcm->running_areas, 0,
|
pcm->running_areas, 0,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue