Ignore:
Timestamp:
Apr 28, 2008 6:05:49 PM (15 years ago)
Author:
bennylp
Message:

Ticket #513: Support for RTCP XR (initial patch)

File:
1 edited

Legend:

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

    r1922 r1942  
    6868    int             jb_status;            // status is 'init' until the first 'put' operation 
    6969 
    70  
     70    int             jb_max_size;          // Maximum frames buffered ever 
    7171}; 
    7272 
     
    369369    jb->jb_status        = JB_STATUS_INITIALIZING; 
    370370    jb->jb_max_hist_level = 0; 
     371    jb->jb_max_size      = 0; 
    371372 
    372373    jb_framelist_remove_head(&jb->jb_framelist,  
     
    384385static void jbuf_calculate_jitter(pjmedia_jbuf *jb) 
    385386{ 
    386     int diff; 
     387    int diff, cur_size; 
     388 
     389    /* Update jb_max_size */ 
     390    cur_size = jb_framelist_size(&jb->jb_framelist); 
     391    if (cur_size > jb->jb_max_size) 
     392        jb->jb_max_size = cur_size; 
    387393 
    388394    /* Only apply burst-level calculation on PUT operation since if VAD is  
     
    414420 
    415421                TRACE__((jb->name.ptr,"jb updated(1), prefetch=%d, size=%d",  
    416                          jb->jb_prefetch, jb_framelist_size(&jb->jb_framelist))); 
     422                         jb->jb_prefetch, cur_size)); 
    417423 
    418424                jb->jb_stable_hist = 0; 
     
    433439 
    434440            TRACE__((jb->name.ptr,"jb updated(2), prefetch=%d, size=%d",  
    435                      jb->jb_prefetch, jb_framelist_size(&jb->jb_framelist))); 
     441                     jb->jb_prefetch, cur_size)); 
    436442        } 
    437443 
     
    443449 
    444450    /* These code is used for shortening the delay in the jitter buffer. */ 
    445     diff = jb_framelist_size(&jb->jb_framelist) - jb->jb_prefetch; 
     451    diff = cur_size - jb->jb_prefetch; 
    446452    if (diff > SAFE_SHRINKING_DIFF) { 
    447453        /* Shrink slowly */ 
     
    471477                                     pj_size_t frame_size,  
    472478                                     int frame_seq) 
     479{ 
     480    pjmedia_jbuf_put_frame2(jb, frame, frame_size, frame_seq, NULL); 
     481} 
     482 
     483PJ_DEF(void) pjmedia_jbuf_put_frame2(pjmedia_jbuf *jb,  
     484                                     const void *frame,  
     485                                     pj_size_t frame_size,  
     486                                     int frame_seq, 
     487                                     pj_bool_t *discarded) 
    473488{ 
    474489    pj_size_t min_frame_size; 
     
    494509 
    495510        while (jb_framelist_put_at(&jb->jb_framelist, 
    496                                    frame_seq,frame,min_frame_size) ==PJ_FALSE) 
     511                                   frame_seq,frame,min_frame_size) == PJ_FALSE) 
    497512        { 
    498513            jb_framelist_remove_head(&jb->jb_framelist, 
     
    503518            jb->jb_prefetch_cnt += seq_diff; 
    504519 
     520        if (discarded) 
     521            *discarded = PJ_FALSE; 
    505522    } 
    506523    else 
    507524    { 
    508         jb_framelist_put_at(&jb->jb_framelist,frame_seq,frame,min_frame_size); 
     525        pj_bool_t res; 
     526        res = jb_framelist_put_at(&jb->jb_framelist,frame_seq,frame, 
     527                                  min_frame_size); 
     528        if (discarded) 
     529            *discarded = !res; 
    509530    } 
    510531} 
     
    591612    state->max_prefetch = jb->jb_max_prefetch; 
    592613    state->size = jb_framelist_size(&jb->jb_framelist); 
     614    state->max_size = jb->jb_max_size; 
    593615 
    594616    return PJ_SUCCESS; 
Note: See TracChangeset for help on using the changeset viewer.