Changeset 6117


Ignore:
Timestamp:
Dec 10, 2019 3:55:51 AM (3 years ago)
Author:
nanang
Message:

Close #2255: Add API for making video window full screen.

Location:
pjproject/trunk
Files:
7 edited

Legend:

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

    r6085 r6117  
    274274     */ 
    275275    PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS = 512, 
     276 
     277    /** 
     278     * Support for setting the output video window full screen. 
     279     */ 
     280    PJMEDIA_VID_DEV_CAP_OUTPUT_FULLSCREEN = 1024, 
    276281 
    277282    /** 
     
    464469    unsigned window_flags; 
    465470 
     471    /** 
     472     * Video window's full screen status. This setting is optional, and will only be 
     473     * used if PJMEDIA_VID_DEV_CAP_OUTPUT_FULLSCREEN is set in the flags. 
     474     */ 
     475    pj_bool_t window_fullscreen; 
     476 
    466477} pjmedia_vid_dev_param; 
    467478 
  • pjproject/trunk/pjmedia/src/pjmedia-videodev/sdl_dev.c

    r6085 r6117  
    702702        } 
    703703 
     704        if (!((strm->param.flags & PJMEDIA_VID_DEV_CAP_OUTPUT_FULLSCREEN) && 
     705            strm->param.window_fullscreen)) 
     706        { 
     707            flags |= SDL_WINDOW_FULLSCREEN; 
     708        } 
     709 
    704710#if PJMEDIA_VIDEO_DEV_SDL_HAS_OPENGL 
    705711        if (strm->param.rend_id == OPENGL_DEV_IDX) 
     
    10171023    { 
    10181024        pi->flags |= PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS; 
     1025    } 
     1026    if (sdl_stream_get_cap(s, PJMEDIA_VID_DEV_CAP_OUTPUT_FULLSCREEN, 
     1027                           &pi->window_fullscreen) == PJ_SUCCESS) 
     1028    { 
     1029        pi->flags |= PJMEDIA_VID_DEV_CAP_OUTPUT_FULLSCREEN; 
    10191030    } 
    10201031 
     
    10941105            *wnd_flags |= PJMEDIA_VID_DEV_WND_RESIZABLE; 
    10951106        return PJ_SUCCESS; 
     1107    } else if (cap == PJMEDIA_VID_DEV_CAP_OUTPUT_FULLSCREEN) { 
     1108        Uint32 flag = SDL_GetWindowFlags(strm->window); 
     1109        *((pj_bool_t *)pval) = (flag & SDL_WINDOW_FULLSCREEN)? PJ_TRUE: PJ_FALSE; 
     1110        return PJ_SUCCESS; 
    10961111    } 
    10971112 
     
    11891204                      hwnd->info.window)); 
    11901205        return status;   
     1206    } else if (cap == PJMEDIA_VID_DEV_CAP_OUTPUT_FULLSCREEN) { 
     1207        int flag; 
     1208        if (*(pj_bool_t *)pval) 
     1209            flag = SDL_WINDOW_FULLSCREEN; 
     1210        else 
     1211            flag = 0; 
     1212        SDL_SetWindowFullscreen(strm->window, flag); 
     1213        return PJ_SUCCESS; 
    11911214    } 
    11921215 
  • pjproject/trunk/pjmedia/src/pjmedia/videodev.c

    r5255 r6117  
    4848    DEFINE_CAP("orientation",   "Video orientation"), 
    4949    DEFINE_CAP("switch",        "Switch device"), 
    50     DEFINE_CAP("wndflags",      "Window flags") 
     50    DEFINE_CAP("wndflags",      "Window flags"), 
     51    DEFINE_CAP("fullscreen",    "Renderer fullscreen") 
    5152}; 
    5253 
     
    140141    case PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS: 
    141142        FIELD_INFO(window_flags); 
     143        break; 
     144    case PJMEDIA_VID_DEV_CAP_OUTPUT_FULLSCREEN: 
     145        FIELD_INFO(window_fullscreen); 
    142146        break; 
    143147    default: 
  • pjproject/trunk/pjsip/include/pjsua-lib/pjsua.h

    r6106 r6117  
    80558055 
    80568056 
     8057/** 
     8058 * Set video window full-screen. This operation is valid only when the 
     8059 * underlying video device supports PJMEDIA_VID_DEV_CAP_OUTPUT_FULLSCREEN 
     8060 * capability. Currently it is only supported on SDL backend. 
     8061 * 
     8062 * @param wid           The video window ID. 
     8063 * @param enabled       Set to PJ_TRUE if full screen is desired, PJ_FALSE  
     8064 *                      otherwise. 
     8065 * 
     8066 * @return              PJ_SUCCESS on success, or the appropriate error code. 
     8067 */ 
     8068PJ_DECL(pj_status_t) pjsua_vid_win_set_fullscreen(pjsua_vid_win_id wid, 
     8069                                                  pj_bool_t enabled); 
     8070 
    80578071/* 
    80588072 * Video codecs API 
  • pjproject/trunk/pjsip/include/pjsua2/media.hpp

    r6112 r6117  
    18691869     */ 
    18701870    void setWindow(const VideoWindowHandle &win) PJSUA2_THROW(Error); 
    1871      
     1871 
     1872    /** 
     1873     * Set video window full-screen. This operation is valid only when the 
     1874     * underlying video device supports PJMEDIA_VID_DEV_CAP_OUTPUT_FULLSCREEN 
     1875     * capability. Currently it is only supported on SDL backend. 
     1876     * 
     1877     * @param enabled           Set to true if full screen is desired, false 
     1878     *                          otherwise. 
     1879     */ 
     1880    void setFullScreen(bool enabled) PJSUA2_THROW(Error); 
     1881 
    18721882private: 
    18731883    pjsua_vid_win_id            winId; 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_vid.c

    r6110 r6117  
    17391739} 
    17401740 
     1741 
     1742/* 
     1743 * Set video window fullscreen. 
     1744 */ 
     1745PJ_DEF(pj_status_t) pjsua_vid_win_set_fullscreen( pjsua_vid_win_id wid, 
     1746                                                  pj_bool_t enabled) 
     1747{ 
     1748    pjsua_vid_win *w; 
     1749    pjmedia_vid_dev_stream *s; 
     1750    pj_status_t status; 
     1751 
     1752    PJ_ASSERT_RETURN(wid >= 0 && wid < PJSUA_MAX_VID_WINS, PJ_EINVAL); 
     1753 
     1754    PJSUA_LOCK(); 
     1755 
     1756    w = &pjsua_var.win[wid]; 
     1757    s = pjmedia_vid_port_get_stream(w->vp_rend? w->vp_rend: w->vp_cap); 
     1758    if (s == NULL) { 
     1759        PJSUA_UNLOCK(); 
     1760        return PJ_EINVAL; 
     1761    } 
     1762 
     1763    status = pjmedia_vid_dev_stream_set_cap(s, 
     1764                            PJMEDIA_VID_DEV_CAP_OUTPUT_FULLSCREEN, &enabled); 
     1765 
     1766    PJSUA_UNLOCK(); 
     1767 
     1768    return status; 
     1769} 
    17411770 
    17421771static void call_get_vid_strm_info(pjsua_call *call, 
  • pjproject/trunk/pjsip/src/pjsua2/media.cpp

    r6112 r6117  
    12811281#endif 
    12821282} 
     1283 
     1284void VideoWindow::setFullScreen(bool enabled) PJSUA2_THROW(Error) 
     1285{ 
     1286#if PJSUA_HAS_VIDEO 
     1287    PJSUA2_CHECK_EXPR( pjsua_vid_win_set_fullscreen(winId, enabled) ); 
     1288#else 
     1289    PJ_UNUSED_ARG(enabled); 
     1290#endif 
     1291} 
     1292 
    12831293/////////////////////////////////////////////////////////////////////////////// 
    12841294VideoPreviewOpParam::VideoPreviewOpParam() 
Note: See TracChangeset for help on using the changeset viewer.