Lines Matching refs:direct
573 * Even if direct plugins disable xrun detection, there might be an xrun
578 int snd_pcm_direct_slave_recover(snd_pcm_direct_t *direct)
585 semerr = snd_pcm_direct_semaphore_down(direct,
592 state = snd_pcm_state(direct->spcm);
595 semerr = snd_pcm_direct_semaphore_up(direct,
604 recoveries = direct->shmptr->s.recoveries;
608 direct->shmptr->s.recoveries = recoveries;
615 (direct->spcm->info & SND_PCM_INFO_RESUME)) {
616 snd_pcm_resume(direct->spcm);
617 snd_pcm_drop(direct->spcm);
618 snd_pcm_direct_timer_stop(direct);
619 snd_pcm_direct_clear_timer_queue(direct);
622 ret = snd_pcm_prepare(direct->spcm);
625 semerr = snd_pcm_direct_semaphore_up(direct,
634 if (direct->type == SND_PCM_TYPE_DSHARE) {
636 dst_areas = snd_pcm_mmap_areas(direct->spcm);
637 snd_pcm_areas_silence(dst_areas, 0, direct->spcm->channels,
638 direct->spcm->buffer_size,
639 direct->spcm->format);
642 ret = snd_pcm_start(direct->spcm);
645 semerr = snd_pcm_direct_semaphore_up(direct,
653 semerr = snd_pcm_direct_semaphore_up(direct,
666 int snd_pcm_direct_check_xrun(snd_pcm_direct_t *direct, snd_pcm_t *pcm)
670 switch (snd_pcm_state(direct->spcm)) {
672 direct->state = SNDRV_PCM_STATE_DISCONNECTED;
676 if ((err = snd_pcm_direct_slave_recover(direct)) < 0)
683 if (direct->state == SND_PCM_STATE_XRUN)
685 else if (direct->state == SND_PCM_STATE_SUSPENDED)
687 if (direct->shmptr->s.recoveries != direct->recoveries) {
691 direct->recoveries = direct->shmptr->s.recoveries;
694 gettimestamp(&direct->trigger_tstamp, pcm->tstamp_type);
697 * snd_pcm_direct_clear_timer_queue(direct);
699 if (direct->recoveries & RECOVERIES_FLAG_SUSPENDED) {
700 direct->state = SND_PCM_STATE_SUSPENDED;
703 direct->state = SND_PCM_STATE_XRUN;