summaryrefslogtreecommitdiff
path: root/modules/opus
diff options
context:
space:
mode:
authorAlfred E. Heggestad <alfred.heggestad@gmail.com>2018-02-03 18:32:38 +0100
committerGitHub <noreply@github.com>2018-02-03 18:32:38 +0100
commit74db759ddbed32127ae763ab72be552cff2aebcc (patch)
tree123ceaaf86cf06a211d8dc29a97007f36cdaa236 /modules/opus
parent671f293bbdf8f234a73d8c2e6fb75a8ee3d039ce (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.c76
-rw-r--r--modules/opus/encode.c49
-rw-r--r--modules/opus/opus.c2
-rw-r--r--modules/opus/opus.h13
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 */