Date: Friday, October 20, 2017 @ 19:06:47 Author: eworm Revision: 263751
archrelease: copy trunk to community-i686, community-x86_64 Added: mpv/repos/community-i686/0001-opengl-backend-support-multiple-backends.patch (from rev 263750, mpv/trunk/0001-opengl-backend-support-multiple-backends.patch) mpv/repos/community-i686/PKGBUILD (from rev 263750, mpv/trunk/PKGBUILD) mpv/repos/community-x86_64/0001-opengl-backend-support-multiple-backends.patch (from rev 263750, mpv/trunk/0001-opengl-backend-support-multiple-backends.patch) mpv/repos/community-x86_64/PKGBUILD (from rev 263750, mpv/trunk/PKGBUILD) Deleted: mpv/repos/community-i686/0001-opengl-backend-support-multiple-backends.patch mpv/repos/community-i686/PKGBUILD mpv/repos/community-x86_64/0001-opengl-backend-support-multiple-backends.patch mpv/repos/community-x86_64/PKGBUILD ----------------------------------------------------------------------+ /0001-opengl-backend-support-multiple-backends.patch | 582 ++++++++++ /PKGBUILD | 126 ++ community-i686/0001-opengl-backend-support-multiple-backends.patch | 291 ----- community-i686/PKGBUILD | 63 - community-x86_64/0001-opengl-backend-support-multiple-backends.patch | 291 ----- community-x86_64/PKGBUILD | 63 - 6 files changed, 708 insertions(+), 708 deletions(-) Deleted: community-i686/0001-opengl-backend-support-multiple-backends.patch =================================================================== --- community-i686/0001-opengl-backend-support-multiple-backends.patch 2017-10-20 19:06:32 UTC (rev 263750) +++ community-i686/0001-opengl-backend-support-multiple-backends.patch 2017-10-20 19:06:47 UTC (rev 263751) @@ -1,291 +0,0 @@ -From 9c397af0dabfff7177bcb76409af5b8f9ae608cf Mon Sep 17 00:00:00 2001 -From: Drew DeVault <s...@cmpwn.com> -Date: Thu, 27 Apr 2017 17:19:58 -0400 -Subject: [PATCH 1/4] --opengl-backend: support multiple backends - -Will attempt each backend specified in order. The x11 backend is still -preferred, even on Wayland, but the user can now use ---opengl-backend=wayland,x11 to prefer wayland and fall back to x11 if -wayland is unavailable. ---- - video/out/opengl/context.c | 66 +++++++++++++++++++++++++++++++++++++++++----- - video/out/opengl/context.h | 8 ++---- - video/out/vo_opengl.c | 7 +++-- - 3 files changed, 64 insertions(+), 17 deletions(-) - -diff --git a/video/out/opengl/context.c b/video/out/opengl/context.c -index 72311e11fa..568bb662b8 100644 ---- a/video/out/opengl/context.c -+++ b/video/out/opengl/context.c -@@ -89,6 +89,30 @@ static const struct mpgl_driver *const backends[] = { - #endif - }; - -+static bool get_desc(struct m_obj_desc *dst, int index) -+{ -+ if (index >= MP_ARRAY_SIZE(backends) - 1) -+ return false; -+ const struct mpgl_driver *driver = backends[index]; -+ *dst = (struct m_obj_desc) { -+ .name = driver->name, -+ .description = driver->name, -+ .priv_size = sizeof(struct mpgl_driver), -+ .p = driver, -+ }; -+ return true; -+} -+ -+// for backend option -+const struct m_obj_list mpgl_backend_list = { -+ .get_desc = get_desc, -+ .description = "OpenGL windowing backends", -+ .allow_unknown_entries = true, -+ .allow_disable_entries = true, -+ .allow_trailer = true, -+ .disallow_positional_parameters = true, -+}; -+ - // 0-terminated list of desktop GL versions a backend should try to - // initialize. The first entry is the most preferred version. - const int mpgl_preferred_gl_versions[] = { -@@ -100,7 +124,7 @@ const int mpgl_preferred_gl_versions[] = { - 0 - }; - --int mpgl_find_backend(const char *name) -+static int mpgl_find_backend(const char *name) - { - if (name == NULL || strcmp(name, "auto") == 0) - return -1; -@@ -126,7 +150,7 @@ int mpgl_validate_backend_opt(struct mp_log *log, const struct m_option *opt, - return mpgl_find_backend(s) >= -1 ? 1 : M_OPT_INVALID; - } - --static void *get_native_display(void *pctx, const char *name) -+static void *get_native_display(const char *name) - { - MPGLContext *ctx = pctx; - if (!ctx->native_display_type || !name) -@@ -186,11 +210,41 @@ cleanup: - - // Create a VO window and create a GL context on it. - // vo_flags: passed to the backend's create window function --MPGLContext *mpgl_init(struct vo *vo, const char *backend_name, int vo_flags) -+MPGLContext *mpgl_init(struct vo *vo, struct m_obj_settings *backend_list, int vo_flags) - { - MPGLContext *ctx = NULL; -- int index = mpgl_find_backend(backend_name); -- if (index == -1) { -+ if (backend_list && backend_list[0].name) { -+ int n; -+ for (n = 0; backend_list[n].name; n++) { -+ // Something like "--opengl-backend=name," allows fallback to autoprobing. -+ int index = mpgl_find_backend(backend_list[n].name); -+ if (index == -1 || strlen(backend_list[n].name) == 0) -+ goto autoprobe; -+ if (index == -2) { -+ MP_FATAL(vo, "Unknown opengl backend '%s'\n", backend_list[n].name); -+ exit(-2); -+ return NULL; -+ } -+ ctx = init_backend(vo, backends[index], true, vo_flags); -+ if (ctx) -+ break; -+ } -+ if (!ctx && !vo->probing) { -+ // Now try with probing off -+ for (n = 0; backend_list[n].name; n++) { -+ int index = mpgl_find_backend(backend_list[n].name); -+ ctx = init_backend(vo, backends[index], false, vo_flags); -+ if (ctx) -+ break; -+ } -+ if (!ctx) { -+ // Backend explicitly requested, but unable to fulfill -+ return NULL; -+ } -+ } -+ } -+ if (!ctx) { -+autoprobe: - for (int n = 0; n < MP_ARRAY_SIZE(backends); n++) { - ctx = init_backend(vo, backends[n], true, vo_flags); - if (ctx) -@@ -204,8 +258,6 @@ MPGLContext *mpgl_init(struct vo *vo, const char *backend_name, int vo_flags) - break; - } - } -- } else if (index >= 0) { -- ctx = init_backend(vo, backends[index], false, vo_flags); - } - return ctx; - } -diff --git a/video/out/opengl/context.h b/video/out/opengl/context.h -index 229c5ef54f..7cf439c1a0 100644 ---- a/video/out/opengl/context.h -+++ b/video/out/opengl/context.h -@@ -100,17 +100,13 @@ typedef struct MPGLContext { - void *priv; - } MPGLContext; - --MPGLContext *mpgl_init(struct vo *vo, const char *backend_name, int vo_flags); -+MPGLContext *mpgl_init(struct vo *vo, struct m_obj_settings *backend_list, int vo_flags); - void mpgl_uninit(MPGLContext *ctx); - int mpgl_reconfig_window(struct MPGLContext *ctx); - int mpgl_control(struct MPGLContext *ctx, int *events, int request, void *arg); - void mpgl_start_frame(struct MPGLContext *ctx); - void mpgl_swap_buffers(struct MPGLContext *ctx); - --int mpgl_find_backend(const char *name); -- --struct m_option; --int mpgl_validate_backend_opt(struct mp_log *log, const struct m_option *opt, -- struct bstr name, struct bstr param); -+extern const struct m_obj_list mpgl_backend_list; - - #endif -diff --git a/video/out/vo_opengl.c b/video/out/vo_opengl.c -index 9b3f944e21..91e55b3b2f 100644 ---- a/video/out/vo_opengl.c -+++ b/video/out/vo_opengl.c -@@ -55,7 +55,7 @@ struct vo_opengl_opts { - int allow_sw; - int swap_interval; - int vsync_fences; -- char *backend; -+ struct m_obj_settings *backend_list; - int es; - int pattern[2]; - }; -@@ -383,7 +383,7 @@ static int preinit(struct vo *vo) - if (p->opts.allow_sw) - vo_flags |= VOFLAG_SW; - -- p->glctx = mpgl_init(vo, p->opts.backend, vo_flags); -+ p->glctx = mpgl_init(vo, p->opts.backend_list, vo_flags); - if (!p->glctx) - goto err_out; - p->gl = p->glctx->gl; -@@ -438,8 +438,7 @@ const struct vo_driver video_out_opengl = { - OPT_FLAG("opengl-waitvsync", opts.waitvsync, 0), - OPT_INT("opengl-swapinterval", opts.swap_interval, 0), - OPT_FLAG("opengl-debug", opts.use_gl_debug, 0), -- OPT_STRING_VALIDATE("opengl-backend", opts.backend, 0, -- mpgl_validate_backend_opt), -+ OPT_SETTINGSLIST("opengl-backend", opts.backend_list, 0, &mpgl_backend_list ), - OPT_FLAG("opengl-sw", opts.allow_sw, 0), - OPT_CHOICE("opengl-es", opts.es, 0, ({"no", -1}, {"auto", 0}, - {"yes", 1}, {"force2", 2})), -From 4e89fae50f70d065ff8ffee40aa8dffe8131210e Mon Sep 17 00:00:00 2001 -From: Drew DeVault <s...@cmpwn.com> -Date: Thu, 27 Apr 2017 17:51:39 -0400 -Subject: [PATCH 2/4] Update mpv.1 ---- - DOCS/man/options.rst | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst -index 925c501881..5d57720e3d 100644 ---- a/DOCS/man/options.rst -+++ b/DOCS/man/options.rst -@@ -4480,9 +4480,10 @@ The following video options are currently all specific to ``--vo=opengl`` and - Continue even if a software renderer is detected. - - ``--opengl-backend=<sys>`` -- The value ``auto`` (the default) selects the windowing backend. You can -- also pass ``help`` to get a complete list of compiled in backends (sorted -- by autoprobe order). -+ Specify a priority list of windowing backends to use with OpenGL. The value -+ ``auto`` (the default) automatically probes for the most suitable backend. -+ You can also pass ``help`` to get a complete list of compiled in backends -+ (sorted by autoprobe order). - - auto - auto-select (default) -From 3fb437fa09ebf20635c02f41ce0e3d13423d1454 Mon Sep 17 00:00:00 2001 -From: Drew DeVault <s...@cmpwn.com> -Date: Thu, 27 Apr 2017 20:12:51 -0400 -Subject: [PATCH 3/4] Let options handle invalid backends ---- - video/out/opengl/context.c | 17 +++++++++-------- - 1 file changed, 9 insertions(+), 8 deletions(-) - -diff --git a/video/out/opengl/context.c b/video/out/opengl/context.c -index 568bb662b8..8aa44b67cc 100644 ---- a/video/out/opengl/context.c -+++ b/video/out/opengl/context.c -@@ -91,6 +91,14 @@ static const struct mpgl_driver *const backends[] = { - - static bool get_desc(struct m_obj_desc *dst, int index) - { -+ if (index == 0) { -+ *dst = (struct m_obj_desc) { -+ .name = "auto", -+ .description = "automatically select most suitable backend" -+ }; -+ return true; -+ } -+ index--; - if (index >= MP_ARRAY_SIZE(backends) - 1) - return false; - const struct mpgl_driver *driver = backends[index]; -@@ -107,8 +115,6 @@ static bool get_desc(struct m_obj_desc *dst, int index) - const struct m_obj_list mpgl_backend_list = { - .get_desc = get_desc, - .description = "OpenGL windowing backends", -- .allow_unknown_entries = true, -- .allow_disable_entries = true, - .allow_trailer = true, - .disallow_positional_parameters = true, - }; -@@ -218,13 +224,8 @@ MPGLContext *mpgl_init(struct vo *vo, struct m_obj_settings *backend_list, int v - for (n = 0; backend_list[n].name; n++) { - // Something like "--opengl-backend=name," allows fallback to autoprobing. - int index = mpgl_find_backend(backend_list[n].name); -- if (index == -1 || strlen(backend_list[n].name) == 0) -+ if (index < 0 || strlen(backend_list[n].name) == 0) - goto autoprobe; -- if (index == -2) { -- MP_FATAL(vo, "Unknown opengl backend '%s'\n", backend_list[n].name); -- exit(-2); -- return NULL; -- } - ctx = init_backend(vo, backends[index], true, vo_flags); - if (ctx) - break; -From 605785c4846ecaa969309f7fb63cfba59751ba61 Mon Sep 17 00:00:00 2001 -From: Drew DeVault <s...@cmpwn.com> -Date: Fri, 26 May 2017 15:31:24 -0400 -Subject: [PATCH 4/4] Updates following HEAD ---- - video/out/opengl/context.c | 17 +---------------- - 1 file changed, 1 insertion(+), 16 deletions(-) - -diff --git a/video/out/opengl/context.c b/video/out/opengl/context.c -index 8aa44b67cc..4cc0829c90 100644 ---- a/video/out/opengl/context.c -+++ b/video/out/opengl/context.c -@@ -141,22 +141,7 @@ static int mpgl_find_backend(const char *name) - return -2; - } - --int mpgl_validate_backend_opt(struct mp_log *log, const struct m_option *opt, -- struct bstr name, struct bstr param) --{ -- if (bstr_equals0(param, "help")) { -- mp_info(log, "OpenGL windowing backends:\n"); -- mp_info(log, " auto (autodetect)\n"); -- for (int n = 0; n < MP_ARRAY_SIZE(backends); n++) -- mp_info(log, " %s\n", backends[n]->name); -- return M_OPT_EXIT; -- } -- char s[20]; -- snprintf(s, sizeof(s), "%.*s", BSTR_P(param)); -- return mpgl_find_backend(s) >= -1 ? 1 : M_OPT_INVALID; --} -- --static void *get_native_display(const char *name) -+static void *get_native_display(void *pctx, const char *name) - { - MPGLContext *ctx = pctx; - if (!ctx->native_display_type || !name) Copied: mpv/repos/community-i686/0001-opengl-backend-support-multiple-backends.patch (from rev 263750, mpv/trunk/0001-opengl-backend-support-multiple-backends.patch) =================================================================== --- community-i686/0001-opengl-backend-support-multiple-backends.patch (rev 0) +++ community-i686/0001-opengl-backend-support-multiple-backends.patch 2017-10-20 19:06:47 UTC (rev 263751) @@ -0,0 +1,291 @@ +From 9c397af0dabfff7177bcb76409af5b8f9ae608cf Mon Sep 17 00:00:00 2001 +From: Drew DeVault <s...@cmpwn.com> +Date: Thu, 27 Apr 2017 17:19:58 -0400 +Subject: [PATCH 1/4] --opengl-backend: support multiple backends + +Will attempt each backend specified in order. The x11 backend is still +preferred, even on Wayland, but the user can now use +--opengl-backend=wayland,x11 to prefer wayland and fall back to x11 if +wayland is unavailable. +--- + video/out/opengl/context.c | 66 +++++++++++++++++++++++++++++++++++++++++----- + video/out/opengl/context.h | 8 ++---- + video/out/vo_opengl.c | 7 +++-- + 3 files changed, 64 insertions(+), 17 deletions(-) + +diff --git a/video/out/opengl/context.c b/video/out/opengl/context.c +index 72311e11fa..568bb662b8 100644 +--- a/video/out/opengl/context.c ++++ b/video/out/opengl/context.c +@@ -89,6 +89,30 @@ static const struct mpgl_driver *const backends[] = { + #endif + }; + ++static bool get_desc(struct m_obj_desc *dst, int index) ++{ ++ if (index >= MP_ARRAY_SIZE(backends) - 1) ++ return false; ++ const struct mpgl_driver *driver = backends[index]; ++ *dst = (struct m_obj_desc) { ++ .name = driver->name, ++ .description = driver->name, ++ .priv_size = sizeof(struct mpgl_driver), ++ .p = driver, ++ }; ++ return true; ++} ++ ++// for backend option ++const struct m_obj_list mpgl_backend_list = { ++ .get_desc = get_desc, ++ .description = "OpenGL windowing backends", ++ .allow_unknown_entries = true, ++ .allow_disable_entries = true, ++ .allow_trailer = true, ++ .disallow_positional_parameters = true, ++}; ++ + // 0-terminated list of desktop GL versions a backend should try to + // initialize. The first entry is the most preferred version. + const int mpgl_preferred_gl_versions[] = { +@@ -100,7 +124,7 @@ const int mpgl_preferred_gl_versions[] = { + 0 + }; + +-int mpgl_find_backend(const char *name) ++static int mpgl_find_backend(const char *name) + { + if (name == NULL || strcmp(name, "auto") == 0) + return -1; +@@ -126,7 +150,7 @@ int mpgl_validate_backend_opt(struct mp_log *log, const struct m_option *opt, + return mpgl_find_backend(s) >= -1 ? 1 : M_OPT_INVALID; + } + +-static void *get_native_display(void *pctx, const char *name) ++static void *get_native_display(const char *name) + { + MPGLContext *ctx = pctx; + if (!ctx->native_display_type || !name) +@@ -186,11 +210,41 @@ cleanup: + + // Create a VO window and create a GL context on it. + // vo_flags: passed to the backend's create window function +-MPGLContext *mpgl_init(struct vo *vo, const char *backend_name, int vo_flags) ++MPGLContext *mpgl_init(struct vo *vo, struct m_obj_settings *backend_list, int vo_flags) + { + MPGLContext *ctx = NULL; +- int index = mpgl_find_backend(backend_name); +- if (index == -1) { ++ if (backend_list && backend_list[0].name) { ++ int n; ++ for (n = 0; backend_list[n].name; n++) { ++ // Something like "--opengl-backend=name," allows fallback to autoprobing. ++ int index = mpgl_find_backend(backend_list[n].name); ++ if (index == -1 || strlen(backend_list[n].name) == 0) ++ goto autoprobe; ++ if (index == -2) { ++ MP_FATAL(vo, "Unknown opengl backend '%s'\n", backend_list[n].name); ++ exit(-2); ++ return NULL; ++ } ++ ctx = init_backend(vo, backends[index], true, vo_flags); ++ if (ctx) ++ break; ++ } ++ if (!ctx && !vo->probing) { ++ // Now try with probing off ++ for (n = 0; backend_list[n].name; n++) { ++ int index = mpgl_find_backend(backend_list[n].name); ++ ctx = init_backend(vo, backends[index], false, vo_flags); ++ if (ctx) ++ break; ++ } ++ if (!ctx) { ++ // Backend explicitly requested, but unable to fulfill ++ return NULL; ++ } ++ } ++ } ++ if (!ctx) { ++autoprobe: + for (int n = 0; n < MP_ARRAY_SIZE(backends); n++) { + ctx = init_backend(vo, backends[n], true, vo_flags); + if (ctx) +@@ -204,8 +258,6 @@ MPGLContext *mpgl_init(struct vo *vo, const char *backend_name, int vo_flags) + break; + } + } +- } else if (index >= 0) { +- ctx = init_backend(vo, backends[index], false, vo_flags); + } + return ctx; + } +diff --git a/video/out/opengl/context.h b/video/out/opengl/context.h +index 229c5ef54f..7cf439c1a0 100644 +--- a/video/out/opengl/context.h ++++ b/video/out/opengl/context.h +@@ -100,17 +100,13 @@ typedef struct MPGLContext { + void *priv; + } MPGLContext; + +-MPGLContext *mpgl_init(struct vo *vo, const char *backend_name, int vo_flags); ++MPGLContext *mpgl_init(struct vo *vo, struct m_obj_settings *backend_list, int vo_flags); + void mpgl_uninit(MPGLContext *ctx); + int mpgl_reconfig_window(struct MPGLContext *ctx); + int mpgl_control(struct MPGLContext *ctx, int *events, int request, void *arg); + void mpgl_start_frame(struct MPGLContext *ctx); + void mpgl_swap_buffers(struct MPGLContext *ctx); + +-int mpgl_find_backend(const char *name); +- +-struct m_option; +-int mpgl_validate_backend_opt(struct mp_log *log, const struct m_option *opt, +- struct bstr name, struct bstr param); ++extern const struct m_obj_list mpgl_backend_list; + + #endif +diff --git a/video/out/vo_opengl.c b/video/out/vo_opengl.c +index 9b3f944e21..91e55b3b2f 100644 +--- a/video/out/vo_opengl.c ++++ b/video/out/vo_opengl.c +@@ -55,7 +55,7 @@ struct vo_opengl_opts { + int allow_sw; + int swap_interval; + int vsync_fences; +- char *backend; ++ struct m_obj_settings *backend_list; + int es; + int pattern[2]; + }; +@@ -383,7 +383,7 @@ static int preinit(struct vo *vo) + if (p->opts.allow_sw) + vo_flags |= VOFLAG_SW; + +- p->glctx = mpgl_init(vo, p->opts.backend, vo_flags); ++ p->glctx = mpgl_init(vo, p->opts.backend_list, vo_flags); + if (!p->glctx) + goto err_out; + p->gl = p->glctx->gl; +@@ -438,8 +438,7 @@ const struct vo_driver video_out_opengl = { + OPT_FLAG("opengl-waitvsync", opts.waitvsync, 0), + OPT_INT("opengl-swapinterval", opts.swap_interval, 0), + OPT_FLAG("opengl-debug", opts.use_gl_debug, 0), +- OPT_STRING_VALIDATE("opengl-backend", opts.backend, 0, +- mpgl_validate_backend_opt), ++ OPT_SETTINGSLIST("opengl-backend", opts.backend_list, 0, &mpgl_backend_list ), + OPT_FLAG("opengl-sw", opts.allow_sw, 0), + OPT_CHOICE("opengl-es", opts.es, 0, ({"no", -1}, {"auto", 0}, + {"yes", 1}, {"force2", 2})), +From 4e89fae50f70d065ff8ffee40aa8dffe8131210e Mon Sep 17 00:00:00 2001 +From: Drew DeVault <s...@cmpwn.com> +Date: Thu, 27 Apr 2017 17:51:39 -0400 +Subject: [PATCH 2/4] Update mpv.1 +--- + DOCS/man/options.rst | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst +index 925c501881..5d57720e3d 100644 +--- a/DOCS/man/options.rst ++++ b/DOCS/man/options.rst +@@ -4480,9 +4480,10 @@ The following video options are currently all specific to ``--vo=opengl`` and + Continue even if a software renderer is detected. + + ``--opengl-backend=<sys>`` +- The value ``auto`` (the default) selects the windowing backend. You can +- also pass ``help`` to get a complete list of compiled in backends (sorted +- by autoprobe order). ++ Specify a priority list of windowing backends to use with OpenGL. The value ++ ``auto`` (the default) automatically probes for the most suitable backend. ++ You can also pass ``help`` to get a complete list of compiled in backends ++ (sorted by autoprobe order). + + auto + auto-select (default) +From 3fb437fa09ebf20635c02f41ce0e3d13423d1454 Mon Sep 17 00:00:00 2001 +From: Drew DeVault <s...@cmpwn.com> +Date: Thu, 27 Apr 2017 20:12:51 -0400 +Subject: [PATCH 3/4] Let options handle invalid backends +--- + video/out/opengl/context.c | 17 +++++++++-------- + 1 file changed, 9 insertions(+), 8 deletions(-) + +diff --git a/video/out/opengl/context.c b/video/out/opengl/context.c +index 568bb662b8..8aa44b67cc 100644 +--- a/video/out/opengl/context.c ++++ b/video/out/opengl/context.c +@@ -91,6 +91,14 @@ static const struct mpgl_driver *const backends[] = { + + static bool get_desc(struct m_obj_desc *dst, int index) + { ++ if (index == 0) { ++ *dst = (struct m_obj_desc) { ++ .name = "auto", ++ .description = "automatically select most suitable backend" ++ }; ++ return true; ++ } ++ index--; + if (index >= MP_ARRAY_SIZE(backends) - 1) + return false; + const struct mpgl_driver *driver = backends[index]; +@@ -107,8 +115,6 @@ static bool get_desc(struct m_obj_desc *dst, int index) + const struct m_obj_list mpgl_backend_list = { + .get_desc = get_desc, + .description = "OpenGL windowing backends", +- .allow_unknown_entries = true, +- .allow_disable_entries = true, + .allow_trailer = true, + .disallow_positional_parameters = true, + }; +@@ -218,13 +224,8 @@ MPGLContext *mpgl_init(struct vo *vo, struct m_obj_settings *backend_list, int v + for (n = 0; backend_list[n].name; n++) { + // Something like "--opengl-backend=name," allows fallback to autoprobing. + int index = mpgl_find_backend(backend_list[n].name); +- if (index == -1 || strlen(backend_list[n].name) == 0) ++ if (index < 0 || strlen(backend_list[n].name) == 0) + goto autoprobe; +- if (index == -2) { +- MP_FATAL(vo, "Unknown opengl backend '%s'\n", backend_list[n].name); +- exit(-2); +- return NULL; +- } + ctx = init_backend(vo, backends[index], true, vo_flags); + if (ctx) + break; +From 605785c4846ecaa969309f7fb63cfba59751ba61 Mon Sep 17 00:00:00 2001 +From: Drew DeVault <s...@cmpwn.com> +Date: Fri, 26 May 2017 15:31:24 -0400 +Subject: [PATCH 4/4] Updates following HEAD +--- + video/out/opengl/context.c | 17 +---------------- + 1 file changed, 1 insertion(+), 16 deletions(-) + +diff --git a/video/out/opengl/context.c b/video/out/opengl/context.c +index 8aa44b67cc..4cc0829c90 100644 +--- a/video/out/opengl/context.c ++++ b/video/out/opengl/context.c +@@ -141,22 +141,7 @@ static int mpgl_find_backend(const char *name) + return -2; + } + +-int mpgl_validate_backend_opt(struct mp_log *log, const struct m_option *opt, +- struct bstr name, struct bstr param) +-{ +- if (bstr_equals0(param, "help")) { +- mp_info(log, "OpenGL windowing backends:\n"); +- mp_info(log, " auto (autodetect)\n"); +- for (int n = 0; n < MP_ARRAY_SIZE(backends); n++) +- mp_info(log, " %s\n", backends[n]->name); +- return M_OPT_EXIT; +- } +- char s[20]; +- snprintf(s, sizeof(s), "%.*s", BSTR_P(param)); +- return mpgl_find_backend(s) >= -1 ? 1 : M_OPT_INVALID; +-} +- +-static void *get_native_display(const char *name) ++static void *get_native_display(void *pctx, const char *name) + { + MPGLContext *ctx = pctx; + if (!ctx->native_display_type || !name) Deleted: community-i686/PKGBUILD =================================================================== --- community-i686/PKGBUILD 2017-10-20 19:06:32 UTC (rev 263750) +++ community-i686/PKGBUILD 2017-10-20 19:06:47 UTC (rev 263751) @@ -1,63 +0,0 @@ -# $Id$ -# Maintainer: Christian Hesse <m...@eworm.de> -# Contributor: Bartłomiej Piotrowski <bpiotrow...@archlinux.org> -# Contributor: Eivind Uggedal <eiv...@uggedal.com> - -pkgname=mpv -epoch=1 -pkgver=0.27.0 -pkgrel=1 -_waf_version=1.8.12 -pkgdesc='a free, open source, and cross-platform media player' -arch=('i686' 'x86_64') -license=('GPL') -url='http://mpv.io' -depends=( - 'ffmpeg' 'lcms2' 'libcdio-paranoia' 'libgl' 'libxss' - 'libxinerama' 'libxv' 'libxkbcommon' 'libva' 'wayland' 'libcaca' - 'desktop-file-utils' 'hicolor-icon-theme' 'xdg-utils' 'lua52' 'libdvdnav' - 'libxrandr' 'jack' 'rubberband' 'uchardet' 'libarchive' -) -makedepends=('mesa' 'python-docutils' 'ladspa') -optdepends=('youtube-dl: for video-sharing websites playback') -options=('!emptydirs') -source=("$pkgname-$pkgver.tar.gz::https://github.com/mpv-player/$pkgname/archive/v$pkgver.tar.gz" - '0001-opengl-backend-support-multiple-backends.patch' - "http://www.freehackers.org/~tnagy/release/waf-${_waf_version}") -sha256sums=('341d8bf18b75c1f78d5b681480b5b7f5c8b87d97a0d4f53a5648ede9c219a49c' - '609e0530f1b0cdb910dcffb5f62bf55936540e24105ce1b2daf1bd6291a7d58a' - '01bf2beab2106d1558800c8709bc2c8e496d3da4a2ca343fe091f22fca60c98b') - -prepare() { - cd ${pkgname}-${pkgver} - - # --opengl-backend: support multiple backends (#4384) (FS#53962) - patch -Np1 < "${srcdir}"/0001-opengl-backend-support-multiple-backends.patch - - install -m755 "${srcdir}"/waf-${_waf_version} waf -} - -build() { - cd ${pkgname}-${pkgver} - - ./waf configure --prefix=/usr \ - --confdir=/etc/mpv \ - --enable-cdda \ - --enable-dvb \ - --enable-dvdnav \ - --enable-encoding \ - --enable-libarchive \ - --enable-libmpv-shared \ - --enable-zsh-comp - - ./waf build -} - -package() { - cd ${pkgname}-${pkgver} - - ./waf install --destdir="$pkgdir" - - install -m644 DOCS/{encoding.rst,tech-overview.txt} \ - "$pkgdir"/usr/share/doc/mpv -} Copied: mpv/repos/community-i686/PKGBUILD (from rev 263750, mpv/trunk/PKGBUILD) =================================================================== --- community-i686/PKGBUILD (rev 0) +++ community-i686/PKGBUILD 2017-10-20 19:06:47 UTC (rev 263751) @@ -0,0 +1,63 @@ +# $Id$ +# Maintainer: Christian Hesse <m...@eworm.de> +# Contributor: Bartłomiej Piotrowski <bpiotrow...@archlinux.org> +# Contributor: Eivind Uggedal <eiv...@uggedal.com> + +pkgname=mpv +epoch=1 +pkgver=0.27.0 +pkgrel=2 +_waf_version=1.8.12 +pkgdesc='a free, open source, and cross-platform media player' +arch=('i686' 'x86_64') +license=('GPL') +url='http://mpv.io' +depends=( + 'ffmpeg' 'lcms2' 'libcdio-paranoia' 'libgl' 'libxss' + 'libxinerama' 'libxv' 'libxkbcommon' 'libva' 'wayland' 'libcaca' + 'desktop-file-utils' 'hicolor-icon-theme' 'xdg-utils' 'lua52' 'libdvdnav' + 'libxrandr' 'jack' 'rubberband' 'uchardet' 'libarchive' +) +makedepends=('mesa' 'python-docutils' 'ladspa') +optdepends=('youtube-dl: for video-sharing websites playback') +options=('!emptydirs') +source=("$pkgname-$pkgver.tar.gz::https://github.com/mpv-player/$pkgname/archive/v$pkgver.tar.gz" + '0001-opengl-backend-support-multiple-backends.patch' + "http://www.freehackers.org/~tnagy/release/waf-${_waf_version}") +sha256sums=('341d8bf18b75c1f78d5b681480b5b7f5c8b87d97a0d4f53a5648ede9c219a49c' + '609e0530f1b0cdb910dcffb5f62bf55936540e24105ce1b2daf1bd6291a7d58a' + '01bf2beab2106d1558800c8709bc2c8e496d3da4a2ca343fe091f22fca60c98b') + +prepare() { + cd ${pkgname}-${pkgver} + + # --opengl-backend: support multiple backends (#4384) (FS#53962) + patch -Np1 < "${srcdir}"/0001-opengl-backend-support-multiple-backends.patch + + install -m755 "${srcdir}"/waf-${_waf_version} waf +} + +build() { + cd ${pkgname}-${pkgver} + + ./waf configure --prefix=/usr \ + --confdir=/etc/mpv \ + --enable-cdda \ + --enable-dvb \ + --enable-dvdnav \ + --enable-encoding \ + --enable-libarchive \ + --enable-libmpv-shared \ + --enable-zsh-comp + + ./waf build +} + +package() { + cd ${pkgname}-${pkgver} + + ./waf install --destdir="$pkgdir" + + install -m644 DOCS/{encoding.rst,tech-overview.txt} \ + "$pkgdir"/usr/share/doc/mpv +} Deleted: community-x86_64/0001-opengl-backend-support-multiple-backends.patch =================================================================== --- community-x86_64/0001-opengl-backend-support-multiple-backends.patch 2017-10-20 19:06:32 UTC (rev 263750) +++ community-x86_64/0001-opengl-backend-support-multiple-backends.patch 2017-10-20 19:06:47 UTC (rev 263751) @@ -1,291 +0,0 @@ -From 9c397af0dabfff7177bcb76409af5b8f9ae608cf Mon Sep 17 00:00:00 2001 -From: Drew DeVault <s...@cmpwn.com> -Date: Thu, 27 Apr 2017 17:19:58 -0400 -Subject: [PATCH 1/4] --opengl-backend: support multiple backends - -Will attempt each backend specified in order. The x11 backend is still -preferred, even on Wayland, but the user can now use ---opengl-backend=wayland,x11 to prefer wayland and fall back to x11 if -wayland is unavailable. ---- - video/out/opengl/context.c | 66 +++++++++++++++++++++++++++++++++++++++++----- - video/out/opengl/context.h | 8 ++---- - video/out/vo_opengl.c | 7 +++-- - 3 files changed, 64 insertions(+), 17 deletions(-) - -diff --git a/video/out/opengl/context.c b/video/out/opengl/context.c -index 72311e11fa..568bb662b8 100644 ---- a/video/out/opengl/context.c -+++ b/video/out/opengl/context.c -@@ -89,6 +89,30 @@ static const struct mpgl_driver *const backends[] = { - #endif - }; - -+static bool get_desc(struct m_obj_desc *dst, int index) -+{ -+ if (index >= MP_ARRAY_SIZE(backends) - 1) -+ return false; -+ const struct mpgl_driver *driver = backends[index]; -+ *dst = (struct m_obj_desc) { -+ .name = driver->name, -+ .description = driver->name, -+ .priv_size = sizeof(struct mpgl_driver), -+ .p = driver, -+ }; -+ return true; -+} -+ -+// for backend option -+const struct m_obj_list mpgl_backend_list = { -+ .get_desc = get_desc, -+ .description = "OpenGL windowing backends", -+ .allow_unknown_entries = true, -+ .allow_disable_entries = true, -+ .allow_trailer = true, -+ .disallow_positional_parameters = true, -+}; -+ - // 0-terminated list of desktop GL versions a backend should try to - // initialize. The first entry is the most preferred version. - const int mpgl_preferred_gl_versions[] = { -@@ -100,7 +124,7 @@ const int mpgl_preferred_gl_versions[] = { - 0 - }; - --int mpgl_find_backend(const char *name) -+static int mpgl_find_backend(const char *name) - { - if (name == NULL || strcmp(name, "auto") == 0) - return -1; -@@ -126,7 +150,7 @@ int mpgl_validate_backend_opt(struct mp_log *log, const struct m_option *opt, - return mpgl_find_backend(s) >= -1 ? 1 : M_OPT_INVALID; - } - --static void *get_native_display(void *pctx, const char *name) -+static void *get_native_display(const char *name) - { - MPGLContext *ctx = pctx; - if (!ctx->native_display_type || !name) -@@ -186,11 +210,41 @@ cleanup: - - // Create a VO window and create a GL context on it. - // vo_flags: passed to the backend's create window function --MPGLContext *mpgl_init(struct vo *vo, const char *backend_name, int vo_flags) -+MPGLContext *mpgl_init(struct vo *vo, struct m_obj_settings *backend_list, int vo_flags) - { - MPGLContext *ctx = NULL; -- int index = mpgl_find_backend(backend_name); -- if (index == -1) { -+ if (backend_list && backend_list[0].name) { -+ int n; -+ for (n = 0; backend_list[n].name; n++) { -+ // Something like "--opengl-backend=name," allows fallback to autoprobing. -+ int index = mpgl_find_backend(backend_list[n].name); -+ if (index == -1 || strlen(backend_list[n].name) == 0) -+ goto autoprobe; -+ if (index == -2) { -+ MP_FATAL(vo, "Unknown opengl backend '%s'\n", backend_list[n].name); -+ exit(-2); -+ return NULL; -+ } -+ ctx = init_backend(vo, backends[index], true, vo_flags); -+ if (ctx) -+ break; -+ } -+ if (!ctx && !vo->probing) { -+ // Now try with probing off -+ for (n = 0; backend_list[n].name; n++) { -+ int index = mpgl_find_backend(backend_list[n].name); -+ ctx = init_backend(vo, backends[index], false, vo_flags); -+ if (ctx) -+ break; -+ } -+ if (!ctx) { -+ // Backend explicitly requested, but unable to fulfill -+ return NULL; -+ } -+ } -+ } -+ if (!ctx) { -+autoprobe: - for (int n = 0; n < MP_ARRAY_SIZE(backends); n++) { - ctx = init_backend(vo, backends[n], true, vo_flags); - if (ctx) -@@ -204,8 +258,6 @@ MPGLContext *mpgl_init(struct vo *vo, const char *backend_name, int vo_flags) - break; - } - } -- } else if (index >= 0) { -- ctx = init_backend(vo, backends[index], false, vo_flags); - } - return ctx; - } -diff --git a/video/out/opengl/context.h b/video/out/opengl/context.h -index 229c5ef54f..7cf439c1a0 100644 ---- a/video/out/opengl/context.h -+++ b/video/out/opengl/context.h -@@ -100,17 +100,13 @@ typedef struct MPGLContext { - void *priv; - } MPGLContext; - --MPGLContext *mpgl_init(struct vo *vo, const char *backend_name, int vo_flags); -+MPGLContext *mpgl_init(struct vo *vo, struct m_obj_settings *backend_list, int vo_flags); - void mpgl_uninit(MPGLContext *ctx); - int mpgl_reconfig_window(struct MPGLContext *ctx); - int mpgl_control(struct MPGLContext *ctx, int *events, int request, void *arg); - void mpgl_start_frame(struct MPGLContext *ctx); - void mpgl_swap_buffers(struct MPGLContext *ctx); - --int mpgl_find_backend(const char *name); -- --struct m_option; --int mpgl_validate_backend_opt(struct mp_log *log, const struct m_option *opt, -- struct bstr name, struct bstr param); -+extern const struct m_obj_list mpgl_backend_list; - - #endif -diff --git a/video/out/vo_opengl.c b/video/out/vo_opengl.c -index 9b3f944e21..91e55b3b2f 100644 ---- a/video/out/vo_opengl.c -+++ b/video/out/vo_opengl.c -@@ -55,7 +55,7 @@ struct vo_opengl_opts { - int allow_sw; - int swap_interval; - int vsync_fences; -- char *backend; -+ struct m_obj_settings *backend_list; - int es; - int pattern[2]; - }; -@@ -383,7 +383,7 @@ static int preinit(struct vo *vo) - if (p->opts.allow_sw) - vo_flags |= VOFLAG_SW; - -- p->glctx = mpgl_init(vo, p->opts.backend, vo_flags); -+ p->glctx = mpgl_init(vo, p->opts.backend_list, vo_flags); - if (!p->glctx) - goto err_out; - p->gl = p->glctx->gl; -@@ -438,8 +438,7 @@ const struct vo_driver video_out_opengl = { - OPT_FLAG("opengl-waitvsync", opts.waitvsync, 0), - OPT_INT("opengl-swapinterval", opts.swap_interval, 0), - OPT_FLAG("opengl-debug", opts.use_gl_debug, 0), -- OPT_STRING_VALIDATE("opengl-backend", opts.backend, 0, -- mpgl_validate_backend_opt), -+ OPT_SETTINGSLIST("opengl-backend", opts.backend_list, 0, &mpgl_backend_list ), - OPT_FLAG("opengl-sw", opts.allow_sw, 0), - OPT_CHOICE("opengl-es", opts.es, 0, ({"no", -1}, {"auto", 0}, - {"yes", 1}, {"force2", 2})), -From 4e89fae50f70d065ff8ffee40aa8dffe8131210e Mon Sep 17 00:00:00 2001 -From: Drew DeVault <s...@cmpwn.com> -Date: Thu, 27 Apr 2017 17:51:39 -0400 -Subject: [PATCH 2/4] Update mpv.1 ---- - DOCS/man/options.rst | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst -index 925c501881..5d57720e3d 100644 ---- a/DOCS/man/options.rst -+++ b/DOCS/man/options.rst -@@ -4480,9 +4480,10 @@ The following video options are currently all specific to ``--vo=opengl`` and - Continue even if a software renderer is detected. - - ``--opengl-backend=<sys>`` -- The value ``auto`` (the default) selects the windowing backend. You can -- also pass ``help`` to get a complete list of compiled in backends (sorted -- by autoprobe order). -+ Specify a priority list of windowing backends to use with OpenGL. The value -+ ``auto`` (the default) automatically probes for the most suitable backend. -+ You can also pass ``help`` to get a complete list of compiled in backends -+ (sorted by autoprobe order). - - auto - auto-select (default) -From 3fb437fa09ebf20635c02f41ce0e3d13423d1454 Mon Sep 17 00:00:00 2001 -From: Drew DeVault <s...@cmpwn.com> -Date: Thu, 27 Apr 2017 20:12:51 -0400 -Subject: [PATCH 3/4] Let options handle invalid backends ---- - video/out/opengl/context.c | 17 +++++++++-------- - 1 file changed, 9 insertions(+), 8 deletions(-) - -diff --git a/video/out/opengl/context.c b/video/out/opengl/context.c -index 568bb662b8..8aa44b67cc 100644 ---- a/video/out/opengl/context.c -+++ b/video/out/opengl/context.c -@@ -91,6 +91,14 @@ static const struct mpgl_driver *const backends[] = { - - static bool get_desc(struct m_obj_desc *dst, int index) - { -+ if (index == 0) { -+ *dst = (struct m_obj_desc) { -+ .name = "auto", -+ .description = "automatically select most suitable backend" -+ }; -+ return true; -+ } -+ index--; - if (index >= MP_ARRAY_SIZE(backends) - 1) - return false; - const struct mpgl_driver *driver = backends[index]; -@@ -107,8 +115,6 @@ static bool get_desc(struct m_obj_desc *dst, int index) - const struct m_obj_list mpgl_backend_list = { - .get_desc = get_desc, - .description = "OpenGL windowing backends", -- .allow_unknown_entries = true, -- .allow_disable_entries = true, - .allow_trailer = true, - .disallow_positional_parameters = true, - }; -@@ -218,13 +224,8 @@ MPGLContext *mpgl_init(struct vo *vo, struct m_obj_settings *backend_list, int v - for (n = 0; backend_list[n].name; n++) { - // Something like "--opengl-backend=name," allows fallback to autoprobing. - int index = mpgl_find_backend(backend_list[n].name); -- if (index == -1 || strlen(backend_list[n].name) == 0) -+ if (index < 0 || strlen(backend_list[n].name) == 0) - goto autoprobe; -- if (index == -2) { -- MP_FATAL(vo, "Unknown opengl backend '%s'\n", backend_list[n].name); -- exit(-2); -- return NULL; -- } - ctx = init_backend(vo, backends[index], true, vo_flags); - if (ctx) - break; -From 605785c4846ecaa969309f7fb63cfba59751ba61 Mon Sep 17 00:00:00 2001 -From: Drew DeVault <s...@cmpwn.com> -Date: Fri, 26 May 2017 15:31:24 -0400 -Subject: [PATCH 4/4] Updates following HEAD ---- - video/out/opengl/context.c | 17 +---------------- - 1 file changed, 1 insertion(+), 16 deletions(-) - -diff --git a/video/out/opengl/context.c b/video/out/opengl/context.c -index 8aa44b67cc..4cc0829c90 100644 ---- a/video/out/opengl/context.c -+++ b/video/out/opengl/context.c -@@ -141,22 +141,7 @@ static int mpgl_find_backend(const char *name) - return -2; - } - --int mpgl_validate_backend_opt(struct mp_log *log, const struct m_option *opt, -- struct bstr name, struct bstr param) --{ -- if (bstr_equals0(param, "help")) { -- mp_info(log, "OpenGL windowing backends:\n"); -- mp_info(log, " auto (autodetect)\n"); -- for (int n = 0; n < MP_ARRAY_SIZE(backends); n++) -- mp_info(log, " %s\n", backends[n]->name); -- return M_OPT_EXIT; -- } -- char s[20]; -- snprintf(s, sizeof(s), "%.*s", BSTR_P(param)); -- return mpgl_find_backend(s) >= -1 ? 1 : M_OPT_INVALID; --} -- --static void *get_native_display(const char *name) -+static void *get_native_display(void *pctx, const char *name) - { - MPGLContext *ctx = pctx; - if (!ctx->native_display_type || !name) Copied: mpv/repos/community-x86_64/0001-opengl-backend-support-multiple-backends.patch (from rev 263750, mpv/trunk/0001-opengl-backend-support-multiple-backends.patch) =================================================================== --- community-x86_64/0001-opengl-backend-support-multiple-backends.patch (rev 0) +++ community-x86_64/0001-opengl-backend-support-multiple-backends.patch 2017-10-20 19:06:47 UTC (rev 263751) @@ -0,0 +1,291 @@ +From 9c397af0dabfff7177bcb76409af5b8f9ae608cf Mon Sep 17 00:00:00 2001 +From: Drew DeVault <s...@cmpwn.com> +Date: Thu, 27 Apr 2017 17:19:58 -0400 +Subject: [PATCH 1/4] --opengl-backend: support multiple backends + +Will attempt each backend specified in order. The x11 backend is still +preferred, even on Wayland, but the user can now use +--opengl-backend=wayland,x11 to prefer wayland and fall back to x11 if +wayland is unavailable. +--- + video/out/opengl/context.c | 66 +++++++++++++++++++++++++++++++++++++++++----- + video/out/opengl/context.h | 8 ++---- + video/out/vo_opengl.c | 7 +++-- + 3 files changed, 64 insertions(+), 17 deletions(-) + +diff --git a/video/out/opengl/context.c b/video/out/opengl/context.c +index 72311e11fa..568bb662b8 100644 +--- a/video/out/opengl/context.c ++++ b/video/out/opengl/context.c +@@ -89,6 +89,30 @@ static const struct mpgl_driver *const backends[] = { + #endif + }; + ++static bool get_desc(struct m_obj_desc *dst, int index) ++{ ++ if (index >= MP_ARRAY_SIZE(backends) - 1) ++ return false; ++ const struct mpgl_driver *driver = backends[index]; ++ *dst = (struct m_obj_desc) { ++ .name = driver->name, ++ .description = driver->name, ++ .priv_size = sizeof(struct mpgl_driver), ++ .p = driver, ++ }; ++ return true; ++} ++ ++// for backend option ++const struct m_obj_list mpgl_backend_list = { ++ .get_desc = get_desc, ++ .description = "OpenGL windowing backends", ++ .allow_unknown_entries = true, ++ .allow_disable_entries = true, ++ .allow_trailer = true, ++ .disallow_positional_parameters = true, ++}; ++ + // 0-terminated list of desktop GL versions a backend should try to + // initialize. The first entry is the most preferred version. + const int mpgl_preferred_gl_versions[] = { +@@ -100,7 +124,7 @@ const int mpgl_preferred_gl_versions[] = { + 0 + }; + +-int mpgl_find_backend(const char *name) ++static int mpgl_find_backend(const char *name) + { + if (name == NULL || strcmp(name, "auto") == 0) + return -1; +@@ -126,7 +150,7 @@ int mpgl_validate_backend_opt(struct mp_log *log, const struct m_option *opt, + return mpgl_find_backend(s) >= -1 ? 1 : M_OPT_INVALID; + } + +-static void *get_native_display(void *pctx, const char *name) ++static void *get_native_display(const char *name) + { + MPGLContext *ctx = pctx; + if (!ctx->native_display_type || !name) +@@ -186,11 +210,41 @@ cleanup: + + // Create a VO window and create a GL context on it. + // vo_flags: passed to the backend's create window function +-MPGLContext *mpgl_init(struct vo *vo, const char *backend_name, int vo_flags) ++MPGLContext *mpgl_init(struct vo *vo, struct m_obj_settings *backend_list, int vo_flags) + { + MPGLContext *ctx = NULL; +- int index = mpgl_find_backend(backend_name); +- if (index == -1) { ++ if (backend_list && backend_list[0].name) { ++ int n; ++ for (n = 0; backend_list[n].name; n++) { ++ // Something like "--opengl-backend=name," allows fallback to autoprobing. ++ int index = mpgl_find_backend(backend_list[n].name); ++ if (index == -1 || strlen(backend_list[n].name) == 0) ++ goto autoprobe; ++ if (index == -2) { ++ MP_FATAL(vo, "Unknown opengl backend '%s'\n", backend_list[n].name); ++ exit(-2); ++ return NULL; ++ } ++ ctx = init_backend(vo, backends[index], true, vo_flags); ++ if (ctx) ++ break; ++ } ++ if (!ctx && !vo->probing) { ++ // Now try with probing off ++ for (n = 0; backend_list[n].name; n++) { ++ int index = mpgl_find_backend(backend_list[n].name); ++ ctx = init_backend(vo, backends[index], false, vo_flags); ++ if (ctx) ++ break; ++ } ++ if (!ctx) { ++ // Backend explicitly requested, but unable to fulfill ++ return NULL; ++ } ++ } ++ } ++ if (!ctx) { ++autoprobe: + for (int n = 0; n < MP_ARRAY_SIZE(backends); n++) { + ctx = init_backend(vo, backends[n], true, vo_flags); + if (ctx) +@@ -204,8 +258,6 @@ MPGLContext *mpgl_init(struct vo *vo, const char *backend_name, int vo_flags) + break; + } + } +- } else if (index >= 0) { +- ctx = init_backend(vo, backends[index], false, vo_flags); + } + return ctx; + } +diff --git a/video/out/opengl/context.h b/video/out/opengl/context.h +index 229c5ef54f..7cf439c1a0 100644 +--- a/video/out/opengl/context.h ++++ b/video/out/opengl/context.h +@@ -100,17 +100,13 @@ typedef struct MPGLContext { + void *priv; + } MPGLContext; + +-MPGLContext *mpgl_init(struct vo *vo, const char *backend_name, int vo_flags); ++MPGLContext *mpgl_init(struct vo *vo, struct m_obj_settings *backend_list, int vo_flags); + void mpgl_uninit(MPGLContext *ctx); + int mpgl_reconfig_window(struct MPGLContext *ctx); + int mpgl_control(struct MPGLContext *ctx, int *events, int request, void *arg); + void mpgl_start_frame(struct MPGLContext *ctx); + void mpgl_swap_buffers(struct MPGLContext *ctx); + +-int mpgl_find_backend(const char *name); +- +-struct m_option; +-int mpgl_validate_backend_opt(struct mp_log *log, const struct m_option *opt, +- struct bstr name, struct bstr param); ++extern const struct m_obj_list mpgl_backend_list; + + #endif +diff --git a/video/out/vo_opengl.c b/video/out/vo_opengl.c +index 9b3f944e21..91e55b3b2f 100644 +--- a/video/out/vo_opengl.c ++++ b/video/out/vo_opengl.c +@@ -55,7 +55,7 @@ struct vo_opengl_opts { + int allow_sw; + int swap_interval; + int vsync_fences; +- char *backend; ++ struct m_obj_settings *backend_list; + int es; + int pattern[2]; + }; +@@ -383,7 +383,7 @@ static int preinit(struct vo *vo) + if (p->opts.allow_sw) + vo_flags |= VOFLAG_SW; + +- p->glctx = mpgl_init(vo, p->opts.backend, vo_flags); ++ p->glctx = mpgl_init(vo, p->opts.backend_list, vo_flags); + if (!p->glctx) + goto err_out; + p->gl = p->glctx->gl; +@@ -438,8 +438,7 @@ const struct vo_driver video_out_opengl = { + OPT_FLAG("opengl-waitvsync", opts.waitvsync, 0), + OPT_INT("opengl-swapinterval", opts.swap_interval, 0), + OPT_FLAG("opengl-debug", opts.use_gl_debug, 0), +- OPT_STRING_VALIDATE("opengl-backend", opts.backend, 0, +- mpgl_validate_backend_opt), ++ OPT_SETTINGSLIST("opengl-backend", opts.backend_list, 0, &mpgl_backend_list ), + OPT_FLAG("opengl-sw", opts.allow_sw, 0), + OPT_CHOICE("opengl-es", opts.es, 0, ({"no", -1}, {"auto", 0}, + {"yes", 1}, {"force2", 2})), +From 4e89fae50f70d065ff8ffee40aa8dffe8131210e Mon Sep 17 00:00:00 2001 +From: Drew DeVault <s...@cmpwn.com> +Date: Thu, 27 Apr 2017 17:51:39 -0400 +Subject: [PATCH 2/4] Update mpv.1 +--- + DOCS/man/options.rst | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst +index 925c501881..5d57720e3d 100644 +--- a/DOCS/man/options.rst ++++ b/DOCS/man/options.rst +@@ -4480,9 +4480,10 @@ The following video options are currently all specific to ``--vo=opengl`` and + Continue even if a software renderer is detected. + + ``--opengl-backend=<sys>`` +- The value ``auto`` (the default) selects the windowing backend. You can +- also pass ``help`` to get a complete list of compiled in backends (sorted +- by autoprobe order). ++ Specify a priority list of windowing backends to use with OpenGL. The value ++ ``auto`` (the default) automatically probes for the most suitable backend. ++ You can also pass ``help`` to get a complete list of compiled in backends ++ (sorted by autoprobe order). + + auto + auto-select (default) +From 3fb437fa09ebf20635c02f41ce0e3d13423d1454 Mon Sep 17 00:00:00 2001 +From: Drew DeVault <s...@cmpwn.com> +Date: Thu, 27 Apr 2017 20:12:51 -0400 +Subject: [PATCH 3/4] Let options handle invalid backends +--- + video/out/opengl/context.c | 17 +++++++++-------- + 1 file changed, 9 insertions(+), 8 deletions(-) + +diff --git a/video/out/opengl/context.c b/video/out/opengl/context.c +index 568bb662b8..8aa44b67cc 100644 +--- a/video/out/opengl/context.c ++++ b/video/out/opengl/context.c +@@ -91,6 +91,14 @@ static const struct mpgl_driver *const backends[] = { + + static bool get_desc(struct m_obj_desc *dst, int index) + { ++ if (index == 0) { ++ *dst = (struct m_obj_desc) { ++ .name = "auto", ++ .description = "automatically select most suitable backend" ++ }; ++ return true; ++ } ++ index--; + if (index >= MP_ARRAY_SIZE(backends) - 1) + return false; + const struct mpgl_driver *driver = backends[index]; +@@ -107,8 +115,6 @@ static bool get_desc(struct m_obj_desc *dst, int index) + const struct m_obj_list mpgl_backend_list = { + .get_desc = get_desc, + .description = "OpenGL windowing backends", +- .allow_unknown_entries = true, +- .allow_disable_entries = true, + .allow_trailer = true, + .disallow_positional_parameters = true, + }; +@@ -218,13 +224,8 @@ MPGLContext *mpgl_init(struct vo *vo, struct m_obj_settings *backend_list, int v + for (n = 0; backend_list[n].name; n++) { + // Something like "--opengl-backend=name," allows fallback to autoprobing. + int index = mpgl_find_backend(backend_list[n].name); +- if (index == -1 || strlen(backend_list[n].name) == 0) ++ if (index < 0 || strlen(backend_list[n].name) == 0) + goto autoprobe; +- if (index == -2) { +- MP_FATAL(vo, "Unknown opengl backend '%s'\n", backend_list[n].name); +- exit(-2); +- return NULL; +- } + ctx = init_backend(vo, backends[index], true, vo_flags); + if (ctx) + break; +From 605785c4846ecaa969309f7fb63cfba59751ba61 Mon Sep 17 00:00:00 2001 +From: Drew DeVault <s...@cmpwn.com> +Date: Fri, 26 May 2017 15:31:24 -0400 +Subject: [PATCH 4/4] Updates following HEAD +--- + video/out/opengl/context.c | 17 +---------------- + 1 file changed, 1 insertion(+), 16 deletions(-) + +diff --git a/video/out/opengl/context.c b/video/out/opengl/context.c +index 8aa44b67cc..4cc0829c90 100644 +--- a/video/out/opengl/context.c ++++ b/video/out/opengl/context.c +@@ -141,22 +141,7 @@ static int mpgl_find_backend(const char *name) + return -2; + } + +-int mpgl_validate_backend_opt(struct mp_log *log, const struct m_option *opt, +- struct bstr name, struct bstr param) +-{ +- if (bstr_equals0(param, "help")) { +- mp_info(log, "OpenGL windowing backends:\n"); +- mp_info(log, " auto (autodetect)\n"); +- for (int n = 0; n < MP_ARRAY_SIZE(backends); n++) +- mp_info(log, " %s\n", backends[n]->name); +- return M_OPT_EXIT; +- } +- char s[20]; +- snprintf(s, sizeof(s), "%.*s", BSTR_P(param)); +- return mpgl_find_backend(s) >= -1 ? 1 : M_OPT_INVALID; +-} +- +-static void *get_native_display(const char *name) ++static void *get_native_display(void *pctx, const char *name) + { + MPGLContext *ctx = pctx; + if (!ctx->native_display_type || !name) Deleted: community-x86_64/PKGBUILD =================================================================== --- community-x86_64/PKGBUILD 2017-10-20 19:06:32 UTC (rev 263750) +++ community-x86_64/PKGBUILD 2017-10-20 19:06:47 UTC (rev 263751) @@ -1,63 +0,0 @@ -# $Id$ -# Maintainer: Christian Hesse <m...@eworm.de> -# Contributor: Bartłomiej Piotrowski <bpiotrow...@archlinux.org> -# Contributor: Eivind Uggedal <eiv...@uggedal.com> - -pkgname=mpv -epoch=1 -pkgver=0.27.0 -pkgrel=1 -_waf_version=1.8.12 -pkgdesc='a free, open source, and cross-platform media player' -arch=('i686' 'x86_64') -license=('GPL') -url='http://mpv.io' -depends=( - 'ffmpeg' 'lcms2' 'libcdio-paranoia' 'libgl' 'libxss' - 'libxinerama' 'libxv' 'libxkbcommon' 'libva' 'wayland' 'libcaca' - 'desktop-file-utils' 'hicolor-icon-theme' 'xdg-utils' 'lua52' 'libdvdnav' - 'libxrandr' 'jack' 'rubberband' 'uchardet' 'libarchive' -) -makedepends=('mesa' 'python-docutils' 'ladspa') -optdepends=('youtube-dl: for video-sharing websites playback') -options=('!emptydirs') -source=("$pkgname-$pkgver.tar.gz::https://github.com/mpv-player/$pkgname/archive/v$pkgver.tar.gz" - '0001-opengl-backend-support-multiple-backends.patch' - "http://www.freehackers.org/~tnagy/release/waf-${_waf_version}") -sha256sums=('341d8bf18b75c1f78d5b681480b5b7f5c8b87d97a0d4f53a5648ede9c219a49c' - '609e0530f1b0cdb910dcffb5f62bf55936540e24105ce1b2daf1bd6291a7d58a' - '01bf2beab2106d1558800c8709bc2c8e496d3da4a2ca343fe091f22fca60c98b') - -prepare() { - cd ${pkgname}-${pkgver} - - # --opengl-backend: support multiple backends (#4384) (FS#53962) - patch -Np1 < "${srcdir}"/0001-opengl-backend-support-multiple-backends.patch - - install -m755 "${srcdir}"/waf-${_waf_version} waf -} - -build() { - cd ${pkgname}-${pkgver} - - ./waf configure --prefix=/usr \ - --confdir=/etc/mpv \ - --enable-cdda \ - --enable-dvb \ - --enable-dvdnav \ - --enable-encoding \ - --enable-libarchive \ - --enable-libmpv-shared \ - --enable-zsh-comp - - ./waf build -} - -package() { - cd ${pkgname}-${pkgver} - - ./waf install --destdir="$pkgdir" - - install -m644 DOCS/{encoding.rst,tech-overview.txt} \ - "$pkgdir"/usr/share/doc/mpv -} Copied: mpv/repos/community-x86_64/PKGBUILD (from rev 263750, mpv/trunk/PKGBUILD) =================================================================== --- community-x86_64/PKGBUILD (rev 0) +++ community-x86_64/PKGBUILD 2017-10-20 19:06:47 UTC (rev 263751) @@ -0,0 +1,63 @@ +# $Id$ +# Maintainer: Christian Hesse <m...@eworm.de> +# Contributor: Bartłomiej Piotrowski <bpiotrow...@archlinux.org> +# Contributor: Eivind Uggedal <eiv...@uggedal.com> + +pkgname=mpv +epoch=1 +pkgver=0.27.0 +pkgrel=2 +_waf_version=1.8.12 +pkgdesc='a free, open source, and cross-platform media player' +arch=('i686' 'x86_64') +license=('GPL') +url='http://mpv.io' +depends=( + 'ffmpeg' 'lcms2' 'libcdio-paranoia' 'libgl' 'libxss' + 'libxinerama' 'libxv' 'libxkbcommon' 'libva' 'wayland' 'libcaca' + 'desktop-file-utils' 'hicolor-icon-theme' 'xdg-utils' 'lua52' 'libdvdnav' + 'libxrandr' 'jack' 'rubberband' 'uchardet' 'libarchive' +) +makedepends=('mesa' 'python-docutils' 'ladspa') +optdepends=('youtube-dl: for video-sharing websites playback') +options=('!emptydirs') +source=("$pkgname-$pkgver.tar.gz::https://github.com/mpv-player/$pkgname/archive/v$pkgver.tar.gz" + '0001-opengl-backend-support-multiple-backends.patch' + "http://www.freehackers.org/~tnagy/release/waf-${_waf_version}") +sha256sums=('341d8bf18b75c1f78d5b681480b5b7f5c8b87d97a0d4f53a5648ede9c219a49c' + '609e0530f1b0cdb910dcffb5f62bf55936540e24105ce1b2daf1bd6291a7d58a' + '01bf2beab2106d1558800c8709bc2c8e496d3da4a2ca343fe091f22fca60c98b') + +prepare() { + cd ${pkgname}-${pkgver} + + # --opengl-backend: support multiple backends (#4384) (FS#53962) + patch -Np1 < "${srcdir}"/0001-opengl-backend-support-multiple-backends.patch + + install -m755 "${srcdir}"/waf-${_waf_version} waf +} + +build() { + cd ${pkgname}-${pkgver} + + ./waf configure --prefix=/usr \ + --confdir=/etc/mpv \ + --enable-cdda \ + --enable-dvb \ + --enable-dvdnav \ + --enable-encoding \ + --enable-libarchive \ + --enable-libmpv-shared \ + --enable-zsh-comp + + ./waf build +} + +package() { + cd ${pkgname}-${pkgver} + + ./waf install --destdir="$pkgdir" + + install -m644 DOCS/{encoding.rst,tech-overview.txt} \ + "$pkgdir"/usr/share/doc/mpv +}