• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/iserver/alsa-lib-1.0.26/src/pcm/

Lines Matching defs:pcm

2  * \file pcm/pcm_dmix.c
307 static void snd_pcm_dmix_sync_area(snd_pcm_t *pcm)
309 snd_pcm_direct_t *dmix = pcm->private_data;
321 if (size >= pcm->boundary / 2)
322 size = pcm->boundary - size;
335 dmix->last_appl_ptr %= pcm->boundary;
341 if (size >= pcm->boundary / 2)
342 size = pcm->boundary - size;
364 src_areas = snd_pcm_mmap_areas(pcm);
366 appl_ptr = dmix->last_appl_ptr % pcm->buffer_size;
368 dmix->last_appl_ptr %= pcm->boundary;
375 if (appl_ptr + transfer > pcm->buffer_size)
376 transfer = pcm->buffer_size - appl_ptr;
386 appl_ptr %= pcm->buffer_size;
394 static int snd_pcm_dmix_sync_ptr(snd_pcm_t *pcm)
396 snd_pcm_direct_t *dmix = pcm->private_data;
423 dmix->hw_ptr %= pcm->boundary;
424 if (pcm->stop_threshold >= pcm->boundary) /* don't care */
426 avail = snd_pcm_mmap_playback_avail(pcm);
429 if (avail >= pcm->stop_threshold) {
431 gettimestamp(&dmix->trigger_tstamp, pcm->monotonic);
447 static snd_pcm_state_t snd_pcm_dmix_state(snd_pcm_t *pcm)
449 snd_pcm_direct_t *dmix = pcm->private_data;
465 static int snd_pcm_dmix_status(snd_pcm_t *pcm, snd_pcm_status_t * status)
467 snd_pcm_direct_t *dmix = pcm->private_data;
472 snd_pcm_dmix_sync_ptr(pcm);
478 status->state = snd_pcm_dmix_state(pcm);
480 gettimestamp(&status->tstamp, pcm->monotonic);
481 status->avail = snd_pcm_mmap_playback_avail(pcm);
487 static int snd_pcm_dmix_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp)
489 snd_pcm_direct_t *dmix = pcm->private_data;
495 err = snd_pcm_dmix_sync_ptr(pcm);
502 *delayp = snd_pcm_mmap_playback_hw_avail(pcm);
513 static int snd_pcm_dmix_hwsync(snd_pcm_t *pcm)
515 snd_pcm_direct_t *dmix = pcm->private_data;
521 return snd_pcm_dmix_sync_ptr(pcm);
535 static int snd_pcm_dmix_prepare(snd_pcm_t *pcm)
537 snd_pcm_direct_t *dmix = pcm->private_data;
539 snd_pcm_direct_check_interleave(dmix, pcm);
546 static void reset_slave_ptr(snd_pcm_t *pcm, snd_pcm_direct_t *dmix)
549 if (pcm->buffer_size > pcm->period_size * 2)
559 static int snd_pcm_dmix_reset(snd_pcm_t *pcm)
561 snd_pcm_direct_t *dmix = pcm->private_data;
562 dmix->hw_ptr %= pcm->period_size;
564 reset_slave_ptr(pcm, dmix);
568 static int snd_pcm_dmix_start_timer(snd_pcm_t *pcm, snd_pcm_direct_t *dmix)
573 reset_slave_ptr(pcm, dmix);
581 static int snd_pcm_dmix_start(snd_pcm_t *pcm)
583 snd_pcm_direct_t *dmix = pcm->private_data;
589 avail = snd_pcm_mmap_playback_hw_avail(pcm);
595 if ((err = snd_pcm_dmix_start_timer(pcm, dmix)) < 0)
597 snd_pcm_dmix_sync_area(pcm);
599 gettimestamp(&dmix->trigger_tstamp, pcm->monotonic);
603 static int snd_pcm_dmix_drop(snd_pcm_t *pcm)
605 snd_pcm_direct_t *dmix = pcm->private_data;
613 static int snd_pcm_dmix_drain(snd_pcm_t *pcm)
615 snd_pcm_direct_t *dmix = pcm->private_data;
621 if (pcm->mode & SND_PCM_NONBLOCK)
624 if (snd_pcm_mmap_playback_hw_avail(pcm) > 0)
625 snd_pcm_dmix_start(pcm);
627 snd_pcm_dmix_drop(pcm);
633 snd_pcm_dmix_drop(pcm);
637 stop_threshold = pcm->stop_threshold;
638 if (pcm->stop_threshold > pcm->buffer_size)
639 pcm->stop_threshold = pcm->buffer_size;
642 err = snd_pcm_dmix_sync_ptr(pcm);
644 snd_pcm_dmix_drop(pcm);
648 snd_pcm_dmix_sync_area(pcm);
649 snd_pcm_wait_nocheck(pcm, -1);
653 pcm->stop_threshold = stop_threshold;
657 static int snd_pcm_dmix_pause(snd_pcm_t *pcm ATTRIBUTE_UNUSED, int enable ATTRIBUTE_UNUSED)
662 static snd_pcm_sframes_t snd_pcm_dmix_rewindable(snd_pcm_t *pcm)
664 return snd_pcm_mmap_hw_avail(pcm);
667 static snd_pcm_sframes_t snd_pcm_dmix_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t frames)
669 snd_pcm_direct_t *dmix = pcm->private_data;
676 return snd_pcm_dmix_hwsync(pcm);
681 size = dmix->appl_ptr + (pcm->boundary - dmix->last_appl_ptr);
684 snd_pcm_mmap_appl_backward(pcm, size);
693 size = dmix->appl_ptr + (pcm->boundary - dmix->hw_ptr);
699 slave_size = dmix->slave_appl_ptr + (pcm->boundary - dmix->slave_hw_ptr);
706 src_areas = snd_pcm_mmap_areas(pcm);
709 dmix->last_appl_ptr %= pcm->boundary;
710 appl_ptr = dmix->last_appl_ptr % pcm->buffer_size;
717 if (appl_ptr + transfer > pcm->buffer_size)
718 transfer = pcm->buffer_size - appl_ptr;
728 appl_ptr %= pcm->buffer_size;
731 dmix->last_appl_ptr %= pcm->boundary;
736 snd_pcm_mmap_appl_backward(pcm, frames);
741 static snd_pcm_sframes_t snd_pcm_dmix_forwardable(snd_pcm_t *pcm)
743 return snd_pcm_mmap_avail(pcm);
746 static snd_pcm_sframes_t snd_pcm_dmix_forward(snd_pcm_t *pcm, snd_pcm_uframes_t frames)
750 avail = snd_pcm_mmap_playback_avail(pcm);
755 snd_pcm_mmap_appl_forward(pcm, frames);
759 static snd_pcm_sframes_t snd_pcm_dmix_readi(snd_pcm_t *pcm ATTRIBUTE_UNUSED, void *buffer ATTRIBUTE_UNUSED, snd_pcm_uframes_t size ATTRIBUTE_UNUSED)
764 static snd_pcm_sframes_t snd_pcm_dmix_readn(snd_pcm_t *pcm ATTRIBUTE_UNUSED, void **bufs ATTRIBUTE_UNUSED, snd_pcm_uframes_t size ATTRIBUTE_UNUSED)
769 static int snd_pcm_dmix_close(snd_pcm_t *pcm)
771 snd_pcm_direct_t *dmix = pcm->private_data;
788 pcm->private_data = NULL;
793 static snd_pcm_sframes_t snd_pcm_dmix_mmap_commit(snd_pcm_t *pcm,
797 snd_pcm_direct_t *dmix = pcm->private_data;
810 snd_pcm_mmap_appl_forward(pcm, size);
812 if ((err = snd_pcm_dmix_start_timer(pcm, dmix)) < 0)
816 snd_pcm_dmix_sync_ptr(pcm);
821 snd_pcm_dmix_sync_area(pcm);
823 if (snd_pcm_mmap_playback_avail(pcm) < pcm->avail_min)
829 static snd_pcm_sframes_t snd_pcm_dmix_avail_update(snd_pcm_t *pcm)
831 snd_pcm_direct_t *dmix = pcm->private_data;
835 snd_pcm_dmix_sync_ptr(pcm);
836 return snd_pcm_mmap_playback_avail(pcm);
839 static int snd_pcm_dmix_htimestamp(snd_pcm_t *pcm,
843 snd_pcm_direct_t *dmix = pcm->private_data;
850 snd_pcm_dmix_sync_ptr(pcm);
851 avail1 = snd_pcm_mmap_playback_avail(pcm);
860 static int snd_pcm_dmix_poll_revents(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int nfds, unsigned short *revents)
862 snd_pcm_direct_t *dmix = pcm->private_data;
864 snd_pcm_dmix_sync_area(pcm);
865 return snd_pcm_direct_poll_revents(pcm, pfds, nfds, revents);
869 static void snd_pcm_dmix_dump(snd_pcm_t *pcm, snd_output_t *out)
871 snd_pcm_direct_t *dmix = pcm->private_data;
874 if (pcm->setup) {
876 snd_pcm_dump_setup(pcm, out);
949 snd_pcm_t *pcm = NULL, *spcm = NULL;
977 ret = snd_pcm_new(&pcm, dmix->type = SND_PCM_TYPE_DMIX, name, stream, mode);
1004 pcm->ops = &snd_pcm_dmix_ops;
1005 pcm->fast_ops = &snd_pcm_dmix_fast_ops;
1006 pcm->private_data = dmix;
1101 pcm->poll_fd = dmix->poll_fd;
1102 pcm->poll_events = POLLIN; /* it's different than other plugins */
1104 pcm->mmap_rw = 1;
1105 snd_pcm_set_hw_ptr(pcm, &dmix->hw_ptr, -1, 0);
1106 snd_pcm_set_appl_ptr(pcm, &dmix->appl_ptr, -1, 0);
1113 *pcmp = pcm;
1136 if (pcm)
1137 snd_pcm_free(pcm);
1150 pcm.name {
1158 pcm STR # slave PCM name
1160 pcm { } # slave PCM definition
1198 pcm.dmix_44 {
1203 pcm "hw:0"
1209 You can hear 48000 Hz samples still using this dmix pcm via plug plugin
1218 pcm.dmixoss {
1223 pcm "hw:0"
1234 pcm.dmixoss {