diff --git a/sbc/sbc.c b/sbc/sbc.c index c95862a..59047bb 100644 --- a/sbc/sbc.c +++ b/sbc/sbc.c @@ -1230,12 +1230,12 @@ int sbc_init(sbc_t *sbc, unsigned long flags) return 0; } -int sbc_parse(sbc_t *sbc, void *data, int count) +int sbc_parse(sbc_t *sbc, void *input, int count, void *output, int *len) { - return sbc_decode(sbc, data, count); + return sbc_decode(sbc, input, count, output, len); } -int sbc_decode(sbc_t *sbc, void *data, int count) +int sbc_decode(sbc_t *sbc, void *input, int count, void *output, int *len) { struct sbc_priv *priv; char *ptr; @@ -1246,7 +1246,7 @@ int sbc_decode(sbc_t *sbc, void *data, int count) priv = sbc->priv; - framelen = sbc_unpack_frame(data, &priv->frame, count); + framelen = sbc_unpack_frame(input, &priv->frame, count); if (!priv->init) { sbc_decoder_init(&priv->dec_state, &priv->frame); @@ -1261,22 +1261,7 @@ int sbc_decode(sbc_t *sbc, void *data, int count) samples = sbc_synthesize_audio(&priv->dec_state, &priv->frame); - if (!sbc->data) { - sbc->size = samples * priv->frame.channels * 2; - sbc->data = malloc(sbc->size); - } - - if (sbc->size < samples * priv->frame.channels * 2) { - sbc->size = samples * priv->frame.channels * 2; - sbc->data = realloc(sbc->data, sbc->size); - } - - if (!sbc->data) { - sbc->size = 0; - return -ENOMEM; - } - - ptr = sbc->data; + ptr = output; for (i = 0; i < samples; i++) { for (ch = 0; ch < priv->frame.channels; ch++) { @@ -1293,12 +1278,12 @@ int sbc_decode(sbc_t *sbc, void *data, int count) } } - sbc->len = samples * priv->frame.channels * 2; + *len = samples * priv->frame.channels * 2; return framelen; } -int sbc_encode(sbc_t *sbc, void *data, int count) +int sbc_encode(sbc_t *sbc, void *input, int count, void *output, int *len) { struct sbc_priv *priv; char *ptr; @@ -1334,7 +1319,7 @@ int sbc_encode(sbc_t *sbc, void *data, int count) if (count < priv->frame.subbands * priv->frame.blocks * sbc->channels * 2) return 0; - ptr = data; + ptr = input; for (i = 0; i < priv->frame.subbands * priv->frame.blocks; i++) { for (ch = 0; ch < sbc->channels; ch++) { @@ -1351,19 +1336,9 @@ int sbc_encode(sbc_t *sbc, void *data, int count) samples = sbc_analyze_audio(&priv->enc_state, &priv->frame); - if (!sbc->data) { - sbc->size = 1024; - sbc->data = malloc(sbc->size); - } - - if (!sbc->data) { - sbc->size = 0; - return -ENOMEM; - } - - framelen = sbc_pack_frame(sbc->data, &priv->frame, sbc->size); + framelen = sbc_pack_frame(output, &priv->frame, 1024); - sbc->len = framelen; + *len = framelen; sbc->duration = (1000000 * priv->frame.subbands * priv->frame.blocks) / sbc->rate; @@ -1375,9 +1350,6 @@ void sbc_finish(sbc_t *sbc) if (!sbc) return; - if (sbc->data) - free(sbc->data); - if (sbc->priv) free(sbc->priv); diff --git a/sbc/sbc.h b/sbc/sbc.h index 72512c0..31673b5 100644 --- a/sbc/sbc.h +++ b/sbc/sbc.h @@ -42,10 +42,6 @@ struct sbc_struct { int bitpool; int swap; - void *data; - int size; - int len; - unsigned long duration; void *priv; @@ -54,9 +50,9 @@ struct sbc_struct { typedef struct sbc_struct sbc_t; int sbc_init(sbc_t *sbc, unsigned long flags); -int sbc_parse(sbc_t *sbc, void *data, int count); -int sbc_decode(sbc_t *sbc, void *data, int count); -int sbc_encode(sbc_t *sbc, void *data, int count); +int sbc_parse(sbc_t *sbc, void *input, int count, void *output, int *len); +int sbc_decode(sbc_t *sbc, void *input, int count, void *output, int *len); +int sbc_encode(sbc_t *sbc, void *input, int count, void *output, int *len); void sbc_finish(sbc_t *sbc); #ifdef __cplusplus