rendered paste bodydiff --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