Ignore:
Timestamp:
Dec 14, 2010 8:39:47 PM (12 years ago)
Author:
nanang
Message:

Fix #1188:

  • Fixed jitter buffer progressive discard by returning 'missing' frame after discarded frame(s) so the PLC will be invoked to align the audio signal.
  • Modified conditions in jitter buffer test data for this fix.
File:
1 edited

Legend:

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

    r3359 r3396  
    262262{ 
    263263    if (framelist->size) { 
     264        pj_bool_t prev_discarded = PJ_FALSE; 
    264265 
    265266        /* Skip discarded frames */ 
     
    268269        { 
    269270            jb_framelist_remove_head(framelist, 1); 
     271            prev_discarded = PJ_TRUE; 
    270272        } 
    271273 
    272274        /* Return the head frame if any */ 
    273275        if (framelist->size) { 
    274             pj_memcpy(frame,  
    275                       framelist->content +  
    276                       framelist->head * framelist->frame_size, 
    277                       framelist->frame_size); 
    278             *p_type = (pjmedia_jb_frame_type)  
    279                       framelist->frame_type[framelist->head]; 
    280             if (size) 
    281                 *size   = framelist->content_len[framelist->head]; 
    282             if (bit_info) 
    283                 *bit_info = framelist->bit_info[framelist->head]; 
     276            if (prev_discarded) { 
     277                /* Ticket #1188: when previous frame(s) was discarded, return 
     278                 * 'missing' frame to trigger PLC to get smoother signal. 
     279                 */ 
     280                *p_type = PJMEDIA_JB_MISSING_FRAME; 
     281                if (size) 
     282                    *size = 0; 
     283                if (bit_info) 
     284                    *bit_info = 0; 
     285            } else { 
     286                pj_memcpy(frame,  
     287                          framelist->content +  
     288                          framelist->head * framelist->frame_size, 
     289                          framelist->frame_size); 
     290                *p_type = (pjmedia_jb_frame_type)  
     291                          framelist->frame_type[framelist->head]; 
     292                if (size) 
     293                    *size   = framelist->content_len[framelist->head]; 
     294                if (bit_info) 
     295                    *bit_info = framelist->bit_info[framelist->head]; 
     296            } 
    284297 
    285298            //pj_bzero(framelist->content +  
Note: See TracChangeset for help on using the changeset viewer.