summaryrefslogtreecommitdiff
path: root/pjsip
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2015-03-17 09:59:42 +0000
committerLiong Sauw Ming <ming@teluu.com>2015-03-17 09:59:42 +0000
commit0266873461cbbaeac7cc5a210fa90bab6c640b65 (patch)
tree5d725f844f49c9d35c15a758c63aaa015b4f7a75 /pjsip
parenta4411dcd275cb3531587b3e07ac07f6fc6884168 (diff)
Re #1786: Add support to specify output window as well for video preview param.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4995 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip')
-rw-r--r--pjsip/include/pjsua-lib/pjsua.h8
-rw-r--r--pjsip/src/pjsua-lib/pjsua_vid.c12
2 files changed, 19 insertions, 1 deletions
diff --git a/pjsip/include/pjsua-lib/pjsua.h b/pjsip/include/pjsua-lib/pjsua.h
index 6325b70a..1ebde412 100644
--- a/pjsip/include/pjsua-lib/pjsua.h
+++ b/pjsip/include/pjsua-lib/pjsua.h
@@ -6639,6 +6639,14 @@ typedef struct pjsua_vid_preview_param
* If left unitialized, this parameter will not be used.
*/
pjmedia_format format;
+
+ /**
+ * Optional output window to be used to display the video preview.
+ * This parameter will only be used if the video device supports
+ * PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW capability and the capability
+ * is not read-only.
+ */
+ pjmedia_vid_dev_hwnd wnd;
} pjsua_vid_preview_param;
diff --git a/pjsip/src/pjsua-lib/pjsua_vid.c b/pjsip/src/pjsua-lib/pjsua_vid.c
index b0ae5e7b..028c7a35 100644
--- a/pjsip/src/pjsua-lib/pjsua_vid.c
+++ b/pjsip/src/pjsua-lib/pjsua_vid.c
@@ -188,6 +188,7 @@ PJ_DEF(void) pjsua_vid_preview_param_default(pjsua_vid_preview_param *p)
p->show = PJ_TRUE;
p->wnd_flags = 0;
pj_bzero(&p->format, sizeof(p->format));
+ pj_bzero(&p->wnd, sizeof(p->wnd));
}
@@ -438,6 +439,7 @@ static pj_status_t create_vid_win(pjsua_vid_win_type type,
pjmedia_vid_dev_index cap_id,
pj_bool_t show,
unsigned wnd_flags,
+ const pjmedia_vid_dev_hwnd *wnd,
pjsua_vid_win_id *id)
{
pj_bool_t enable_native_preview;
@@ -606,6 +608,10 @@ static pj_status_t create_vid_win(pjsua_vid_win_type type,
vp_param.vidparam.window_hide = !show;
vp_param.vidparam.flags |= PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS;
vp_param.vidparam.window_flags = wnd_flags;
+ if (wnd) {
+ vp_param.vidparam.flags |= PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW;
+ vp_param.vidparam.window = *wnd;
+ }
status = pjmedia_vid_port_create(w->pool, &vp_param, &w->vp_rend);
if (status != PJ_SUCCESS)
@@ -846,6 +852,7 @@ pj_status_t pjsua_vid_channel_update(pjsua_call_media *call_med,
PJSUA_INVALID_ID,
acc->cfg.vid_in_auto_show,
acc->cfg.vid_wnd_flags,
+ NULL,
&wid);
if (status != PJ_SUCCESS) {
pj_log_pop_indent();
@@ -916,6 +923,7 @@ pj_status_t pjsua_vid_channel_update(pjsua_call_media *call_med,
//acc->cfg.vid_cap_dev,
PJSUA_HIDE_WINDOW,
acc->cfg.vid_wnd_flags,
+ NULL,
&wid);
if (status != PJ_SUCCESS) {
pj_log_pop_indent();
@@ -1086,7 +1094,8 @@ PJ_DEF(pj_status_t) pjsua_vid_preview_start(pjmedia_vid_dev_index id,
if (prm->format.detail_type == PJMEDIA_FORMAT_DETAIL_VIDEO)
fmt = &prm->format;
status = create_vid_win(PJSUA_WND_TYPE_PREVIEW, fmt, rend_id, id,
- prm->show, prm->wnd_flags, &wid);
+ prm->show, prm->wnd_flags,
+ (prm->wnd.info.window? &prm->wnd: NULL), &wid);
if (status != PJ_SUCCESS) {
PJSUA_UNLOCK();
pj_log_pop_indent();
@@ -1920,6 +1929,7 @@ static pj_status_t call_change_cap_dev(pjsua_call *call,
cap_dev,
PJSUA_HIDE_WINDOW,
acc->cfg.vid_wnd_flags,
+ NULL,
&new_wid);
if (status != PJ_SUCCESS)
goto on_error;