All pastes #766342 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-11-08 20:28 UTC
rendered paste body
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