diff options
-rw-r--r-- | pjmedia/build/Jbtest.dat | 8 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/jbuf.c | 33 |
2 files changed, 27 insertions, 14 deletions
diff --git a/pjmedia/build/Jbtest.dat b/pjmedia/build/Jbtest.dat index 41eb0ed7..b2f4999d 100644 --- a/pjmedia/build/Jbtest.dat +++ b/pjmedia/build/Jbtest.dat @@ -143,7 +143,7 @@ PGGGGPPPGPPGPPPGGPGG PGPGPPGGPPGGPPPGGGPG PGGGGPPPGPPGPPPGGPGG %adaptive 0 0 10 !burst 4 !discard 68 <- number of PUT - GET, JB does shrinking by discarding frames -!lost 0 +!lost 68 <- ticket #1188, normal frame after discarded frame is flagged 'lost' to align signal !empty 4 !delay 8 <- should be less than or equal to twice of burst P PGPGPPGGPPPPGGPGGGPG PGGGGPPPGPPGPPPGGPGG P PGPGPPGGPPPPGGPGGGPG @@ -293,7 +293,7 @@ PGPGPGPGPGPGPGPGPGPG PGPGPGPGPGPGPGPGPGPG PGPGPGPGPGPGPGPGPGPG %adaptive 0 0 10 !burst 1 !discard 50 <- frames discarded for delay adaptation -!lost 0 +!lost 50 <- ticket #1188, normal frame after discarded frame is flagged 'lost' to align signal !empty 0 !delay 25 <- average delay, JB is able to adapt the delay PPPPPPPPPPPPPPPPPPPP PPPPPPPPPPPPPPPPPPPP PPPPPPPPPP @@ -347,7 +347,7 @@ PGGGGPPPGPPGPPPGGPGG PGPGPPGGPPGGPPPGGGPG PGGGGPPPGPPGPPPGGPGG %fixed 10 !burst 1 !discard 50 <- frames discarded for delay adaptation -!lost 0 +!lost 50 <- ticket #1188, normal frame after discarded frame is flagged 'lost' to align signal !empty 0 !delay 20 <- average delay, twice of minimal prefetch PPPPPPPPPPPPPPPPPPPP PPPPPPPPPPPPPPPPPPPP PPPPPPPPPP @@ -371,7 +371,7 @@ PGPGPGPGPGPGPGPGPGPG PGPGPGPGPGPGPGPGPGPG PGPGPGPGPG %adaptive 0 0 40 !burst 10 !discard 300 <- not so relevant for long period session with many delay adjustments needed (i.e: for first burst and periodic spikes) -!lost 0 +!lost 300 <- ticket #1188, normal frame after discarded frame is flagged 'lost' to align signal !empty 60 <- delay adjustment effect, as there is actually no drift !delay 20 <- twice of burst level average PPPPPPPPPPPPPPPPPPPP PPPPPPPPPPPPPPPPPPPP PPPPPPPPPP diff --git a/pjmedia/src/pjmedia/jbuf.c b/pjmedia/src/pjmedia/jbuf.c index 7a863f2a..fcd6723e 100644 --- a/pjmedia/src/pjmedia/jbuf.c +++ b/pjmedia/src/pjmedia/jbuf.c @@ -261,26 +261,39 @@ static pj_bool_t jb_framelist_get(jb_framelist_t *framelist, pj_uint32_t *bit_info) { if (framelist->size) { + pj_bool_t prev_discarded = PJ_FALSE; /* Skip discarded frames */ while (framelist->frame_type[framelist->head] == PJMEDIA_JB_DISCARDED_FRAME) { jb_framelist_remove_head(framelist, 1); + prev_discarded = PJ_TRUE; } /* Return the head frame if any */ if (framelist->size) { - pj_memcpy(frame, - framelist->content + - framelist->head * framelist->frame_size, - framelist->frame_size); - *p_type = (pjmedia_jb_frame_type) - framelist->frame_type[framelist->head]; - if (size) - *size = framelist->content_len[framelist->head]; - if (bit_info) - *bit_info = framelist->bit_info[framelist->head]; + if (prev_discarded) { + /* Ticket #1188: when previous frame(s) was discarded, return + * 'missing' frame to trigger PLC to get smoother signal. + */ + *p_type = PJMEDIA_JB_MISSING_FRAME; + if (size) + *size = 0; + if (bit_info) + *bit_info = 0; + } else { + pj_memcpy(frame, + framelist->content + + framelist->head * framelist->frame_size, + framelist->frame_size); + *p_type = (pjmedia_jb_frame_type) + framelist->frame_type[framelist->head]; + if (size) + *size = framelist->content_len[framelist->head]; + if (bit_info) + *bit_info = framelist->bit_info[framelist->head]; + } //pj_bzero(framelist->content + // framelist->head * framelist->frame_size, |