static int aufile_load(struct mbuf *mb, const char *filename, uint32_t *srate, uint8_t *channels) { struct aufile_prm prm; struct aufile *af; int err; err = aufile_open(&af, &prm, filename, AUFILE_READ); if (err) return err; while (!err) { uint8_t buf[4096]; size_t i, n; n = sizeof(buf); err = aufile_read(af, buf, &n); if (err || !n) break; switch (prm.fmt) { case AUFMT_S16LE: err = mbuf_write_mem(mb, buf, n); break; case AUFMT_PCMA: for (i=0; i<n; i++) { err |= mbuf_write_u16(mb, g711_alaw2pcm(buf[i])); } break; case AUFMT_PCMU: for (i=0; i<n; i++) { err |= mbuf_write_u16(mb, g711_ulaw2pcm(buf[i])); } break; default: err = ENOSYS; break; } } mem_deref(af); if (!err) { mb->pos = 0; *srate = prm.srate; *channels = prm.channels; } return err; }
static int pcmu_decode(struct audec_state *ads, int16_t *sampv, size_t *sampc, const uint8_t *buf, size_t len) { (void)ads; if (!sampv || !sampc || !buf) return EINVAL; if (*sampc < len) return ENOMEM; *sampc = len; while (len--) *sampv++ = g711_ulaw2pcm(*buf++); return 0; }