# HG changeset patch # User reimar # Date 1272187470 0 # Node ID 5aae99fd6ca7f70ac8a49095d69ba528ab0a4e9c # Parent 0382f000a688bb9e57ed3f574278791ae359b770 Fullscreen support for -vo gl using SDL. diff -r 0382f000a688 -r 5aae99fd6ca7 libvo/gl_common.c --- a/libvo/gl_common.c Sun Apr 25 08:40:28 2010 +0000 +++ b/libvo/gl_common.c Sun Apr 25 09:24:30 2010 +0000 @@ -34,6 +34,7 @@ #include #include "gl_common.h" #include "csputils.h" +#include "aspect.h" void (GLAPIENTRY *mpglBegin)(GLenum); void (GLAPIENTRY *mpglEnd)(void); @@ -1887,10 +1888,21 @@ return 0; } +static void dummy_update_xinerama_info(void) { + if (vo_screenwidth <= 0 || vo_screenheight <= 0) { + mp_msg(MSGT_VO, MSGL_ERR, "You must specify the screen dimensions" + "with -screenw and -screenh\n"); + vo_screenwidth = 1280; + vo_screenheight = 768; + } + aspect_save_screenres(vo_screenwidth, vo_screenheight); +} + int init_mpglcontext(MPGLContext *ctx, enum MPGLType type) { memset(ctx, 0, sizeof(*ctx)); ctx->setGlWindow = setGlWindow_dummy; ctx->releaseGlContext = releaseGlContext_dummy; + ctx->update_xinerama_info = dummy_update_xinerama_info; ctx->check_events = dummy_check_events; ctx->type = type; switch (ctx->type) { @@ -1924,6 +1936,7 @@ ctx->setGlWindow = setGlWindow_sdl; ctx->swapGlBuffers = swapGlBuffers_sdl; ctx->check_events = sdl_check_events; + ctx->fullscreen = vo_sdl_fullscreen; return 1; #endif default: diff -r 0382f000a688 -r 5aae99fd6ca7 libvo/sdl_common.c --- a/libvo/sdl_common.c Sun Apr 25 08:40:28 2010 +0000 +++ b/libvo/sdl_common.c Sun Apr 25 09:24:30 2010 +0000 @@ -26,9 +26,34 @@ #include "input/mouse.h" #include "video_out.h" +static int old_w; +static int old_h; +static int mode_flags; + +void vo_sdl_fullscreen(void) +{ + if (vo_fs) { + vo_dwidth = old_w; + vo_dheight = old_h; + } else { + old_w = vo_dwidth; + old_h = vo_dheight; + vo_dwidth = vo_screenwidth; + vo_dheight = vo_screenheight; + } + vo_fs = !vo_fs; + sdl_set_mode(0, mode_flags); +} + int sdl_set_mode(int bpp, uint32_t flags) { - SDL_Surface *s = SDL_SetVideoMode(vo_dwidth, vo_dheight, bpp, flags); + SDL_Surface *s; + mode_flags = flags; + if (vo_fs) flags |= SDL_FULLSCREEN; + // doublebuf with opengl creates flickering + if (vo_doublebuffering && !(flags & SDL_OPENGL)) + flags |= SDL_DOUBLEBUF; + s = SDL_SetVideoMode(vo_dwidth, vo_dheight, bpp, flags); if (!s) { mp_msg(MSGT_VO, MSGL_FATAL, "SDL SetVideoMode failed: %s\n", SDL_GetError()); return -1; diff -r 0382f000a688 -r 5aae99fd6ca7 libvo/sdl_common.h --- a/libvo/sdl_common.h Sun Apr 25 08:40:28 2010 +0000 +++ b/libvo/sdl_common.h Sun Apr 25 09:24:30 2010 +0000 @@ -28,6 +28,7 @@ #include #endif +void vo_sdl_fullscreen(void); int sdl_set_mode(int bpp, uint32_t flags); int sdl_default_handle_event(SDL_Event *event);