diff options
Diffstat (limited to 'pjsip/src/pjsua-lib/pjsua_media.c')
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_media.c | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c index 8b74d5ac..7bb2f2a4 100644 --- a/pjsip/src/pjsua-lib/pjsua_media.c +++ b/pjsip/src/pjsua-lib/pjsua_media.c @@ -1231,20 +1231,13 @@ pj_status_t pjsua_media_channel_update(pjsua_call_id call_id, if (si != &sess_info.stream_info[0]) pj_memcpy(&sess_info.stream_info[0], si, sizeof(pjmedia_stream_info)); - /* Check if media is put on-hold */ + /* Check if no media is active */ if (sess_info.stream_cnt == 0 || si->dir == PJMEDIA_DIR_NONE) { + /* Call media state */ + call->media_st = PJSUA_CALL_MEDIA_NONE; - /* Determine who puts the call on-hold */ - if (prev_media_st == PJSUA_CALL_MEDIA_ACTIVE) { - if (pjmedia_sdp_neg_was_answer_remote(call->inv->neg)) { - /* It was local who offer hold */ - call->media_st = PJSUA_CALL_MEDIA_LOCAL_HOLD; - } else { - call->media_st = PJSUA_CALL_MEDIA_REMOTE_HOLD; - } - } - + /* Call media direction */ call->media_dir = PJMEDIA_DIR_NONE; /* Shutdown transport's session */ @@ -1367,9 +1360,16 @@ pj_status_t pjsua_media_channel_update(pjsua_call_id call_id, } } - /* Call's media state is active */ - call->media_st = PJSUA_CALL_MEDIA_ACTIVE; + /* Call media direction */ call->media_dir = si->dir; + + /* Call media state */ + if (call->local_hold) + call->media_st = PJSUA_CALL_MEDIA_LOCAL_HOLD; + else if (call->media_dir == PJMEDIA_DIR_DECODING) + call->media_st = PJSUA_CALL_MEDIA_REMOTE_HOLD; + else + call->media_st = PJSUA_CALL_MEDIA_ACTIVE; } /* Print info. */ |