Lines Matching +full:y +full:- +full:rp
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 2008-2009 Ariff Abdullah <ariff@FreeBSD.org>
6 * Copyright (c) 2024-2025 The FreeBSD Foundation
59 intpcm_t x, y; in feed_mixer_apply() local
65 src -= AFMT_BPS(fmt); in feed_mixer_apply()
66 dst -= AFMT_BPS(fmt); in feed_mixer_apply()
67 count -= AFMT_BPS(fmt); in feed_mixer_apply()
69 y = pcm_sample_read_calc(dst, fmt); in feed_mixer_apply()
70 z = INTPCM_T(x) + y; in feed_mixer_apply()
81 if (f->desc->in != f->desc->out) in feed_mixer_init()
88 info->format = AFMT_ENCODING(f->desc->in); in feed_mixer_init()
89 info->channels = AFMT_CHANNEL(f->desc->in); in feed_mixer_init()
90 info->bps = AFMT_BPS(f->desc->in); in feed_mixer_init()
92 f->data = info; in feed_mixer_init()
102 info = f->data; in feed_mixer_free()
106 f->data = NULL; in feed_mixer_free()
116 info = f->data; in feed_mixer_set()
122 info->channels = (uint32_t)value; in feed_mixer_set()
145 b = c->bufsoft; in feed_mixer_rec()
146 b->rp = 0; in feed_mixer_rec()
147 b->rl = 0; in feed_mixer_rec()
152 cnt = FEEDER_FEED(c->feeder->source, c, b->tmpbuf, in feed_mixer_rec()
153 min(cnt, maxfeed), c->bufhard); in feed_mixer_rec()
155 sndbuf_acquire(b, b->tmpbuf, cnt); in feed_mixer_rec()
161 if (b->rl < sndbuf_getalign(b)) { in feed_mixer_rec()
162 b->rl = 0; in feed_mixer_rec()
170 rdy = b->rl; in feed_mixer_rec()
174 if (CHN_STOPPED(ch) || (ch->flags & CHN_F_DIRTY)) { in feed_mixer_rec()
179 if ((c->flags & CHN_F_DIRTY) && VCHAN_SYNC_REQUIRED(ch)) { in feed_mixer_rec()
186 bs = ch->bufsoft; in feed_mixer_rec()
187 if (ch->flags & CHN_F_MMAP) in feed_mixer_rec()
196 cnt = FEEDER_FEED(ch->feeder, ch, bs->tmpbuf, in feed_mixer_rec()
199 sndbuf_acquire(bs, bs->tmpbuf, cnt); in feed_mixer_rec()
206 if (b->rl != 0) in feed_mixer_rec()
207 ch->xruns++; in feed_mixer_rec()
212 b->rp = 0; in feed_mixer_rec()
213 b->rl = rdy; in feed_mixer_rec()
221 b->rl = 1; in feed_mixer_rec()
223 c->flags &= ~CHN_F_DIRTY; in feed_mixer_rec()
244 if (c->direction == PCMDIR_REC) in feed_mixer_feed()
251 info = f->data; in feed_mixer_feed()
252 sz = info->bps * info->channels; in feed_mixer_feed()
270 if (CHN_STOPPED(ch) || (ch->flags & CHN_F_DIRTY)) { in feed_mixer_feed()
275 if ((c->flags & CHN_F_DIRTY) && VCHAN_SYNC_REQUIRED(ch)) { in feed_mixer_feed()
282 if ((ch->flags & CHN_F_MMAP) && !(ch->flags & CHN_F_CLOSING)) in feed_mixer_feed()
283 sndbuf_acquire(ch->bufsoft, NULL, in feed_mixer_feed()
284 sndbuf_getfree(ch->bufsoft)); in feed_mixer_feed()
285 if (c->flags & CHN_F_PASSTHROUGH) { in feed_mixer_feed()
292 (ch->format & AFMT_PASSTHROUGH)) { in feed_mixer_feed()
293 rcnt = SND_FXROUND(FEEDER_FEED(ch->feeder, ch, in feed_mixer_feed()
294 b, count, ch->bufsoft), sz); in feed_mixer_feed()
297 FEEDER_FEED(ch->feeder, ch, tmp, count, in feed_mixer_feed()
298 ch->bufsoft); in feed_mixer_feed()
299 } else if (c->flags & CHN_F_EXCLUSIVE) { in feed_mixer_feed()
305 if (passthrough == 0 && (ch->flags & CHN_F_EXCLUSIVE)) { in feed_mixer_feed()
306 rcnt = SND_FXROUND(FEEDER_FEED(ch->feeder, ch, in feed_mixer_feed()
307 b, count, ch->bufsoft), sz); in feed_mixer_feed()
310 FEEDER_FEED(ch->feeder, ch, tmp, count, in feed_mixer_feed()
311 ch->bufsoft); in feed_mixer_feed()
314 rcnt = SND_FXROUND(FEEDER_FEED(ch->feeder, ch, in feed_mixer_feed()
315 b, count, ch->bufsoft), sz); in feed_mixer_feed()
316 mcnt = count - rcnt; in feed_mixer_feed()
318 cnt = SND_FXROUND(FEEDER_FEED(ch->feeder, ch, in feed_mixer_feed()
319 tmp, count, ch->bufsoft), sz); in feed_mixer_feed()
324 f->desc->out), mcnt); in feed_mixer_feed()
327 switch (info->format) { in feed_mixer_feed()
342 info->format); in feed_mixer_feed()
353 if (++c->feedcount == 0) in feed_mixer_feed()
354 c->feedcount = 2; in feed_mixer_feed()
356 c->flags &= ~CHN_F_DIRTY; in feed_mixer_feed()