summaryrefslogtreecommitdiff
path: root/pjsip/src
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2015-03-18 08:25:24 +0000
committerLiong Sauw Ming <ming@teluu.com>2015-03-18 08:25:24 +0000
commit18061c77b205207a29aeb61414c1040affeeae3b (patch)
tree51168f9aeb7c4ea275586c7e4c9acbefa571e9aa /pjsip/src
parent0266873461cbbaeac7cc5a210fa90bab6c640b65 (diff)
Re #1823 (PJSUA2 Video API): Add Pjsua2 Video Window API and Pjsua API to set output window
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4996 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src')
-rw-r--r--pjsip/src/pjsua-lib/pjsua_vid.c34
-rw-r--r--pjsip/src/pjsua2/call.cpp2
-rw-r--r--pjsip/src/pjsua2/media.cpp62
3 files changed, 98 insertions, 0 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_vid.c b/pjsip/src/pjsua-lib/pjsua_vid.c
index 028c7a35..a1f54f34 100644
--- a/pjsip/src/pjsua-lib/pjsua_vid.c
+++ b/pjsip/src/pjsua-lib/pjsua_vid.c
@@ -1405,6 +1405,40 @@ PJ_DEF(pj_status_t) pjsua_vid_win_set_size( pjsua_vid_win_id wid,
}
/*
+ * Set output window.
+ */
+PJ_DEF(pj_status_t) pjsua_vid_win_set_win( pjsua_vid_win_id wid,
+ const pjmedia_vid_dev_hwnd *win)
+{
+ pjsua_vid_win *w;
+ pjmedia_vid_dev_stream *s;
+ pj_status_t status;
+
+ PJ_ASSERT_RETURN(wid >= 0 && wid < PJSUA_MAX_VID_WINS && win, PJ_EINVAL);
+
+ PJSUA_LOCK();
+ w = &pjsua_var.win[wid];
+ if (w->vp_rend == NULL) {
+ /* Native window */
+ PJSUA_UNLOCK();
+ return PJ_EINVAL;
+ }
+
+ s = pjmedia_vid_port_get_stream(w->vp_rend);
+ if (s == NULL) {
+ PJSUA_UNLOCK();
+ return PJ_EINVAL;
+ }
+
+ status = pjmedia_vid_dev_stream_set_cap(s,
+ PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW, win);
+
+ PJSUA_UNLOCK();
+
+ return status;
+}
+
+/*
* Set video orientation.
*/
PJ_DEF(pj_status_t) pjsua_vid_win_rotate( pjsua_vid_win_id wid,
diff --git a/pjsip/src/pjsua2/call.cpp b/pjsip/src/pjsua2/call.cpp
index 1e4e72f3..f0bba738 100644
--- a/pjsip/src/pjsua2/call.cpp
+++ b/pjsip/src/pjsua2/call.cpp
@@ -224,6 +224,7 @@ pjsua_call_setting CallSetting::toPj() const
CallMediaInfo::CallMediaInfo()
+: videoWindow(PJSUA_INVALID_ID)
{
}
@@ -237,6 +238,7 @@ void CallMediaInfo::fromPj(const pjsua_call_media_info &prm)
this->audioConfSlot = (int)prm.stream.aud.conf_slot;
} else if (this->type == PJMEDIA_TYPE_VIDEO) {
this->videoIncomingWindowId = prm.stream.vid.win_in;
+ this->videoWindow = VideoWindow(prm.stream.vid.win_in);
this->videoCapDev = prm.stream.vid.cap_dev;
}
}
diff --git a/pjsip/src/pjsua2/media.cpp b/pjsip/src/pjsua2/media.cpp
index 0a8b7fdb..c08e20aa 100644
--- a/pjsip/src/pjsua2/media.cpp
+++ b/pjsip/src/pjsua2/media.cpp
@@ -1007,6 +1007,68 @@ int AudDevManager::getActiveDev(bool is_capture) const throw(Error)
}
///////////////////////////////////////////////////////////////////////////////
+VideoWindow::VideoWindow(pjsua_vid_win_id win_id)
+: winId(win_id)
+{
+}
+
+VideoWindowInfo VideoWindow::getInfo() const throw(Error)
+{
+ VideoWindowInfo vwi;
+ pjsua_vid_win_info pj_vwi;
+
+ PJSUA2_CHECK_EXPR( pjsua_vid_win_get_info(winId, &pj_vwi) );
+ vwi.isNative = pj_vwi.is_native;
+ vwi.winHandle.type = pj_vwi.hwnd.type;
+ vwi.winHandle.handle.window = pj_vwi.hwnd.info.window;
+ vwi.renderDeviceId = pj_vwi.rdr_dev;
+ vwi.show = pj_vwi.show;
+ vwi.pos.x = pj_vwi.pos.x;
+ vwi.pos.y = pj_vwi.pos.y;
+ vwi.size.w = pj_vwi.size.w;
+ vwi.size.h = pj_vwi.size.h;
+
+ return vwi;
+}
+
+void VideoWindow::Show(bool show) throw(Error)
+{
+ PJSUA2_CHECK_EXPR( pjsua_vid_win_set_show(winId, show) );
+}
+
+void VideoWindow::setPos(const MediaCoordinate &pos) throw(Error)
+{
+ pjmedia_coord pj_pos;
+
+ pj_pos.x = pos.x;
+ pj_pos.y = pos.y;
+ PJSUA2_CHECK_EXPR( pjsua_vid_win_set_pos(winId, &pj_pos) );
+}
+
+void VideoWindow::setSize(const MediaSize &size) throw(Error)
+{
+ pjmedia_rect_size pj_size;
+
+ pj_size.w = size.w;
+ pj_size.h = size.h;
+ PJSUA2_CHECK_EXPR( pjsua_vid_win_set_size(winId, &pj_size) );
+}
+
+void VideoWindow::rotate(int angle) throw(Error)
+{
+ PJSUA2_CHECK_EXPR( pjsua_vid_win_rotate(winId, angle) );
+}
+
+void VideoWindow::setWindow(const VideoWindowHandle &win) throw(Error)
+{
+ pjmedia_vid_dev_hwnd vhwnd;
+
+ vhwnd.type = win.type;
+ vhwnd.info.window = win.handle.window;
+ PJSUA2_CHECK_EXPR( pjsua_vid_win_set_win(winId, &vhwnd) );
+}
+
+///////////////////////////////////////////////////////////////////////////////
void CodecInfo::fromPj(const pjsua_codec_info &codec_info)
{
codecId = pj2Str(codec_info.codec_id);