From aa3e2f264f921125ee102ff6691d2fc655f7d101 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Wed, 29 Jul 2009 12:14:21 +0000 Subject: Ticket #923: New API to retrieve current jitter buffer state from a stream/session - added pjmedia_session_get_stream_stat_jbuf() and pjmedia_session_get_stream_stat_jbuf() - fixed const correctness in pjmedia_jbuf_get_state(), jb_framelist_size(), and pj_math_stat_get_stddev(), - modify the jitter buffer statistic log message printed by stream (it contains newlines) git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2844 74dad513-b988-da41-8d7b-12977e46ad98 --- pjmedia/src/pjmedia/jbuf.c | 16 ++++++++-------- pjmedia/src/pjmedia/session.c | 11 +++++++++++ pjmedia/src/pjmedia/stream.c | 17 ++++++++++++++--- 3 files changed, 33 insertions(+), 11 deletions(-) (limited to 'pjmedia/src') diff --git a/pjmedia/src/pjmedia/jbuf.c b/pjmedia/src/pjmedia/jbuf.c index 1df68a57..2af89911 100644 --- a/pjmedia/src/pjmedia/jbuf.c +++ b/pjmedia/src/pjmedia/jbuf.c @@ -211,7 +211,7 @@ static pj_status_t jb_framelist_reset(jb_framelist_t *framelist) } -static unsigned jb_framelist_size(jb_framelist_t *framelist) +static unsigned jb_framelist_size(const jb_framelist_t *framelist) { return framelist->size; } @@ -468,12 +468,12 @@ PJ_DEF(pj_status_t) pjmedia_jbuf_reset(pjmedia_jbuf *jb) PJ_DEF(pj_status_t) pjmedia_jbuf_destroy(pjmedia_jbuf *jb) { - TRACE__((jb->jb_name.ptr, "\n" - " JB summary:\n" - " size=%d prefetch=%d\n" - " delay (min/max/avg/dev)=%d/%d/%d/%d ms\n" - " burst (min/max/avg/dev)=%d/%d/%d/%d frames\n" - " lost=%d discard=%d empty=%d\n", + TRACE__((jb->jb_name.ptr, "" + "JB summary:" + " size=%d prefetch=%d," + " delay (min/max/avg/dev)=%d/%d/%d/%d ms," + " burst (min/max/avg/dev)=%d/%d/%d/%d frames," + " lost=%d discard=%d empty=%d", jb->jb_framelist.size, jb->jb_prefetch, jb->jb_delay.min, jb->jb_delay.max, jb->jb_delay.mean, pj_math_stat_get_stddev(&jb->jb_delay), @@ -765,7 +765,7 @@ PJ_DEF(void) pjmedia_jbuf_get_frame2(pjmedia_jbuf *jb, /* * Get jitter buffer state. */ -PJ_DEF(pj_status_t) pjmedia_jbuf_get_state( pjmedia_jbuf *jb, +PJ_DEF(pj_status_t) pjmedia_jbuf_get_state( const pjmedia_jbuf *jb, pjmedia_jb_state *state ) { PJ_ASSERT_RETURN(jb && state, PJ_EINVAL); diff --git a/pjmedia/src/pjmedia/session.c b/pjmedia/src/pjmedia/session.c index a2b33a98..097ae4b7 100644 --- a/pjmedia/src/pjmedia/session.c +++ b/pjmedia/src/pjmedia/session.c @@ -857,6 +857,17 @@ PJ_DEF(pj_status_t) pjmedia_session_get_stream_stat_xr( } #endif +PJ_DEF(pj_status_t) pjmedia_session_get_stream_stat_jbuf( + pjmedia_session *session, + unsigned index, + pjmedia_jb_state *state) +{ + PJ_ASSERT_RETURN(session && state && index < session->stream_cnt, + PJ_EINVAL); + + return pjmedia_stream_get_stat_jbuf(session->stream[index], state); +} + /* * Dial DTMF digit to the stream, using RFC 2833 mechanism. */ diff --git a/pjmedia/src/pjmedia/stream.c b/pjmedia/src/pjmedia/stream.c index 35b6dc90..587370e3 100644 --- a/pjmedia/src/pjmedia/stream.c +++ b/pjmedia/src/pjmedia/stream.c @@ -327,6 +327,7 @@ static pj_status_t get_frame( pjmedia_port *port, pjmedia_frame *frame) */ if (frame_type != stream->jb_last_frm) { pjmedia_jb_state jb_state; + const char *with_plc = ""; /* Activate PLC to smoothen the missing frame */ if (stream->codec->op->recover && @@ -346,13 +347,14 @@ static pj_status_t get_frame( pjmedia_port *port, pjmedia_frame *frame) } while (samples_count < samples_required); + with_plc = ", plc invoked"; } /* Report the state of jitter buffer */ pjmedia_jbuf_get_state(stream->jb, &jb_state); PJ_LOG(5,(stream->port.info.name.ptr, - "Jitter buffer empty (prefetch=%d)", - jb_state.prefetch)); + "Jitter buffer empty (prefetch=%d)%s", + jb_state.prefetch, with_plc)); } @@ -1879,7 +1881,6 @@ PJ_DEF(pj_status_t) pjmedia_stream_create( pjmedia_endpt *endpt, //jb_init = (jb_min_pre + jb_max_pre) / 2; jb_init = 0; - /* Create jitter buffer */ status = pjmedia_jbuf_create(pool, &stream->port.info.name, stream->frame_size, @@ -2171,6 +2172,16 @@ PJ_DEF(pj_status_t) pjmedia_stream_get_stat_xr( const pjmedia_stream *stream, } #endif +/* + * Get jitter buffer state. + */ +PJ_DEF(pj_status_t) pjmedia_stream_get_stat_jbuf(const pjmedia_stream *stream, + pjmedia_jb_state *state) +{ + PJ_ASSERT_RETURN(stream && state, PJ_EINVAL); + return pjmedia_jbuf_get_state(stream->jb, state); +} + /* * Pause stream. */ -- cgit v1.2.3