summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libvo/gl_common.c4
-rw-r--r--libvo/sdl_common.c24
-rw-r--r--libvo/sdl_common.h2
-rw-r--r--libvo/vo_sdl.c20
4 files changed, 30 insertions, 20 deletions
diff --git a/libvo/gl_common.c b/libvo/gl_common.c
index 3de2e5450c..c37172b382 100644
--- a/libvo/gl_common.c
+++ b/libvo/gl_common.c
@@ -1937,7 +1937,7 @@ int init_mpglcontext(MPGLContext *ctx, enum MPGLType type) {
ctx->swapGlBuffers = swapGlBuffers_sdl;
ctx->check_events = sdl_check_events;
ctx->fullscreen = vo_sdl_fullscreen;
- return 1;
+ return vo_sdl_init();
#endif
default:
return 0;
@@ -1959,7 +1959,7 @@ void uninit_mpglcontext(MPGLContext *ctx) {
#endif
#ifdef CONFIG_GL_SDL
case GLTYPE_SDL:
- SDL_QuitSubSystem(SDL_INIT_VIDEO);
+ vo_sdl_uninit();
break;
#endif
}
diff --git a/libvo/sdl_common.c b/libvo/sdl_common.c
index d45382698b..6d1944db8c 100644
--- a/libvo/sdl_common.c
+++ b/libvo/sdl_common.c
@@ -30,6 +30,30 @@ static int old_w;
static int old_h;
static int mode_flags;
+int vo_sdl_init(void)
+{
+ if (!SDL_WasInit(SDL_INIT_VIDEO) &&
+ SDL_Init(SDL_INIT_VIDEO|SDL_INIT_NOPARACHUTE) < 0)
+ return 0;
+
+ // Setup Keyrepeats (500/30 are defaults)
+ SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, 100 /*SDL_DEFAULT_REPEAT_INTERVAL*/);
+
+ // We don't want those in our event queue.
+ SDL_EventState(SDL_ACTIVEEVENT, SDL_IGNORE);
+ SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
+ SDL_EventState(SDL_SYSWMEVENT, SDL_IGNORE);
+ SDL_EventState(SDL_USEREVENT, SDL_IGNORE);
+
+ return 1;
+}
+
+void vo_sdl_uninit(void)
+{
+ if (SDL_WasInit(SDL_INIT_VIDEO))
+ SDL_QuitSubSystem(SDL_INIT_VIDEO);
+}
+
void vo_sdl_fullscreen(void)
{
if (vo_fs) {
diff --git a/libvo/sdl_common.h b/libvo/sdl_common.h
index a0fa956db9..be9e254b31 100644
--- a/libvo/sdl_common.h
+++ b/libvo/sdl_common.h
@@ -28,6 +28,8 @@
#include <SDL.h>
#endif
+int vo_sdl_init(void);
+void vo_sdl_uninit(void);
void vo_sdl_fullscreen(void);
int sdl_set_mode(int bpp, uint32_t flags);
int sdl_default_handle_event(SDL_Event *event);
diff --git a/libvo/vo_sdl.c b/libvo/vo_sdl.c
index 913ff03533..dbf634934e 100644
--- a/libvo/vo_sdl.c
+++ b/libvo/vo_sdl.c
@@ -397,9 +397,6 @@ static int sdl_open (void *plugin, void *name)
priv->sdlflags |= SDL_DOUBLEBUF;
#endif
- /* Setup Keyrepeats (500/30 are defaults) */
- SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, 100 /*SDL_DEFAULT_REPEAT_INTERVAL*/);
-
/* get information about the graphics adapter */
vidInfo = SDL_GetVideoInfo ();
@@ -444,16 +441,6 @@ static int sdl_open (void *plugin, void *name)
priv->bpp = 16;
}
- /* We don't want those in our event queue.
- * We use SDL_KEYUP cause SDL_KEYDOWN seems to cause problems
- * with keys need to be pressed twice, to be recognized.
- */
- SDL_EventState(SDL_ACTIVEEVENT, SDL_IGNORE);
- SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
-// SDL_EventState(SDL_QUIT, SDL_IGNORE);
- SDL_EventState(SDL_SYSWMEVENT, SDL_IGNORE);
- SDL_EventState(SDL_USEREVENT, SDL_IGNORE);
-
/* Success! */
return 0;
}
@@ -1407,8 +1394,7 @@ uninit(void)
sdl_close();
/* Cleanup SDL */
- if(SDL_WasInit(SDL_INIT_VIDEO))
- SDL_QuitSubSystem(SDL_INIT_VIDEO);
+ vo_sdl_uninit();
mp_msg(MSGT_VO,MSGL_DBG3, "SDL: Closed Plugin\n");
@@ -1458,12 +1444,10 @@ static int preinit(const char *arg)
priv->bpp = 0;
/* initialize the SDL Video system */
- if (!SDL_WasInit(SDL_INIT_VIDEO)) {
- if (SDL_Init (SDL_INIT_VIDEO|SDL_INIT_NOPARACHUTE)) {
+ if (!vo_sdl_init()) {
mp_msg(MSGT_VO,MSGL_ERR, MSGTR_LIBVO_SDL_InitializationFailed, SDL_GetError());
return -1;
- }
}
SDL_VideoDriverName(priv->driver, 8);