Introduce a new local function gettimestamp() to get the current timestamp.
if (avail > dmix->avail_max)
dmix->avail_max = avail;
if (avail >= pcm->stop_threshold) {
- struct timeval tv;
snd_timer_stop(dmix->timer);
- gettimeofday(&tv, 0);
- dmix->trigger_tstamp.tv_sec = tv.tv_sec;
- dmix->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
+ gettimestamp(&dmix->trigger_tstamp);
if (dmix->state == SND_PCM_STATE_RUNNING) {
dmix->state = SND_PCM_STATE_XRUN;
return -EPIPE;
status->trigger_tstamp = dmix->trigger_tstamp;
if (pcm->tstamp_mode == SND_PCM_TSTAMP_MMAP)
status->tstamp = snd_pcm_hw_fast_tstamp(dmix->spcm);
- else {
- struct timeval tv;
- gettimeofday(&tv, 0);
- status->tstamp.tv_sec = tv.tv_sec;
- status->tstamp.tv_nsec = tv.tv_usec * 1000L;
- }
+ else
+ gettimestamp(&status->tstamp);
status->avail = snd_pcm_mmap_playback_avail(pcm);
status->avail_max = status->avail > dmix->avail_max ? status->avail : dmix->avail_max;
dmix->avail_max = 0;
{
snd_pcm_direct_t *dmix = pcm->private_data;
snd_pcm_sframes_t avail;
- struct timeval tv;
int err;
if (dmix->state != SND_PCM_STATE_PREPARED)
return err;
snd_pcm_dmix_sync_area(pcm);
}
- gettimeofday(&tv, 0);
- dmix->trigger_tstamp.tv_sec = tv.tv_sec;
- dmix->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
+ gettimestamp(&dmix->trigger_tstamp);
return 0;
}
if (avail > dshare->avail_max)
dshare->avail_max = avail;
if (avail >= pcm->stop_threshold) {
- struct timeval tv;
snd_timer_stop(dshare->timer);
- gettimeofday(&tv, 0);
- dshare->trigger_tstamp.tv_sec = tv.tv_sec;
- dshare->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
+ gettimestamp(&dshare->trigger_tstamp);
if (dshare->state == SND_PCM_STATE_RUNNING) {
dshare->state = SND_PCM_STATE_XRUN;
return -EPIPE;
status->trigger_tstamp = dshare->trigger_tstamp;
if (pcm->tstamp_mode == SND_PCM_TSTAMP_MMAP)
status->tstamp = snd_pcm_hw_fast_tstamp(dshare->spcm);
- else {
- struct timeval tv;
- gettimeofday(&tv, 0);
- status->tstamp.tv_sec = tv.tv_sec;
- status->tstamp.tv_nsec = tv.tv_usec * 1000L;
- }
+ else
+ gettimestamp(&status->tstamp);
status->avail = snd_pcm_mmap_playback_avail(pcm);
status->avail_max = status->avail > dshare->avail_max ? status->avail : dshare->avail_max;
dshare->avail_max = 0;
{
snd_pcm_direct_t *dshare = pcm->private_data;
snd_pcm_sframes_t avail;
- struct timeval tv;
int err;
if (dshare->state != SND_PCM_STATE_PREPARED)
return err;
snd_pcm_dshare_sync_area(pcm);
}
- gettimeofday(&tv, 0);
- dshare->trigger_tstamp.tv_sec = tv.tv_sec;
- dshare->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
+ gettimestamp(&dshare->trigger_tstamp);
return 0;
}
if (pcm->stop_threshold >= pcm->boundary) /* don't care */
return 0;
if ((avail = snd_pcm_mmap_capture_hw_avail(pcm)) >= pcm->stop_threshold) {
- struct timeval tv;
- gettimeofday(&tv, 0);
- dsnoop->trigger_tstamp.tv_sec = tv.tv_sec;
- dsnoop->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
+ gettimestamp(&dsnoop->trigger_tstamp);
dsnoop->state = SND_PCM_STATE_XRUN;
dsnoop->avail_max = avail;
return -EPIPE;
status->trigger_tstamp = dsnoop->trigger_tstamp;
if (pcm->tstamp_mode == SND_PCM_TSTAMP_MMAP)
status->tstamp = snd_pcm_hw_fast_tstamp(dsnoop->spcm);
- else {
- struct timeval tv;
- gettimeofday(&tv, 0);
- status->tstamp.tv_sec = tv.tv_sec;
- status->tstamp.tv_nsec = tv.tv_usec * 1000L;
- }
+ else
+ gettimestamp(&status->tstamp);
status->avail = snd_pcm_mmap_capture_avail(pcm);
status->avail_max = status->avail > dsnoop->avail_max ? status->avail : dsnoop->avail_max;
dsnoop->avail_max = 0;
static int snd_pcm_dsnoop_start(snd_pcm_t *pcm)
{
snd_pcm_direct_t *dsnoop = pcm->private_data;
- struct timeval tv;
int err;
if (dsnoop->state != SND_PCM_STATE_PREPARED)
if (err < 0)
return err;
dsnoop->state = SND_PCM_STATE_RUNNING;
- gettimeofday(&tv, 0);
- dsnoop->trigger_tstamp.tv_sec = tv.tv_sec;
- dsnoop->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
+ gettimestamp(&dsnoop->trigger_tstamp);
return 0;
}
static int snd_pcm_ioplug_start(snd_pcm_t *pcm)
{
ioplug_priv_t *io = pcm->private_data;
- struct timeval tv;
int err;
if (io->data->state != SND_PCM_STATE_PREPARED)
if (err < 0)
return err;
- gettimeofday(&tv, 0);
- io->trigger_tstamp.tv_sec = tv.tv_sec;
- io->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
+ gettimestamp(&io->trigger_tstamp);
io->data->state = SND_PCM_STATE_RUNNING;
return 0;
static int snd_pcm_ioplug_drop(snd_pcm_t *pcm)
{
ioplug_priv_t *io = pcm->private_data;
- struct timeval tv;
if (io->data->state == SND_PCM_STATE_OPEN)
return -EBADFD;
io->data->callback->stop(io->data);
- gettimeofday(&tv, 0);
- io->trigger_tstamp.tv_sec = tv.tv_sec;
- io->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
+ gettimestamp(&io->trigger_tstamp);
io->data->state = SND_PCM_STATE_SETUP;
return 0;
double d;
int64_t l;
} 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;
+}
static int snd_pcm_null_status(snd_pcm_t *pcm, snd_pcm_status_t * status)
{
snd_pcm_null_t *null = pcm->private_data;
- struct timeval tv;
memset(status, 0, sizeof(*status));
status->state = null->state;
status->trigger_tstamp = null->trigger_tstamp;
- gettimeofday(&tv, 0);
- status->tstamp.tv_sec = tv.tv_sec;
- status->tstamp.tv_nsec = tv.tv_usec * 1000L;
+ gettimestamp(&status->tstamp);
status->avail = pcm->buffer_size;
status->avail_max = status->avail;
return 0;
{
snd_pcm_rate_t *rate = pcm->private_data;
snd_pcm_uframes_t avail;
- struct timeval tv;
if (pcm->stream == SND_PCM_STREAM_CAPTURE)
return snd_pcm_start(rate->gen.slave);
if (snd_pcm_state(rate->gen.slave) != SND_PCM_STATE_PREPARED)
return -EBADFD;
- gettimeofday(&tv, 0);
- rate->trigger_tstamp.tv_sec = tv.tv_sec;
- rate->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
+ gettimestamp(&rate->trigger_tstamp);
avail = snd_pcm_mmap_playback_hw_avail(rate->gen.slave);
if (avail == 0) {
snd_pcm_share_t *share = pcm->private_data;
snd_pcm_share_slave_t *slave = share->slave;
snd_pcm_t *spcm = slave->pcm;
- struct timeval tv;
int err = 0;
if (share->state != SND_PCM_STATE_PREPARED)
return -EBADFD;
}
slave->running_count++;
_snd_pcm_share_update(pcm);
- gettimeofday(&tv, 0);
- share->trigger_tstamp.tv_sec = tv.tv_sec;
- share->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
+ gettimestamp(&share->trigger_tstamp);
_end:
Pthread_mutex_unlock(&slave->mutex);
return err;
{
snd_pcm_share_t *share = pcm->private_data;
snd_pcm_share_slave_t *slave = share->slave;
- struct timeval tv;
#if 0
if (!pcm->mmap_channels) {
/* PCM closing already begun in the main thread */
return;
}
#endif
- gettimeofday(&tv, 0);
- share->trigger_tstamp.tv_sec = tv.tv_sec;
- share->trigger_tstamp.tv_nsec = tv.tv_usec * 1000L;
+ gettimestamp(&share->trigger_tstamp);
if (pcm->stream == SND_PCM_STREAM_CAPTURE) {
snd_pcm_areas_copy(pcm->stopped_areas, 0,
pcm->running_areas, 0,