<h1>Project "FreeSWITCH Source" received a push.</h1>
<h2>branch: master updated</h2>
<pre>
via: 4a4ac354268cd7699bc2f39e8e728acbf3855703 (commit)
from: 4e60f14a4d0e942aef7973546dbe040ef330640f (commit)
</pre>= COMMIT LOG ===========================================================
<div class="highlight"><pre>committer: Anthony Minessale
comments:
another round of agc changes
<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 8a3f53e..92ca104 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">@@ -266,7 +266,6 @@ typedef struct conference_obj {</span>
        switch_thread_rwlock_t *rwlock;
        uint32_t count;
        int32_t energy_level;
<span style="color: #A00000">-        int32_t agc_energy_level;</span>
        uint8_t min;
        switch_speech_handle_t lsh;
        switch_speech_handle_t *sh;
<span style="color: #800080; font-weight: bold">@@ -1943,6 +1942,28 @@ static void conference_loop_fn_hangup(conference_member_t *member, caller_contro</span>
        switch_clear_flag_locked(member, MFLAG_RUNNING);
}
<span style="color: #00A000">+</span>
<span style="color: #00A000">+static int noise_gate_check(conference_member_t *member)</span>
<span style="color: #00A000">+{</span>
<span style="color: #00A000">+        int r = 0;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        if (member->conference->agc_level && member->agc_volume_in_level != 0) {</span>
<span style="color: #00A000">+                int target_score = 0;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+                target_score = (member->energy_level + (25 * member->agc_volume_in_level));</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+                if (target_score < 0) target_score = 0;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+                r = member->score > target_score;</span>
<span style="color: #00A000">+                </span>
<span style="color: #00A000">+        } else {</span>
<span style="color: #00A000">+                r = member->score > member->energy_level;</span>
<span style="color: #00A000">+        }</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+        return r;</span>
<span style="color: #00A000">+}</span>
<span style="color: #00A000">+</span>
static void check_agc_levels(conference_member_t *member)
{
        if (!member->avg_score) return;
<span style="color: #800080; font-weight: bold">@@ -1954,6 +1975,9 @@ static void check_agc_levels(conference_member_t *member)</span>
                member->agc_volume_in_level--;
                switch_normalize_volume_granular(member->agc_volume_in_level);
        }
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
                //} else {
                //member->vol_period = (member->read_impl.actual_samples_per_second / member->read_impl.samples_per_packet) * 5;
                //}
