summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsua-lib/pjsua_vid.c
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2012-04-24 05:40:32 +0000
committerNanang Izzuddin <nanang@teluu.com>2012-04-24 05:40:32 +0000
commit603594518c4cbe3c564df98e3cd86f34b89e5971 (patch)
tree37acdb3307a94d23e1d834b304570a7cad3b4757 /pjsip/src/pjsua-lib/pjsua_vid.c
parentd73368a020b5723e58b529f0ed6401459b7750b3 (diff)
Fix #1423:
- Added provisional media in call for generating initial and subsequent SDP offer/answer. If a reoffer is rejected by peer, the main call media will remain unchanged and the provisional media will be cleaned up (the cleanup is currently delayed until call gets destroyed or another reoffer/answer occurs). - Reenabled media transport dump in pjsua_core.c. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4071 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsua-lib/pjsua_vid.c')
-rw-r--r--pjsip/src/pjsua-lib/pjsua_vid.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_vid.c b/pjsip/src/pjsua-lib/pjsua_vid.c
index 5b5f83a2..6e5a83e9 100644
--- a/pjsip/src/pjsua-lib/pjsua_vid.c
+++ b/pjsip/src/pjsua-lib/pjsua_vid.c
@@ -1532,9 +1532,16 @@ static pj_status_t call_add_video(pjsua_call *call,
sdp = pjmedia_sdp_session_clone(call->inv->pool_prov, current_sdp);
- /* Initialize call media */
- call_med = &call->media[call->med_cnt++];
+ /* Clean up provisional media before using it */
+ pjsua_media_prov_clean_up(call->index);
+
+ /* Update provisional media from call media */
+ call->med_prov_cnt = call->med_cnt;
+ pj_memcpy(call->media_prov, call->media,
+ sizeof(call->media[0]) * call->med_cnt);
+ /* Initialize call media */
+ call_med = &call->media_prov[call->med_prov_cnt++];
status = pjsua_call_media_init(call_med, PJMEDIA_TYPE_VIDEO,
&acc_cfg->rtp_cfg, call->secure_level,
NULL, PJ_FALSE, NULL);
@@ -1597,6 +1604,7 @@ static pj_status_t call_add_video(pjsua_call *call,
on_error:
if (call_med->tp) {
+ pjsua_set_media_tp_state(call_med, PJSUA_MED_TP_NULL);
pjmedia_transport_close(call_med->tp);
call_med->tp = call_med->tp_orig = NULL;
}
@@ -1629,7 +1637,15 @@ static pj_status_t call_modify_video(pjsua_call *call,
med_idx = first_active;
}
- call_med = &call->media[med_idx];
+ /* Clean up provisional media before using it */
+ pjsua_media_prov_clean_up(call->index);
+
+ /* Update provisional media from call media */
+ call->med_prov_cnt = call->med_cnt;
+ pj_memcpy(call->media_prov, call->media,
+ sizeof(call->media[0]) * call->med_cnt);
+
+ call_med = &call->media_prov[med_idx];
/* Verify if the stream media type is video */
if (call_med->type != PJMEDIA_TYPE_VIDEO)
@@ -1735,6 +1751,7 @@ static pj_status_t call_modify_video(pjsua_call *call,
on_error:
if (status != PJ_SUCCESS) {
+ pjsua_media_prov_clean_up(call->index);
return status;
}