static int snd_pcm_dmix_start(snd_pcm_t *pcm) { snd_pcm_direct_t *dmix = pcm->private_data; snd_pcm_sframes_t avail; int err; if (dmix->state != SND_PCM_STATE_PREPARED) return -EBADFD; avail = snd_pcm_mmap_playback_hw_avail(pcm); if (avail == 0) dmix->state = STATE_RUN_PENDING; else if (avail < 0) return 0; else { if ((err = snd_pcm_dmix_start_timer(pcm, dmix)) < 0) return err; snd_pcm_dmix_sync_area(pcm); } gettimestamp(&dmix->trigger_tstamp, pcm->tstamp_type); return 0; }
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) return -EBADFD; avail = snd_pcm_mmap_playback_hw_avail(pcm); if (avail == 0) dmix->state = STATE_RUN_PENDING; else if (avail < 0) return 0; else { if ((err = snd_pcm_dmix_start_timer(pcm, dmix)) < 0) 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; return 0; }