From 6187fb31a1f1e9b1f07f1b9b8022c97f3c02b25e Mon Sep 17 00:00:00 2001 From: Liong Sauw Ming Date: Wed, 26 Oct 2011 09:01:53 +0000 Subject: Fixed #1401: Add support for video device's window flags Now support flags PJMEDIA_VID_DEV_WND_BORDER and PJMEDIA_VID_DEV_WND_RESIZABLE. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3864 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip/include/pjsua-lib/pjsua.h | 16 ++++++++++++++++ pjsip/src/pjsua-lib/pjsua_acc.c | 1 + pjsip/src/pjsua-lib/pjsua_vid.c | 19 +++++++++++++++++-- 3 files changed, 34 insertions(+), 2 deletions(-) (limited to 'pjsip') diff --git a/pjsip/include/pjsua-lib/pjsua.h b/pjsip/include/pjsua-lib/pjsua.h index 4a8292c0..b45f69f7 100644 --- a/pjsip/include/pjsua-lib/pjsua.h +++ b/pjsip/include/pjsua-lib/pjsua.h @@ -2745,6 +2745,14 @@ typedef struct pjsua_acc_config */ pj_bool_t vid_out_auto_transmit; + /** + * Specify video window's flags. The value is a bitmask combination of + * #pjmedia_vid_dev_wnd_flag. + * + * Default: 0 + */ + unsigned vid_wnd_flags; + /** * Specify the default capture device to be used by this account. If * \a vid_out_auto_transmit is enabled, this device will be used for @@ -5738,6 +5746,14 @@ typedef struct pjsua_vid_preview_param */ pj_bool_t show; + /** + * Window flags. The value is a bitmask combination of + * #pjmedia_vid_dev_wnd_flag. + * + * Default: 0. + */ + unsigned wnd_flags; + } pjsua_vid_preview_param; diff --git a/pjsip/src/pjsua-lib/pjsua_acc.c b/pjsip/src/pjsua-lib/pjsua_acc.c index 1e05503a..bd8096a3 100644 --- a/pjsip/src/pjsua-lib/pjsua_acc.c +++ b/pjsip/src/pjsua-lib/pjsua_acc.c @@ -1064,6 +1064,7 @@ PJ_DEF(pj_status_t) pjsua_acc_modify( pjsua_acc_id acc_id, /* Video settings */ acc->cfg.vid_in_auto_show = cfg->vid_in_auto_show; acc->cfg.vid_out_auto_transmit = cfg->vid_out_auto_transmit; + acc->cfg.vid_wnd_flags = cfg->vid_wnd_flags; acc->cfg.vid_cap_dev = cfg->vid_cap_dev; acc->cfg.vid_rend_dev = cfg->vid_rend_dev; diff --git a/pjsip/src/pjsua-lib/pjsua_vid.c b/pjsip/src/pjsua-lib/pjsua_vid.c index 1ceac97e..1cd890d0 100644 --- a/pjsip/src/pjsua-lib/pjsua_vid.c +++ b/pjsip/src/pjsua-lib/pjsua_vid.c @@ -388,6 +388,7 @@ static pj_status_t create_vid_win(pjsua_vid_win_type type, pjmedia_vid_dev_index rend_id, pjmedia_vid_dev_index cap_id, pj_bool_t show, + unsigned wnd_flags, pjsua_vid_win_id *id) { pj_bool_t enable_native_preview; @@ -432,6 +433,10 @@ static pj_status_t create_vid_win(pjsua_vid_win_type type, strm, PJMEDIA_VID_DEV_CAP_OUTPUT_HIDE, &hide); + pjmedia_vid_dev_stream_set_cap( + strm, PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS, + &wnd_flags); + /* Done */ *id = wid; pj_log_pop_indent(); @@ -482,6 +487,8 @@ static pj_status_t create_vid_win(pjsua_vid_win_type type, if (w->is_native) { vp_param.vidparam.flags |= PJMEDIA_VID_DEV_CAP_OUTPUT_HIDE; vp_param.vidparam.window_hide = !show; + vp_param.vidparam.flags |= PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS; + vp_param.vidparam.window_flags = wnd_flags; } /* Normalize capture ID, in case it was set to @@ -543,6 +550,8 @@ static pj_status_t create_vid_win(pjsua_vid_win_type type, vp_param.vidparam.disp_size = fmt->det.vid.size; vp_param.vidparam.flags |= PJMEDIA_VID_DEV_CAP_OUTPUT_HIDE; vp_param.vidparam.window_hide = !show; + vp_param.vidparam.flags |= PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS; + vp_param.vidparam.window_flags = wnd_flags; status = pjmedia_vid_port_create(w->pool, &vp_param, &w->vp_rend); if (status != PJ_SUCCESS) @@ -786,6 +795,7 @@ pj_status_t video_channel_update(pjsua_call_media *call_med, //acc->cfg.vid_rend_dev, PJSUA_INVALID_ID, acc->cfg.vid_in_auto_show, + acc->cfg.vid_wnd_flags, &wid); if (status != PJ_SUCCESS) { pj_log_pop_indent(); @@ -825,6 +835,7 @@ pj_status_t video_channel_update(pjsua_call_media *call_med, /* Setup encoding direction */ if (si->dir & PJMEDIA_DIR_ENCODING && !call->local_hold) { + pjsua_acc *acc = &pjsua_var.acc[call_med->call->acc_id]; pjsua_vid_win *w; pjsua_vid_win_id wid; pj_bool_t just_created = PJ_FALSE; @@ -855,6 +866,7 @@ pj_status_t video_channel_update(pjsua_call_media *call_med, //acc->cfg.vid_rend_dev, //acc->cfg.vid_cap_dev, PJSUA_HIDE_WINDOW, + acc->cfg.vid_wnd_flags, &wid); if (status != PJ_SUCCESS) { pj_log_pop_indent(); @@ -1070,7 +1082,7 @@ PJ_DEF(pj_status_t) pjsua_vid_preview_start(pjmedia_vid_dev_index id, rend_id = prm->rend_id; status = create_vid_win(PJSUA_WND_TYPE_PREVIEW, NULL, rend_id, id, - prm->show, &wid); + prm->show, prm->wnd_flags, &wid); if (status != PJ_SUCCESS) { PJSUA_UNLOCK(); pj_log_pop_indent(); @@ -1847,13 +1859,16 @@ static pj_status_t call_change_cap_dev(pjsua_call *call, */ new_wid = vid_preview_get_win(cap_dev, PJ_FALSE); if (new_wid == PJSUA_INVALID_ID) { + pjsua_acc *acc = &pjsua_var.acc[call_med->call->acc_id]; + /* Create preview video window */ status = create_vid_win(PJSUA_WND_TYPE_PREVIEW, &media_port->info.fmt, call_med->strm.v.rdr_dev, cap_dev, PJSUA_HIDE_WINDOW, - &new_wid); + acc->cfg.vid_wnd_flags, + &new_wid); if (status != PJ_SUCCESS) goto on_error; } -- cgit v1.2.3