Changeset 3864


Ignore:
Timestamp:
Oct 26, 2011 9:01:53 AM (12 years ago)
Author:
ming
Message:

Fixed #1401: Add support for video device's window flags

Now support flags PJMEDIA_VID_DEV_WND_BORDER and PJMEDIA_VID_DEV_WND_RESIZABLE.

Location:
pjproject/trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/include/pjmedia-videodev/videodev.h

    r3787 r3864  
    112112 
    113113/** 
     114 * Enumeration of window flags. 
     115 */ 
     116typedef enum pjmedia_vid_dev_wnd_flag 
     117{ 
     118    /** 
     119     * Window with border. 
     120     */ 
     121    PJMEDIA_VID_DEV_WND_BORDER = 1, 
     122 
     123    /** 
     124     * Window can be resized. 
     125     */ 
     126    PJMEDIA_VID_DEV_WND_RESIZABLE = 2 
     127 
     128} pjmedia_vid_dev_wnd_flag; 
     129 
     130 
     131/** 
    114132 * Device index constants. 
    115133 */ 
     
    238256     */ 
    239257    PJMEDIA_VID_DEV_CAP_SWITCH = 256, 
     258 
     259    /** 
     260     * Support for setting the output video window's flags. 
     261     * The value of this capability is a bitmask combination of 
     262     * #pjmedia_vid_dev_wnd_flag. 
     263     */ 
     264    PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS = 512, 
    240265 
    241266    /** 
     
    422447    pjmedia_orient orient; 
    423448 
     449    /** 
     450     * Video window flags. This setting is optional, and will only be used 
     451     * if PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS is set in the flags. 
     452     */ 
     453    unsigned window_flags; 
     454 
    424455} pjmedia_vid_dev_param; 
    425456 
  • pjproject/trunk/pjmedia/src/pjmedia-videodev/sdl_dev.c

    r3794 r3864  
    494494                         PJMEDIA_VID_DEV_CAP_OUTPUT_RESIZE; 
    495495        ddi->info.caps |= PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW; 
     496        ddi->info.caps |= PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS; 
    496497 
    497498        for (j = 0; j < ddi->info.fmt_cnt; j++) { 
     
    700701 
    701702    if (!strm->window) { 
    702         Uint32 flags = /*SDL_WINDOW_RESIZABLE; */ SDL_WINDOW_BORDERLESS; 
     703        Uint32 flags = 0; 
     704         
     705        if (strm->param.flags & PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS) { 
     706            if (!(strm->param.window_flags & PJMEDIA_VID_DEV_WND_BORDER)) 
     707                flags |= SDL_WINDOW_BORDERLESS; 
     708            if (strm->param.window_flags & PJMEDIA_VID_DEV_WND_RESIZABLE) 
     709                flags |= SDL_WINDOW_RESIZABLE; 
     710        } else { 
     711            flags |= SDL_WINDOW_BORDERLESS; 
     712        } 
    703713 
    704714        if (!((strm->param.flags & PJMEDIA_VID_DEV_CAP_OUTPUT_HIDE) && 
     
    971981    { 
    972982        pi->flags |= PJMEDIA_VID_DEV_CAP_OUTPUT_HIDE; 
     983    } 
     984    if (sdl_stream_get_cap(s, PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS, 
     985                           &pi->window_flags) == PJ_SUCCESS) 
     986    { 
     987        pi->flags |= PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS; 
    973988    } 
    974989 
     
    10381053    } else if (cap == PJMEDIA_VID_DEV_CAP_OUTPUT_HIDE) { 
    10391054        Uint32 flag = SDL_GetWindowFlags(strm->window); 
    1040         *((pj_bool_t *)pval) = (flag | SDL_WINDOW_HIDDEN)? PJ_TRUE: PJ_FALSE; 
     1055        *((pj_bool_t *)pval) = (flag & SDL_WINDOW_HIDDEN)? PJ_TRUE: PJ_FALSE; 
     1056        return PJ_SUCCESS; 
     1057    } else if (cap == PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS) { 
     1058        Uint32 flag = SDL_GetWindowFlags(strm->window); 
     1059        unsigned *wnd_flags = (unsigned *)pval; 
     1060        if (!(flag & SDL_WINDOW_BORDERLESS)) 
     1061            *wnd_flags |= PJMEDIA_VID_DEV_WND_BORDER; 
     1062        if (flag & SDL_WINDOW_RESIZABLE) 
     1063            *wnd_flags |= PJMEDIA_VID_DEV_WND_RESIZABLE; 
    10411064        return PJ_SUCCESS; 
    10421065    } 
  • pjproject/trunk/pjmedia/src/pjmedia-videodev/videodev.c

    r3792 r3864  
    4747    DEFINE_CAP("preview",       "Input preview"), 
    4848    DEFINE_CAP("orientation",   "Video orientation"), 
    49     DEFINE_CAP("switch",        "Switch device") 
     49    DEFINE_CAP("switch",        "Switch device"), 
     50    DEFINE_CAP("wndflags",      "Window flags") 
    5051}; 
    5152 
     
    189190     * to switch immediately). 
    190191     */ 
     192    case PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS: 
     193        FIELD_INFO(window_flags); 
     194        break; 
    191195    default: 
    192196        return PJMEDIA_EVID_INVCAP; 
  • pjproject/trunk/pjsip-apps/src/pjsua/pjsua_app.c

    r3863 r3864  
    38673867    acc_cfg->vid_in_auto_show = app_config.vid.in_auto_show; 
    38683868    acc_cfg->vid_out_auto_transmit = app_config.vid.out_auto_transmit; 
     3869    /* Note that normally GUI application will prefer a borderless 
     3870     * window. 
     3871     */ 
     3872    acc_cfg->vid_wnd_flags = PJMEDIA_VID_DEV_WND_BORDER | 
     3873                             PJMEDIA_VID_DEV_WND_RESIZABLE; 
    38693874    acc_cfg->vid_cap_dev = app_config.vid.vcapture_dev; 
    38703875    acc_cfg->vid_rend_dev = app_config.vid.vrender_dev; 
     
    40224027                int dev_id = atoi(argv[4]); 
    40234028                if (on) { 
    4024                     pjsua_vid_preview_start(dev_id, NULL); 
     4029                    pjsua_vid_preview_param param; 
     4030 
     4031                    pjsua_vid_preview_param_default(&param); 
     4032                    param.wnd_flags = PJMEDIA_VID_DEV_WND_BORDER | 
     4033                                      PJMEDIA_VID_DEV_WND_RESIZABLE; 
     4034                    pjsua_vid_preview_start(dev_id, &param); 
    40254035                    arrange_window(pjsua_vid_preview_get_win(dev_id)); 
    40264036                } else { 
  • pjproject/trunk/pjsip/include/pjsua-lib/pjsua.h

    r3850 r3864  
    27472747 
    27482748    /** 
     2749     * Specify video window's flags. The value is a bitmask combination of 
     2750     * #pjmedia_vid_dev_wnd_flag. 
     2751     * 
     2752     * Default: 0 
     2753     */ 
     2754    unsigned         vid_wnd_flags; 
     2755 
     2756    /** 
    27492757     * Specify the default capture device to be used by this account. If 
    27502758     * \a vid_out_auto_transmit is enabled, this device will be used for 
     
    57395747    pj_bool_t                   show; 
    57405748 
     5749    /** 
     5750     * Window flags.  The value is a bitmask combination of 
     5751     * #pjmedia_vid_dev_wnd_flag. 
     5752     * 
     5753     * Default: 0. 
     5754     */ 
     5755    unsigned                    wnd_flags; 
     5756 
    57415757} pjsua_vid_preview_param; 
    57425758 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_acc.c

    r3850 r3864  
    10651065    acc->cfg.vid_in_auto_show = cfg->vid_in_auto_show; 
    10661066    acc->cfg.vid_out_auto_transmit = cfg->vid_out_auto_transmit; 
     1067    acc->cfg.vid_wnd_flags = cfg->vid_wnd_flags; 
    10671068    acc->cfg.vid_cap_dev = cfg->vid_cap_dev; 
    10681069    acc->cfg.vid_rend_dev = cfg->vid_rend_dev; 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_vid.c

    r3799 r3864  
    389389                                  pjmedia_vid_dev_index cap_id, 
    390390                                  pj_bool_t show, 
     391                                  unsigned wnd_flags, 
    391392                                  pjsua_vid_win_id *id) 
    392393{ 
     
    433434                                    &hide); 
    434435 
     436            pjmedia_vid_dev_stream_set_cap( 
     437                                strm, PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS, 
     438                                &wnd_flags); 
     439 
    435440            /* Done */ 
    436441            *id = wid; 
     
    483488            vp_param.vidparam.flags |= PJMEDIA_VID_DEV_CAP_OUTPUT_HIDE; 
    484489            vp_param.vidparam.window_hide = !show; 
     490            vp_param.vidparam.flags |= PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS; 
     491            vp_param.vidparam.window_flags = wnd_flags; 
    485492        } 
    486493 
     
    544551        vp_param.vidparam.flags |= PJMEDIA_VID_DEV_CAP_OUTPUT_HIDE; 
    545552        vp_param.vidparam.window_hide = !show; 
     553        vp_param.vidparam.flags |= PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS; 
     554        vp_param.vidparam.window_flags = wnd_flags; 
    546555 
    547556        status = pjmedia_vid_port_create(w->pool, &vp_param, &w->vp_rend); 
     
    787796                                    PJSUA_INVALID_ID, 
    788797                                    acc->cfg.vid_in_auto_show, 
     798                                    acc->cfg.vid_wnd_flags, 
    789799                                    &wid); 
    790800            if (status != PJ_SUCCESS) { 
     
    826836        if (si->dir & PJMEDIA_DIR_ENCODING && !call->local_hold) 
    827837        { 
     838            pjsua_acc *acc = &pjsua_var.acc[call_med->call->acc_id]; 
    828839            pjsua_vid_win *w; 
    829840            pjsua_vid_win_id wid; 
     
    856867                                        //acc->cfg.vid_cap_dev, 
    857868                                        PJSUA_HIDE_WINDOW, 
     869                                        acc->cfg.vid_wnd_flags, 
    858870                                        &wid); 
    859871                if (status != PJ_SUCCESS) { 
     
    10711083 
    10721084    status = create_vid_win(PJSUA_WND_TYPE_PREVIEW, NULL, rend_id, id, 
    1073                             prm->show, &wid); 
     1085                            prm->show, prm->wnd_flags, &wid); 
    10741086    if (status != PJ_SUCCESS) { 
    10751087        PJSUA_UNLOCK(); 
     
    18481860    new_wid = vid_preview_get_win(cap_dev, PJ_FALSE); 
    18491861    if (new_wid == PJSUA_INVALID_ID) { 
     1862        pjsua_acc *acc = &pjsua_var.acc[call_med->call->acc_id]; 
     1863 
    18501864        /* Create preview video window */ 
    18511865        status = create_vid_win(PJSUA_WND_TYPE_PREVIEW, 
     
    18541868                                cap_dev, 
    18551869                                PJSUA_HIDE_WINDOW, 
    1856                                 &new_wid); 
     1870                                acc->cfg.vid_wnd_flags, 
     1871                                &new_wid); 
    18571872        if (status != PJ_SUCCESS) 
    18581873            goto on_error; 
Note: See TracChangeset for help on using the changeset viewer.