diff options
author | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2010-04-25 09:24:30 +0000 |
---|---|---|
committer | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2010-04-25 09:24:30 +0000 |
commit | 25b9185f17ea8ebb0cf167362ae9fed4d96165c2 (patch) | |
tree | 203128fc9a8eb31b163fdafc7084cd74e775adb8 | |
parent | 8b8fd879ac48ee1472facc04ac4daeaeff48c18f (diff) | |
download | mpv-25b9185f17ea8ebb0cf167362ae9fed4d96165c2.tar.bz2 mpv-25b9185f17ea8ebb0cf167362ae9fed4d96165c2.tar.xz |
Fullscreen support for -vo gl using SDL.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31077 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r-- | libvo/gl_common.c | 13 | ||||
-rw-r--r-- | libvo/sdl_common.c | 27 | ||||
-rw-r--r-- | libvo/sdl_common.h | 1 |
3 files changed, 40 insertions, 1 deletions
diff --git a/libvo/gl_common.c b/libvo/gl_common.c index 0df3a16abc..3de2e5450c 100644 --- a/libvo/gl_common.c +++ b/libvo/gl_common.c @@ -34,6 +34,7 @@ #include <math.h> #include "gl_common.h" #include "csputils.h" +#include "aspect.h" void (GLAPIENTRY *mpglBegin)(GLenum); void (GLAPIENTRY *mpglEnd)(void); @@ -1887,10 +1888,21 @@ static int dummy_check_events(void) { 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 @@ int init_mpglcontext(MPGLContext *ctx, enum MPGLType type) { ctx->setGlWindow = setGlWindow_sdl; ctx->swapGlBuffers = swapGlBuffers_sdl; ctx->check_events = sdl_check_events; + ctx->fullscreen = vo_sdl_fullscreen; return 1; #endif default: diff --git a/libvo/sdl_common.c b/libvo/sdl_common.c index 4ef83a7e24..d45382698b 100644 --- a/libvo/sdl_common.c +++ b/libvo/sdl_common.c @@ -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 --git a/libvo/sdl_common.h b/libvo/sdl_common.h index 7f4112276e..a0fa956db9 100644 --- a/libvo/sdl_common.h +++ b/libvo/sdl_common.h @@ -28,6 +28,7 @@ #include <SDL.h> #endif +void vo_sdl_fullscreen(void); int sdl_set_mode(int bpp, uint32_t flags); int sdl_default_handle_event(SDL_Event *event); |