Lines Matching refs:info

429 z_feed_zoh(struct z_info *info, uint8_t *dst)
432 z_copy(info->z_delay +
433 (info->z_start * info->channels * info->bps), dst,
434 info->channels * info->bps);
439 cnt = info->channels * info->bps;
440 src = info->z_delay + (info->z_start * cnt);
461 z_feed_linear_##SIGN##BIT##ENDIAN(struct z_info *info, uint8_t *dst) \
468 z = ((uint32_t)info->z_alpha * info->z_dx) >> Z_LINEAR_UNSHIFT; \
470 sx = info->z_delay + (info->z_start * info->channels * \
472 sy = sx - (info->channels * PCM_##BIT##_BPS); \
474 ch = info->channels; \
524 z += info->z_dy; \
525 p adv##= info->channels * PCM_##BIT##_BPS
545 z_feed_sinc_##SIGN##BIT##ENDIAN(struct z_info *info, uint8_t *dst) \
553 z_coeff = info->z_coeff; \
554 z_dcoeff = info->z_dcoeff; \
555 center = z_prev(info, info->z_start, info->z_size); \
556 ch = info->channels * PCM_##BIT##_BPS; \
563 z = info->z_alpha * info->z_dx; \
565 p = info->z_delay + (z_next(info, center, 1) * \
566 info->channels * PCM_##BIT##_BPS) + ch; \
567 for (i = info->z_size; i != 0; i -= Z_SINC_ACCUMULATE_DECR) \
569 z = info->z_dy - (info->z_alpha * info->z_dx); \
571 p = info->z_delay + (center * info->channels * \
573 for (i = info->z_size; i != 0; i -= Z_SINC_ACCUMULATE_DECR) \
575 if (info->z_scale != Z_ONE) \
576 v = Z_SCALE_##BIT(v, info->z_scale); \
586 z_feed_sinc_polyphase_##SIGN##BIT##ENDIAN(struct z_info *info, uint8_t *dst) \
593 ch = info->channels * PCM_##BIT##_BPS; \
595 start = z_prev(info, info->z_start, (info->z_size << 1) - 1) * ch; \
601 p = info->z_delay + start + ch; \
602 z_pcoeff = info->z_pcoeff + \
603 ((info->z_alpha * info->z_size) << 1); \
604 for (i = info->z_size; i != 0; i--) { \
608 p += info->channels * PCM_##BIT##_BPS; \
612 p += info->channels * PCM_##BIT##_BPS; \
614 if (info->z_scale != Z_ONE) \
615 v = Z_SCALE_##BIT(v, info->z_scale); \
702 z_resampler_reset(struct z_info *info)
705 info->src = info->rsrc - (info->rsrc % ((feeder_rate_round > 0 &&
706 info->rsrc > feeder_rate_round) ? feeder_rate_round : 1));
707 info->dst = info->rdst - (info->rdst % ((feeder_rate_round > 0 &&
708 info->rdst > feeder_rate_round) ? feeder_rate_round : 1));
709 info->z_gx = 1;
710 info->z_gy = 1;
711 info->z_alpha = 0;
712 info->z_resample = NULL;
713 info->z_size = 1;
714 info->z_coeff = NULL;
715 info->z_dcoeff = NULL;
716 if (info->z_pcoeff != NULL) {
717 free(info->z_pcoeff, M_DEVBUF);
718 info->z_pcoeff = NULL;
720 info->z_scale = Z_ONE;
721 info->z_dx = Z_FULL_ONE;
722 info->z_dy = Z_FULL_ONE;
724 info->z_cycle = 0;
726 if (info->quality < Z_QUALITY_MIN)
727 info->quality = Z_QUALITY_MIN;
728 else if (info->quality > Z_QUALITY_MAX)
729 info->quality = Z_QUALITY_MAX;
734 z_resampler_sinc_len(struct z_info *info)
738 if (!Z_IS_SINC(info))
747 z = info->z_dy;
749 lmax = z_coeff_tab[Z_SINC_COEFF_IDX(info)].len;
754 z += info->z_dy;
757 if (len != Z_SINC_LEN(info)) {
760 __func__, len, Z_SINC_LEN(info));
763 __func__, len, Z_SINC_LEN(info));
1026 z_resampler_build_polyphase(struct z_info *info)
1031 if (info->z_pcoeff != NULL) {
1032 free(info->z_pcoeff, M_DEVBUF);
1033 info->z_pcoeff = NULL;
1039 if (((int64_t)info->z_size * info->z_gy * 2) >
1043 info->z_gx, info->z_gy,
1044 (intmax_t)info->z_size * info->z_gy * 2,
1050 info->z_pcoeff = malloc(sizeof(int32_t) *
1051 info->z_size * info->z_gy * 2, M_DEVBUF, M_NOWAIT | M_ZERO);
1052 if (info->z_pcoeff == NULL)
1055 for (alpha = 0; alpha < info->z_gy; alpha++) {
1056 z = alpha * info->z_dx;
1058 for (i = info->z_size; i != 0; i--) {
1061 idx = (alpha * info->z_size * 2) +
1062 (info->z_size * 2) - i;
1063 info->z_pcoeff[idx] =
1064 z_coeff_interpolate(z, info->z_coeff + c);
1065 z += info->z_dy;
1067 z = info->z_dy - (alpha * info->z_dx);
1069 for (i = info->z_size; i != 0; i--) {
1072 idx = (alpha * info->z_size * 2) + i - 1;
1073 info->z_pcoeff[idx] =
1074 z_coeff_interpolate(z, info->z_coeff + c);
1075 z += info->z_dy;
1081 info->z_gx, info->z_gy, info->z_size * info->z_gy * 2);
1090 struct z_info *info;
1096 info = f->data;
1097 z_resampler_reset(info);
1099 if (info->src == info->dst)
1103 i = z_gcd(info->src, info->dst);
1104 info->z_gx = info->src / i;
1105 info->z_gy = info->dst / i;
1108 if (!(Z_FACTOR_SAFE(info->z_gx) && Z_FACTOR_SAFE(info->z_gy)))
1118 if (Z_IS_SINC(info)) {
1125 if (info->z_gx > info->z_gy)
1133 if ((info->z_gx / info->z_gy) > Z_SINC_DOWNMAX)
1136 z_scale = ((uint64_t)info->z_gy << Z_SHIFT) /
1137 info->z_gx;
1156 if (info->z_pcoeff != NULL) {
1157 free(info->z_pcoeff, M_DEVBUF);
1158 info->z_pcoeff = NULL;
1162 info->z_dy = z_scale << Z_DRIFT_SHIFT;
1163 if (info->z_dy < 1)
1165 info->z_scale = z_scale;
1167 info->z_dy = Z_FULL_ONE;
1168 info->z_scale = Z_ONE;
1176 info->z_scale = Z_SCALE_LIMIT(info->z_scale, 9780);
1180 info->z_dx = info->z_dy / info->z_gy;
1186 if (info->z_dx < 1) {
1197 info->z_dy = info->z_dx * info->z_gy;
1200 if (Z_SINC_COEFF_IDX(info) != i)
1208 info->z_size = z_resampler_sinc_len(info);
1214 info->z_size &= ~1;
1216 if (info->z_size < 2 || info->z_size > Z_SINC_MAX) {
1223 info->z_coeff = z_coeff_tab[i].coeff + Z_COEFF_OFFSET;
1224 info->z_dcoeff = z_coeff_tab[i].dcoeff;
1228 if (info->z_coeff == NULL || info->z_dcoeff == NULL)
1230 } else if (Z_IS_LINEAR(info)) {
1236 info->z_dx = Z_LINEAR_FULL_ONE / info->z_gy;
1248 if (Z_IS_SINC(info) && adaptive == 0 &&
1249 z_resampler_build_polyphase(info) == 0)
1252 ridx = Z_RESAMPLER_IDX(info);
1253 info->z_resample = z_resampler_tab[i].resampler[ridx];
1257 if (info->z_resample == NULL)
1260 info->bps = AFMT_BPS(format);
1261 align = info->channels * info->bps;
1274 gy2gx_max = (((uint64_t)info->z_gy * INT32_MAX) - info->z_gy + 1) /
1275 info->z_gx;
1283 gx2gy_max = (((uint64_t)info->z_gx * INT32_MAX) - info->z_gy) /
1284 info->z_gy;
1297 if (z_gy2gx(info, gy2gx_max) > _Z_GCAST(gx2gy_max))
1300 info->z_maxfeed = gy2gx_max * align;
1303 info->z_startdrift = z_gy2gx(info, 1);
1304 info->z_alphadrift = z_drift(info, info->z_startdrift, 1);
1307 i = z_gy2gx(info, 1);
1308 info->z_full = z_roundpow2((info->z_size << 1) + i);
1313 if ((info->z_full * align) < 1) {
1314 if (adaptive == 0 && Z_IS_SINC(info)) {
1325 while (info->z_full < Z_RESERVOIR_MAX &&
1326 (info->z_full - (info->z_size << 1)) < Z_RESERVOIR)
1327 info->z_full <<= 1;
1330 info->z_mask = info->z_full - 1;
1331 info->z_start = z_prev(info, info->z_size << 1, 1);
1332 info->z_pos = z_next(info, info->z_start, 1);
1337 i = info->z_full * align;
1341 if (info->z_delay == NULL || info->z_alloc < i ||
1342 i <= (info->z_alloc >> 1)) {
1343 if (info->z_delay != NULL)
1344 free(info->z_delay, M_DEVBUF);
1345 info->z_delay = malloc(i, M_DEVBUF, M_NOWAIT | M_ZERO);
1346 if (info->z_delay == NULL)
1348 info->z_alloc = i;
1354 memset(info->z_delay, sndbuf_zerodata(f->desc->out),
1355 info->z_pos * align);
1362 "z_"__STRING(x), (uint32_t)info->z_##x, \
1363 (int32_t)info->z_##x)
1366 info->channels, info->bps, format, info->quality);
1368 info->src, info->rsrc, info->dst, info->rdst);
1369 fprintf(stderr, "[%d/%d]\n", info->z_gx, info->z_gy);
1370 fprintf(stderr, "\tminreq=%d, ", z_gy2gx(info, 1));
1375 fprintf(stderr, "\tbase_length=%d, ", Z_SINC_BASE_LEN(info));
1379 if (info->z_alloc < 1024)
1381 "", info->z_alloc);
1382 else if (info->z_alloc < (1024 << 10))
1384 "", info->z_alloc >> 10);
1385 else if (info->z_alloc < (1024 << 20))
1387 "", info->z_alloc >> 20);
1390 "", info->z_alloc >> 30);
1393 (int32_t)z_gx2gy(info, info->z_full - (info->z_size << 1)));
1396 (int32_t)z_gx2gy(info, (info->z_alloc / align) -
1397 (info->z_size << 1)));
1399 "z_gy2gx()", (int32_t)z_gy2gx(info, 1));
1401 "Max", (int32_t)gy2gx_max, (int32_t)z_gy2gx(info, gy2gx_max));
1403 "z_gx2gy()", (int32_t)z_gx2gy(info, 1));
1405 "Max", (int32_t)gx2gy_max, (int32_t)z_gx2gy(info, gx2gy_max));
1412 (double)info->z_scale / Z_ONE);
1415 (double)info->z_dx / info->z_dy);
1418 info->z_dy >> Z_SHIFT);
1420 (z_scale << Z_DRIFT_SHIFT) - info->z_dy);
1433 struct z_info *info;
1436 info = f->data;
1442 if (value == info->rsrc)
1444 info->rsrc = value;
1449 if (value == info->rdst)
1451 info->rdst = value;
1456 if (value == info->quality)
1464 oquality = info->quality;
1465 info->quality = value;
1468 info->quality = oquality;
1473 if (value == info->channels)
1475 info->channels = value;
1488 struct z_info *info;
1490 info = f->data;
1494 return (info->rsrc);
1497 return (info->rdst);
1500 return (info->quality);
1503 return (info->channels);
1515 struct z_info *info;
1521 info = malloc(sizeof(*info), M_DEVBUF, M_NOWAIT | M_ZERO);
1522 if (info == NULL)
1525 info->rsrc = Z_RATE_DEFAULT;
1526 info->rdst = Z_RATE_DEFAULT;
1527 info->quality = feeder_rate_quality;
1528 info->channels = AFMT_CHANNEL(f->desc->in);
1530 f->data = info;
1534 if (info->z_pcoeff != NULL)
1535 free(info->z_pcoeff, M_DEVBUF);
1536 if (info->z_delay != NULL)
1537 free(info->z_delay, M_DEVBUF);
1538 free(info, M_DEVBUF);
1548 struct z_info *info;
1550 info = f->data;
1551 if (info != NULL) {
1552 if (info->z_pcoeff != NULL)
1553 free(info->z_pcoeff, M_DEVBUF);
1554 if (info->z_delay != NULL)
1555 free(info->z_delay, M_DEVBUF);
1556 free(info, M_DEVBUF);
1568 struct z_info *info;
1573 info = f->data;
1574 if (info->z_resample == NULL)
1582 align = info->channels * info->bps;
1591 reqin = z_gy2gx(info, ocount) - z_fetched(info);
1594 startdrift = info->z_startdrift;
1595 alphadrift = info->z_alphadrift;
1597 startdrift = _Z_GY2GX(info, 0, 1);
1598 alphadrift = z_drift(info, startdrift, 1);
1605 fetch = z_min(z_free(info), reqin);
1612 fetched = z_fetched(info);
1613 start = z_prev(info, info->z_start,
1614 (info->z_size << 1) - 1);
1615 cp = (info->z_size << 1) + fetched;
1616 z_copy(info->z_delay + (start * align),
1617 info->z_delay, cp * align);
1618 info->z_start =
1619 z_prev(info, info->z_size << 1, 1);
1620 info->z_pos =
1621 z_next(info, info->z_start, fetched + 1);
1622 fetch = z_min(z_free(info), reqin);
1630 start, fetched, cp, info->z_cycle,
1633 info->z_cycle = 0;
1642 info->z_delay + (info->z_pos * align),
1650 info->z_pos += fetched;
1656 reqout = z_min(z_gx2gy(info, z_fetched(info)), ocount);
1671 info->z_resample(info, dst);
1673 startdrift = z_gy2gx(info, 1);
1674 alphadrift = z_drift(info, startdrift, 1);
1675 info->z_start += startdrift;
1676 info->z_alpha += alphadrift;
1678 info->z_alpha += alphadrift;
1679 if (info->z_alpha < info->z_gy)
1680 info->z_start += startdrift;
1682 info->z_start += startdrift - 1;
1683 info->z_alpha -= info->z_gy;
1688 info->z_cycle++;