rendered paste bodyIndex: 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);