static void a2dp_init(void) { snd_async_handler_t *async; snd_timer_info_t *info; snd_timer_params_t *params; long resolution; char timername[64]; int err, i; a2dp_lock(); for (i = 0; i < MAX_CONNECTIONS; i++) connections[i] = NULL; a2dp_unlock(); snd_timer_info_alloca(&info); snd_timer_params_alloca(¶ms); sprintf(timername, "hw:CLASS=%i,SCLASS=%i,CARD=%i,DEV=%i,SUBDEV=%i", SND_TIMER_CLASS_GLOBAL, SND_TIMER_CLASS_NONE, 0, SND_TIMER_GLOBAL_SYSTEM, 0); err = snd_timer_open(&timer, timername, SND_TIMER_OPEN_NONBLOCK); if (err < 0) { SNDERR("Can't open global timer"); return; } err = snd_timer_info(timer, info); if (err < 0) { SNDERR("Can't get global timer info"); return; } snd_timer_params_set_auto_start(params, 1); resolution = snd_timer_info_get_resolution(info); snd_timer_params_set_ticks(params, 1000000000 / resolution); if (snd_timer_params_get_ticks(params) < 1) snd_timer_params_set_ticks(params, 1); err = snd_timer_params(timer, params); if (err < 0) { SNDERR("Can't set global timer parameters"); snd_timer_close(timer); return; } err = snd_async_add_timer_handler(&async, timer, a2dp_timer, NULL); if (err < 0) { SNDERR("Can't create global async callback"); snd_timer_close(timer); return; } err = snd_timer_start(timer); }
bool AlsaTimer::startTimer() { if(TIMER_DEBUG) printf("AlsaTimer::startTimer(this=%p): handle=%p\n",this,handle); int err; if ((err = snd_timer_start(handle)) < 0) { fprintf(stderr, "AlsaTimer::startTimer(): timer start %i (%s)\n", err, snd_strerror(err)); return false; } return true; }
static int snd_pcm_dmix_start_timer(snd_pcm_t *pcm, snd_pcm_direct_t *dmix) { int err; snd_pcm_hwsync(dmix->spcm); reset_slave_ptr(pcm, dmix); err = snd_timer_start(dmix->timer); if (err < 0) return err; dmix->state = SND_PCM_STATE_RUNNING; return 0; }
static int snd_pcm_dshare_start_timer(snd_pcm_direct_t *dshare) { int err; snd_pcm_hwsync(dshare->spcm); dshare->slave_appl_ptr = dshare->slave_hw_ptr = *dshare->spcm->hw.ptr; err = snd_timer_start(dshare->timer); if (err < 0) return err; dshare->state = SND_PCM_STATE_RUNNING; return 0; }
static int snd_pcm_dsnoop_start(snd_pcm_t *pcm) { snd_pcm_direct_t *dsnoop = pcm->private_data; int err; if (dsnoop->state != SND_PCM_STATE_PREPARED) return -EBADFD; snd_pcm_hwsync(dsnoop->spcm); snoop_timestamp(pcm); dsnoop->slave_appl_ptr = dsnoop->slave_hw_ptr; err = snd_timer_start(dsnoop->timer); if (err < 0) return err; dsnoop->state = SND_PCM_STATE_RUNNING; dsnoop->trigger_tstamp = dsnoop->update_tstamp; return 0; }