[asterisk-commits] bbryant: trunk r114977 - /trunk/funcs/func_speex.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu May 1 13:28:39 CDT 2008


Author: bbryant
Date: Thu May  1 13:28:38 2008
New Revision: 114977

URL: http://svn.digium.com/view/asterisk?view=rev&rev=114977
Log:
Add "read" capability to new libspeex functions in func_speex.c.

func_speex.c is based on contributions from Switchvox.

Modified:
    trunk/funcs/func_speex.c

Modified: trunk/funcs/func_speex.c
URL: http://svn.digium.com/view/asterisk/trunk/funcs/func_speex.c?view=diff&rev=114977&r1=114976&r2=114977
==============================================================================
--- trunk/funcs/func_speex.c (original)
+++ trunk/funcs/func_speex.c Thu May  1 13:28:38 2008
@@ -209,7 +209,7 @@
 			}
 		}
 	} else if (!strcasecmp(cmd, "denoise")) {
-		(*sdi)->denoise = ast_true(value);
+		(*sdi)->denoise = (ast_true(value) != 0);
 
 		if ((*sdi)->state) {
 			speex_preprocess_ctl((*sdi)->state, SPEEX_PREPROCESS_SET_DENOISE, &(*sdi)->denoise);
@@ -245,6 +245,43 @@
 		ast_channel_unlock(chan);
 		ast_audiohook_attach(chan, &si->audiohook);
 	}
+
+	return 0;
+}
+
+static int speex_read(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len)
+{
+	struct ast_datastore *datastore = NULL;
+	struct speex_info *si = NULL;
+	struct speex_direction_info *sdi = NULL;
+
+	if (!chan) {
+		ast_log(LOG_ERROR, "%s cannot be used without a channel!\n", cmd);
+		return -1;
+	}
+
+	ast_channel_lock(chan);
+	if (!(datastore = ast_channel_datastore_find(chan, &speex_datastore, NULL))) {
+		ast_channel_unlock(chan);
+		return -1;
+	}
+	ast_channel_unlock(chan);
+
+	si = datastore->data;
+
+	if (!strcasecmp(data, "tx"))
+		sdi = si->tx;
+	else if (!strcasecmp(data, "rx"))
+		sdi = si->rx;
+	else {
+		ast_log(LOG_ERROR, "%s(%s) must either \"tx\" or \"rx\"\n", cmd, data);
+		return -1;
+	}
+
+	if (!strcasecmp(cmd, "agc"))
+		snprintf(buf, len, "%.01f", sdi ? sdi->agclevel : 0.0);
+	else
+		snprintf(buf, len, "%d", sdi ? sdi->denoise : 0);
 
 	return 0;
 }
@@ -266,6 +303,7 @@
 	"    Set(AGC(tx)=off)\n"
 	"",
 	.write = speex_write,
+	.read = speex_read
 };
 
 static struct ast_custom_function denoise_function = {
@@ -284,6 +322,7 @@
 	"    Set(DENOISE(tx)=off)\n"
 	"",
 	.write = speex_write,
+	.read = speex_read
 };
 
 static int unload_module(void)




More information about the asterisk-commits mailing list