<span style="color: #800080; font-weight: bold">@@ -1962,9 +1986,9 @@ static void check_agc_levels(conference_member_t *member)</span>
static void clear_avg(conference_member_t *member)
{
<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: #00A000">+        //if (member->agc_volume_in_level < -5) {</span>
<span style="color: #00A000">+                //member->agc_volume_in_level = 0;</span>
<span style="color: #00A000">+        //}</span>
        if (member->conference->agc_level) {
                check_agc_levels(member);
<span style="color: #800080; font-weight: bold">@@ -1985,7 +2009,7 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, v</span>
        switch_channel_t *channel;
        switch_status_t status;
        switch_frame_t *read_frame = NULL;
<span style="color: #A00000">-        uint32_t hangover = 40, hangunder = 5, hangover_hits = 0, hangunder_hits = 0, energy_level = 0, diff_level = 400;</span>
<span style="color: #00A000">+        uint32_t hangover = 40, hangunder = 5, hangover_hits = 0, hangunder_hits = 0, diff_level = 400;</span>
        switch_core_session_t *session = member->session;
        int check_floor_change;
<span style="color: #800080; font-weight: bold">@@ -2049,13 +2073,17 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, v</span>
                        member->agc_volume_in_level = 0;
                        clear_avg(member);
                }
<span style="color: #00A000">+</span>
<span style="color: #00A000">+                if (member->avg_itt > (member->read_impl.actual_samples_per_second / member->read_impl.samples_per_packet) * 3) {</span>
<span style="color: #00A000">+                        clear_avg(member);</span>
<span style="color: #00A000">+                }</span>
<span style="color: #00A000">+</span>
                
                /* Check for input volume adjustments */
                if (!member->conference->agc_level) {
                        clear_avg(member);
                }
                
<span style="color: #A00000">-                energy_level = member->energy_level;</span>
                /* if the member can speak, compute the audio energy level and */
                /* generate events when the level crosses the threshold */
<span style="color: #800080; font-weight: bold">@@ -2096,9 +2124,9 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, v</span>
                        
                        if (member->conference->agc_level && member->score &&
                                switch_test_flag(member, MFLAG_CAN_SPEAK) &&
<span style="color: #A00000">-                                member->score > member->conference->agc_energy_level</span>
<span style="color: #00A000">+                                noise_gate_check(member)</span>
                                ) {
<span style="color: #A00000">-</span>
<span style="color: #00A000">+                                </span>
                                member->avg_tally += member->score;
                                member->avg_itt++;
                                if (!member->avg_itt) member->avg_itt++;
<span style="color: #800080; font-weight: bold">@@ -2129,8 +2157,8 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, v</span>
                                member->score_iir = SCORE_MAX_IIR;
                        }
<span style="color: #A00000">-                        if (member->score > energy_level) {</span>
<span style="color: #A00000">-                                uint32_t diff = member->score - energy_level;</span>
<span style="color: #00A000">+                        if (noise_gate_check(member)) {</span>
<span style="color: #00A000">+                                uint32_t diff = member->score - member->energy_level;</span>
                                if (hangover_hits) {
                                        hangover_hits--;
                                }
<span style="color: #800080; font-weight: bold">@@ -2198,7 +2226,7 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, v</span>
                }
                /* skip frames that are not actual media or when we are muted or silent */
<span style="color: #A00000">-                if ((switch_test_flag(member, MFLAG_TALKING) || energy_level == 0) && switch_test_flag(member, MFLAG_CAN_SPEAK) &&</span>
<span style="color: #00A000">+                if ((switch_test_flag(member, MFLAG_TALKING) || member->energy_level == 0) && switch_test_flag(member, MFLAG_CAN_SPEAK) &&</span>
                        !switch_test_flag(member->conference, CFLAG_WAIT_MOD)) {
                        switch_audio_resampler_t *read_resampler = member->read_resampler;
                        void *data;
<span style="color: #800080; font-weight: bold">@@ -3444,7 +3472,7 @@ static switch_status_t conf_api_sub_mute(conference_member_t *member, switch_str</span>
static switch_status_t conf_api_sub_agc(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv)
{
<span style="color: #A00000">-        int level, energy_level;</span>
<span style="color: #00A000">+        int level;</span>
        int on = 0;
        if (argc == 2) {
<span style="color: #800080; font-weight: bold">@@ -3462,13 +3490,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 = 650;</span>
<span style="color: #A00000">-        }</span>
<span style="color: #A00000">-</span>
<span style="color: #A00000">-        if (argc > 4) {</span>
<span style="color: #A00000">-                energy_level = atoi(argv[4]);</span>
<span style="color: #A00000">-        } else {</span>
<span style="color: #A00000">-                energy_level = 100;</span>
<span style="color: #00A000">+                level = 1200;</span>
        }
        if (level > conference->energy_level) {
<span style="color: #800080; font-weight: bold">@@ -3476,10 +3498,9 @@ static switch_status_t conf_api_sub_agc(conference_obj_t *conference, switch_str</span>
                conference->avg_itt = 0;
                conference->avg_tally = 0;
                conference->agc_level = level;
<span style="color: #A00000">-                conference->agc_energy_level = energy_level;</span>
                if (stream) {
<span style="color: #A00000">-                        stream->write_function(stream, "OK AGC ENABLED %d %d\n", conference->agc_level, conference->agc_energy_level);</span>
<span style="color: #00A000">+                        stream->write_function(stream, "OK AGC ENABLED %d\n", conference->agc_level);</span>
                }
                
        } else {
<span style="color: #800080; font-weight: bold">@@ -3853,7 +3874,7 @@ static void conference_xlist(conference_obj_t *conference, switch_xml_t x_confer</span>
        if (conference->agc_level) {
                char tmp[30] = "";
<span style="color: #A00000">-                switch_snprintf(tmp, sizeof(tmp), "%d:%d", conference->agc_level, conference->agc_energy_level);</span>
<span style="color: #00A000">+                switch_snprintf(tmp, sizeof(tmp), "%d", conference->agc_level);</span>
                switch_xml_set_attr_d_buf(x_conference, "agc", tmp);
        }
<span style="color: #800080; font-weight: bold">@@ -6421,30 +6442,16 @@ static conference_obj_t *conference_new(char *name, conf_xml_cfg_t cfg, switch_c</span>
        if (!zstr(auto_gain_level)) {
                int level = 0;
<span style="color: #A00000">-                int energy_level = 100;</span>
                if (switch_true(auto_gain_level)) {
<span style="color: #A00000">-                        level = 650;</span>
<span style="color: #00A000">+                        level = 1200;</span>
                } else {
<span style="color: #A00000">-                        char *p;</span>
<span style="color: #A00000">-                        int tmp = 0;</span>
<span style="color: #A00000">-</span>
                        level = atoi(auto_gain_level);
<span style="color: #A00000">-                        if ((p = strchr(auto_gain_level, ':'))) {</span>
<span style="color: #A00000">-                                p++;</span>
<span style="color: #A00000">-                                if (p) tmp = atoi(p);</span>
<span style="color: #A00000">-                                if (tmp > 0) {</span>
<span style="color: #A00000">-                                        energy_level = tmp;</span>
<span style="color: #A00000">-                                }</span>
<span style="color: #A00000">-                        }</span>
                }
                if (level > 0 && level > conference->energy_level) {
                        conference->agc_level = level;
                }
<span style="color: #A00000">-</span>
<span style="color: #A00000">-                conference->agc_energy_level = energy_level;</span>
<span style="color: #A00000">-                </span>
        }
        if (!zstr(maxmember_sound)) {
</pre></div>
========================================================================<pre>
Summary of changes:
.../applications/mod_conference/mod_conference.c | 81 +++++++++++---------
1 files changed, 44 insertions(+), 37 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>