Home | History | Annotate | Download | only in audio

Lines Matching defs:mixer

416 	audio_vtrace(track->mixer->sc, funcname, hdr, fmt, ap);
530 /* Number of elements of async mixer's pid */
1212 * Initialize hardware mixer.
1242 * names from the mixer descriptions. We'll need them to decode the
1243 * mixer descriptions on the next pass through the loop.
1251 * All the other types describe an actual mixer.
1273 * underlying "mixer" control. We walk through the whole list once,
1705 error = cv_timedwait_sig(&track->mixer->outcv, sc->sc_lock,
3369 * input_fpb = frame_per_block(track->mixer, &track->input->fmt);
3371 input_fpb = track->mixer->frames_per_block;
3992 KASSERTMSG(src->head % track->mixer->frames_per_block == 0,
3993 "src->head=%d track->mixer->frames_per_block=%d",
3994 src->head, track->mixer->frames_per_block);
4122 KASSERTMSG(src->head % track->mixer->frames_per_block == 0,
4123 "src->head=%d track->mixer->frames_per_block=%d",
4124 src->head, track->mixer->frames_per_block);
4159 audio_track_create(struct audio_softc *sc, audio_trackmixer_t *mixer)
4167 track->mixer = mixer;
4168 track->mode = mixer->mode;
4172 mixer->mode == AUMODE_PLAY ? "playback" : "recording");
4321 srcbuf->capacity = frame_per_block(track->mixer, &srcbuf->fmt);
4383 srcbuf->capacity = frame_per_block(track->mixer, &srcbuf->fmt);
4449 srcbuf->capacity = frame_per_block(track->mixer, &srcbuf->fmt);
4507 dst_capacity = frame_per_block(track->mixer, dstfmt);
4525 srcbuf->capacity = frame_per_block(track->mixer, &srcbuf->fmt);
4699 frame_per_block(track->mixer, &track->usrbuf.fmt));
4741 /* On playback, initialize from the mixer side in order. */
4743 track->outbuf.fmt = track->mixer->track_fmt;
4755 track->inputfmt = track->mixer->track_fmt;
4807 track->outbuf.capacity = frame_per_block(track->mixer,
4822 input_fpb = frame_per_block(track->mixer, &track->input->fmt);
4897 fpb = frame_per_block(track->mixer, &ring->fmt);
4939 count = uimin(dstcount, track->mixer->frames_per_block);
4981 KASSERTMSG(count >= frame_per_block(track->mixer, &track->outbuf.fmt),
4983 count, frame_per_block(track->mixer, &track->outbuf.fmt));
5203 * Calculate blktime [msec] from mixer(.hwbuf.fmt).
5207 audio_mixer_calc_blktime(struct audio_softc *sc, audio_trackmixer_t *mixer)
5215 fmt = &mixer->hwbuf.fmt;
5237 * Initialize the mixer corresponding to the mode.
5239 * sc->sc_[pr]mixer (corresponding to the 'mode') must be zero-filled.
5249 audio_trackmixer_t *mixer;
5266 mixer = sc->sc_pmixer;
5268 mixer = sc->sc_rmixer;
5270 mixer->sc = sc;
5271 mixer->mode = mode;
5273 mixer->hwbuf.fmt = *hwfmt;
5274 mixer->volume = 256;
5275 mixer->blktime_d = 1000;
5276 mixer->blktime_n = audio_mixer_calc_blktime(sc, mixer);
5277 sc->sc_blk_ms = mixer->blktime_n;
5280 mixer->frames_per_block = frame_per_block(mixer, &mixer->hwbuf.fmt);
5281 blksize = frametobyte(&mixer->hwbuf.fmt, mixer->frames_per_block);
5284 audio_params_t p = format2_to_params(&mixer->hwbuf.fmt);
5291 if ((rounded * NBBY) % (mixer->hwbuf.fmt.stride *
5292 mixer->hwbuf.fmt.channels) != 0) {
5299 mixer->hwbuf.fmt.stride,
5300 mixer->hwbuf.fmt.channels);
5305 mixer->frames_per_block = blksize * NBBY /
5306 (mixer->hwbuf.fmt.stride *
5307 mixer->hwbuf.fmt.channels);
5310 mixer->blktime_n = mixer->frames_per_block;
5311 mixer->blktime_d = mixer->hwbuf.fmt.sample_rate;
5313 capacity = mixer->frames_per_block * hwblks;
5314 bufsize = frametobyte(&mixer->hwbuf.fmt, capacity);
5342 capacity = mixer->frames_per_block * hwblks;
5348 mixer->hwbuf.capacity = capacity;
5352 mixer->hwbuf.mem = sc->hw_if->allocm(sc->hw_hdl, mode, bufsize);
5353 if (mixer->hwbuf.mem == NULL) {
5358 mixer->hwbuf.mem = kmem_alloc(bufsize, KM_SLEEP);
5363 cv_init(&mixer->outcv, "audiowr");
5365 cv_init(&mixer->outcv, "audiord");
5373 mixer->sih = softint_establish(SOFTINT_SERIAL | SOFTINT_MPSAFE,
5375 if (mixer->sih == NULL) {
5380 mixer->track_fmt.encoding = AUDIO_ENCODING_SLINEAR_NE;
5381 mixer->track_fmt.precision = AUDIO_INTERNAL_BITS;
5382 mixer->track_fmt.stride = AUDIO_INTERNAL_BITS;
5383 mixer->track_fmt.channels = mixer->hwbuf.fmt.channels;
5384 mixer->track_fmt.sample_rate = mixer->hwbuf.fmt.sample_rate;
5386 if (mixer->hwbuf.fmt.encoding == AUDIO_ENCODING_SLINEAR_OE &&
5387 mixer->hwbuf.fmt.precision == AUDIO_INTERNAL_BITS) {
5388 mixer->swap_endian = true;
5394 mixer->mixfmt = mixer->track_fmt;
5395 mixer->mixfmt.precision *= 2;
5396 mixer->mixfmt.stride *= 2;
5398 len = mixer->frames_per_block * mixer->mixfmt.channels *
5399 mixer->mixfmt.stride / NBBY;
5400 mixer->mixsample = audio_realloc(mixer->mixsample, len);
5406 mixer->mixfmt = mixer->track_fmt;
5407 len = mixer->frames_per_block * mixer->mixfmt.channels *
5408 mixer->mixfmt.stride / NBBY;
5409 mixer->mixsample = audio_realloc(mixer->mixsample, len);
5413 mixer->codec = reg->codec;
5414 mixer->codecarg.context = reg->context;
5416 mixer->codecarg.srcfmt = &mixer->track_fmt;
5417 mixer->codecarg.dstfmt = &mixer->hwbuf.fmt;
5419 mixer->codecarg.srcfmt = &mixer->hwbuf.fmt;
5420 mixer->codecarg.dstfmt = &mixer->track_fmt;
5422 mixer->codecbuf.fmt = mixer->track_fmt;
5423 mixer->codecbuf.capacity = mixer->frames_per_block;
5424 len = auring_bytelen(&mixer->codecbuf);
5425 mixer->codecbuf.mem = audio_realloc(mixer->codecbuf.mem, len);
5430 if (mixer->codec || mixer->swap_endian) {
5433 audio_encoding_name(mixer->hwbuf.fmt.encoding),
5434 mixer->hwbuf.fmt.precision);
5436 blkms = mixer->blktime_n * 1000 / mixer->blktime_d;
5437 blkdms = (mixer->blktime_n * 10000 / mixer->blktime_d) % 10;
5444 audio_encoding_name(mixer->track_fmt.encoding),
5445 mixer->track_fmt.precision,
5447 mixer->track_fmt.channels,
5448 mixer->track_fmt.sample_rate,
5456 audio_mixer_destroy(sc, mixer);
5461 * Releases all resources of 'mixer'.
5462 * Note that it does not release the memory area of 'mixer' itself.
5466 audio_mixer_destroy(struct audio_softc *sc, audio_trackmixer_t *mixer)
5472 bufsize = frametobyte(&mixer->hwbuf.fmt, mixer->hwbuf.capacity);
5474 if (mixer->hwbuf.mem != NULL) {
5477 sc->hw_if->freem(sc->hw_hdl, mixer->hwbuf.mem, bufsize);
5479 kmem_free(mixer->hwbuf.mem, bufsize);
5481 mixer->hwbuf.mem = NULL;
5484 audio_free(mixer->codecbuf.mem);
5485 audio_free(mixer->mixsample);
5487 cv_destroy(&mixer->outcv);
5489 if (mixer->sih) {
5490 softint_disestablish(mixer->sih);
5491 mixer->sih = NULL;
5496 * Starts playback mixer.
5504 audio_trackmixer_t *mixer;
5513 mixer = sc->sc_pmixer;
5516 (int)mixer->mixseq, (int)mixer->hwseq,
5517 mixer->hwbuf.head, mixer->hwbuf.used, mixer->hwbuf.capacity,
5522 while (mixer->hwbuf.used < mixer->frames_per_block * minimum) {
5531 (int)mixer->mixseq, (int)mixer->hwseq,
5532 mixer->hwbuf.head, mixer->hwbuf.used, mixer->hwbuf.capacity);
5577 audio_trackmixer_t *mixer;
5586 mixer = sc->sc_pmixer;
5588 frame_count = mixer->frames_per_block;
5589 KASSERTMSG(auring_get_contig_free(&mixer->hwbuf) >= frame_count,
5591 auring_get_contig_free(&mixer->hwbuf), frame_count);
5592 sample_count = frame_count * mixer->mixfmt.channels;
5594 mixer->mixseq++;
5624 if (track->outbuf.used < mixer->frames_per_block &&
5631 mixed = audio_pmixer_mix_track(mixer, track, mixed);
5641 memset(mixer->mixsample, 0,
5642 frametobyte(&mixer->mixfmt, frame_count));
5646 audio_pmixer_agc(mixer, sample_count);
5650 if (mixer->volume < 256) {
5651 m = mixer->mixsample;
5653 *m = AUDIO_SCALEDOWN(*m * mixer->volume, 8);
5663 mixer->voltimer += mixer->blktime_n;
5664 if (mixer->voltimer * 4 >= mixer->blktime_d) {
5665 mixer->volume++;
5666 mixer->voltimer = 0;
5668 TRACE(1, "volume recover: %d", mixer->volume);
5678 m = mixer->mixsample;
5680 if (mixer->codec) {
5683 h = auring_tailptr_aint(&mixer->codecbuf);
5688 auring_push(&mixer->codecbuf, frame_count);
5689 mixer->codecarg.src = auring_headptr(&mixer->codecbuf);
5690 mixer->codecarg.dst = auring_tailptr(&mixer->hwbuf);
5691 mixer->codecarg.count = frame_count;
5692 mixer->codec(&mixer->codecarg);
5693 auring_take(&mixer->codecbuf, mixer->codecarg.count);
5698 mixer->codecarg.src = m;
5699 mixer->codecarg.dst = auring_tailptr(&mixer->hwbuf);
5700 mixer->codecarg.count = frame_count;
5701 mixer->codecarg.srcfmt = &mixer->mixfmt;
5702 mixer->codecarg.dstfmt = &mixer->hwbuf.fmt;
5703 audio_mixsample_to_linear(&mixer->codecarg);
5706 auring_push(&mixer->hwbuf, frame_count);
5709 (int)mixer->mixseq,
5710 mixer->hwbuf.head, mixer->hwbuf.used, mixer->hwbuf.capacity,
5719 audio_pmixer_agc(audio_trackmixer_t *mixer, int sample_count)
5731 sc = mixer->sc;
5736 m = mixer->mixsample;
5760 if (newvol <= mixer->volume) {
5761 mixer->volume = newvol;
5762 mixer->voltimer = 0;
5764 TRACE(1, "auto volume adjust: %d", mixer->volume);
5777 audio_pmixer_mix_track(audio_trackmixer_t *mixer, audio_track_t *track,
5788 if (mixer->mixseq < track->seq)
5792 count = uimin(count, mixer->frames_per_block);
5795 d = mixer->mixsample;
5807 sample_count = count * mixer->mixfmt.channels;
5825 for (; i < mixer->frames_per_block * mixer->mixfmt.channels; i++)
5850 remain = mixer->frames_per_block - count;
5860 track->seq = mixer->mixseq + 1;
5872 audio_trackmixer_t *mixer;
5879 mixer = sc->sc_pmixer;
5882 mixer->hwbuf.head, mixer->hwbuf.used, mixer->hwbuf.capacity);
5883 KASSERTMSG(mixer->hwbuf.used >= mixer->frames_per_block,
5884 "mixer->hwbuf.used=%d mixer->frames_per_block=%d",
5885 mixer->hwbuf.used, mixer->frames_per_block);
5887 blksize = frametobyte(&mixer->hwbuf.fmt, mixer->frames_per_block);
5892 start = mixer->hwbuf.mem;
5893 end = (uint8_t *)start + auring_bytelen(&mixer->hwbuf);
5894 params = format2_to_params(&mixer->hwbuf.fmt);
5907 start = auring_headptr(&mixer->hwbuf);
5930 audio_trackmixer_t *mixer;
5945 mixer = sc->sc_pmixer;
5946 mixer->hw_complete_counter += mixer->frames_per_block;
5947 mixer->hwseq++;
5949 auring_take(&mixer->hwbuf, mixer->frames_per_block);
5953 mixer->hwseq, mixer->hw_complete_counter,
5954 mixer->hwbuf.head, mixer->hwbuf.used, mixer->hwbuf.capacity);
5973 if (mixer->hwbuf.used >= mixer->frames_per_block) {
5979 if (mixer->hwbuf.used < mixer->frames_per_block) {
5997 softint_schedule(mixer->sih);
6002 * Starts record mixer.
6054 audio_trackmixer_t *mixer;
6063 mixer = sc->sc_rmixer;
6069 count = auring_get_contig_used(&mixer->hwbuf);
6070 count = uimin(count, mixer->frames_per_block);
6075 bytes = frametobyte(&mixer->track_fmt, count);
6078 if (mixer->codec) {
6080 mixer->codecarg.src = auring_headptr(&mixer->hwbuf);
6081 mixer->codecarg.dst = auring_tailptr(&mixer->codecbuf);
6082 mixer->codecarg.count = count;
6083 mixer->codec(&mixer->codecarg);
6084 mixersrc = &mixer->codecbuf;
6088 tmpsrc.fmt = mixer->mixfmt;
6089 tmpsrc.capacity = mixer->frames_per_block;
6090 tmpsrc.mem = mixer->mixsample;
6095 codecarg.srcfmt = &mixer->hwbuf.fmt;
6096 codecarg.dstfmt = &mixer->mixfmt;
6120 auring_take(&mixer->hwbuf, count);
6124 codecarg.src = auring_headptr(&mixer->hwbuf);
6131 auring_take(&mixer->hwbuf, count);
6159 if (input->capacity - input->used < mixer->frames_per_block) {
6160 int drops = mixer->frames_per_block -
6169 KASSERTMSG(auring_tail(input) % mixer->frames_per_block == 0,
6170 "inputtail=%d mixer->frames_per_block=%d",
6171 auring_tail(input), mixer->frames_per_block);
6192 audio_trackmixer_t *mixer;
6199 mixer = sc->sc_rmixer;
6200 blksize = frametobyte(&mixer->hwbuf.fmt, mixer->frames_per_block);
6205 start = mixer->hwbuf.mem;
6206 end = (uint8_t *)start + auring_bytelen(&mixer->hwbuf);
6207 params = format2_to_params(&mixer->hwbuf.fmt);
6220 start = auring_tailptr(&mixer->hwbuf);
6243 audio_trackmixer_t *mixer;
6258 mixer = sc->sc_rmixer;
6259 mixer->hw_complete_counter += mixer->frames_per_block;
6260 mixer->hwseq++;
6262 auring_push(&mixer->hwbuf, mixer->frames_per_block);
6266 mixer->hwseq, mixer->hw_complete_counter,
6267 mixer->hwbuf.head, mixer->hwbuf.used, mixer->hwbuf.capacity);
6281 softint_schedule(mixer->sih);
6286 * Halts playback mixer.
6316 * Halts recording mixer.
6404 audio_trackmixer_t *mixer;
6410 mixer = track->mixer;
6429 (int)track->seq, (int)mixer->hwseq,
6437 track->seq <= mixer->hwseq);
6678 * mode (AUMODE_{PLAY,RECORD}) indicates the mixer to be initialized.
6685 * sc_[pr]mixer is not NULL.
6971 * Set track mixer's format depending on ai->mode.
6972 * If AUMODE_PLAY is set in ai->mode, it set up the playback mixer
6974 * If AUMODE_RECORD is set in ai->mode, it set up the recording mixer
7148 * It specifies the HW mixer volume in 0-255.
7149 * It is historical reason that the gain is connected to HW mixer.
7152 * It specifies the left-right balance of HW mixer in 0-64.
7154 * It is historical reason that the balance is connected to HW mixer.
7157 * It specifies the input/output port of HW mixer.
7160 * It specifies the recording monitor gain(?) of HW mixer.
7171 * Mixer info.
7205 * Pausing/unpausing never affect [pr]mixer. This single rule makes
7431 /* Set mixer parameters */
7556 hwfmt = &track->mixer->hwbuf.fmt;
7745 * Setup the hardware with mixer format phwfmt, rhwfmt.
7798 * fill the hardware mixer information.
8099 /* re-init track mixer */
8378 * Mixer driver
8421 * Add a process to those to be signalled on mixer activity.
8451 * Remove a process from those to be signalled on mixer activity.
8481 * Signal all processes waiting for the mixer.
8502 * Close a mixer device