[Freeswitch-svn] [commit] r6395 - in freeswitch/trunk/src: . mod/applications/mod_conference

Freeswitch SVN anthm at freeswitch.org
Sat Nov 24 16:48:25 EST 2007


Author: anthm
Date: Sat Nov 24 16:48:25 2007
New Revision: 6395

Modified:
   freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c
   freeswitch/trunk/src/switch_ivr_play_say.c
   freeswitch/trunk/src/switch_rtp.c

Log:
fix energy stuff to work better on 16khz calls

Modified: freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c
==============================================================================
--- freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c	(original)
+++ freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c	Sat Nov 24 16:48:25 2007
@@ -1382,17 +1382,23 @@
 		if (switch_test_flag(member, MFLAG_CAN_SPEAK) && energy_level) {
 			uint32_t energy = 0, i = 0, samples = 0, j = 0, score = 0;
 			int16_t *data;
+			int divisor = 0;
 
 			data = read_frame->data;
+
+			if (!(divisor = read_codec->implementation->actual_samples_per_second / 8000)) {
+				divisor = 1;
+			}
+			
 			if ((samples = read_frame->datalen / sizeof(*data))) {
 
 				for (i = 0; i < samples; i++) {
 					energy += abs(data[j]);
 					j += read_codec->implementation->number_of_channels;
 				}
-				score = energy / samples;
+				score = energy / (samples / divisor);
 			}
-
+			
 			if (score > energy_level) {
 				uint32_t diff = score - energy_level;
 				if (hangover_hits) {

Modified: freeswitch/trunk/src/switch_ivr_play_say.c
==============================================================================
--- freeswitch/trunk/src/switch_ivr_play_say.c	(original)
+++ freeswitch/trunk/src/switch_ivr_play_say.c	Sat Nov 24 16:48:25 2007
@@ -516,13 +516,18 @@
 			uint32_t samples = read_frame->datalen / sizeof(*fdata);
 			uint32_t score, count = 0, j = 0;
 			double energy = 0;
-
+			int divisor = 0;
+			
 			for (count = 0; count < samples; count++) {
 				energy += abs(fdata[j]);
 				j += read_codec->implementation->number_of_channels;
 			}
 
-			score = (uint32_t) (energy / samples);
+			if (!(divisor = read_codec->implementation->actual_samples_per_second / 8000)) {
+				divisor = 1;
+			}
+			
+			score = (uint32_t) (energy / (samples / divisor));
 			if (score < fh->thresh) {
 				if (!--fh->silence_hits) {
 					break;

Modified: freeswitch/trunk/src/switch_rtp.c
==============================================================================
--- freeswitch/trunk/src/switch_rtp.c	(original)
+++ freeswitch/trunk/src/switch_rtp.c	Sat Nov 24 16:48:25 2007
@@ -1375,8 +1375,13 @@
 			uint32_t energy = 0;
 			uint32_t x, y = 0, z = len / sizeof(int16_t);
 			uint32_t score = 0;
-
+			int divisor = 0;
 			if (z) {
+				
+				if (!(divisor = rtp_session->vad_data.read_codec->implementation->actual_samples_per_second / 8000)) {
+					divisor = 1;
+				}
+
 				for (x = 0; x < z; x++) {
 					energy += abs(decoded[y]);
 					y += rtp_session->vad_data.read_codec->implementation->number_of_channels;
@@ -1385,7 +1390,7 @@
 				if (++rtp_session->vad_data.start_count < rtp_session->vad_data.start) {
 					send = 1;
 				} else {
-					score = energy / z;
+					score = (energy / (z / divisor));
 					if (score && (rtp_session->vad_data.bg_count < rtp_session->vad_data.bg_len)) {
 						rtp_session->vad_data.bg_level += score;
 						if (++rtp_session->vad_data.bg_count == rtp_session->vad_data.bg_len) {



More information about the Freeswitch-svn mailing list