summaryrefslogtreecommitdiffstats
path: root/libvo
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2010-02-27 18:16:41 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2010-02-27 18:16:41 +0000
commite92eaa0fd82d5824eb6a29acd7886b4331ad3087 (patch)
tree5cbabe7233c578df583d3d8fff00a746374c8341 /libvo
parent05c24134de2923762a718b4e1c31c60131d46124 (diff)
downloadmpv-e92eaa0fd82d5824eb6a29acd7886b4331ad3087.tar.bz2
mpv-e92eaa0fd82d5824eb6a29acd7886b4331ad3087.tar.xz
Only prefer -vo gl over -vo x11 if hardware acceleration is available.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30761 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r--libvo/video_out.c6
-rw-r--r--libvo/vo_gl.c38
2 files changed, 40 insertions, 4 deletions
diff --git a/libvo/video_out.c b/libvo/video_out.c
index d721e0a526..8fca2b85c2 100644
--- a/libvo/video_out.c
+++ b/libvo/video_out.c
@@ -94,6 +94,7 @@ extern vo_functions_t video_out_xover;
extern vo_functions_t video_out_xvmc;
extern vo_functions_t video_out_vdpau;
extern vo_functions_t video_out_xv;
+extern vo_functions_t video_out_gl_nosw;
extern vo_functions_t video_out_gl;
extern vo_functions_t video_out_gl2;
extern vo_functions_t video_out_matrixview;
@@ -186,14 +187,15 @@ const vo_functions_t* const video_out_drivers[] =
#ifdef CONFIG_XV
&video_out_xv,
#endif
+#ifdef CONFIG_X11
#ifdef CONFIG_GL
- &video_out_gl,
+ &video_out_gl_nosw,
#endif
-#ifdef CONFIG_X11
&video_out_x11,
&video_out_xover,
#endif
#ifdef CONFIG_GL
+ &video_out_gl,
&video_out_gl2,
#endif
#ifdef CONFIG_DGA
diff --git a/libvo/vo_gl.c b/libvo/vo_gl.c
index acf7e96891..502058ace6 100644
--- a/libvo/vo_gl.c
+++ b/libvo/vo_gl.c
@@ -47,6 +47,21 @@ static const vo_info_t info =
const LIBVO_EXTERN(gl)
+
+static const vo_info_t info_nosw =
+{
+ "X11 (OpenGL) no software rendering",
+ "gl_nosw",
+ "Arpad Gereoffy <arpi@esp-team.scene.hu>",
+ ""
+};
+static int preinit_nosw(const char *arg);
+#define info info_nosw
+#define preinit preinit_nosw
+const LIBVO_EXTERN(gl_nosw)
+#undef info
+#undef preinit
+
#ifdef CONFIG_GL_X11
static int wsGLXAttrib[] = { GLX_RGBA,
GLX_RED_SIZE,1,
@@ -444,6 +459,13 @@ static void uninitGl(void) {
err_shown = 0;
}
+static int isSoftwareGl(void)
+{
+ const char *renderer = GetString(GL_RENDERER);
+renderer = "Software Rasterizer";
+ return strcmp(renderer, "Software Rasterizer") == 0;
+}
+
static void autodetectGlExtensions(void) {
const char *extensions = GetString(GL_EXTENSIONS);
const char *vendor = GetString(GL_VENDOR);
@@ -1052,7 +1074,7 @@ static const opt_t subopts[] = {
{NULL}
};
-static int preinit(const char *arg)
+static int preinit_internal(const char *arg, int allow_sw)
{
enum MPGLType gltype = GLTYPE_X11;
// set defaults
@@ -1161,11 +1183,13 @@ static int preinit(const char *arg)
}
if (!init_mpglcontext(&glctx, gltype))
goto err_out;
- if (use_yuv == -1) {
+ if (use_yuv == -1 || !allow_sw) {
if (create_window(320, 200, VOFLAG_HIDDEN, NULL) < 0)
goto err_out;
if (glctx.setGlWindow(&glctx) == SET_WINDOW_FAILED)
goto err_out;
+ if (!allow_sw && isSoftwareGl())
+ goto err_out;
autodetectGlExtensions();
}
if (many_fmts)
@@ -1181,6 +1205,16 @@ err_out:
return -1;
}
+static int preinit(const char *arg)
+{
+ return preinit_internal(arg, 1);
+}
+
+static int preinit_nosw(const char *arg)
+{
+ return preinit_internal(arg, 0);
+}
+
static const struct {
const char *name;
int *value;