Home | History | Annotate | Download | only in audio

Lines Matching refs:mixer

416 	audio_vtrace(track->mixer->sc, funcname, hdr, fmt, ap);
530 /* Number of elements of async mixer's pid */
1211 * Initialize hardware mixer.
1241 * names from the mixer descriptions. We'll need them to decode the
1242 * mixer descriptions on the next pass through the loop.
1250 * All the other types describe an actual mixer.
1272 * underlying "mixer" control. We walk through the whole list once,
1704 error = cv_timedwait_sig(&track->mixer->outcv, sc->sc_lock,
3368 * input_fpb = frame_per_block(track->mixer, &track->input->fmt);
3370 input_fpb = track->mixer->frames_per_block;
3991 KASSERTMSG(src->head % track->mixer->frames_per_block == 0,
3992 "src->head=%d track->mixer->frames_per_block=%d",
3993 src->head, track->mixer->frames_per_block);
4121 KASSERTMSG(src->head % track->mixer->frames_per_block == 0,
4122 "src->head=%d track->mixer->frames_per_block=%d",
4123 src->head, track->mixer->frames_per_block);
4158 audio_track_create(struct audio_softc *sc, audio_trackmixer_t *mixer)
4166 track->mixer = mixer;
4167 track->mode = mixer->mode;
4171 mixer->mode == AUMODE_PLAY ? "playback" : "recording");
4320 srcbuf->capacity = frame_per_block(track->mixer, &srcbuf->fmt);
4382 srcbuf->capacity = frame_per_block(track->mixer, &srcbuf->fmt);
4448 srcbuf->capacity = frame_per_block(track->mixer, &srcbuf->fmt);
4506 dst_capacity = frame_per_block(track->mixer, dstfmt);
4524 srcbuf->capacity = frame_per_block(track->mixer, &srcbuf->fmt);
4698 frame_per_block(track->mixer, &track->usrbuf.fmt));
4740 /* On playback, initialize from the mixer side in order. */
4742 track->outbuf.fmt = track->mixer->track_fmt;
4754 track->inputfmt = track->mixer->track_fmt;
4806 track->outbuf.capacity = frame_per_block(track->mixer,
4821 input_fpb = frame_per_block(track->mixer, &track->input->fmt);
4896 fpb = frame_per_block(track->mixer, &ring->fmt);
4938 count = uimin(dstcount, track->mixer->frames_per_block);
4980 KASSERTMSG(count >= frame_per_block(track->mixer, &track->outbuf.fmt),
4982 count, frame_per_block(track->mixer, &track->outbuf.fmt));
5202 * Calculate blktime [msec] from mixer(.hwbuf.fmt).
5206 audio_mixer_calc_blktime(struct audio_softc *sc, audio_trackmixer_t *mixer)
5214 fmt = &mixer->hwbuf.fmt;
5236 * Initialize the mixer corresponding to the mode.
5238 * sc->sc_[pr]mixer (corresponding to the 'mode') must be zero-filled.
5248 audio_trackmixer_t *mixer;
5265 mixer = sc->sc_pmixer;
5267 mixer = sc->sc_rmixer;
5269 mixer->sc = sc;
5270 mixer->mode = mode;
5272 mixer->hwbuf.fmt = *hwfmt;
5273 mixer->volume = 256;
5274 mixer->blktime_d = 1000;
5275 mixer->blktime_n = audio_mixer_calc_blktime(sc, mixer);
5276 sc->sc_blk_ms = mixer->blktime_n;
5279 mixer->frames_per_block = frame_per_block(mixer, &mixer->hwbuf.fmt);
5280 blksize = frametobyte(&mixer->hwbuf.fmt, mixer->frames_per_block);
5283 audio_params_t p = format2_to_params(&mixer->hwbuf.fmt);
5290 if ((rounded * NBBY) % (mixer->hwbuf.fmt.stride *
5291 mixer->hwbuf.fmt.channels) != 0) {
5298 mixer->hwbuf.fmt.stride,
5299 mixer->hwbuf.fmt.channels);
5304 mixer->frames_per_block = blksize * NBBY /
5305 (mixer->hwbuf.fmt.stride *
5306 mixer->hwbuf.fmt.channels);
5309 mixer->blktime_n = mixer->frames_per_block;
5310 mixer->blktime_d = mixer->hwbuf.fmt.sample_rate;
5312 capacity = mixer->frames_per_block * hwblks;
5313 bufsize = frametobyte(&mixer->hwbuf.fmt, capacity);
5341 capacity = mixer->frames_per_block * hwblks;
5347 mixer->hwbuf.capacity = capacity;
5351 mixer->hwbuf.mem = sc->hw_if->allocm(sc->hw_hdl, mode, bufsize);
5352 if (mixer->hwbuf.mem == NULL) {
5357 mixer->hwbuf.mem = kmem_alloc(bufsize, KM_SLEEP);
5362 cv_init(&mixer->outcv, "audiowr");
5364 cv_init(&mixer->outcv, "audiord");
5372 mixer->sih = softint_establish(SOFTINT_SERIAL | SOFTINT_MPSAFE,
5374 if (mixer->sih == NULL) {
5379 mixer->track_fmt.encoding = AUDIO_ENCODING_SLINEAR_NE;
5380 mixer->track_fmt.precision = AUDIO_INTERNAL_BITS;
5381 mixer->track_fmt.stride = AUDIO_INTERNAL_BITS;
5382 mixer->track_fmt.channels = mixer->hwbuf.fmt.channels;
5383 mixer->track_fmt.sample_rate = mixer->hwbuf.fmt.sample_rate;
5385 if (mixer->hwbuf.fmt.encoding == AUDIO_ENCODING_SLINEAR_OE &&
5386 mixer->hwbuf.fmt.precision == AUDIO_INTERNAL_BITS) {
5387 mixer->swap_endian = true;
5393 mixer->mixfmt = mixer->track_fmt;
5394 mixer->mixfmt.precision *= 2;
5395 mixer->mixfmt.stride *= 2;
5397 len = mixer->frames_per_block * mixer->mixfmt.channels *
5398 mixer->mixfmt.stride / NBBY;
5399 mixer->mixsample = audio_realloc(mixer->mixsample, len);
5405 mixer->mixfmt = mixer->track_fmt;
5406 len = mixer->frames_per_block * mixer->mixfmt.channels *
5407 mixer->mixfmt.stride / NBBY;
5408 mixer->mixsample = audio_realloc(mixer->mixsample, len);
5412 mixer->codec = reg->codec;
5413 mixer->codecarg.context = reg->context;
5415 mixer->codecarg.srcfmt = &mixer->track_fmt;
5416 mixer->codecarg.dstfmt = &mixer->hwbuf.fmt;
5418 mixer->codecarg.srcfmt = &mixer->hwbuf.fmt;
5419 mixer->codecarg.dstfmt = &mixer->track_fmt;
5421 mixer->codecbuf.fmt = mixer->track_fmt;
5422 mixer->codecbuf.capacity = mixer->frames_per_block;
5423 len = auring_bytelen(&mixer->codecbuf);
5424 mixer->codecbuf.mem = audio_realloc(mixer->codecbuf.mem, len);
5429 if (mixer->codec || mixer->swap_endian) {
5432 audio_encoding_name(mixer->hwbuf.fmt.encoding),
5433 mixer->hwbuf.fmt.precision);
5435 blkms = mixer->blktime_n * 1000 / mixer->blktime_d;
5436 blkdms = (mixer->blktime_n * 10000 / mixer->blktime_d) % 10;
5443 audio_encoding_name(mixer->track_fmt.encoding),
5444 mixer->track_fmt.precision,
5446 mixer->track_fmt.channels,
5447 mixer->track_fmt.sample_rate,
5455 audio_mixer_destroy(sc, mixer);
5460 * Releases all resources of 'mixer'.
5461 * Note that it does not release the memory area of 'mixer' itself.
5465 audio_mixer_destroy(struct audio_softc *sc, audio_trackmixer_t *mixer)
5471 bufsize = frametobyte(&mixer->hwbuf.fmt, mixer->hwbuf.capacity);
5473 if (mixer->hwbuf.mem != NULL) {
5476 sc->hw_if->freem(sc->hw_hdl, mixer->hwbuf.mem, bufsize);
5478 kmem_free(mixer->hwbuf.mem, bufsize);
5480 mixer->hwbuf.mem = NULL;
5483 audio_free(mixer->codecbuf.mem);
5484 audio_free(mixer->mixsample);
5486 cv_destroy(&mixer->outcv);
5488 if (mixer->sih) {
5489 softint_disestablish(mixer->sih);
5490 mixer->sih = NULL;
5495 * Starts playback mixer.
5503 audio_trackmixer_t *mixer;
5512 mixer = sc->sc_pmixer;
5515 (int)mixer->mixseq, (int)mixer->hwseq,
5516 mixer->hwbuf.head, mixer->hwbuf.used, mixer->hwbuf.capacity,
5521 while (mixer->hwbuf.used < mixer->frames_per_block * minimum) {
5530 (int)mixer->mixseq, (int)mixer->hwseq,
5531 mixer->hwbuf.head, mixer->hwbuf.used, mixer->hwbuf.capacity);
5576 audio_trackmixer_t *mixer;
5585 mixer = sc->sc_pmixer;
5587 frame_count = mixer->frames_per_block;
5588 KASSERTMSG(auring_get_contig_free(&mixer->hwbuf) >= frame_count,
5590 auring_get_contig_free(&mixer->hwbuf), frame_count);
5591 sample_count = frame_count * mixer->mixfmt.channels;
5593 mixer->mixseq++;
5623 if (track->outbuf.used < mixer->frames_per_block &&
5630 mixed = audio_pmixer_mix_track(mixer, track, mixed);
5640 memset(mixer->mixsample, 0,
5641 frametobyte(&mixer->mixfmt, frame_count));
5645 audio_pmixer_agc(mixer, sample_count);
5649 if (mixer->volume < 256) {
5650 m = mixer->mixsample;
5652 *m = AUDIO_SCALEDOWN(*m * mixer->volume, 8);
5662 mixer->voltimer += mixer->blktime_n;
5663 if (mixer->voltimer * 4 >= mixer->blktime_d) {
5664 mixer->volume++;
5665 mixer->voltimer = 0;
5667 TRACE(1, "volume recover: %d", mixer->volume);
5677 m = mixer->mixsample;
5679 if (mixer->codec) {
5682 h = auring_tailptr_aint(&mixer->codecbuf);
5687 auring_push(&mixer->codecbuf, frame_count);
5688 mixer->codecarg.src = auring_headptr(&mixer->codecbuf);
5689 mixer->codecarg.dst = auring_tailptr(&mixer->hwbuf);
5690 mixer->codecarg.count = frame_count;
5691 mixer->codec(&mixer->codecarg);
5692 auring_take(&mixer->codecbuf, mixer->codecarg.count);
5697 mixer->codecarg.src = m;
5698 mixer->codecarg.dst = auring_tailptr(&mixer->hwbuf);
5699 mixer->codecarg.count = frame_count;
5700 mixer->codecarg.srcfmt = &mixer->mixfmt;
5701 mixer->codecarg.dstfmt = &mixer->hwbuf.fmt;
5702 audio_mixsample_to_linear(&mixer->codecarg);
5705 auring_push(&mixer->hwbuf, frame_count);
5708 (int)mixer->mixseq,
5709 mixer->hwbuf.head, mixer->hwbuf.used, mixer->hwbuf.capacity,
5718 audio_pmixer_agc(audio_trackmixer_t *mixer, int sample_count)
5730 sc = mixer->sc;
5735 m = mixer->mixsample;
5759 if (newvol <= mixer->volume) {
5760 mixer->volume = newvol;
5761 mixer->voltimer = 0;
5763 TRACE(1, "auto volume adjust: %d", mixer->volume);
5776 audio_pmixer_mix_track(audio_trackmixer_t *mixer, audio_track_t *track,
5787 if (mixer->mixseq < track->seq)
5791 count = uimin(count, mixer->frames_per_block);
5794 d = mixer->mixsample;
5806 sample_count = count * mixer->mixfmt.channels;
5824 for (; i < mixer->frames_per_block * mixer->mixfmt.channels; i++)
5849 remain = mixer->frames_per_block - count;
5859 track->seq = mixer->mixseq + 1;
5871 audio_trackmixer_t *mixer;
5878 mixer = sc->sc_pmixer;
5881 mixer->hwbuf.head, mixer->hwbuf.used, mixer->hwbuf.capacity);
5882 KASSERTMSG(mixer->hwbuf.used >= mixer->frames_per_block,
5883 "mixer->hwbuf.used=%d mixer->frames_per_block=%d",
5884 mixer->hwbuf.used, mixer->frames_per_block);
5886 blksize = frametobyte(&mixer->hwbuf.fmt, mixer->frames_per_block);
5891 start = mixer->hwbuf.mem;
5892 end = (uint8_t *)start + auring_bytelen(&mixer->hwbuf);
5893 params = format2_to_params(&mixer->hwbuf.fmt);
5906 start = auring_headptr(&mixer->hwbuf);
5929 audio_trackmixer_t *mixer;
5944 mixer = sc->sc_pmixer;
5945 mixer->hw_complete_counter += mixer->frames_per_block;
5946 mixer->hwseq++;
5948 auring_take(&mixer->hwbuf, mixer->frames_per_block);
5952 mixer->hwseq, mixer->hw_complete_counter,
5953 mixer->hwbuf.head, mixer->hwbuf.used, mixer->hwbuf.capacity);
5972 if (mixer->hwbuf.used >= mixer->frames_per_block) {
5978 if (mixer->hwbuf.used < mixer->frames_per_block) {
5996 softint_schedule(mixer->sih);
6001 * Starts record mixer.
6053 audio_trackmixer_t *mixer;
6062 mixer = sc->sc_rmixer;
6068 count = auring_get_contig_used(&mixer->hwbuf);
6069 count = uimin(count, mixer->frames_per_block);
6074 bytes = frametobyte(&mixer->track_fmt, count);
6077 if (mixer->codec) {
6079 mixer->codecarg.src = auring_headptr(&mixer->hwbuf);
6080 mixer->codecarg.dst = auring_tailptr(&mixer->codecbuf);
6081 mixer->codecarg.count = count;
6082 mixer->codec(&mixer->codecarg);
6083 mixersrc = &mixer->codecbuf;
6087 tmpsrc.fmt = mixer->mixfmt;
6088 tmpsrc.capacity = mixer->frames_per_block;
6089 tmpsrc.mem = mixer->mixsample;
6094 codecarg.srcfmt = &mixer->hwbuf.fmt;
6095 codecarg.dstfmt = &mixer->mixfmt;
6119 auring_take(&mixer->hwbuf, count);
6123 codecarg.src = auring_headptr(&mixer->hwbuf);
6130 auring_take(&mixer->hwbuf, count);
6158 if (input->capacity - input->used < mixer->frames_per_block) {
6159 int drops = mixer->frames_per_block -
6168 KASSERTMSG(auring_tail(input) % mixer->frames_per_block == 0,
6169 "inputtail=%d mixer->frames_per_block=%d",
6170 auring_tail(input), mixer->frames_per_block);
6191 audio_trackmixer_t *mixer;
6198 mixer = sc->sc_rmixer;
6199 blksize = frametobyte(&mixer->hwbuf.fmt, mixer->frames_per_block);
6204 start = mixer->hwbuf.mem;
6205 end = (uint8_t *)start + auring_bytelen(&mixer->hwbuf);
6206 params = format2_to_params(&mixer->hwbuf.fmt);
6219 start = auring_tailptr(&mixer->hwbuf);
6242 audio_trackmixer_t *mixer;
6257 mixer = sc->sc_rmixer;
6258 mixer->hw_complete_counter += mixer->frames_per_block;
6259 mixer->hwseq++;
6261 auring_push(&mixer->hwbuf, mixer->frames_per_block);
6265 mixer->hwseq, mixer->hw_complete_counter,
6266 mixer->hwbuf.head, mixer->hwbuf.used, mixer->hwbuf.capacity);
6280 softint_schedule(mixer->sih);
6285 * Halts playback mixer.
6315 * Halts recording mixer.
6403 audio_trackmixer_t *mixer;
6409 mixer = track->mixer;
6428 (int)track->seq, (int)mixer->hwseq,
6436 track->seq <= mixer->hwseq);
6677 * mode (AUMODE_{PLAY,RECORD}) indicates the mixer to be initialized.
6684 * sc_[pr]mixer is not NULL.
6970 * Set track mixer's format depending on ai->mode.
6971 * If AUMODE_PLAY is set in ai->mode, it set up the playback mixer
6973 * If AUMODE_RECORD is set in ai->mode, it set up the recording mixer
7147 * It specifies the HW mixer volume in 0-255.
7148 * It is historical reason that the gain is connected to HW mixer.
7151 * It specifies the left-right balance of HW mixer in 0-64.
7153 * It is historical reason that the balance is connected to HW mixer.
7156 * It specifies the input/output port of HW mixer.
7159 * It specifies the recording monitor gain(?) of HW mixer.
7170 * Mixer info.
7204 * Pausing/unpausing never affect [pr]mixer. This single rule makes
7430 /* Set mixer parameters */
7555 hwfmt = &track->mixer->hwbuf.fmt;
7744 * Setup the hardware with mixer format phwfmt, rhwfmt.
7797 * fill the hardware mixer information.
8098 /* re-init track mixer */
8377 * Mixer driver
8420 * Add a process to those to be signalled on mixer activity.
8450 * Remove a process from those to be signalled on mixer activity.
8480 * Signal all processes waiting for the mixer.
8501 * Close a mixer device