Changeset 408 for pjproject/trunk/pjmedia/src/pjmedia/jbuf.c
- Timestamp:
- Apr 24, 2006 11:13:00 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/src/pjmedia/jbuf.c
r229 r408 48 48 struct pjmedia_jbuf 49 49 { 50 pj_str_t name; // jitter buffer name 50 51 jb_framelist jb_framelist; 51 52 pj_size_t jb_frame_size; // frame size … … 94 95 framelist->flist_max_count); 95 96 96 framelist->flist_frame_type = pj_pool_zalloc(pool,97 98 97 framelist->flist_frame_type = 98 pj_pool_zalloc(pool, sizeof(framelist->flist_frame_type[0]) * 99 framelist->flist_max_count); 99 100 100 101 framelist->flist_empty = 1; 101 framelist->flist_head = framelist->flist_tail = framelist->flist_origin = 0;102 102 103 103 return PJ_SUCCESS; … … 129 129 if (!framelist->flist_empty) { 130 130 pj_memcpy(frame, 131 framelist->flist_buffer + framelist->flist_head * framelist->flist_frame_size, 131 framelist->flist_buffer + 132 framelist->flist_head * framelist->flist_frame_size, 132 133 framelist->flist_frame_size); 133 *p_type = (pjmedia_jb_frame_type) framelist->flist_frame_type[framelist->flist_head]; 134 135 pj_memset(framelist->flist_buffer + framelist->flist_head * framelist->flist_frame_size, 134 *p_type = (pjmedia_jb_frame_type) 135 framelist->flist_frame_type[framelist->flist_head]; 136 137 pj_memset(framelist->flist_buffer + 138 framelist->flist_head * framelist->flist_frame_size, 136 139 0, framelist->flist_frame_size); 137 140 framelist->flist_frame_type[framelist->flist_head] = 0; 138 141 139 142 framelist->flist_origin++; 140 framelist->flist_head = ++framelist->flist_head % framelist->flist_max_count; 143 framelist->flist_head = (framelist->flist_head + 1 ) % 144 framelist->flist_max_count; 141 145 if (framelist->flist_head == framelist->flist_tail) 142 146 framelist->flist_empty = PJ_TRUE; … … 173 177 } 174 178 175 pj_memset(framelist->flist_buffer + framelist->flist_head * framelist->flist_frame_size, 179 pj_memset(framelist->flist_buffer + 180 framelist->flist_head * framelist->flist_frame_size, 176 181 0, 177 182 step1*framelist->flist_frame_size); … … 191 196 // update pointers 192 197 framelist->flist_origin += count; 193 framelist->flist_head = (framelist->flist_head+count) % framelist->flist_max_count; 198 framelist->flist_head = (framelist->flist_head + count) % 199 framelist->flist_max_count; 194 200 if (framelist->flist_head == framelist->flist_tail) 195 201 framelist->flist_empty = PJ_TRUE; … … 205 211 unsigned where; 206 212 207 // too late208 if (index < framelist->flist_origin)209 return PJ_FALSE;210 211 // too soon212 if ((index > (framelist->flist_origin + framelist->flist_max_count - 1)) && !framelist->flist_empty)213 return PJ_FALSE;214 215 213 assert(frame_size <= framelist->flist_frame_size); 216 214 217 215 if (!framelist->flist_empty) { 216 unsigned max_index; 218 217 unsigned cur_size; 219 218 220 where = (index - framelist->flist_origin + framelist->flist_head) % framelist->flist_max_count; 219 // too late 220 if (index < framelist->flist_origin) 221 return PJ_FALSE; 222 223 // too soon 224 max_index = framelist->flist_origin + framelist->flist_max_count - 1; 225 if (index > max_index) 226 return PJ_FALSE; 227 228 where = (index - framelist->flist_origin + framelist->flist_head) % 229 framelist->flist_max_count; 221 230 222 231 // update framelist->flist_tail pointer … … 224 233 if (index >= framelist->flist_origin + cur_size) { 225 234 unsigned diff = (index - (framelist->flist_origin + cur_size)); 226 framelist->flist_tail = (framelist->flist_tail + diff + 1) % framelist->flist_max_count; 235 framelist->flist_tail = (framelist->flist_tail + diff + 1) % 236 framelist->flist_max_count; 227 237 } 228 238 } else { 229 239 where = framelist->flist_tail; 230 240 framelist->flist_origin = index; 231 framelist->flist_tail = (++framelist->flist_tail % framelist->flist_max_count); 241 framelist->flist_tail = (framelist->flist_tail + 1) % 242 framelist->flist_max_count; 232 243 framelist->flist_empty = PJ_FALSE; 233 244 } … … 252 263 253 264 PJ_DEF(pj_status_t) pjmedia_jbuf_create(pj_pool_t *pool, 265 const pj_str_t *name, 254 266 int frame_size, 255 267 int initial_prefetch, … … 266 278 return status; 267 279 280 pj_strdup_with_null(pool, &jb->name, name); 268 281 jb->jb_frame_size = frame_size; 269 282 jb->jb_last_seq_no = -1; … … 284 297 285 298 299 PJ_DEF(pj_status_t) pjmedia_jbuf_reset(pjmedia_jbuf *jb) 300 { 301 jb->jb_last_seq_no = -1; 302 jb->jb_level = 0; 303 jb->jb_last_level = 0; 304 jb->jb_last_jitter = 0; 305 jb->jb_last_op = JB_OP_INIT; 306 jb->jb_prefetch_cnt = 0; 307 jb->jb_stable_hist = 0; 308 jb->jb_status = JB_STATUS_INITIALIZING; 309 jb->jb_max_hist_jitter = 0; 310 311 jb_framelist_remove_head(&jb->jb_framelist, 312 jb_framelist_size(&jb->jb_framelist)); 313 return PJ_SUCCESS; 314 } 315 316 286 317 PJ_DEF(pj_status_t) pjmedia_jbuf_destroy(pjmedia_jbuf *jb) 287 318 { … … 312 343 313 344 if (jb->jb_op_count >= 100 && 314 (int)jb_framelist_size(&jb->jb_framelist) > jb->jb_prefetch+2) 345 (int)jb_framelist_size(&jb->jb_framelist) > jb->jb_prefetch+2) 315 346 { 316 347 jb_framelist_remove_head(&jb->jb_framelist,1); 317 348 318 PJ_LOG(5,(THIS_FILE, "jbuf prefetch: %d, size=%d", 319 jb->jb_prefetch, 320 jb_framelist_size(&jb->jb_framelist))); 349 PJ_LOG(5,(jb->name.ptr, 350 "jbuf optimizing, prefetch: %d, size=%d", 351 jb->jb_prefetch, 352 jb_framelist_size(&jb->jb_framelist))); 321 353 jb->jb_op_count = 0; 322 354 } … … 324 356 } 325 357 } else { 326 jb->jb_prefetch = PJ_MIN(jb->jb_last_jitter,(int)(jb->jb_max_count*4/5)); 358 jb->jb_prefetch = PJ_MIN(jb->jb_last_jitter, 359 (int)(jb->jb_max_count*4/5)); 327 360 jb->jb_stable_hist = 0; 328 361 jb->jb_max_hist_jitter = 0; 329 362 330 363 if (jb->jb_op_count >= 100) { 331 if ((int)jb_framelist_size(&jb->jb_framelist) > jb->jb_prefetch+2) { 364 if ((int)jb_framelist_size(&jb->jb_framelist) > jb->jb_prefetch+2) 365 { 332 366 jb_framelist_remove_head(&jb->jb_framelist,1); 333 367 334 PJ_LOG(5,(THIS_FILE, "jbuf prefetch: %d, size=%d", 335 jb->jb_prefetch, 336 jb_framelist_size(&jb->jb_framelist))); 368 PJ_LOG(5,(jb->name.ptr, 369 "jbuf optimizing prefetch: %d, size=%d", 370 jb->jb_prefetch, 371 jb_framelist_size(&jb->jb_framelist))); 337 372 } 338 373 … … 378 413 if (seq_diff > 0) { 379 414 380 while (!jb_framelist_put_at(&jb->jb_framelist,frame_seq,frame,min_frame_size)) { 381 jb_framelist_remove_head(&jb->jb_framelist,PJ_MAX(jb->jb_max_count/4,1)); 415 while (jb_framelist_put_at(&jb->jb_framelist, 416 frame_seq,frame,min_frame_size) ==PJ_FALSE) 417 { 418 jb_framelist_remove_head(&jb->jb_framelist, 419 PJ_MAX(jb->jb_max_count/4,1) ); 382 420 } 383 421 … … 408 446 } 409 447 410 if ((jb->jb_prefetch_cnt < jb->jb_prefetch) || !jb_framelist_get(&jb->jb_framelist,frame,&ftype)) { 448 if ((jb->jb_prefetch_cnt < jb->jb_prefetch) || 449 jb_framelist_get(&jb->jb_framelist,frame,&ftype) == PJ_FALSE) 450 { 411 451 pj_memset(frame, 0, jb->jb_frame_size); 412 452 *p_frame_type = PJMEDIA_JB_ZERO_FRAME;
Note: See TracChangeset
for help on using the changeset viewer.