<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-&gt;conference-&gt;agc_level &amp;&amp; member-&gt;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-&gt;energy_level + (25 * member-&gt;agc_volume_in_level));</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+                if (target_score &lt; 0) target_score = 0;</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+                r = member-&gt;score &gt; target_score;</span>
<span style="color: #00A000">+                </span>
<span style="color: #00A000">+        } else {</span>
<span style="color: #00A000">+                r = member-&gt;score &gt; member-&gt;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-&gt;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-&gt;agc_volume_in_level--;
                 switch_normalize_volume_granular(member-&gt;agc_volume_in_level);
         }
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
<span style="color: #00A000">+</span>
                 //} else {
                 //member-&gt;vol_period = (member-&gt;read_impl.actual_samples_per_second / member-&gt;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-&gt;agc_volume_in_level &lt; -5) {</span>
<span style="color: #A00000">-                member-&gt;agc_volume_in_level = 0;</span>
<span style="color: #A00000">-        }</span>
<span style="color: #00A000">+        //if (member-&gt;agc_volume_in_level &lt; -5) {</span>
<span style="color: #00A000">+                //member-&gt;agc_volume_in_level = 0;</span>
<span style="color: #00A000">+        //}</span>
 
         if (member-&gt;conference-&gt;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-&gt;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-&gt;agc_volume_in_level = 0;
                         clear_avg(member);
                 }
<span style="color: #00A000">+</span>
<span style="color: #00A000">+                if (member-&gt;avg_itt &gt; (member-&gt;read_impl.actual_samples_per_second / member-&gt;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-&gt;conference-&gt;agc_level) {
                         clear_avg(member);
                 }
                 
<span style="color: #A00000">-                energy_level = member-&gt;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-&gt;conference-&gt;agc_level &amp;&amp; member-&gt;score &amp;&amp; 
                                 switch_test_flag(member, MFLAG_CAN_SPEAK) &amp;&amp;
<span style="color: #A00000">-                                member-&gt;score &gt; member-&gt;conference-&gt;agc_energy_level</span>
<span style="color: #00A000">+                                noise_gate_check(member)</span>
                                 ) {
<span style="color: #A00000">-</span>
<span style="color: #00A000">+                                </span>
                                 member-&gt;avg_tally += member-&gt;score;
                                 member-&gt;avg_itt++;
                                 if (!member-&gt;avg_itt) member-&gt;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-&gt;score_iir = SCORE_MAX_IIR;
                         }
 
<span style="color: #A00000">-                        if (member-&gt;score &gt; energy_level) {</span>
<span style="color: #A00000">-                                uint32_t diff = member-&gt;score - energy_level;</span>
<span style="color: #00A000">+                        if (noise_gate_check(member)) {</span>
<span style="color: #00A000">+                                uint32_t diff = member-&gt;score - member-&gt;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) &amp;&amp; switch_test_flag(member, MFLAG_CAN_SPEAK) &amp;&amp;</span>
<span style="color: #00A000">+                if ((switch_test_flag(member, MFLAG_TALKING) || member-&gt;energy_level == 0) &amp;&amp; switch_test_flag(member, MFLAG_CAN_SPEAK) &amp;&amp;</span>
                         !switch_test_flag(member-&gt;conference, CFLAG_WAIT_MOD)) {
                         switch_audio_resampler_t *read_resampler = member-&gt;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 &gt; 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 &gt; 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 &gt; conference-&gt;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-&gt;avg_itt = 0;
                 conference-&gt;avg_tally = 0;
                 conference-&gt;agc_level = level;
<span style="color: #A00000">-                conference-&gt;agc_energy_level = energy_level;</span>
 
                 if (stream) {
<span style="color: #A00000">-                        stream-&gt;write_function(stream, &quot;OK AGC ENABLED %d %d\n&quot;, conference-&gt;agc_level, conference-&gt;agc_energy_level);</span>
<span style="color: #00A000">+                        stream-&gt;write_function(stream, &quot;OK AGC ENABLED %d\n&quot;, conference-&gt;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-&gt;agc_level) {
                 char tmp[30] = &quot;&quot;;
<span style="color: #A00000">-                switch_snprintf(tmp, sizeof(tmp), &quot;%d:%d&quot;, conference-&gt;agc_level, conference-&gt;agc_energy_level);</span>
<span style="color: #00A000">+                switch_snprintf(tmp, sizeof(tmp), &quot;%d&quot;, conference-&gt;agc_level);</span>
                 switch_xml_set_attr_d_buf(x_conference, &quot;agc&quot;, 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, &#39;:&#39;))) {</span>
<span style="color: #A00000">-                                p++;</span>
<span style="color: #A00000">-                                if (p) tmp = atoi(p);</span>
<span style="color: #A00000">-                                if (tmp &gt; 0) {</span>
<span style="color: #A00000">-                                        energy_level = tmp;</span>
<span style="color: #A00000">-                                }</span>
<span style="color: #A00000">-                        }</span>
                 }
 
                 if (level &gt; 0 &amp;&amp; level &gt; conference-&gt;energy_level) {
                         conference-&gt;agc_level = level;
                 }
<span style="color: #A00000">-</span>
<span style="color: #A00000">-                conference-&gt;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>