diff options
author | Alfred E. Heggestad <alfred.heggestad@gmail.com> | 2018-02-03 18:32:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-03 18:32:38 +0100 |
commit | 74db759ddbed32127ae763ab72be552cff2aebcc (patch) | |
tree | 123ceaaf86cf06a211d8dc29a97007f36cdaa236 /modules/opus | |
parent | 671f293bbdf8f234a73d8c2e6fb75a8ee3d039ce (diff) |
Aucodec sample format (#352)
* aucodec: merge s16 and fmt encode/decode into one
having 2 different encode functions for s16 and other formats
turned out to be a bit impractical. better to have 1 function
where the sample format (fmt) can be specified.
* update some aucodec modules
* update test
* update codec2
* update g7221 module
Diffstat (limited to 'modules/opus')
-rw-r--r-- | modules/opus/decode.c | 76 | ||||
-rw-r--r-- | modules/opus/encode.c | 49 | ||||
-rw-r--r-- | modules/opus/opus.c | 2 | ||||
-rw-r--r-- | modules/opus/opus.h | 13 |
4 files changed, 71 insertions, 69 deletions
diff --git a/modules/opus/decode.c b/modules/opus/decode.c index a09f2ff..a4b8721 100644 --- a/modules/opus/decode.c +++ b/modules/opus/decode.c @@ -64,7 +64,8 @@ int opus_decode_update(struct audec_state **adsp, const struct aucodec *ac, } -int opus_decode_frm(struct audec_state *ads, int16_t *sampv, size_t *sampc, +int opus_decode_frm(struct audec_state *ads, + int fmt, void *sampv, size_t *sampc, const uint8_t *buf, size_t len) { int n; @@ -72,11 +73,29 @@ int opus_decode_frm(struct audec_state *ads, int16_t *sampv, size_t *sampc, if (!ads || !sampv || !sampc || !buf) return EINVAL; - n = opus_decode(ads->dec, buf, (opus_int32)len, - sampv, (int)(*sampc/ads->ch), 0); - if (n < 0) { - warning("opus: decode error: %s\n", opus_strerror(n)); - return EPROTO; + switch (fmt) { + + case AUFMT_S16LE: + n = opus_decode(ads->dec, buf, (opus_int32)len, + sampv, (int)(*sampc/ads->ch), 0); + if (n < 0) { + warning("opus: decode error: %s\n", opus_strerror(n)); + return EPROTO; + } + break; + + case AUFMT_FLOAT: + n = opus_decode_float(ads->dec, buf, (opus_int32)len, + sampv, (int)(*sampc/ads->ch), 0); + if (n < 0) { + warning("opus: float decode error: %s\n", + opus_strerror(n)); + return EPROTO; + } + break; + + default: + return ENOTSUP; } *sampc = n * ads->ch; @@ -85,40 +104,33 @@ int opus_decode_frm(struct audec_state *ads, int16_t *sampv, size_t *sampc, } -int opus_decode_format_frm(struct audec_state *ads, - int fmt, void *sampv, size_t *sampc, - const uint8_t *buf, size_t len) +int opus_decode_pkloss(struct audec_state *ads, + int fmt, void *sampv, size_t *sampc) { int n; - if (!ads || !sampv || !sampc || !buf) + if (!ads || !sampv || !sampc) return EINVAL; - if (fmt != AUFMT_FLOAT) - return ENOTSUP; - n = opus_decode_float(ads->dec, buf, (opus_int32)len, - sampv, (int)(*sampc/ads->ch), 0); - if (n < 0) { - warning("opus: decode error: %s\n", opus_strerror(n)); - return EPROTO; - } + switch (fmt) { - *sampc = n * ads->ch; - - return 0; -} + case AUFMT_S16LE: + n = opus_decode(ads->dec, NULL, 0, + sampv, (int)(*sampc/ads->ch), 0); + if (n < 0) + return EPROTO; + break; + case AUFMT_FLOAT: + n = opus_decode_float(ads->dec, NULL, 0, + sampv, (int)(*sampc/ads->ch), 0); + if (n < 0) + return EPROTO; + break; -int opus_decode_pkloss(struct audec_state *ads, int16_t *sampv, size_t *sampc) -{ - int n; - - if (!ads || !sampv || !sampc) - return EINVAL; - - n = opus_decode(ads->dec, NULL, 0, sampv, (int)(*sampc/ads->ch), 0); - if (n < 0) - return EPROTO; + default: + return ENOTSUP; + } *sampc = n * ads->ch; 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; diff --git a/modules/opus/opus.c b/modules/opus/opus.c index 8346680..7acccec 100644 --- a/modules/opus/opus.c +++ b/modules/opus/opus.c @@ -69,8 +69,6 @@ static struct aucodec opus = { .decupdh = opus_decode_update, .dech = opus_decode_frm, .plch = opus_decode_pkloss, - .encfmth = opus_encode_format_frm, - .decfmth = opus_decode_format_frm, }; diff --git a/modules/opus/opus.h b/modules/opus/opus.h index 9e79bd5..70fa0e3 100644 --- a/modules/opus/opus.h +++ b/modules/opus/opus.h @@ -19,20 +19,17 @@ struct opus_param { int opus_encode_update(struct auenc_state **aesp, const struct aucodec *ac, struct auenc_param *prm, const char *fmtp); int opus_encode_frm(struct auenc_state *aes, uint8_t *buf, size_t *len, - const int16_t *sampv, size_t sampc); -int opus_encode_format_frm(struct auenc_state *aes, uint8_t *buf, size_t *len, - int fmt, const void *sampv, size_t sampc); + int fmt, const void *sampv, size_t sampc); /* Decode */ int opus_decode_update(struct audec_state **adsp, const struct aucodec *ac, const char *fmtp); -int opus_decode_frm(struct audec_state *ads, int16_t *sampv, size_t *sampc, +int opus_decode_frm(struct audec_state *ads, + int fmt, void *sampv, size_t *sampc, const uint8_t *buf, size_t len); -int opus_decode_format_frm(struct audec_state *ads, - int fmt, void *sampv, size_t *sampc, - const uint8_t *buf, size_t len); -int opus_decode_pkloss(struct audec_state *st, int16_t *sampv, size_t *sampc); +int opus_decode_pkloss(struct audec_state *st, + int fmt, void *sampv, size_t *sampc); /* SDP */ |