Lines Matching refs:info

124 feed_matrix_##SIGN##BIT##ENDIAN(struct feed_matrix_info *info,		\
132 for (i = 0; info->matrix[i].chn[0] != SND_CHN_T_EOF; \
134 if (info->matrix[i].chn[0] == SND_CHN_T_NULL) { \
139 } else if (info->matrix[i].chn[1] == \
142 src + info->matrix[i].chn[0]); \
151 info->matrix[i].chn[j] != SND_CHN_T_EOF; \
154 src + info->matrix[i].chn[j]); \
158 accum = (accum * info->matrix[i].mul) >> \
159 info->matrix[i].shift; \
171 src += info->ialign; \
229 feed_matrix_reset(struct feed_matrix_info *info)
233 for (i = 0; i < (sizeof(info->matrix) / sizeof(info->matrix[0])); i++) {
235 j < (sizeof(info->matrix[i].chn) /
236 sizeof(info->matrix[i].chn[0])); j++) {
237 info->matrix[i].chn[j] = SND_CHN_T_EOF;
239 info->matrix[i].mul = 1;
240 info->matrix[i].shift = 0;
246 feed_matrix_apply_generic(struct feed_matrix_info *info,
254 for (i = 0; info->matrix[i].chn[0] != SND_CHN_T_EOF;
256 if (info->matrix[i].chn[0] == SND_CHN_T_NULL) {
257 info->wr(dst, 0);
258 dst += info->bps;
260 } else if (info->matrix[i].chn[1] ==
262 v = info->rd(src + info->matrix[i].chn[0]);
263 info->wr(dst, v);
264 dst += info->bps;
270 info->matrix[i].chn[j] != SND_CHN_T_EOF;
272 v = info->rd(src + info->matrix[i].chn[j]);
276 accum = (accum * info->matrix[i].mul) >>
277 info->matrix[i].shift;
283 info->wr(dst, v);
284 dst += info->bps;
286 src += info->ialign;
292 feed_matrix_setup(struct feed_matrix_info *info, struct pcmchan_matrix *m_in,
299 if (info == NULL || m_in == NULL || m_out == NULL ||
300 AFMT_CHANNEL(info->in) != m_in->channels ||
301 AFMT_CHANNEL(info->out) != m_out->channels ||
306 feed_matrix_reset(info);
336 info->matrix[ch].chn[0] = SND_CHN_T_NULL;
346 info->matrix[ch].chn[j++] =
347 m_in->offset[i] * info->bps;
349 info->matrix[ch].chn[j++] =
370 info->matrix[ch].mul = mul;
371 info->matrix[ch].shift = shift;
378 for (i = 0; info->matrix[i].chn[0] != SND_CHN_T_EOF; i++) {
380 for (j = 0; info->matrix[i].chn[j] != SND_CHN_T_EOF; j++) {
384 (info->matrix[i].chn[j] == SND_CHN_T_NULL) ?
385 0xffffffff : info->matrix[i].chn[j] / info->bps);
388 info->matrix[i].mul, info->matrix[i].shift);
398 struct feed_matrix_info *info;
406 info = malloc(sizeof(*info), M_DEVBUF, M_NOWAIT | M_ZERO);
407 if (info == NULL)
410 info->in = f->desc->in;
411 info->out = f->desc->out;
412 info->bps = AFMT_BPS(info->in);
413 info->ialign = AFMT_ALIGN(info->in);
414 info->oalign = AFMT_ALIGN(info->out);
415 info->apply = NULL;
417 for (i = 0; info->apply == NULL &&
419 if (AFMT_ENCODING(info->in) == feed_matrix_tab[i].format)
420 info->apply = feed_matrix_tab[i].apply;
423 if (info->apply == NULL) {
425 info->rd = feeder_format_read_op(info->in);
426 info->wr = feeder_format_write_op(info->out);
427 if (info->rd == NULL || info->wr == NULL) {
428 free(info, M_DEVBUF);
431 info->apply = feed_matrix_apply_generic;
433 free(info, M_DEVBUF);
438 m_in = feeder_matrix_format_map(info->in);
439 m_out = feeder_matrix_format_map(info->out);
441 ret = feed_matrix_setup(info, m_in, m_out);
443 free(info, M_DEVBUF);
447 f->data = info;
455 struct feed_matrix_info *info;
457 info = f->data;
458 if (info != NULL)
459 free(info, M_DEVBUF);
470 struct feed_matrix_info *info;
474 info = f->data;
475 if (info->matrix[0].chn[0] == SND_CHN_T_EOF)
479 count = SND_FXROUND(count, info->oalign);
480 inmax = info->ialign + info->oalign;
491 if (count < info->oalign)
495 src = info->reservoir;
496 j = info->ialign;
498 if (info->ialign == info->oalign)
499 j = count - info->oalign;
500 else if (info->ialign > info->oalign)
501 j = SND_FXROUND(count - info->oalign,
502 info->ialign);
504 j = (SND_FXDIV(count, info->oalign) - 1) *
505 info->ialign;
510 info->ialign);
514 info->apply(info, src, dst, j);
516 j *= info->oalign;