summaryrefslogtreecommitdiff
path: root/pjmedia/src/pjmedia-videodev
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2011-10-26 09:01:53 +0000
committerLiong Sauw Ming <ming@teluu.com>2011-10-26 09:01:53 +0000
commit6187fb31a1f1e9b1f07f1b9b8022c97f3c02b25e (patch)
tree5fa3549dde179190131509ba4079d4bfbecb0200 /pjmedia/src/pjmedia-videodev
parent685cb1d88b3fa2e12547d11834f5b34335507f94 (diff)
Fixed #1401: Add support for video device's window flags
Now support flags PJMEDIA_VID_DEV_WND_BORDER and PJMEDIA_VID_DEV_WND_RESIZABLE. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3864 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia/src/pjmedia-videodev')
-rw-r--r--pjmedia/src/pjmedia-videodev/sdl_dev.c27
-rw-r--r--pjmedia/src/pjmedia-videodev/videodev.c6
2 files changed, 30 insertions, 3 deletions
diff --git a/pjmedia/src/pjmedia-videodev/sdl_dev.c b/pjmedia/src/pjmedia-videodev/sdl_dev.c
index 72a89a61..465e37b5 100644
--- a/pjmedia/src/pjmedia-videodev/sdl_dev.c
+++ b/pjmedia/src/pjmedia-videodev/sdl_dev.c
@@ -493,6 +493,7 @@ static pj_status_t sdl_factory_init(pjmedia_vid_dev_factory *f)
ddi->info.caps = PJMEDIA_VID_DEV_CAP_FORMAT |
PJMEDIA_VID_DEV_CAP_OUTPUT_RESIZE;
ddi->info.caps |= PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW;
+ ddi->info.caps |= PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS;
for (j = 0; j < ddi->info.fmt_cnt; j++) {
pjmedia_format *fmt = &ddi->info.fmt[j];
@@ -699,7 +700,16 @@ static pj_status_t sdl_create_rend(struct sdl_stream * strm,
#endif /* PJMEDIA_VIDEO_DEV_SDL_HAS_OPENGL */
if (!strm->window) {
- Uint32 flags = /*SDL_WINDOW_RESIZABLE; */ SDL_WINDOW_BORDERLESS;
+ Uint32 flags = 0;
+
+ if (strm->param.flags & PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS) {
+ if (!(strm->param.window_flags & PJMEDIA_VID_DEV_WND_BORDER))
+ flags |= SDL_WINDOW_BORDERLESS;
+ if (strm->param.window_flags & PJMEDIA_VID_DEV_WND_RESIZABLE)
+ flags |= SDL_WINDOW_RESIZABLE;
+ } else {
+ flags |= SDL_WINDOW_BORDERLESS;
+ }
if (!((strm->param.flags & PJMEDIA_VID_DEV_CAP_OUTPUT_HIDE) &&
strm->param.window_hide))
@@ -971,6 +981,11 @@ static pj_status_t sdl_stream_get_param(pjmedia_vid_dev_stream *s,
{
pi->flags |= PJMEDIA_VID_DEV_CAP_OUTPUT_HIDE;
}
+ if (sdl_stream_get_cap(s, PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS,
+ &pi->window_flags) == PJ_SUCCESS)
+ {
+ pi->flags |= PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS;
+ }
return PJ_SUCCESS;
}
@@ -1037,7 +1052,15 @@ static pj_status_t get_cap(void *data)
return PJ_SUCCESS;
} else if (cap == PJMEDIA_VID_DEV_CAP_OUTPUT_HIDE) {
Uint32 flag = SDL_GetWindowFlags(strm->window);
- *((pj_bool_t *)pval) = (flag | SDL_WINDOW_HIDDEN)? PJ_TRUE: PJ_FALSE;
+ *((pj_bool_t *)pval) = (flag & SDL_WINDOW_HIDDEN)? PJ_TRUE: PJ_FALSE;
+ return PJ_SUCCESS;
+ } else if (cap == PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS) {
+ Uint32 flag = SDL_GetWindowFlags(strm->window);
+ unsigned *wnd_flags = (unsigned *)pval;
+ if (!(flag & SDL_WINDOW_BORDERLESS))
+ *wnd_flags |= PJMEDIA_VID_DEV_WND_BORDER;
+ if (flag & SDL_WINDOW_RESIZABLE)
+ *wnd_flags |= PJMEDIA_VID_DEV_WND_RESIZABLE;
return PJ_SUCCESS;
}
diff --git a/pjmedia/src/pjmedia-videodev/videodev.c b/pjmedia/src/pjmedia-videodev/videodev.c
index dad2c12b..9a82ba6e 100644
--- a/pjmedia/src/pjmedia-videodev/videodev.c
+++ b/pjmedia/src/pjmedia-videodev/videodev.c
@@ -46,7 +46,8 @@ static struct cap_info
DEFINE_CAP("hide", "Renderer hide"),
DEFINE_CAP("preview", "Input preview"),
DEFINE_CAP("orientation", "Video orientation"),
- DEFINE_CAP("switch", "Switch device")
+ DEFINE_CAP("switch", "Switch device"),
+ DEFINE_CAP("wndflags", "Window flags")
};
@@ -188,6 +189,9 @@ static pj_status_t get_cap_pointer(const pjmedia_vid_dev_param *param,
* param (it doesn't make sense to open a stream and tell it
* to switch immediately).
*/
+ case PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW_FLAGS:
+ FIELD_INFO(window_flags);
+ break;
default:
return PJMEDIA_EVID_INVCAP;
}