<h1>Project "FreeSWITCH Source" received a push.</h1>
<h2>branch: master updated</h2>
<pre>
via: e431481d4d45ca13c4d2f929f4ef0f23521fe922 (commit)
from: a79b64ee2016ba90af72821990d8ae678c96623d (commit)
</pre>= COMMIT LOG ===========================================================
<div class="highlight"><pre>committer: Anthony Minessale
comments:
agc
<span style="color: #000080; font-weight: bold">diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c</span>
<span style="color: #000080; font-weight: bold">index 1fc4ed5..53b3bfc 100644</span>
<span style="color: #A00000">--- a/src/mod/applications/mod_conference/mod_conference.c</span>
<span style="color: #00A000">+++ b/src/mod/applications/mod_conference/mod_conference.c</span>
<span style="color: #800080; font-weight: bold">@@ -36,7 +36,8 @@</span>
*
*/
#include <switch.h>
<span style="color: #A00000">-//#define INTENSE_DEBUG</span>
<span style="color: #00A000">+#define DEFAULT_AGC_LEVEL 1000</span>
<span style="color: #00A000">+</span>
SWITCH_MODULE_LOAD_FUNCTION(mod_conference_load);
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_conference_shutdown);
SWITCH_MODULE_DEFINITION(mod_conference, mod_conference_load, mod_conference_shutdown, NULL);
<span style="color: #800080; font-weight: bold">@@ -1965,41 +1966,43 @@ static int noise_gate_check(conference_member_t *member)</span>
        return r;
}
<span style="color: #00A000">+static void clear_avg(conference_member_t *member)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        member->avg_score = 0;</span>
<span style="color: #00A000">+        member->avg_itt = 0;</span>
<span style="color: #00A000">+        member->avg_tally = 0;</span>
<span style="color: #00A000">+        member->agc_concur = 0;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
static void check_agc_levels(conference_member_t *member)
{
<span style="color: #A00000">-        if (!member->avg_score) return;</span>
<span style="color: #00A000">+        int x = 0;</span>
<span style="color: #A00000">-        if (member->avg_score < member->conference->agc_level - 200) {</span>
<span style="color: #00A000">+        if (!member->avg_score) return;</span>
<span style="color: #00A000">+        </span>
<span style="color: #00A000">+        if (member->avg_score < member->conference->agc_level - 100) {</span>
                member->agc_volume_in_level++;
                switch_normalize_volume_granular(member->agc_volume_in_level);
<span style="color: #A00000">-        } else if (member->avg_score > member->conference->agc_level + 200) {</span>
<span style="color: #00A000">+                x = 1;</span>
<span style="color: #00A000">+        } else if (member->avg_score > member->conference->agc_level + 100) {</span>
                member->agc_volume_in_level--;
                switch_normalize_volume_granular(member->agc_volume_in_level);
<span style="color: #00A000">+                x = -1;</span>
        }
<span style="color: #A00000">-</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-                //} else {</span>
<span style="color: #A00000">-                //member->vol_period = (member->read_impl.actual_samples_per_second / member->read_impl.samples_per_packet) * 5;</span>
<span style="color: #A00000">-                //}</span>
<span style="color: #00A000">+        if (x) {</span>
<span style="color: #00A000">+                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG7,</span>
<span style="color: #00A000">+                                                 "AGC %s:%d diff:%d level:%d cur:%d avg:%d vol:%d %s\n", </span>
<span style="color: #00A000">+                                                 member->conference->name,</span>
<span style="color: #00A000">+                                                 member->id, member->conference->agc_level - member->avg_score, member->conference->agc_level, </span>
<span style="color: #00A000">+                                                 member->score, member->avg_score, member->agc_volume_in_level, x > 0 ? "+++" : "---");</span>
<span style="color: #00A000">+                </span>
<span style="color: #00A000">+                clear_avg(member);</span>
<span style="color: #00A000">+        }</span>
}
<span style="color: #A00000">-static void clear_avg(conference_member_t *member)</span>
<span style="color: #A00000">-{</span>
<span style="color: #A00000">-        //if (member->agc_volume_in_level < -5) {</span>
<span style="color: #A00000">-                //member->agc_volume_in_level = 0;</span>
<span style="color: #A00000">-        //}</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        if (member->conference->agc_level) {</span>
<span style="color: #A00000">-                check_agc_levels(member);</span>
<span style="color: #A00000">-        }</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        member->avg_score = 0;</span>
<span style="color: #A00000">-        member->avg_itt = 0;</span>
<span style="color: #A00000">-        member->avg_tally = 0;</span>
<span style="color: #A00000">-        member->agc_concur = 0;</span>
<span style="color: #A00000">-}</span>
/* marshall frames from the call leg to the conference thread for muxing to other call legs */
<span style="color: #800080; font-weight: bold">@@ -2056,6 +2059,7 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, v</span>
                                if (++hangover_hits >= hangover) {
                                        hangover_hits = hangunder_hits = 0;
                                        switch_clear_flag_locked(member, MFLAG_TALKING);
<span style="color: #00A000">+                                        check_agc_levels(member);</span>
                                        clear_avg(member);
                                        if (test_eflag(member->conference, EFLAG_STOP_TALKING) &&
<span style="color: #800080; font-weight: bold">@@ -2075,13 +2079,9 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, v</span>
                        clear_avg(member);
                }
<span style="color: #A00000">-                if (member->avg_itt > (member->read_impl.actual_samples_per_second / member->read_impl.samples_per_packet) * 3) {</span>
<span style="color: #A00000">-                        clear_avg(member);</span>
<span style="color: #A00000">-                }</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-                </span>
                /* Check for input volume adjustments */
                if (!member->conference->agc_level) {
<span style="color: #00A000">+                        member->conference->agc_level = 0;</span>
                        clear_avg(member);
                }
                
<span style="color: #800080; font-weight: bold">@@ -2091,16 +2091,10 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, v</span>
                if ((switch_test_flag(member, MFLAG_CAN_SPEAK) || switch_test_flag(member, MFLAG_MUTE_DETECT))) {
                        uint32_t energy = 0, i = 0, samples = 0, j = 0;
                        int16_t *data;
<span style="color: #A00000">-                        int divisor = 0;</span>
                        int agc_period = (member->read_impl.actual_samples_per_second / member->read_impl.samples_per_packet) / 4;
                        
                        data = read_frame->data;
<span style="color: #A00000">-</span>
<span style="color: #A00000">-                        if (!(divisor = member->read_impl.actual_samples_per_second / 8000)) {</span>
<span style="color: #A00000">-                                divisor = 1;</span>
<span style="color: #A00000">-                        }</span>
<span style="color: #A00000">-</span>
                        member->score = 0;
                        if (member->volume_in_level) {
<span style="color: #800080; font-weight: bold">@@ -2116,7 +2110,8 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, v</span>
                                        energy += abs(data[j]);
                                        j += member->read_impl.number_of_channels;
                                }
<span style="color: #A00000">-                                member->score = energy / (samples / divisor);</span>
<span style="color: #00A000">+                                </span>
<span style="color: #00A000">+                                member->score = energy / samples;</span>
                        }
                        if (member->vol_period) {
<span style="color: #800080; font-weight: bold">@@ -2219,8 +2214,9 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, v</span>
                                        if (++hangover_hits >= hangover) {
                                                hangover_hits = hangunder_hits = 0;
                                                switch_clear_flag_locked(member, MFLAG_TALKING);
<span style="color: #00A000">+                                                check_agc_levels(member);</span>
                                                clear_avg(member);
<span style="color: #A00000">-</span>
<span style="color: #00A000">+                                                </span>
                                                if (test_eflag(member->conference, EFLAG_STOP_TALKING) &&
                                                        switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                                                        conference_add_event_member_data(member, event);
<span style="color: #800080; font-weight: bold">@@ -3500,7 +3496,7 @@ static switch_status_t conf_api_sub_agc(conference_obj_t *conference, switch_str</span>
        if (argc > 3) {
                level = atoi(argv[3]);
        } else {
<span style="color: #A00000">-                level = 1400;</span>
<span style="color: #00A000">+                level = DEFAULT_AGC_LEVEL;</span>
        }
        if (level > conference->energy_level) {
<span style="color: #800080; font-weight: bold">@@ -6454,7 +6450,7 @@ static conference_obj_t *conference_new(char *name, conf_xml_cfg_t cfg, switch_c</span>
                int level = 0;
                if (switch_true(auto_gain_level)) {
<span style="color: #A00000">-                        level = 1400;</span>
<span style="color: #00A000">+                        level = DEFAULT_AGC_LEVEL;</span>
                } else {
                        level = atoi(auto_gain_level);
                }
</pre></div>
========================================================================<pre>
Summary of changes:
.../applications/mod_conference/mod_conference.c | 74 +++++++++----------
1 files changed, 35 insertions(+), 39 deletions(-)
</pre>
<p>this email was generated because of /git/your-repo.git/hooks/post-receive by the file /git-core/contrib/hooks/post-receive-email<br />
For more info, see <a href="http://blog.chomperstomp.com/?p=630">http://blog.chomperstomp.com/?p=630</a>
-- <br />
FreeSWITCH Source</p>