Ignore:
Timestamp:
Aug 6, 2006 2:15:47 PM (18 years ago)
Author:
bennylp
Message:

Change the silence suppressor to use the adaptive silence detector.

File:
1 edited

Legend:

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

    r653 r655  
    2828 
    2929#define THIS_FILE                           "echo_suppress.c" 
    30 #define PJMEDIA_ECHO_SUPPRESS_THRESHOLD     20 
     30#define PJMEDIA_ECHO_SUPPRESS_THRESHOLD     PJMEDIA_SILENCE_DET_THRESHOLD 
    3131 
    3232 
     
    3636typedef struct echo_supp 
    3737{ 
    38     unsigned    threshold; 
    39     pj_bool_t   suppressing; 
    40     pj_time_val last_signal; 
    41     unsigned    samples_per_frame; 
    42     unsigned    tail_ms; 
     38    pj_bool_t            suppressing; 
     39    pjmedia_silence_det *sd; 
     40    pj_time_val          last_signal; 
     41    unsigned             samples_per_frame; 
     42    unsigned             tail_ms; 
    4343} echo_supp; 
    4444 
     
    7979{ 
    8080    echo_supp *ec; 
     81    pj_status_t status; 
    8182 
    8283    PJ_UNUSED_ARG(clock_rate); 
     
    8485 
    8586    ec = pj_pool_zalloc(pool, sizeof(struct echo_supp)); 
    86     ec->threshold = PJMEDIA_ECHO_SUPPRESS_THRESHOLD; 
    8787    ec->samples_per_frame = samples_per_frame; 
    8888    ec->tail_ms = tail_ms; 
     89 
     90    status = pjmedia_silence_det_create(pool, clock_rate, samples_per_frame, 
     91                                        &ec->sd); 
     92    if (status != PJ_SUCCESS) 
     93        return status; 
     94 
     95    pjmedia_silence_det_set_name(ec->sd, "ecsu%p"); 
     96    pjmedia_silence_det_set_adaptive(ec->sd, PJMEDIA_ECHO_SUPPRESS_THRESHOLD); 
     97    pjmedia_silence_det_set_params(ec->sd, 0, 500, 3000); 
    8998 
    9099    *p_state = ec; 
     
    110119{ 
    111120    echo_supp *ec = state; 
     121    pj_bool_t silence; 
    112122    pj_bool_t last_suppressing = ec->suppressing; 
    113     unsigned level; 
    114123 
    115     level = pjmedia_calc_avg_signal(play_frm, ec->samples_per_frame); 
    116     level = linear2ulaw(level) ^ 0xff; 
     124    silence = pjmedia_silence_det_detect(ec->sd, play_frm, 
     125                                         ec->samples_per_frame, NULL); 
    117126 
    118     if (level >= ec->threshold) { 
     127    ec->suppressing = !silence; 
     128 
     129    if (ec->suppressing) { 
    119130        pj_gettimeofday(&ec->last_signal); 
    120         ec->suppressing = 1; 
    121     } else { 
    122         ec->suppressing = 0; 
    123131    } 
    124132 
     
    169177{ 
    170178    echo_supp *ec = state; 
    171     unsigned level; 
     179    pj_bool_t silence; 
    172180 
    173181    PJ_UNUSED_ARG(options); 
    174182    PJ_UNUSED_ARG(reserved); 
    175183 
    176     level = pjmedia_calc_avg_signal(play_frm, ec->samples_per_frame); 
    177     level = linear2ulaw(level) ^ 0xff; 
     184    silence = pjmedia_silence_det_detect(ec->sd, play_frm,  
     185                                         ec->samples_per_frame, NULL); 
    178186 
    179     if (level >= ec->threshold) { 
     187    if (!silence) { 
    180188        pjmedia_zero_samples(rec_frm, ec->samples_per_frame); 
    181189    } 
Note: See TracChangeset for help on using the changeset viewer.