Changeset 3115 for pjproject/trunk/pjmedia/src/pjmedia/echo_common.c
- Timestamp:
- Mar 3, 2010 2:47:35 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/src/pjmedia/echo_common.c
r2757 r3115 25 25 #include <pj/list.h> 26 26 #include <pj/log.h> 27 #include <pj/math.h> 27 28 #include <pj/pool.h> 28 29 #include "echo_internal.h" … … 47 48 48 49 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 */51 50 struct frame lat_buf; /* Frame queue for delayed playback */ 52 51 struct frame lat_free; /* Free frame list. */ … … 145 144 pjmedia_echo_state **p_echo ) 146 145 { 147 unsigned ptime ;146 unsigned ptime, lat_cnt; 148 147 pjmedia_echo_state *ec; 149 148 pj_status_t status; … … 195 194 /* Create latency buffers */ 196 195 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) { 198 201 /* Give at least one frame delay to simplify programming */ 199 202 latency_ms = ptime; 200 203 } 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); 213 211 } 214 212
Note: See TracChangeset
for help on using the changeset viewer.