summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pjmedia/include/pjmedia-videodev/videodev.h40
-rw-r--r--pjmedia/src/pjmedia-videodev/sdl_dev.c2
-rw-r--r--pjsip/include/pjsua-lib/pjsua.h5
-rw-r--r--pjsip/src/pjsua-lib/pjsua_vid.c1
4 files changed, 46 insertions, 2 deletions
diff --git a/pjmedia/include/pjmedia-videodev/videodev.h b/pjmedia/include/pjmedia-videodev/videodev.h
index a1118d51..0a8ccf7b 100644
--- a/pjmedia/include/pjmedia-videodev/videodev.h
+++ b/pjmedia/include/pjmedia-videodev/videodev.h
@@ -46,6 +46,44 @@ PJ_BEGIN_DECL
typedef pj_int32_t pjmedia_vid_dev_index;
/**
+ * Enumeration of window handle type.
+ */
+typedef enum pjmedia_vid_dev_hwnd_type
+{
+ /**
+ * Type none.
+ */
+ PJMEDIA_VID_DEV_HWND_TYPE_NONE,
+
+ /**
+ * Native window handle on Windows.
+ */
+ PJMEDIA_VID_DEV_HWND_TYPE_WINDOWS
+
+} pjmedia_vid_dev_hwnd_type;
+
+/**
+ * Type for window handle.
+ */
+typedef struct pjmedia_vid_dev_hwnd
+{
+ /**
+ * The window handle type.
+ */
+ pjmedia_vid_dev_hwnd_type type;
+
+ /**
+ * The window handle.
+ */
+ union
+ {
+ void *ptr; /**< Pointer value */
+ int fd; /**< Descriptor value */
+ } hwnd;
+
+} pjmedia_vid_dev_hwnd;
+
+/**
* Device index constants.
*/
enum
@@ -267,7 +305,7 @@ typedef struct pjmedia_vid_dev_param
* and will only be used if PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW is set in
* the flags.
*/
- void *window;
+ pjmedia_vid_dev_hwnd window;
/**
* Video display size. This setting is optional, and will only be used
diff --git a/pjmedia/src/pjmedia-videodev/sdl_dev.c b/pjmedia/src/pjmedia-videodev/sdl_dev.c
index 3e437ad8..a39aa02e 100644
--- a/pjmedia/src/pjmedia-videodev/sdl_dev.c
+++ b/pjmedia/src/pjmedia-videodev/sdl_dev.c
@@ -510,7 +510,7 @@ static pj_status_t init_sdl(struct sdl_stream *strm, pjmedia_format *fmt)
if (strm->param.flags & PJMEDIA_VID_DEV_CAP_OUTPUT_WINDOW) {
/* Use the window supplied by the application. */
- strm->window = SDL_CreateWindowFrom(strm->param.window);
+ strm->window = SDL_CreateWindowFrom(strm->param.window.hwnd.ptr);
} else {
/* Create the window where we will draw. */
strm->window = SDL_CreateWindow("pjmedia-SDL video",
diff --git a/pjsip/include/pjsua-lib/pjsua.h b/pjsip/include/pjsua-lib/pjsua.h
index bf72a4c1..beebfb19 100644
--- a/pjsip/include/pjsua-lib/pjsua.h
+++ b/pjsip/include/pjsua-lib/pjsua.h
@@ -5456,6 +5456,11 @@ PJ_DECL(pj_status_t) pjsua_vid_preview_stop(pjmedia_vid_dev_index id);
typedef struct pjsua_vid_win_info
{
/**
+ * Native window handle.
+ */
+ pjmedia_vid_dev_hwnd hwnd;
+
+ /**
* Window show status. The window is hidden if false.
*/
pj_bool_t show;
diff --git a/pjsip/src/pjsua-lib/pjsua_vid.c b/pjsip/src/pjsua-lib/pjsua_vid.c
index afb564e5..372fab39 100644
--- a/pjsip/src/pjsua-lib/pjsua_vid.c
+++ b/pjsip/src/pjsua-lib/pjsua_vid.c
@@ -949,6 +949,7 @@ PJ_DEF(pj_status_t) pjsua_vid_win_get_info( pjsua_vid_win_id wid,
return status;
}
+ wi->hwnd = vparam.window;
wi->show = !vparam.window_hide;
wi->pos = vparam.window_pos;
wi->size = vparam.disp_size;