Lines Matching refs:track

409 audio_tracet(const char *funcname, audio_track_t *track, const char *fmt, ...)  in audio_tracet()  argument
414 snprintf(hdr, sizeof(hdr), "#%d ", track->id); in audio_tracet()
416 audio_vtrace(track->mixer->sc, funcname, hdr, fmt, ap); in audio_tracet()
466 audio_track_bufstat(audio_track_t *track, struct audio_track_debugbuf *buf) in audio_track_bufstat() argument
472 track->outbuf.head, track->outbuf.used, track->outbuf.capacity); in audio_track_bufstat()
473 if (track->freq.filter) in audio_track_bufstat()
475 track->freq.srcbuf.head, in audio_track_bufstat()
476 track->freq.srcbuf.used, in audio_track_bufstat()
477 track->freq.srcbuf.capacity); in audio_track_bufstat()
478 if (track->chmix.filter) in audio_track_bufstat()
480 track->chmix.srcbuf.used); in audio_track_bufstat()
481 if (track->chvol.filter) in audio_track_bufstat()
483 track->chvol.srcbuf.used); in audio_track_bufstat()
484 if (track->codec.filter) in audio_track_bufstat()
486 track->codec.srcbuf.used); in audio_track_bufstat()
488 track->usrbuf.head, track->usrbuf.used, track->usrbuf_usedhigh); in audio_track_bufstat()
733 audio_track_is_playback(const audio_track_t *track) in audio_track_is_playback() argument
736 return ((track->mode & AUMODE_PLAY) != 0); in audio_track_is_playback()
742 audio_track_is_record(const audio_track_t *track)
745 return ((track->mode & AUMODE_RECORD) != 0);
1696 audio_track_waitio(struct audio_softc *sc, audio_track_t *track, in audio_track_waitio() argument
1701 KASSERT(track); in audio_track_waitio()
1705 error = cv_timedwait_sig(&track->mixer->outcv, sc->sc_lock, in audio_track_waitio()
1710 TRACET(2, track, "timeout (suspending)"); in audio_track_waitio()
1718 TRACET(2, track, "cv_timedwait_sig failed %d", error); in audio_track_waitio()
1720 audio_ring_t *usrbuf = &track->usrbuf; in audio_track_waitio()
1721 audio_ring_t *outbuf = &track->outbuf; in audio_track_waitio()
1724 mess, (int)track->seq, in audio_track_waitio()
1725 usrbuf->used, track->usrbuf_usedhigh, in audio_track_waitio()
1729 TRACET(3, track, "wakeup"); in audio_track_waitio()
1741 audio_track_lock_tryenter(audio_track_t *track) in audio_track_lock_tryenter() argument
1744 if (atomic_swap_uint(&track->lock, 1) != 0) in audio_track_lock_tryenter()
1754 audio_track_lock_enter(audio_track_t *track) in audio_track_lock_enter() argument
1758 while (audio_track_lock_tryenter(track) == false) in audio_track_lock_enter()
1766 audio_track_lock_exit(audio_track_t *track) in audio_track_lock_exit() argument
1769 atomic_store_release(&track->lock, 0); in audio_track_lock_exit()
2786 audio_track_t *track; in audio_read() local
2796 track = file->rtrack; in audio_read()
2797 if (track == NULL) { in audio_read()
2802 if (track->mmapped) in audio_read()
2805 TRACET(2, track, "resid=%zd ioflag=0x%x", uio->uio_resid, ioflag); in audio_read()
2820 usrbuf = &track->usrbuf; in audio_read()
2821 input = track->input; in audio_read()
2827 TRACET(3, track, in audio_read()
2837 audio_track_lock_enter(track); in audio_read()
2839 audio_track_lock_exit(track); in audio_read()
2848 TRACET(3, track, "sleep"); in audio_read()
2849 error = audio_track_waitio(sc, track, "audio_read"); in audio_read()
2857 audio_track_lock_enter(track); in audio_read()
2860 audio_track_record(track); in audio_read()
2868 audio_track_lock_exit(track); in audio_read()
2875 TRACET(3, track, "uiomove(len=%d) usrbuf=%d/%d/C%d", in audio_read()
2879 audio_track_lock_exit(track); in audio_read()
2907 audio_track_t *track; in audio_write() local
2912 track = file->ptrack; in audio_write()
2913 if (track == NULL) in audio_write()
2917 if (track->mmapped) in audio_write()
2920 TRACET(2, track, "%sresid=%zd pid=%d.%d ioflag=0x%x", in audio_write()
2925 track->eofcounter++; in audio_write()
2945 usrbuf = &track->usrbuf; in audio_write()
2946 outbuf = &track->outbuf; in audio_write()
2947 track->pstate = AUDIO_STATE_RUNNING; in audio_write()
2953 TRACET(3, track, "while resid=%zd usrbuf=%d/%d/H%d", in audio_write()
2955 usrbuf->head, usrbuf->used, track->usrbuf_usedhigh); in audio_write()
2961 audio_track_lock_enter(track); in audio_write()
2962 full = (usrbuf->used >= track->usrbuf_usedhigh && in audio_write()
2964 audio_track_lock_exit(track); in audio_write()
2974 TRACET(3, track, "sleep usrbuf=%d/H%d", in audio_write()
2975 usrbuf->used, track->usrbuf_usedhigh); in audio_write()
2976 error = audio_track_waitio(sc, track, "audio_write"); in audio_write()
2984 audio_track_lock_enter(track); in audio_write()
2987 bytes = uimin(track->usrbuf_usedhigh - usrbuf->used, in audio_write()
2995 audio_track_lock_exit(track); in audio_write()
3002 TRACET(3, track, "uiomove(len=%d) usrbuf=%d/%d/C%d", in audio_write()
3009 while (usrbuf->used >= track->usrbuf_blksize && in audio_write()
3011 audio_track_play(track); in audio_write()
3014 audio_track_lock_exit(track); in audio_write()
3018 TRACET(3, track, "done error=%d", error); in audio_write()
3031 audio_track_t *track; in audio_ioctl() local
3084 track = file->rtrack; in audio_ioctl()
3085 if (track) { in audio_ioctl()
3086 val = audio_track_readablebytes(track); in audio_ioctl()
3088 TRACET(2, track, "pid=%d.%d FIONREAD bytes=%d", in audio_ioctl()
3122 track = (cmd == AUDIO_PERROR) ? file->ptrack : file->rtrack; in audio_ioctl()
3123 if (track) { in audio_ioctl()
3124 val = frametobyte(&track->usrbuf.fmt, in audio_ioctl()
3125 track->dropframes); in audio_ioctl()
3127 TRACET(2, track, "%s bytes=%d", pre, val); in audio_ioctl()
3135 track = file->rtrack; in audio_ioctl()
3136 if (track == NULL) { in audio_ioctl()
3146 stamp = track->stamp; in audio_ioctl()
3147 offset = auring_tail(track->input); in audio_ioctl()
3152 ao->samples = stamp * track->usrbuf_blksize; in audio_ioctl()
3153 ao->deltablks = stamp - track->last_stamp; in audio_ioctl()
3154 ao->offset = audio_track_inputblk_as_usrbyte(track, offset); in audio_ioctl()
3155 TRACET(2, track, "%s samples=%u deltablks=%u offset=%u", in audio_ioctl()
3158 track->last_stamp = stamp; in audio_ioctl()
3163 track = file->ptrack; in audio_ioctl()
3164 if (track == NULL) { in audio_ioctl()
3174 stamp = track->stamp; in audio_ioctl()
3175 offset = track->usrbuf.head; in audio_ioctl()
3180 ao->samples = stamp * track->usrbuf_blksize; in audio_ioctl()
3181 ao->deltablks = stamp - track->last_stamp; in audio_ioctl()
3183 TRACET(2, track, "%s samples=%u deltablks=%u offset=%u", in audio_ioctl()
3186 track->last_stamp = stamp; in audio_ioctl()
3190 track = file->ptrack; in audio_ioctl()
3191 if (track) { in audio_ioctl()
3192 val = track->usrbuf.used; in audio_ioctl()
3194 TRACET(2, track, "%s bytes=%d", pre, val); in audio_ioctl()
3234 track = file->ptrack; in audio_ioctl()
3235 if (track) { in audio_ioctl()
3236 TRACET(2, track, "%s", pre); in audio_ioctl()
3238 error = audio_track_drain(sc, track); in audio_ioctl()
3363 audio_track_inputblk_as_usrbyte(const audio_track_t *track, int n) in audio_track_inputblk_as_usrbyte() argument
3371 input_fpb = track->mixer->frames_per_block; in audio_track_inputblk_as_usrbyte()
3373 return (n / input_fpb) * track->usrbuf_blksize; in audio_track_inputblk_as_usrbyte()
3380 audio_track_readablebytes(const audio_track_t *track) in audio_track_readablebytes() argument
3384 KASSERT(track); in audio_track_readablebytes()
3385 KASSERT(track->mode == AUMODE_RECORD); in audio_track_readablebytes()
3398 bytes = audio_track_inputblk_as_usrbyte(track, track->input->used); in audio_track_readablebytes()
3399 if (track->input->used < track->input->capacity) { in audio_track_readablebytes()
3400 bytes += track->usrbuf.used; in audio_track_readablebytes()
3412 audio_track_t *track; in audio_poll() local
3432 track = file->rtrack; in audio_poll()
3433 if (track) { in audio_poll()
3436 used = audio_track_readablebytes(track); in audio_poll()
3442 track = file->ptrack; in audio_poll()
3443 if (track) { in audio_poll()
3445 if (track->usrbuf.used <= track->usrbuf_usedlow) in audio_poll()
3496 audio_track_t *track; in filt_audioread_event() local
3499 track = file->rtrack; in filt_audioread_event()
3506 if (track == NULL) { in filt_audioread_event()
3512 kn->kn_data = audio_track_readablebytes(track); in filt_audioread_event()
3543 audio_track_t *track; in filt_audiowrite_event() local
3546 track = file->ptrack; in filt_audiowrite_event()
3553 if (track == NULL) { in filt_audiowrite_event()
3559 kn->kn_data = track->usrbuf_usedhigh - track->usrbuf.used; in filt_audiowrite_event()
3561 return (track->usrbuf.used < track->usrbuf_usedlow); in filt_audiowrite_event()
3606 audio_track_t *track; in audio_mmap() local
3635 track = file->ptrack; in audio_mmap()
3637 track = file->rtrack; in audio_mmap()
3641 track = file->ptrack; in audio_mmap()
3643 if (track == NULL) in audio_mmap()
3647 if (track->mmapped) in audio_mmap()
3651 vsize = roundup2(MAX(track->usrbuf.capacity, PAGE_SIZE), PAGE_SIZE); in audio_mmap()
3688 audio_track_lock_enter(track); in audio_mmap()
3689 kmem_free(track->usrbuf.mem, track->usrbuf_allocsize); in audio_mmap()
3690 track->usrbuf.mem = (void *)vstart; in audio_mmap()
3691 track->usrbuf_allocsize = vsize; in audio_mmap()
3692 memset(track->usrbuf.mem, 0, vsize); in audio_mmap()
3693 track->mmapped = true; in audio_mmap()
3694 audio_track_lock_exit(track); in audio_mmap()
3785 audio_free_usrbuf(audio_track_t *track) in audio_free_usrbuf() argument
3790 if (track->usrbuf_allocsize != 0) { in audio_free_usrbuf()
3791 if (track->mmapped) { in audio_free_usrbuf()
3798 vstart = (vaddr_t)track->usrbuf.mem; in audio_free_usrbuf()
3799 vsize = track->usrbuf_allocsize; in audio_free_usrbuf()
3801 track->mmapped = false; in audio_free_usrbuf()
3803 kmem_free(track->usrbuf.mem, track->usrbuf_allocsize); in audio_free_usrbuf()
3806 track->usrbuf.mem = NULL; in audio_free_usrbuf()
3807 track->usrbuf.capacity = 0; in audio_free_usrbuf()
3808 track->usrbuf_allocsize = 0; in audio_free_usrbuf()
3967 audio_track_t *track; in audio_track_freq_up() local
3982 track = arg->context; in audio_track_freq_up()
3983 KASSERT(track); in audio_track_freq_up()
3984 src = &track->freq.srcbuf; in audio_track_freq_up()
3985 dst = track->freq.dst; in audio_track_freq_up()
3992 KASSERTMSG(src->head % track->mixer->frames_per_block == 0, in audio_track_freq_up()
3994 src->head, track->mixer->frames_per_block); in audio_track_freq_up()
4028 prev[ch] = track->freq_prev[ch]; in audio_track_freq_up()
4029 curr[ch] = track->freq_curr[ch]; in audio_track_freq_up()
4033 step = track->freq_step; in audio_track_freq_up()
4034 t = track->freq_current; in audio_track_freq_up()
4042 PRINTF("upstart step=%d leap=%d", step, track->freq_leap); in audio_track_freq_up()
4084 t += track->freq_leap; in audio_track_freq_up()
4086 track->freq_current = t; in audio_track_freq_up()
4088 track->freq_prev[ch] = prev[ch]; in audio_track_freq_up()
4089 track->freq_curr[ch] = curr[ch]; in audio_track_freq_up()
4100 audio_track_t *track; in audio_track_freq_down() local
4111 track = arg->context; in audio_track_freq_down()
4112 KASSERT(track); in audio_track_freq_down()
4113 src = &track->freq.srcbuf; in audio_track_freq_down()
4114 dst = track->freq.dst; in audio_track_freq_down()
4122 KASSERTMSG(src->head % track->mixer->frames_per_block == 0, in audio_track_freq_down()
4124 src->head, track->mixer->frames_per_block); in audio_track_freq_down()
4128 t = track->freq_current; in audio_track_freq_down()
4129 step = track->freq_step; in audio_track_freq_down()
4131 PRINTF("downstart step=%d leap=%d", step, track->freq_leap); in audio_track_freq_down()
4147 t += track->freq_leap; in audio_track_freq_down()
4151 track->freq_current = t % 65536; in audio_track_freq_down()
4161 audio_track_t *track; in audio_track_create() local
4164 track = kmem_zalloc(sizeof(*track), KM_SLEEP); in audio_track_create()
4166 track->id = newid++; in audio_track_create()
4167 track->mixer = mixer; in audio_track_create()
4168 track->mode = mixer->mode; in audio_track_create()
4171 TRACET(3, track, "for %s", in audio_track_create()
4175 track->volume = 256; in audio_track_create()
4178 track->ch_volume[i] = 256; in audio_track_create()
4181 return track; in audio_track_create()
4190 audio_track_destroy(audio_track_t *track) in audio_track_destroy() argument
4193 KASSERT(track); in audio_track_destroy()
4195 audio_free_usrbuf(track); in audio_track_destroy()
4196 audio_free(track->codec.srcbuf.mem); in audio_track_destroy()
4197 audio_free(track->chvol.srcbuf.mem); in audio_track_destroy()
4198 audio_free(track->chmix.srcbuf.mem); in audio_track_destroy()
4199 audio_free(track->freq.srcbuf.mem); in audio_track_destroy()
4200 audio_free(track->outbuf.mem); in audio_track_destroy()
4202 kmem_free(track, sizeof(*track)); in audio_track_destroy()
4211 audio_track_get_codec(audio_track_t *track, const audio_format2_t *src, in audio_track_get_codec() argument
4233 TRACET(1, track, "unsupported %s stride %d", in audio_track_get_codec()
4256 TRACET(1, track, "unsupported %s stride %d", in audio_track_get_codec()
4263 TRACET(1, track, "unsupported encoding"); in audio_track_get_codec()
4269 TRACET(2, track, "src %s", buf); in audio_track_get_codec()
4271 TRACET(2, track, "dst %s", buf); in audio_track_get_codec()
4284 audio_track_init_codec(audio_track_t *track, audio_ring_t **last_dstp) in audio_track_init_codec() argument
4294 KASSERT(track); in audio_track_init_codec()
4298 srcfmt = &track->inputfmt; in audio_track_init_codec()
4299 srcbuf = &track->codec.srcbuf; in audio_track_init_codec()
4305 track->codec.dst = last_dst; in audio_track_init_codec()
4312 track->codec.filter = audio_track_get_codec(track, in audio_track_init_codec()
4314 if (track->codec.filter == NULL) { in audio_track_init_codec()
4321 srcbuf->capacity = frame_per_block(track->mixer, &srcbuf->fmt); in audio_track_init_codec()
4325 arg = &track->codec.arg; in audio_track_init_codec()
4335 track->codec.filter = NULL; in audio_track_init_codec()
4347 audio_track_init_chvol(audio_track_t *track, audio_ring_t **last_dstp) in audio_track_init_chvol() argument
4357 KASSERT(track); in audio_track_init_chvol()
4361 srcfmt = &track->inputfmt; in audio_track_init_chvol()
4362 srcbuf = &track->chvol.srcbuf; in audio_track_init_chvol()
4368 if (track->ch_volume[ch] != 256) { in audio_track_init_chvol()
4375 track->chvol.dst = last_dst; in audio_track_init_chvol()
4376 track->chvol.filter = audio_track_chvol; in audio_track_init_chvol()
4383 srcbuf->capacity = frame_per_block(track->mixer, &srcbuf->fmt); in audio_track_init_chvol()
4387 arg = &track->chvol.arg; in audio_track_init_chvol()
4390 arg->context = track->ch_volume; in audio_track_init_chvol()
4396 track->chvol.filter = NULL; in audio_track_init_chvol()
4408 audio_track_init_chmix(audio_track_t *track, audio_ring_t **last_dstp) in audio_track_init_chmix() argument
4420 KASSERT(track); in audio_track_init_chmix()
4424 srcfmt = &track->inputfmt; in audio_track_init_chmix()
4425 srcbuf = &track->chmix.srcbuf; in audio_track_init_chmix()
4431 track->chmix.dst = last_dst; in audio_track_init_chmix()
4434 track->chmix.filter = audio_track_chmix_mixLR; in audio_track_init_chmix()
4436 track->chmix.filter = audio_track_chmix_dupLR; in audio_track_init_chmix()
4438 track->chmix.filter = audio_track_chmix_shrink; in audio_track_init_chmix()
4440 track->chmix.filter = audio_track_chmix_expand; in audio_track_init_chmix()
4449 srcbuf->capacity = frame_per_block(track->mixer, &srcbuf->fmt); in audio_track_init_chmix()
4453 arg = &track->chmix.arg; in audio_track_init_chmix()
4462 track->chmix.filter = NULL; in audio_track_init_chmix()
4474 audio_track_init_freq(audio_track_t *track, audio_ring_t **last_dstp) in audio_track_init_freq() argument
4488 KASSERT(track); in audio_track_init_freq()
4492 srcfmt = &track->inputfmt; in audio_track_init_freq()
4493 srcbuf = &track->freq.srcbuf; in audio_track_init_freq()
4499 track->freq.dst = last_dst; in audio_track_init_freq()
4501 memset(track->freq_prev, 0, sizeof(track->freq_prev)); in audio_track_init_freq()
4502 memset(track->freq_curr, 0, sizeof(track->freq_curr)); in audio_track_init_freq()
4505 track->freq_step = (uint64_t)srcfreq * 65536 / dstfreq; in audio_track_init_freq()
4507 dst_capacity = frame_per_block(track->mixer, dstfmt); in audio_track_init_freq()
4509 track->freq_leap = (mod * dst_capacity + dstfreq / 2) / dstfreq; in audio_track_init_freq()
4511 if (track->freq_step < 65536) { in audio_track_init_freq()
4512 track->freq.filter = audio_track_freq_up; in audio_track_init_freq()
4514 track->freq_current = 65536; in audio_track_init_freq()
4516 track->freq.filter = audio_track_freq_down; in audio_track_init_freq()
4517 track->freq_current = 0; in audio_track_init_freq()
4525 srcbuf->capacity = frame_per_block(track->mixer, &srcbuf->fmt); in audio_track_init_freq()
4529 arg = &track->freq.arg; in audio_track_init_freq()
4532 arg->context = track; in audio_track_init_freq()
4538 track->freq.filter = NULL; in audio_track_init_freq()
4651 audio_track_set_format(audio_track_t *track, audio_format2_t *usrfmt) in audio_track_set_format() argument
4660 KASSERT(track); in audio_track_set_format()
4662 is_playback = audio_track_is_playback(track); in audio_track_set_format()
4665 if (track->mmapped) in audio_track_set_format()
4669 track->usrbuf.fmt = *usrfmt; in audio_track_set_format()
4698 track->usrbuf_blksize = frametobyte(&track->usrbuf.fmt, in audio_track_set_format()
4699 frame_per_block(track->mixer, &track->usrbuf.fmt)); in audio_track_set_format()
4700 track->usrbuf.head = 0; in audio_track_set_format()
4701 track->usrbuf.used = 0; in audio_track_set_format()
4703 newbufsize = track->usrbuf_blksize * AUMINNOBLK; in audio_track_set_format()
4705 newbufsize = rounddown(65536, track->usrbuf_blksize); in audio_track_set_format()
4708 newbufsize = track->usrbuf_blksize; in audio_track_set_format()
4709 newvsize = track->usrbuf_blksize; in audio_track_set_format()
4716 if (newvsize != track->usrbuf_allocsize) { in audio_track_set_format()
4717 if (track->usrbuf_allocsize != 0) { in audio_track_set_format()
4718 kmem_free(track->usrbuf.mem, track->usrbuf_allocsize); in audio_track_set_format()
4720 TRACET(2, track, "usrbuf_allocsize %d -> %d", in audio_track_set_format()
4721 track->usrbuf_allocsize, newvsize); in audio_track_set_format()
4722 track->usrbuf.mem = kmem_alloc(newvsize, KM_SLEEP); in audio_track_set_format()
4723 track->usrbuf_allocsize = newvsize; in audio_track_set_format()
4725 track->usrbuf.capacity = newbufsize; in audio_track_set_format()
4730 track->usrbuf_usedhigh = track->usrbuf.capacity; in audio_track_set_format()
4731 track->usrbuf_usedlow = track->usrbuf.capacity * 3 / 4; in audio_track_set_format()
4734 track->usrbuf_usedhigh = track->usrbuf.capacity; in audio_track_set_format()
4735 track->usrbuf_usedlow = 0; in audio_track_set_format()
4739 last_dst = &track->outbuf; in audio_track_set_format()
4742 track->inputfmt = *usrfmt; in audio_track_set_format()
4743 track->outbuf.fmt = track->mixer->track_fmt; in audio_track_set_format()
4745 if ((error = audio_track_init_freq(track, &last_dst)) != 0) in audio_track_set_format()
4747 if ((error = audio_track_init_chmix(track, &last_dst)) != 0) in audio_track_set_format()
4749 if ((error = audio_track_init_chvol(track, &last_dst)) != 0) in audio_track_set_format()
4751 if ((error = audio_track_init_codec(track, &last_dst)) != 0) in audio_track_set_format()
4755 track->inputfmt = track->mixer->track_fmt; in audio_track_set_format()
4756 track->outbuf.fmt = *usrfmt; in audio_track_set_format()
4758 if ((error = audio_track_init_codec(track, &last_dst)) != 0) in audio_track_set_format()
4760 if ((error = audio_track_init_chvol(track, &last_dst)) != 0) in audio_track_set_format()
4762 if ((error = audio_track_init_chmix(track, &last_dst)) != 0) in audio_track_set_format()
4764 if ((error = audio_track_init_freq(track, &last_dst)) != 0) in audio_track_set_format()
4770 if (track->freq.filter) { in audio_track_set_format()
4772 &track->freq.srcbuf.fmt); in audio_track_set_format()
4774 &track->freq.dst->fmt); in audio_track_set_format()
4776 if (track->chmix.filter) { in audio_track_set_format()
4778 &track->chmix.srcbuf.fmt); in audio_track_set_format()
4780 &track->chmix.dst->fmt); in audio_track_set_format()
4782 if (track->chvol.filter) { in audio_track_set_format()
4784 &track->chvol.srcbuf.fmt); in audio_track_set_format()
4786 &track->chvol.dst->fmt); in audio_track_set_format()
4788 if (track->codec.filter) { in audio_track_set_format()
4790 &track->codec.srcbuf.fmt); in audio_track_set_format()
4792 &track->codec.dst->fmt); in audio_track_set_format()
4798 track->input = last_dst; in audio_track_set_format()
4805 track->outbuf.head = 0; in audio_track_set_format()
4806 track->outbuf.used = 0; in audio_track_set_format()
4807 track->outbuf.capacity = frame_per_block(track->mixer, in audio_track_set_format()
4808 &track->outbuf.fmt); in audio_track_set_format()
4810 track->outbuf.capacity *= NBLKOUT; in audio_track_set_format()
4811 len = auring_bytelen(&track->outbuf); in audio_track_set_format()
4812 track->outbuf.mem = audio_realloc(track->outbuf.mem, len); in audio_track_set_format()
4822 input_fpb = frame_per_block(track->mixer, &track->input->fmt); in audio_track_set_format()
4823 track->input->capacity = input_fpb * NBLKIN; in audio_track_set_format()
4824 len = auring_bytelen(track->input); in audio_track_set_format()
4825 track->input->mem = audio_realloc(track->input->mem, len); in audio_track_set_format()
4834 track->outbuf.capacity * frametobyte(&track->outbuf.fmt,1)); in audio_track_set_format()
4835 if (track->freq.filter) in audio_track_set_format()
4837 track->freq.srcbuf.capacity * in audio_track_set_format()
4838 frametobyte(&track->freq.srcbuf.fmt, 1)); in audio_track_set_format()
4839 if (track->chmix.filter) in audio_track_set_format()
4841 track->chmix.srcbuf.capacity * in audio_track_set_format()
4842 frametobyte(&track->chmix.srcbuf.fmt, 1)); in audio_track_set_format()
4843 if (track->chvol.filter) in audio_track_set_format()
4845 track->chvol.srcbuf.capacity * in audio_track_set_format()
4846 frametobyte(&track->chvol.srcbuf.fmt, 1)); in audio_track_set_format()
4847 if (track->codec.filter) in audio_track_set_format()
4849 track->codec.srcbuf.capacity * in audio_track_set_format()
4850 frametobyte(&track->codec.srcbuf.fmt, 1)); in audio_track_set_format()
4852 " usr=%d", track->usrbuf.capacity); in audio_track_set_format()
4855 TRACET(0, track, "bufsize%s%s%s%s%s%s", in audio_track_set_format()
4859 TRACET(0, track, "bufsize%s%s%s%s%s%s", in audio_track_set_format()
4868 audio_free_usrbuf(track); in audio_track_set_format()
4869 audio_free(track->codec.srcbuf.mem); in audio_track_set_format()
4870 audio_free(track->chvol.srcbuf.mem); in audio_track_set_format()
4871 audio_free(track->chmix.srcbuf.mem); in audio_track_set_format()
4872 audio_free(track->freq.srcbuf.mem); in audio_track_set_format()
4873 audio_free(track->outbuf.mem); in audio_track_set_format()
4883 audio_append_silence(audio_track_t *track, audio_ring_t *ring) in audio_append_silence() argument
4888 KASSERT(track); in audio_append_silence()
4897 fpb = frame_per_block(track->mixer, &ring->fmt); in audio_append_silence()
4924 audio_apply_stage(audio_track_t *track, audio_stage_t *stage, bool isfreq) in audio_apply_stage() argument
4931 KASSERT(track); in audio_apply_stage()
4939 count = uimin(dstcount, track->mixer->frames_per_block); in audio_apply_stage()
4965 audio_track_play(audio_track_t *track) in audio_track_play() argument
4973 KASSERT(track); in audio_track_play()
4974 KASSERT(track->lock); in audio_track_play()
4975 TRACET(4, track, "start pstate=%d", track->pstate); in audio_track_play()
4978 KASSERT(track->usrbuf.used > 0); in audio_track_play()
4980 count = auring_get_contig_free(&track->outbuf); in audio_track_play()
4981 KASSERTMSG(count >= frame_per_block(track->mixer, &track->outbuf.fmt), in audio_track_play()
4983 count, frame_per_block(track->mixer, &track->outbuf.fmt)); in audio_track_play()
4985 usrbuf = &track->usrbuf; in audio_track_play()
4986 input = track->input; in audio_track_play()
5004 count = uimin(usrbuf->used, track->usrbuf_blksize) / framesize; in audio_track_play()
5035 if (track->codec.filter) in audio_track_play()
5036 audio_apply_stage(track, &track->codec, false); in audio_track_play()
5039 if (track->chvol.filter) in audio_track_play()
5040 audio_apply_stage(track, &track->chvol, false); in audio_track_play()
5043 if (track->chmix.filter) in audio_track_play()
5044 audio_apply_stage(track, &track->chmix, false); in audio_track_play()
5051 if (track->freq.filter) { in audio_track_play()
5053 n = audio_append_silence(track, &track->freq.srcbuf); in audio_track_play()
5055 TRACET(4, track, in audio_track_play()
5058 track->freq.srcbuf.head, in audio_track_play()
5059 track->freq.srcbuf.used, in audio_track_play()
5060 track->freq.srcbuf.capacity); in audio_track_play()
5062 if (track->freq.srcbuf.used > 0) { in audio_track_play()
5063 audio_apply_stage(track, &track->freq, true); in audio_track_play()
5067 if (bytes < track->usrbuf_blksize) { in audio_track_play()
5076 TRACET(4, track, "reset stage"); in audio_track_play()
5077 if (track->codec.filter) { in audio_track_play()
5078 KASSERT(track->codec.srcbuf.used == 0); in audio_track_play()
5079 track->codec.srcbuf.head = 0; in audio_track_play()
5081 if (track->chvol.filter) { in audio_track_play()
5082 KASSERT(track->chvol.srcbuf.used == 0); in audio_track_play()
5083 track->chvol.srcbuf.head = 0; in audio_track_play()
5085 if (track->chmix.filter) { in audio_track_play()
5086 KASSERT(track->chmix.srcbuf.used == 0); in audio_track_play()
5087 track->chmix.srcbuf.head = 0; in audio_track_play()
5089 if (track->freq.filter) { in audio_track_play()
5090 KASSERT(track->freq.srcbuf.used == 0); in audio_track_play()
5091 track->freq.srcbuf.head = 0; in audio_track_play()
5095 track->stamp++; in audio_track_play()
5100 audio_track_bufstat(track, &m); in audio_track_play()
5101 TRACET(0, track, "end%s%s%s%s%s%s", in audio_track_play()
5111 audio_track_record(audio_track_t *track) in audio_track_record() argument
5119 KASSERT(track); in audio_track_record()
5120 KASSERT(track->lock); in audio_track_record()
5122 if (auring_get_contig_used(track->input) == 0) { in audio_track_record()
5123 TRACET(4, track, "input->used == 0"); in audio_track_record()
5128 if (track->freq.filter) { in audio_track_record()
5129 if (track->freq.srcbuf.used > 0) { in audio_track_record()
5130 audio_apply_stage(track, &track->freq, true); in audio_track_record()
5136 if (track->chmix.filter) in audio_track_record()
5137 audio_apply_stage(track, &track->chmix, false); in audio_track_record()
5140 if (track->chvol.filter) in audio_track_record()
5141 audio_apply_stage(track, &track->chvol, false); in audio_track_record()
5144 if (track->codec.filter) in audio_track_record()
5145 audio_apply_stage(track, &track->codec, false); in audio_track_record()
5148 outbuf = &track->outbuf; in audio_track_record()
5149 usrbuf = &track->usrbuf; in audio_track_record()
5163 count = uimin(count, track->usrbuf_blksize / framesize); in audio_track_record()
5195 audio_track_bufstat(track, &m); in audio_track_record()
5196 TRACET(0, track, "end%s%s%s%s%s%s", in audio_track_record()
5599 audio_track_t *track = f->ptrack; in audio_pmixer_process() local
5601 if (track == NULL) in audio_pmixer_process()
5604 if (track->is_pause) { in audio_pmixer_process()
5605 TRACET(4, track, "skip; paused"); in audio_pmixer_process()
5610 if (audio_track_lock_tryenter(track) == false) { in audio_pmixer_process()
5611 TRACET(4, track, "skip; in use"); in audio_pmixer_process()
5616 if (track->mmapped) { in audio_pmixer_process()
5617 auring_push(&track->usrbuf, track->usrbuf_blksize); in audio_pmixer_process()
5618 TRACET(4, track, "mmap; usr=%d/%d/C%d", in audio_pmixer_process()
5619 track->usrbuf.head, in audio_pmixer_process()
5620 track->usrbuf.used, in audio_pmixer_process()
5621 track->usrbuf.capacity); in audio_pmixer_process()
5624 if (track->outbuf.used < mixer->frames_per_block && in audio_pmixer_process()
5625 track->usrbuf.used > 0) { in audio_pmixer_process()
5626 TRACET(4, track, "process"); in audio_pmixer_process()
5627 audio_track_play(track); in audio_pmixer_process()
5630 if (track->outbuf.used > 0) { in audio_pmixer_process()
5631 mixed = audio_pmixer_mix_track(mixer, track, mixed); in audio_pmixer_process()
5633 TRACET(4, track, "skip; empty"); in audio_pmixer_process()
5636 audio_track_lock_exit(track); in audio_pmixer_process()
5777 audio_pmixer_mix_track(audio_trackmixer_t *mixer, audio_track_t *track, in audio_pmixer_mix_track() argument
5788 if (mixer->mixseq < track->seq) in audio_pmixer_mix_track()
5791 count = auring_get_contig_used(&track->outbuf); in audio_pmixer_mix_track()
5794 s = auring_headptr_aint(&track->outbuf); in audio_pmixer_mix_track()
5811 if (track->volume != 256) { in audio_pmixer_mix_track()
5815 *d++ = AUDIO_SCALEDOWN(v * track->volume, 8) in audio_pmixer_mix_track()
5830 if (track->volume != 256) { in audio_pmixer_mix_track()
5834 *d++ += AUDIO_SCALEDOWN(v * track->volume, 8); in audio_pmixer_mix_track()
5845 auring_take(&track->outbuf, count); in audio_pmixer_mix_track()
5852 auring_push(&track->outbuf, remain); in audio_pmixer_mix_track()
5853 auring_take(&track->outbuf, remain); in audio_pmixer_mix_track()
5860 track->seq = mixer->mixseq + 1; in audio_pmixer_mix_track()
6138 audio_track_t *track = f->rtrack; in audio_rmixer_process() local
6141 if (track == NULL) in audio_rmixer_process()
6144 if (track->is_pause) { in audio_rmixer_process()
6145 TRACET(4, track, "skip; paused"); in audio_rmixer_process()
6149 if (audio_track_lock_tryenter(track) == false) { in audio_rmixer_process()
6150 TRACET(4, track, "skip; in use"); in audio_rmixer_process()
6158 input = track->input; in audio_rmixer_process()
6162 track->dropframes += drops; in audio_rmixer_process()
6163 TRACET(4, track, "drop %d frames: inp=%d/%d/%d", in audio_rmixer_process()
6177 track->stamp++; in audio_rmixer_process()
6179 audio_track_lock_exit(track); in audio_rmixer_process()
6351 audio_track_clear(struct audio_softc *sc, audio_track_t *track) in audio_track_clear() argument
6354 KASSERT(track); in audio_track_clear()
6355 TRACET(3, track, "clear"); in audio_track_clear()
6357 audio_track_lock_enter(track); in audio_track_clear()
6360 track->usrbuf.used = 0; in audio_track_clear()
6361 track->usrbuf.head = 0; in audio_track_clear()
6362 if (track->codec.filter) { in audio_track_clear()
6363 track->codec.srcbuf.used = 0; in audio_track_clear()
6364 track->codec.srcbuf.head = 0; in audio_track_clear()
6366 if (track->chvol.filter) { in audio_track_clear()
6367 track->chvol.srcbuf.used = 0; in audio_track_clear()
6368 track->chvol.srcbuf.head = 0; in audio_track_clear()
6370 if (track->chmix.filter) { in audio_track_clear()
6371 track->chmix.srcbuf.used = 0; in audio_track_clear()
6372 track->chmix.srcbuf.head = 0; in audio_track_clear()
6374 if (track->freq.filter) { in audio_track_clear()
6375 track->freq.srcbuf.used = 0; in audio_track_clear()
6376 track->freq.srcbuf.head = 0; in audio_track_clear()
6377 if (track->freq_step < 65536) in audio_track_clear()
6378 track->freq_current = 65536; in audio_track_clear()
6380 track->freq_current = 0; in audio_track_clear()
6381 memset(track->freq_prev, 0, sizeof(track->freq_prev)); in audio_track_clear()
6382 memset(track->freq_curr, 0, sizeof(track->freq_curr)); in audio_track_clear()
6385 track->outbuf.used = 0; in audio_track_clear()
6388 track->stamp = 0; in audio_track_clear()
6389 track->last_stamp = 0; in audio_track_clear()
6390 track->dropframes = 0; in audio_track_clear()
6392 audio_track_lock_exit(track); in audio_track_clear()
6402 audio_track_drain(struct audio_softc *sc, audio_track_t *track) in audio_track_drain() argument
6408 KASSERT(track); in audio_track_drain()
6409 TRACET(3, track, "start"); in audio_track_drain()
6410 mixer = track->mixer; in audio_track_drain()
6414 if (track->is_pause) { in audio_track_drain()
6415 TRACET(3, track, "pause -> clear"); in audio_track_drain()
6416 track->pstate = AUDIO_STATE_CLEAR; in audio_track_drain()
6419 if (track->pstate == AUDIO_STATE_CLEAR) { in audio_track_drain()
6420 TRACET(3, track, "no need to drain"); in audio_track_drain()
6423 track->pstate = AUDIO_STATE_DRAINING; in audio_track_drain()
6427 TRACET(3, track, "pid=%d.%d trkseq=%d hwseq=%d out=%d/%d/%d", in audio_track_drain()
6429 (int)track->seq, (int)mixer->hwseq, in audio_track_drain()
6430 track->outbuf.head, track->outbuf.used, in audio_track_drain()
6431 track->outbuf.capacity); in audio_track_drain()
6434 audio_track_lock_enter(track); in audio_track_drain()
6435 done = (track->usrbuf.used < frametobyte(&track->inputfmt, 1) && in audio_track_drain()
6436 track->outbuf.used == 0 && in audio_track_drain()
6437 track->seq <= mixer->hwseq); in audio_track_drain()
6438 audio_track_lock_exit(track); in audio_track_drain()
6442 TRACET(3, track, "sleep"); in audio_track_drain()
6443 error = audio_track_waitio(sc, track, "audio_drain"); in audio_track_drain()
6450 track->pstate = AUDIO_STATE_CLEAR; in audio_track_drain()
6451 TRACET(3, track, "done"); in audio_track_drain()
6501 audio_track_t *track = f->rtrack; in audio_softintr_rd() local
6503 if (track == NULL) in audio_softintr_rd()
6506 TRACET(4, track, "broadcast; inp=%d/%d/%d", in audio_softintr_rd()
6507 track->input->head, in audio_softintr_rd()
6508 track->input->used, in audio_softintr_rd()
6509 track->input->capacity); in audio_softintr_rd()
6549 audio_track_t *track = f->ptrack; in audio_softintr_wr() local
6551 if (track == NULL) in audio_softintr_wr()
6554 TRACET(4, track, "broadcast; trkseq=%d out=%d/%d/%d", in audio_softintr_wr()
6555 (int)track->seq, in audio_softintr_wr()
6556 track->outbuf.head, in audio_softintr_wr()
6557 track->outbuf.used, in audio_softintr_wr()
6558 track->outbuf.capacity); in audio_softintr_wr()
6564 if (track->usrbuf.used <= track->usrbuf_usedlow && in audio_softintr_wr()
6565 !track->is_pause) { in audio_softintr_wr()
7523 audio_track_setinfo_check(audio_track_t *track, in audio_track_setinfo_check() argument
7555 if (track) { in audio_track_setinfo_check()
7556 hwfmt = &track->mixer->hwbuf.fmt; in audio_track_setinfo_check()
7583 audio_track_setinfo_water(audio_track_t *track, const struct audio_info *ai) in audio_track_setinfo_water() argument
7589 KASSERT(audio_track_is_playback(track)); in audio_track_setinfo_water()
7591 blksize = track->usrbuf_blksize; in audio_track_setinfo_water()
7592 maxblks = track->usrbuf.capacity / blksize; in audio_track_setinfo_water()
7600 track->usrbuf_usedhigh = blks * blksize; in audio_track_setinfo_water()
7606 track->usrbuf_usedlow = blks * blksize; in audio_track_setinfo_water()
7609 if (track->usrbuf_usedlow > track->usrbuf_usedhigh - blksize) { in audio_track_setinfo_water()
7610 track->usrbuf_usedlow = track->usrbuf_usedhigh - in audio_track_setinfo_water()
7806 audio_track_t *track; in audiogetinfo() local
7882 track = ptrack ? ptrack : rtrack; in audiogetinfo()
7883 if (track) { in audiogetinfo()
7884 ai->blocksize = track->usrbuf_blksize; in audiogetinfo()
7885 ai->hiwat = track->usrbuf_usedhigh / track->usrbuf_blksize; in audiogetinfo()
7886 ai->lowat = track->usrbuf_usedlow / track->usrbuf_blksize; in audiogetinfo()