Changeset 3724


Ignore:
Timestamp:
Aug 25, 2011 11:59:39 AM (13 years ago)
Author:
bennylp
Message:

Re #1351: option to initially hide video preview window to avoid floating window. Also added pjsua_vid_preview_param_default()

Location:
pjproject/trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/src/pjmedia-videodev/sdl_dev.c

    r3720 r3724  
    705705        if (!((strm->param.flags & PJMEDIA_VID_DEV_CAP_OUTPUT_HIDE) && 
    706706            strm->param.window_hide)) 
     707        { 
    707708            flags |= SDL_WINDOW_SHOWN; 
     709        } else { 
     710            flags &= ~SDL_WINDOW_SHOWN; 
     711            flags |= SDL_WINDOW_HIDDEN; 
     712        } 
    708713 
    709714#if PJMEDIA_VIDEO_DEV_SDL_HAS_OPENGL 
  • pjproject/trunk/pjsip-apps/src/vidgui/vidgui.cpp

    r3721 r3724  
    2929 
    3030#define LOG_FILE                "vidgui.log" 
     31#define THIS_FILE               "vidgui.cpp" 
    3132 
    3233// These configure SIP registration 
     
    8485    /* Right pane */ 
    8586    vbox_right->addWidget((localUri_ = new QLabel)); 
    86     vbox_right->addWidget((previewButton_=new QPushButton(tr("Start Preview")))); 
     87    vbox_right->addWidget((previewButton_=new QPushButton(tr("Start &Preview")))); 
    8788    vbox_right->addWidget((callButton_=new QPushButton(tr("Call")))); 
    8889    vbox_right->addWidget((hangupButton_=new QPushButton(tr("Hangup")))); 
     
    121122    //statusBar_->showMessage(msg); 
    122123    statusBar_->setText(msg); 
    123     PJ_LOG(3,("vidgui.cpp", "%s", msg)); 
     124    PJ_LOG(3,(THIS_FILE, "%s", msg)); 
    124125} 
    125126 
     
    177178        pjsua_vid_preview_stop(DEFAULT_CAP_DEV); 
    178179 
    179         previewButton_->setText(tr("Start Preview")); 
     180        showStatus("Preview stopped"); 
     181        previewButton_->setText(tr("Start &Preview")); 
    180182    } else { 
    181183        pjsua_vid_win_id wid; 
     
    184186        pj_status_t status; 
    185187 
    186         pj_bzero(&pre_param, sizeof(pre_param)); 
     188        pjsua_vid_preview_param_default(&pre_param); 
    187189        pre_param.rend_id = DEFAULT_REND_DEV; 
     190        pre_param.show = PJ_FALSE; 
    188191 
    189192        status = pjsua_vid_preview_start(DEFAULT_CAP_DEV, &pre_param); 
     
    199202        video_prev_ = new VidWin(&wi.hwnd); 
    200203        vbox_left->addWidget(video_prev_, 1); 
    201  
    202         previewButton_->setText(tr("Stop Preview")); 
     204        //Using this will cause SDL window to display blank 
     205        //screen sometimes, probably because it's using different 
     206        //X11 Display 
     207        //status = pjsua_vid_win_set_show(wid, PJ_TRUE); 
     208        video_prev_->show(); 
     209        showStatus("Preview started"); 
     210 
     211        previewButton_->setText(tr("Stop &Preview")); 
    203212    } 
    204213    preview_on = !preview_on; 
  • pjproject/trunk/pjsip-apps/src/vidgui/vidwin.cpp

    r3715 r3724  
    141141} 
    142142 
     143void VidWin::show(bool visible) 
     144{ 
     145    if (!hwnd.info.win.hwnd) return; 
     146 
     147    ShowWindow(hwnd.info.win.hwnd, visible ? SW_SHOW : SW_HIDE); 
     148} 
     149 
    143150#elif defined(__APPLE__) 
    144151 
     
    204211} 
    205212 
     213void VidWin::show(bool visible) 
     214{ 
     215    if (!hwnd.info.cocoa.window) return; 
     216 
     217    NSWindow *w = (NSWindow*)hwnd.info.cocoa.window; 
     218 
     219    if (visible) { 
     220        if (![w isMiniaturized]) { 
     221            [w makeKeyAndOrderFront:nil]; 
     222        } 
     223    } else { 
     224        [w orderOut:nil]; 
     225    } 
     226} 
    206227 
    207228#elif defined(linux) || defined(__linux) 
     
    212233#include <stdio.h> 
    213234 
     235#define GET_DISPLAY()   QX11Info::display() 
     236//#define GET_DISPLAY() (Display*)hwnd.info.x11.display 
     237 
    214238void VidWin::attach() 
    215239{ 
     
    221245    // the window failing to embed to this QWidget. 
    222246    //Display *d = (Display*)hwnd.info.x11.display; 
    223     Display *d = QX11Info::display(); 
     247    Display *d = GET_DISPLAY(); 
    224248    Window w = (Window)hwnd.info.x11.window; 
    225249    Window parent = (Window)this->winId(); 
     
    240264 
    241265    /* Update position and size */ 
    242     Display *d = QX11Info::display(); 
     266    Display *d = GET_DISPLAY(); 
    243267    Window w = (Window)hwnd.info.x11.window; 
    244268    QRect qr = rect(); 
     
    253277    if (!hwnd.info.x11.window) return; 
    254278 
    255     Display *d = QX11Info::display(); 
     279    Display *d = GET_DISPLAY(); 
    256280    Window w = (Window)hwnd.info.x11.window; 
    257281 
     
    262286} 
    263287 
     288void VidWin::show(bool visible) 
     289{ 
     290    if (!hwnd.info.x11.window) return; 
     291 
     292    Display *d = GET_DISPLAY(); 
     293    Window w = (Window)hwnd.info.x11.window; 
     294 
     295    if (visible) { 
     296        XMapRaised(d, w); 
     297    } else { 
     298        XUnmapWindow(d, w); 
     299    } 
     300 
     301    XFlush(d); 
     302} 
     303 
    264304#endif 
    265305 
  • pjproject/trunk/pjsip-apps/src/vidgui/vidwin.h

    r3715 r3724  
    3333    virtual ~VidWin(); 
    3434    QSize sizeHint() const { return size_hint; } 
     35    void show(bool visible=true); 
    3536 
    3637protected: 
  • pjproject/trunk/pjsip/include/pjsua-lib/pjsua.h

    r3694 r3724  
    54385438     * Device ID for the video renderer to be used for rendering the 
    54395439     * capture stream for preview. 
     5440     * 
     5441     * Default: PJMEDIA_VID_DEFAULT_RENDER_DEV 
    54405442     */ 
    54415443    pjmedia_vid_dev_index       rend_id; 
     5444 
     5445    /** 
     5446     * Show window initially. 
     5447     * 
     5448     * Default: PJ_TRUE. 
     5449     */ 
     5450    pj_bool_t                   show; 
     5451 
    54425452} pjsua_vid_preview_param; 
    54435453 
     5454 
     5455/** 
     5456 * Initialize pjsua_vid_preview_param 
     5457 * 
     5458 * @param p             The parameter to be initialized. 
     5459 */ 
     5460PJ_DECL(void) pjsua_vid_preview_param_default(pjsua_vid_preview_param *p); 
    54445461 
    54455462/** 
     
    54485465 * @param id            The capture device ID where its preview will be 
    54495466 *                      started. 
    5450  * @param prm           Optional video preview parameters. Specify NULL 
     5467 * @param p             Optional video preview parameters. Specify NULL 
    54515468 *                      to use default values. 
    54525469 * 
     
    54545471 */ 
    54555472PJ_DECL(pj_status_t) pjsua_vid_preview_start(pjmedia_vid_dev_index id, 
    5456                                              pjsua_vid_preview_param *prm); 
     5473                                             const pjsua_vid_preview_param *p); 
    54575474 
    54585475/** 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_vid.c

    r3694 r3724  
    117117} 
    118118 
     119PJ_DEF(void) pjsua_vid_preview_param_default(pjsua_vid_preview_param *p) 
     120{ 
     121    p->rend_id = PJMEDIA_VID_DEFAULT_RENDER_DEV; 
     122    p->show = PJ_TRUE; 
     123} 
     124 
     125 
    119126/***************************************************************************** 
    120127 * Devices. 
     
    339346        if (wid != PJSUA_INVALID_ID) { 
    340347            /* Yes, it exists */ 
    341  
    342             /* Show window if requested */ 
    343             if (show) { 
    344                 pjmedia_vid_dev_stream *rdr; 
    345                 pj_bool_t hide = PJ_FALSE; 
    346                  
    347                 rdr = pjmedia_vid_port_get_stream(pjsua_var.win[wid].vp_rend); 
    348                 pj_assert(rdr); 
    349                 status = pjmedia_vid_dev_stream_set_cap( 
    350                                         rdr, 
    351                                         PJMEDIA_VID_DEV_CAP_OUTPUT_HIDE, 
    352                                         &hide); 
    353             } 
     348            /* Show/hide window */ 
     349            pjmedia_vid_dev_stream *rdr; 
     350            pj_bool_t hide = !show; 
     351 
     352            rdr = pjmedia_vid_port_get_stream(pjsua_var.win[wid].vp_rend); 
     353            pj_assert(rdr); 
     354            status = pjmedia_vid_dev_stream_set_cap( 
     355                                    rdr, PJMEDIA_VID_DEV_CAP_OUTPUT_HIDE, 
     356                                    &hide); 
    354357 
    355358            /* Done */ 
     
    833836 */ 
    834837PJ_DEF(pj_status_t) pjsua_vid_preview_start(pjmedia_vid_dev_index id, 
    835                                             pjsua_vid_preview_param *prm) 
     838                                            const pjsua_vid_preview_param *prm) 
    836839{ 
    837840    pjsua_vid_win_id wid; 
    838841    pjsua_vid_win *w; 
    839842    pjmedia_vid_dev_index rend_id; 
     843    pjsua_vid_preview_param default_param; 
    840844    pj_status_t status; 
    841845 
    842846    PJSUA_LOCK(); 
    843847 
    844     if (prm) { 
    845         rend_id = prm->rend_id; 
    846     } else { 
    847         rend_id = PJMEDIA_VID_DEFAULT_RENDER_DEV; 
    848     } 
     848    if (!prm) { 
     849        pjsua_vid_preview_param_default(&default_param); 
     850        prm = &default_param; 
     851    } 
     852 
     853    rend_id = prm->rend_id; 
    849854 
    850855    status = create_vid_win(PJSUA_WND_TYPE_PREVIEW, NULL, rend_id, id, 
    851                             PJ_TRUE, &wid); 
     856                            prm->show, &wid); 
    852857    if (status != PJ_SUCCESS) { 
    853858        PJSUA_UNLOCK(); 
Note: See TracChangeset for help on using the changeset viewer.