From 683c8bc4a2cee5892dc12e5a874be443a9406fcf Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Wed, 21 Nov 2007 12:19:43 +0100 Subject: [PATCH] Clean up using gettimestamp() Introduce a new local function gettimestamp() to get the current timestamp. --- src/pcm/pcm_dmix.c | 18 ++++-------------- src/pcm/pcm_dshare.c | 18 ++++-------------- src/pcm/pcm_dsnoop.c | 18 ++++-------------- src/pcm/pcm_ioplug.c | 10 ++-------- src/pcm/pcm_local.h | 10 ++++++++++ src/pcm/pcm_null.c | 5 +---- src/pcm/pcm_rate.c | 5 +---- src/pcm/pcm_share.c | 10 ++-------- 8 files changed, 28 insertions(+), 66 deletions(-) diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c index e8f837ac..631aae37 100644 --- a/src/pcm/pcm_dmix.c +++ b/src/pcm/pcm_dmix.c @@ -367,11 +367,8 @@ static int snd_pcm_dmix_sync_ptr(snd_pcm_t *pcm) 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; @@ -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; 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; @@ -532,7 +525,6 @@ static int snd_pcm_dmix_start(snd_pcm_t *pcm) { 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) @@ -547,9 +539,7 @@ static int snd_pcm_dmix_start(snd_pcm_t *pcm) 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; } diff --git a/src/pcm/pcm_dshare.c b/src/pcm/pcm_dshare.c index ccbe4793..44417ea1 100644 --- a/src/pcm/pcm_dshare.c +++ b/src/pcm/pcm_dshare.c @@ -194,11 +194,8 @@ static int snd_pcm_dshare_sync_ptr(snd_pcm_t *pcm) 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; @@ -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; 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; @@ -342,7 +335,6 @@ static int snd_pcm_dshare_start(snd_pcm_t *pcm) { 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) @@ -357,9 +349,7 @@ static int snd_pcm_dshare_start(snd_pcm_t *pcm) 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; } diff --git a/src/pcm/pcm_dsnoop.c b/src/pcm/pcm_dsnoop.c index 16334d56..b7041659 100644 --- a/src/pcm/pcm_dsnoop.c +++ b/src/pcm/pcm_dsnoop.c @@ -141,10 +141,7 @@ static int snd_pcm_dsnoop_sync_ptr(snd_pcm_t *pcm) 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; @@ -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; 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; @@ -271,7 +264,6 @@ static int snd_pcm_dsnoop_reset(snd_pcm_t *pcm) 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) @@ -282,9 +274,7 @@ static int snd_pcm_dsnoop_start(snd_pcm_t *pcm) 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; } diff --git a/src/pcm/pcm_ioplug.c b/src/pcm/pcm_ioplug.c index 435572ea..19dab979 100644 --- a/src/pcm/pcm_ioplug.c +++ b/src/pcm/pcm_ioplug.c @@ -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) { ioplug_priv_t *io = pcm->private_data; - struct timeval tv; int err; 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) 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; @@ -459,16 +456,13 @@ static int snd_pcm_ioplug_start(snd_pcm_t *pcm) 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; diff --git a/src/pcm/pcm_local.h b/src/pcm/pcm_local.h index f927258b..fd5dbb67 100644 --- a/src/pcm/pcm_local.h +++ b/src/pcm/pcm_local.h @@ -838,3 +838,13 @@ typedef union snd_tmp_double { 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; +} diff --git a/src/pcm/pcm_null.c b/src/pcm/pcm_null.c index 8fd61fcf..742f2315 100644 --- a/src/pcm/pcm_null.c +++ b/src/pcm/pcm_null.c @@ -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) { 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; diff --git a/src/pcm/pcm_rate.c b/src/pcm/pcm_rate.c index aa1b36cc..26d26dbb 100644 --- a/src/pcm/pcm_rate.c +++ b/src/pcm/pcm_rate.c @@ -1090,7 +1090,6 @@ static int snd_pcm_rate_start(snd_pcm_t *pcm) { 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); @@ -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) 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) { diff --git a/src/pcm/pcm_share.c b/src/pcm/pcm_share.c index cc65907d..165d8d02 100644 --- a/src/pcm/pcm_share.c +++ b/src/pcm/pcm_share.c @@ -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_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; @@ -970,9 +969,7 @@ static int snd_pcm_share_start(snd_pcm_t *pcm) } 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; @@ -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_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, -- 2.47.1