diff options
Diffstat (limited to 'modules/opus/encode.c')
-rw-r--r-- | modules/opus/encode.c | 49 |
1 files changed, 22 insertions, 27 deletions
diff --git a/modules/opus/encode.c b/modules/opus/encode.c index 7450d92..7baf4f8 100644 --- a/modules/opus/encode.c +++ b/modules/opus/encode.c @@ -172,42 +172,37 @@ int opus_encode_update(struct auenc_state **aesp, const struct aucodec *ac, int opus_encode_frm(struct auenc_state *aes, uint8_t *buf, size_t *len, - const int16_t *sampv, size_t sampc) + int fmt, const void *sampv, size_t sampc) { opus_int32 n; if (!aes || !buf || !len || !sampv) return EINVAL; - n = opus_encode(aes->enc, sampv, (int)(sampc/aes->ch), - buf, (opus_int32)(*len)); - if (n < 0) { - warning("opus: encode error: %s\n", opus_strerror((int)n)); - return EPROTO; - } - - *len = n; - - return 0; -} + switch (fmt) { + case AUFMT_S16LE: + n = opus_encode(aes->enc, sampv, (int)(sampc/aes->ch), + buf, (opus_int32)(*len)); + if (n < 0) { + warning("opus: encode error: %s\n", + opus_strerror((int)n)); + return EPROTO; + } + break; + + case AUFMT_FLOAT: + n = opus_encode_float(aes->enc, sampv, (int)(sampc/aes->ch), + buf, (opus_int32)(*len)); + if (n < 0) { + warning("opus: float encode error: %s\n", + opus_strerror((int)n)); + return EPROTO; + } + break; -int opus_encode_format_frm(struct auenc_state *aes, uint8_t *buf, size_t *len, - int fmt, const void *sampv, size_t sampc) -{ - opus_int32 n; - - if (!aes || !buf || !len || !sampv) - return EINVAL; - - if (fmt != AUFMT_FLOAT) + default: return ENOTSUP; - - n = opus_encode_float(aes->enc, sampv, (int)(sampc/aes->ch), - buf, (opus_int32)(*len)); - if (n < 0) { - warning("opus: encode error: %s\n", opus_strerror((int)n)); - return EPROTO; } *len = n; |