summaryrefslogtreecommitdiff
path: root/codecs/sbc
diff options
context:
space:
mode:
authorJörg Mayer <jmayer@loplof.de>2013-12-01 09:18:19 +0000
committerJörg Mayer <jmayer@loplof.de>2013-12-01 09:18:19 +0000
commit6cd4ad721f94b5b2c4e5136bad179eb83585f150 (patch)
tree9dd1c405a283916e4abd2f4a92119ffa58bdc6a5 /codecs/sbc
parenta9bd097e71744f55833fcb4bbd996093d2287092 (diff)
downloadwireshark-6cd4ad721f94b5b2c4e5136bad179eb83585f150.tar.gz
SBC -> sbc
On Unix case is relevant, so fix it. Please try to avoid filenames starting with Upper case, it makes completion so much easier as I only need to remember the name and not the case. svn path=/trunk/; revision=53689
Diffstat (limited to 'codecs/sbc')
-rw-r--r--codecs/sbc/sbc.c138
-rw-r--r--codecs/sbc/sbc.h37
2 files changed, 175 insertions, 0 deletions
diff --git a/codecs/sbc/sbc.c b/codecs/sbc/sbc.c
new file mode 100644
index 0000000000..b14b5bb681
--- /dev/null
+++ b/codecs/sbc/sbc.c
@@ -0,0 +1,138 @@
+/* sbc.c
+ * Support for external Bluetooth SBC codec
+ *
+ * Copyright 2012, Michal Labedzki for Tieto Corporation
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "config.h"
+
+#ifdef HAVE_SBC
+
+#include <glib.h>
+#include <sbc/sbc.h>
+
+#include "sbc.h"
+
+#define SBC_BUFFER 8192
+
+void *
+codec_sbc_init(void)
+{
+ sbc_t *sbc;
+
+ sbc = g_malloc(sizeof(sbc_t));
+ sbc_init(sbc, 0L);
+
+ return sbc;
+}
+
+void
+codec_sbc_release(void *ctx)
+{
+ sbc_t *sbc = (sbc_t *) ctx;
+
+ sbc_finish(sbc);
+ g_free(sbc);
+}
+
+int
+codec_sbc_get_channels(void *ctx)
+{
+ sbc_t *sbc = (sbc_t *) ctx;
+ if (sbc->mode == SBC_MODE_MONO)
+ return 1;
+
+ return 2;
+}
+
+int
+codec_sbc_get_frequency(void *ctx)
+{
+ sbc_t *sbc = (sbc_t *) ctx;
+ int frequency;
+
+ switch (sbc->frequency) {
+ case SBC_FREQ_16000:
+ frequency = 16000;
+ break;
+
+ case SBC_FREQ_32000:
+ frequency = 32000;
+ break;
+
+ case SBC_FREQ_44100:
+ frequency = 44100;
+ break;
+
+ case SBC_FREQ_48000:
+ frequency = 48000;
+ break;
+ default:
+ frequency = 0;
+ }
+
+ return frequency;
+}
+
+int
+codec_sbc_decode(void *ctx, const void *input, int inputSizeBytes, void *output,
+ int *outputSizeBytes)
+{
+ size_t size_in = (size_t) inputSizeBytes;
+ size_t size_out = SBC_BUFFER;
+ size_t len;
+ int framelen;
+ int xframe_pos = 0;
+ guint8 *data_in = (guint8 *) input;
+ guint8 *data_out = (guint8 *) output;
+ sbc_t *sbc = (sbc_t *) ctx;
+ guint8 *i_data;
+ guint8 tmp;
+
+ if (!output || !outputSizeBytes) {
+ return size_out;
+ }
+
+ sbc->endian = SBC_BE;
+
+ framelen = 0;
+ *outputSizeBytes = 0;
+ while (xframe_pos < inputSizeBytes) {
+ framelen = sbc_decode(sbc, data_in, size_in, data_out, size_out, &len);
+ xframe_pos += framelen;
+ data_in += framelen;
+ *outputSizeBytes += len;
+
+ for (i_data = data_out; i_data < data_out + len; i_data += 2) {
+ tmp = i_data[0];
+ i_data[0] = i_data[1];
+ i_data[1] = tmp;
+ }
+
+ data_out += len;
+ }
+
+ return *outputSizeBytes;
+}
+
+#endif
diff --git a/codecs/sbc/sbc.h b/codecs/sbc/sbc.h
new file mode 100644
index 0000000000..5cc8ad0927
--- /dev/null
+++ b/codecs/sbc/sbc.h
@@ -0,0 +1,37 @@
+/* sbc.h
+ * Definitions for Bluetooth SBC codec
+ *
+ * Copyright 2012, Michal Labedzki for Tieto Corporation
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef __CODECS_SBC_H__
+#define __CODECS_SBC_H__
+
+void *codec_sbc_init(void);
+void codec_sbc_release(void *ctx);
+int codec_sbc_get_channels(void *ctx);
+int codec_sbc_get_frequency(void *ctx);
+int codec_sbc_decode(void *ctx, const void *input, int inputSizeBytes, void *output,
+ int *outputSizeBytes);
+
+#endif /* sbc.h */