All pastes #772256 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-11-13 17:53 UTC
rendered paste body
Index: audio/gstsbcenc.c
===================================================================
RCS file: /cvsroot/bluez/utils/audio/gstsbcenc.c,v
retrieving revision 1.11
diff -u -r1.11 gstsbcenc.c
--- audio/gstsbcenc.c	12 Nov 2007 22:21:45 -0000	1.11
+++ audio/gstsbcenc.c	13 Nov 2007 17:52:56 -0000
@@ -215,8 +215,7 @@
 	if (!(allocation = gst_structure_get_string(structure, "allocation")))
 		return FALSE;
 
-	sbc_finish(&enc->sbc);
-	sbc_init(&enc->sbc, 0);
+	sbc_reinit(&enc->sbc, 0);
 	enc->sbc.rate = rate;
 	enc->sbc.channels = channels;
 	enc->blocks = blocks;
Index: sbc/sbc.c
===================================================================
RCS file: /cvsroot/bluez/utils/sbc/sbc.c,v
retrieving revision 1.22
diff -u -r1.22 sbc.c
--- sbc/sbc.c	12 Nov 2007 18:16:00 -0000	1.22
+++ sbc/sbc.c	13 Nov 2007 17:52:57 -0000
@@ -1208,6 +1208,17 @@
 	struct sbc_encoder_state enc_state;
 };
 
+static void sbc_fill_defaults(sbc_t *sbc, unsigned long flags)
+{
+	sbc->rate = 44100;
+	sbc->channels = 2;
+	sbc->joint = 0;
+	sbc->subbands = 8;
+	sbc->blocks = 16;
+	sbc->bitpool = 32;
+	sbc->swap = 0;
+}
+
 int sbc_init(sbc_t *sbc, unsigned long flags)
 {
 	if (!sbc)
@@ -1221,13 +1232,7 @@
 
 	memset(sbc->priv, 0, sizeof(struct sbc_priv));
 
-	sbc->rate = 44100;
-	sbc->channels = 2;
-	sbc->joint = 0;
-	sbc->subbands = 8;
-	sbc->blocks = 16;
-	sbc->bitpool = 32;
-	sbc->swap = 0;
+	sbc_fill_defaults(sbc, flags);
 
 	return 0;
 }
@@ -1389,7 +1394,7 @@
 
 	ret = 4 + (4 * sbc->subbands * sbc->channels) / 8;
 
-	/* This term is not always evenly devide so we round it up */
+	/* This term is not always evenly divide so we round it up */
 	if (sbc->channels == 1)
 		ret += ((sbc->blocks * sbc->channels * sbc->bitpool) + 7) / 8;
 	else
@@ -1403,3 +1408,27 @@
 {
 	return sbc->subbands * sbc->blocks * sbc->channels * 2;
 }
+
+int sbc_reinit(sbc_t *sbc, unsigned long flags)
+{
+	struct sbc_priv *priv;
+
+	if (!sbc || !sbc->priv)
+		return -EIO;
+
+	priv = sbc->priv;
+
+	if (priv && priv->init == 1) {
+		free(sbc->priv);
+
+		sbc->priv = malloc(sizeof(struct sbc_priv));
+		if (!sbc->priv)
+			return -ENOMEM;
+
+		memset(sbc->priv, 0, sizeof(struct sbc_priv));
+	}
+
+	sbc_fill_defaults(sbc, flags);
+
+	return 0;
+}
Index: sbc/sbc.h
===================================================================
RCS file: /cvsroot/bluez/utils/sbc/sbc.h,v
retrieving revision 1.7
diff -u -r1.7 sbc.h
--- sbc/sbc.h	12 Nov 2007 18:16:00 -0000	1.7
+++ sbc/sbc.h	13 Nov 2007 17:52:57 -0000
@@ -50,6 +50,7 @@
 typedef struct sbc_struct sbc_t;
 
 int sbc_init(sbc_t *sbc, unsigned long flags);
+int sbc_reinit(sbc_t *sbc, unsigned long flags);
 int sbc_parse(sbc_t *sbc, void *input, int input_len);
 int sbc_decode(sbc_t *sbc, void *input, int input_len, void *output,
 		int output_len, int *len);