Web lists-archives.org

Re: [MPlayer-dev-eng] [PATCH] wid support with vo_sdl




On Tue, Jun 24, 2008 at 8:20 AM, Aurelien Jacobs <aurel@xxxxxxxxxx> wrote:>
> It won't compile when HAVE_X11 is not defined.

True, forgot to put the xv code inside the ifdef.

Here's the second version of the patch, please see if there's still
any problem with it.

Thanks a lot.

Regards
-- 
Ricardo Salveti de Araujo
diff -Naur mplayer-trunk-old/libvo/vo_sdl.c mplayer-trunk-new/libvo/vo_sdl.c
--- mplayer-trunk-old/libvo/vo_sdl.c	2008-06-25 01:20:51.000000000 -0300
+++ mplayer-trunk-new/libvo/vo_sdl.c	2008-06-25 02:36:20.000000000 -0300
@@ -793,12 +793,22 @@
 	    return -1;
 
 	/* Set output window title */
-	SDL_WM_SetCaption (".: MPlayer : F = Fullscreen/Windowed : C = Cycle Fullscreen Resolutions :.", title);
+    if (WinID < 0)
+        SDL_WM_SetCaption (".: MPlayer : F = Fullscreen/Windowed : C = Cycle Fullscreen Resolutions :.", title);
 	//SDL_WM_SetCaption (title, title);
 
     if(priv->X) {
-	aspect_save_screenres(priv->XWidth,priv->XHeight);
-	aspect(&priv->dstwidth,&priv->dstheight,A_NOZOOM);
+        aspect_save_screenres(priv->XWidth,priv->XHeight);
+#ifdef HAVE_X11
+        if (WinID > 0) {
+            if (vo_dwidth > 0) priv->dstwidth = vo_dwidth;
+            if (vo_dheight > 0) priv->dstheight = vo_dheight;
+        }
+        else
+            aspect(&priv->dstwidth,&priv->dstheight,A_NOZOOM);
+#else
+        aspect(&priv->dstwidth,&priv->dstheight,A_NOZOOM);
+#endif
     }
     
 	priv->windowsize.w = priv->dstwidth;
@@ -816,6 +826,14 @@
 			mp_msg(MSGT_VO,MSGL_V, "SDL: using flipped video (only with RGB/BGR/packed YUV)\n"); }
 		priv->flip = 1; 
 	}
+#ifdef HAVE_X11
+    /* Ignore the other flags when showing inside another window (-wid) */
+    if (WinID > 0) {
+        set_video_mode(priv->dstwidth, priv->dstheight, priv->bpp, priv->sdlflags);
+        if( mp_msg_test(MSGT_VO,MSGL_V) ) {
+            mp_msg(MSGT_VO,MSGL_V, "SDL: setting windowed mode attached to another window\n"); }
+    } else
+#endif
 	if(flags&VOFLAG_FULLSCREEN) {
 	  	if( mp_msg_test(MSGT_VO,MSGL_V) ) {
  	  	    mp_msg(MSGT_VO,MSGL_V, "SDL: setting zoomed fullscreen without modeswitching\n");}
@@ -1122,6 +1140,18 @@
 	SDL_Event event;
 	SDLKey keypressed = 0;
 	
+#ifdef HAVE_X11
+    if (WinID > 0) {
+        int ret = 0;
+        ret = vo_x11_check_events(mDisplay);
+
+        if (ret & VO_EVENT_RESIZE) {
+            set_video_mode(vo_dwidth, vo_dheight, priv->bpp, priv->sdlflags);
+            if( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
+                mp_msg(MSGT_VO,MSGL_DBG3, "SDL: Window resize\n"); }
+        }
+    }
+#endif
 	/* Poll the waiting SDL Events */
 	while ( SDL_PollEvent(&event) ) {
 		switch (event.type) {
@@ -1586,15 +1616,6 @@
     priv->fullmodes = NULL;
     priv->bpp = 0;
 
-    /* initialize the SDL Video system */
-    if (!SDL_WasInit(SDL_INIT_VIDEO)) {
-        if (SDL_Init (SDL_INIT_VIDEO|SDL_INIT_NOPARACHUTE)) {
-            mp_msg(MSGT_VO,MSGL_ERR, MSGTR_LIBVO_SDL_InitializationFailed, SDL_GetError());
-
-            return -1;
-        }
-    }
-
     SDL_VideoDriverName(priv->driver, 8);
     mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_SDL_UsingDriver, priv->driver);
 
@@ -1609,8 +1630,37 @@
 		if( mp_msg_test(MSGT_VO,MSGL_V) ) {
 			mp_msg(MSGT_VO,MSGL_V, "SDL: X11 Resolution %ix%i\n", priv->XWidth, priv->XHeight); }
 	}
+    /* if user want to display at another window, set sdl windowid */
+    if (WinID > 0) {
+        char winid[32];
+        int border, depth;
+
+        vo_window = WinID ? ((Window) WinID) : mRootWin;
+        XUnmapWindow(mDisplay, vo_window);
+        vo_x11_selectinput_witherr(mDisplay, vo_window,
+                                   StructureNotifyMask |
+                                   ExposureMask |
+                                   VisibilityChangeMask |
+                                   FocusChangeMask);
+        XMapWindow(mDisplay, vo_window);
+        XGetGeometry(mDisplay, vo_window, &mRootWin, &vo_dx, &vo_dy,
+                &vo_dwidth, &vo_dheight, &border, &depth);
+
+        /* set sdl windowid env */
+        snprintf(winid, 32, "%d", WinID);
+        setenv("SDL_WINDOWID", winid, 1);
+    }
 #endif
 
+    /* initialize the SDL Video system */
+    if (!SDL_WasInit(SDL_INIT_VIDEO)) {
+        if (SDL_Init (SDL_INIT_VIDEO|SDL_INIT_NOPARACHUTE)) {
+            mp_msg(MSGT_VO,MSGL_ERR, MSGTR_LIBVO_SDL_InitializationFailed, SDL_GetError());
+
+            return -1;
+        }
+    }
+
     return 0;
 }
 
_______________________________________________
MPlayer-dev-eng mailing list
MPlayer-dev-eng@xxxxxxxxxxxx
https://lists.mplayerhq.hu/mailman/listinfo/mplayer-dev-eng