summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2011-09-23 04:00:27 +0000
committerNanang Izzuddin <nanang@teluu.com>2011-09-23 04:00:27 +0000
commit434f964e7a8a9ea6b4556707d53207d39361d00e (patch)
tree612d5b914d2495531c310ec6c44c246093f1fe6d
parent1a1575155bfcdce36776bb837242e571819c164c (diff)
Closes #1377: fixed video stream cleanup to reset back cap_win_id & rdr_win_id value to PJSUA_INVALID_ID after capture/render device released from the call stream.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3772 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjsip/src/pjsua-lib/pjsua_vid.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_vid.c b/pjsip/src/pjsua-lib/pjsua_vid.c
index 1d0697ed..ddce5324 100644
--- a/pjsip/src/pjsua-lib/pjsua_vid.c
+++ b/pjsip/src/pjsua-lib/pjsua_vid.c
@@ -979,21 +979,26 @@ void stop_video_stream(pjsua_call_media *call_med)
pjmedia_port *media_port;
pjsua_vid_win *w =
&pjsua_var.win[call_med->strm.v.cap_win_id];
+ pj_status_t status;
- pjmedia_vid_stream_get_port(call_med->strm.v.stream,
- PJMEDIA_DIR_ENCODING,
- &media_port);
- pj_assert(media_port);
-
- pjmedia_vid_port_stop(w->vp_cap);
- pjmedia_vid_tee_remove_dst_port(w->tee, media_port);
- pjmedia_vid_port_start(w->vp_cap);
+ /* Disconnect video stream from capture device */
+ status = pjmedia_vid_stream_get_port(call_med->strm.v.stream,
+ PJMEDIA_DIR_ENCODING,
+ &media_port);
+ if (status == PJ_SUCCESS) {
+ /* Video tee is not threadsafe, so stop the capture first */
+ pjmedia_vid_port_stop(w->vp_cap);
+ pjmedia_vid_tee_remove_dst_port(w->tee, media_port);
+ pjmedia_vid_port_start(w->vp_cap);
+ }
dec_vid_win(call_med->strm.v.cap_win_id);
+ call_med->strm.v.cap_win_id = PJSUA_INVALID_ID;
}
if (call_med->strm.v.rdr_win_id != PJSUA_INVALID_ID) {
dec_vid_win(call_med->strm.v.rdr_win_id);
+ call_med->strm.v.rdr_win_id = PJSUA_INVALID_ID;
}
if ((call_med->dir & PJMEDIA_DIR_ENCODING) &&