Changeset 5687


Ignore:
Timestamp:
Nov 9, 2017 10:48:17 PM (23 months ago)
Author:
ming
Message:

Fixed #2057: Optimization: Improve conference mix loop performance

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/src/pjmedia/conference.c

    r4537 r5687  
    19421942            struct conf_port *listener; 
    19431943            pj_int32_t *mix_buf; 
    1944             unsigned k; 
    19451944 
    19461945            listener = conf->ports[conf_port->listener_slots[cj]]; 
     
    19571956                 * any overflowed level in the mixed signal. 
    19581957                 */ 
    1959                 for (k=0; k < conf->samples_per_frame; ++k) { 
     1958                unsigned k, samples_per_frame = conf->samples_per_frame; 
     1959                pj_int32_t mix_buf_min = 0; 
     1960                pj_int32_t mix_buf_max = 0; 
     1961 
     1962                for (k = 0; k < samples_per_frame; ++k) { 
    19601963                    mix_buf[k] += p_in[k]; 
    1961                     /* Check if normalization adjustment needed. */ 
    1962                     if (IS_OVERFLOW(mix_buf[k])) { 
    1963                         /* NORMAL_LEVEL * MAX_LEVEL / mix_buf[k]; */ 
    1964                         int tmp_adj = (MAX_LEVEL<<7) / mix_buf[k]; 
    1965                         if (tmp_adj<0) tmp_adj = -tmp_adj; 
    1966  
    1967                         if (tmp_adj<listener->mix_adj) 
    1968                             listener->mix_adj = tmp_adj; 
    1969  
    1970                     } /* if any overflow in the mixed signals */ 
    1971                 } /* loop mixing signals */ 
     1964                    if (mix_buf[k] < mix_buf_min) 
     1965                        mix_buf_min = mix_buf[k]; 
     1966                    if (mix_buf[k] > mix_buf_max) 
     1967                        mix_buf_max = mix_buf[k]; 
     1968                } 
     1969 
     1970                /* Check if normalization adjustment needed. */ 
     1971                if (mix_buf_min < MIN_LEVEL || mix_buf_max > MAX_LEVEL) { 
     1972                    if (-mix_buf_min > mix_buf_max) 
     1973                        mix_buf_max = -mix_buf_min; 
     1974 
     1975                    /* NORMAL_LEVEL * MAX_LEVEL / mix_buf_max; */ 
     1976                    int tmp_adj = (MAX_LEVEL<<7) / mix_buf_max; 
     1977                    if (tmp_adj < listener->mix_adj) 
     1978                        listener->mix_adj = tmp_adj; 
     1979                } 
    19721980            } else { 
    19731981                /* Only 1 transmitter: 
     
    19751983                 * no mixing and level adjustment needed 
    19761984                 */ 
    1977                 for (k=0; k<conf->samples_per_frame; ++k) { 
     1985                unsigned k, samples_per_frame = conf->samples_per_frame; 
     1986 
     1987                for (k = 0; k < samples_per_frame; ++k) { 
    19781988                    mix_buf[k] = p_in[k]; 
    19791989                } 
Note: See TracChangeset for help on using the changeset viewer.