From 3550a1860cb5812e76d132052c2c5a75bd84b03e Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Thu, 25 Aug 2011 11:59:39 +0000 Subject: Re #1351: option to initially hide video preview window to avoid floating window. Also added pjsua_vid_preview_param_default() git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3724 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip-apps/src/vidgui/vidgui.cpp | 21 ++++++++++++------ pjsip-apps/src/vidgui/vidwin.cpp | 46 +++++++++++++++++++++++++++++++++++++--- pjsip-apps/src/vidgui/vidwin.h | 1 + 3 files changed, 59 insertions(+), 9 deletions(-) (limited to 'pjsip-apps') diff --git a/pjsip-apps/src/vidgui/vidgui.cpp b/pjsip-apps/src/vidgui/vidgui.cpp index 93c76b85..f59911b4 100644 --- a/pjsip-apps/src/vidgui/vidgui.cpp +++ b/pjsip-apps/src/vidgui/vidgui.cpp @@ -28,6 +28,7 @@ #include #define LOG_FILE "vidgui.log" +#define THIS_FILE "vidgui.cpp" // These configure SIP registration #define SIP_DOMAIN NULL @@ -83,7 +84,7 @@ void MainWin::initLayout() /* Right pane */ vbox_right->addWidget((localUri_ = new QLabel)); - vbox_right->addWidget((previewButton_=new QPushButton(tr("Start Preview")))); + vbox_right->addWidget((previewButton_=new QPushButton(tr("Start &Preview")))); vbox_right->addWidget((callButton_=new QPushButton(tr("Call")))); vbox_right->addWidget((hangupButton_=new QPushButton(tr("Hangup")))); vbox_right->addWidget((quitButton_=new QPushButton(tr("Quit")))); @@ -120,7 +121,7 @@ void MainWin::showStatus(const char *msg) { //statusBar_->showMessage(msg); statusBar_->setText(msg); - PJ_LOG(3,("vidgui.cpp", "%s", msg)); + PJ_LOG(3,(THIS_FILE, "%s", msg)); } void MainWin::showError(const char *title, pj_status_t status) @@ -176,15 +177,17 @@ void MainWin::preview() pjsua_vid_preview_stop(DEFAULT_CAP_DEV); - previewButton_->setText(tr("Start Preview")); + showStatus("Preview stopped"); + previewButton_->setText(tr("Start &Preview")); } else { pjsua_vid_win_id wid; pjsua_vid_win_info wi; pjsua_vid_preview_param pre_param; pj_status_t status; - pj_bzero(&pre_param, sizeof(pre_param)); + pjsua_vid_preview_param_default(&pre_param); pre_param.rend_id = DEFAULT_REND_DEV; + pre_param.show = PJ_FALSE; status = pjsua_vid_preview_start(DEFAULT_CAP_DEV, &pre_param); if (status != PJ_SUCCESS) { @@ -198,8 +201,14 @@ void MainWin::preview() video_prev_ = new VidWin(&wi.hwnd); vbox_left->addWidget(video_prev_, 1); - - previewButton_->setText(tr("Stop Preview")); + //Using this will cause SDL window to display blank + //screen sometimes, probably because it's using different + //X11 Display + //status = pjsua_vid_win_set_show(wid, PJ_TRUE); + video_prev_->show(); + showStatus("Preview started"); + + previewButton_->setText(tr("Stop &Preview")); } preview_on = !preview_on; } diff --git a/pjsip-apps/src/vidgui/vidwin.cpp b/pjsip-apps/src/vidgui/vidwin.cpp index 1376cb68..cc97b821 100644 --- a/pjsip-apps/src/vidgui/vidwin.cpp +++ b/pjsip-apps/src/vidgui/vidwin.cpp @@ -140,6 +140,13 @@ void VidWin::get_size() TRACE_("%p size = %dx%d", w, size_hint.width(), size_hint.height()); } +void VidWin::show(bool visible) +{ + if (!hwnd.info.win.hwnd) return; + + ShowWindow(hwnd.info.win.hwnd, visible ? SW_SHOW : SW_HIDE); +} + #elif defined(__APPLE__) #import @@ -203,6 +210,20 @@ void VidWin::get_size() TRACE_("%p size = %dx%d", 0, size_hint.width(), size_hint.height()); } +void VidWin::show(bool visible) +{ + if (!hwnd.info.cocoa.window) return; + + NSWindow *w = (NSWindow*)hwnd.info.cocoa.window; + + if (visible) { + if (![w isMiniaturized]) { + [w makeKeyAndOrderFront:nil]; + } + } else { + [w orderOut:nil]; + } +} #elif defined(linux) || defined(__linux) @@ -211,6 +232,9 @@ void VidWin::get_size() #include #include +#define GET_DISPLAY() QX11Info::display() +//#define GET_DISPLAY() (Display*)hwnd.info.x11.display + void VidWin::attach() { if (!hwnd.info.x11.window) return; @@ -220,7 +244,7 @@ void VidWin::attach() // Use Qt X11 display here, using window creator X11 display may cause // the window failing to embed to this QWidget. //Display *d = (Display*)hwnd.info.x11.display; - Display *d = QX11Info::display(); + Display *d = GET_DISPLAY(); Window w = (Window)hwnd.info.x11.window; Window parent = (Window)this->winId(); int err = XReparentWindow(d, w, parent, 0, 0); @@ -239,7 +263,7 @@ void VidWin::set_size() if (!hwnd.info.x11.window) return; /* Update position and size */ - Display *d = QX11Info::display(); + Display *d = GET_DISPLAY(); Window w = (Window)hwnd.info.x11.window; QRect qr = rect(); @@ -252,7 +276,7 @@ void VidWin::get_size() { if (!hwnd.info.x11.window) return; - Display *d = QX11Info::display(); + Display *d = GET_DISPLAY(); Window w = (Window)hwnd.info.x11.window; XWindowAttributes attr; @@ -261,5 +285,21 @@ void VidWin::get_size() TRACE_("%p size = %dx%d", w, size_hint.width(), size_hint.height()); } +void VidWin::show(bool visible) +{ + if (!hwnd.info.x11.window) return; + + Display *d = GET_DISPLAY(); + Window w = (Window)hwnd.info.x11.window; + + if (visible) { + XMapRaised(d, w); + } else { + XUnmapWindow(d, w); + } + + XFlush(d); +} + #endif diff --git a/pjsip-apps/src/vidgui/vidwin.h b/pjsip-apps/src/vidgui/vidwin.h index d9f8831c..8a18785f 100644 --- a/pjsip-apps/src/vidgui/vidwin.h +++ b/pjsip-apps/src/vidgui/vidwin.h @@ -32,6 +32,7 @@ public: Qt::WindowFlags f = 0); virtual ~VidWin(); QSize sizeHint() const { return size_hint; } + void show(bool visible=true); protected: virtual bool event(QEvent *e); -- cgit v1.2.3