summaryrefslogtreecommitdiff
path: root/pjsip-apps
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2011-08-25 11:59:39 +0000
committerBenny Prijono <bennylp@teluu.com>2011-08-25 11:59:39 +0000
commit3550a1860cb5812e76d132052c2c5a75bd84b03e (patch)
tree925bc609bda1552708d6cae62ac865da42effa70 /pjsip-apps
parentddeb24066e2feafe9de7baef397d40b40c7fb537 (diff)
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
Diffstat (limited to 'pjsip-apps')
-rw-r--r--pjsip-apps/src/vidgui/vidgui.cpp21
-rw-r--r--pjsip-apps/src/vidgui/vidwin.cpp46
-rw-r--r--pjsip-apps/src/vidgui/vidwin.h1
3 files changed, 59 insertions, 9 deletions
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 <QMessageBox>
#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<Cocoa/Cocoa.h>
@@ -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 <QX11Info>
#include <stdio.h>
+#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);