Ignore:
Timestamp:
Mar 3, 2010 2:47:35 PM (14 years ago)
Author:
nanang
Message:

Ticket #1042, minor updates related to AEC:

  • Added requirement of AEC minimal latency between reference and echo in aectest sample app.
  • Modified AEC latency in sound port to 3/4 of playback latency.
  • Few cleaned up echo_common.c: unused vars, a bit stricter latency check (to be at least as much as PTIME).
File:
1 edited

Legend:

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

    r2757 r3115  
    2525#include <pj/list.h> 
    2626#include <pj/log.h> 
     27#include <pj/math.h> 
    2728#include <pj/pool.h> 
    2829#include "echo_internal.h" 
     
    4748 
    4849    pj_bool_t        lat_ready;     /* lat_buf has been filled in.          */ 
    49     unsigned         lat_target_cnt;/* Target number of frames in lat_buf   */ 
    50     unsigned         lat_buf_cnt;   /* Actual number of frames in lat_buf   */ 
    5150    struct frame     lat_buf;       /* Frame queue for delayed playback     */ 
    5251    struct frame     lat_free;      /* Free frame list.                     */ 
     
    145144                                         pjmedia_echo_state **p_echo ) 
    146145{ 
    147     unsigned ptime; 
     146    unsigned ptime, lat_cnt; 
    148147    pjmedia_echo_state *ec; 
    149148    pj_status_t status; 
     
    195194    /* Create latency buffers */ 
    196195    ptime = samples_per_frame * 1000 / clock_rate; 
    197     if (latency_ms == 0) { 
     196    if (latency_ms > ptime) { 
     197        /* Normalize latency with delaybuf/WSOLA latency */ 
     198        latency_ms -= PJ_MIN(ptime, PJMEDIA_WSOLA_DELAY_MSEC); 
     199    } 
     200    if (latency_ms < ptime) { 
    198201        /* Give at least one frame delay to simplify programming */ 
    199202        latency_ms = ptime; 
    200203    } 
    201     ec->lat_target_cnt = latency_ms / ptime; 
    202     if (ec->lat_target_cnt != 0) { 
    203         unsigned i; 
    204         for (i=0; i < ec->lat_target_cnt; ++i)  { 
    205             struct frame *frm; 
    206  
    207             frm = (struct frame*) pj_pool_alloc(pool, (samples_per_frame<<1) + 
    208                                                       sizeof(struct frame)); 
    209             pj_list_push_back(&ec->lat_free, frm); 
    210         } 
    211     } else { 
    212         ec->lat_ready = PJ_TRUE; 
     204    lat_cnt = latency_ms / ptime; 
     205    while (lat_cnt--)  { 
     206        struct frame *frm; 
     207 
     208        frm = (struct frame*) pj_pool_alloc(pool, (samples_per_frame<<1) + 
     209                                                  sizeof(struct frame)); 
     210        pj_list_push_back(&ec->lat_free, frm); 
    213211    } 
    214212 
Note: See TracChangeset for help on using the changeset viewer.