Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/videolan/dav1d.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarvin Scholz <epirat07@gmail.com>2020-05-15 03:23:19 +0300
committerMarvin Scholz <epirat07@gmail.com>2020-05-15 03:23:19 +0300
commit7f5cf34d06e4b8e7ff83e653c67532e92f4b462b (patch)
treeda3a21143c3eccaae338bbcf17a0a59d770c5c28 /examples
parente8fc62fc2ae012fafbd3d4f0e48d0f1a145fe8c5 (diff)
Dav1dPlay: Fix renderer selection
Diffstat (limited to 'examples')
-rw-r--r--examples/dav1dplay.c35
-rw-r--r--examples/dp_renderer.h2
-rw-r--r--examples/meson.build30
3 files changed, 50 insertions, 17 deletions
diff --git a/examples/dav1dplay.c b/examples/dav1dplay.c
index 640d7f7..ef39d41 100644
--- a/examples/dav1dplay.c
+++ b/examples/dav1dplay.c
@@ -42,6 +42,37 @@
#include "tools/input/input.h"
#include "dp_fifo.h"
+// Determine which renderer we are going to compile:
+// Selection order by preference:
+// - libplacebo Vulkan renderer
+// - libplacebo OpenGL renderer
+// - SDL2 renderer
+#ifdef HAVE_PLACEBO
+# include <libplacebo/config.h>
+#endif
+
+// Check libplacebo Vulkan rendering
+#if defined(HAVE_VULKAN) && defined(SDL_VIDEO_VULKAN)
+# if defined(PL_HAVE_VULKAN) && PL_HAVE_VULKAN
+# define HAVE_RENDERER_PLACEBO
+# define HAVE_PLACEBO_VULKAN
+# endif
+#endif
+
+// Check libplacebo OpenGL rendering
+#ifndef HAVE_RENDERER_PLACEBO
+# if defined(PL_HAVE_OPENGL) && PL_HAVE_OPENGL
+# define HAVE_RENDERER_PLACEBO
+# define HAVE_PLACEBO_OPENGL
+# endif
+#endif
+
+// Fallback to SDL if we can't use placebo
+#ifndef HAVE_RENDERER_PLACEBO
+# define HAVE_RENDERER_SDL
+#endif
+
+
/**
* Settings structure
* Hold all settings available for the player,
@@ -176,13 +207,13 @@ static void dp_rd_ctx_parse_args(Dav1dPlayRenderContext *rd_ctx,
break;
case ARG_HIGH_QUALITY:
settings->highquality = true;
-#if !defined(HAVE_PLACEBO_VULKAN) && !defined(HAVE_PLACEBO_OPENGL)
+#ifndef HAVE_RENDERER_PLACEBO
fprintf(stderr, "warning: --highquality requires libplacebo\n");
#endif
break;
case 'z':
settings->zerocopy = true;
-#if !defined(HAVE_PLACEBO_VULKAN) && !defined(HAVE_PLACEBO_OPENGL)
+#ifndef HAVE_RENDERER_PLACEBO
fprintf(stderr, "warning: --zerocopy requires libplacebo\n");
#endif
break;
diff --git a/examples/dp_renderer.h b/examples/dp_renderer.h
index b859802..0650601 100644
--- a/examples/dp_renderer.h
+++ b/examples/dp_renderer.h
@@ -45,7 +45,7 @@ typedef struct rdr_info
void (*release_pic)(Dav1dPicture *pic, void *cookie);
} Dav1dPlayRenderInfo;
-#if defined(HAVE_PLACEBO_VULKAN) || defined(HAVE_PLACEBO_OPENGL)
+#ifdef HAVE_RENDERER_PLACEBO
# include "dp_renderer_placebo.h"
#else
# include "dp_renderer_sdl.h"
diff --git a/examples/meson.build b/examples/meson.build
index 8b1d065..648077e 100644
--- a/examples/meson.build
+++ b/examples/meson.build
@@ -41,30 +41,32 @@ dav1dplay_sources = files(
sdl2_dependency = dependency('sdl2', version: '>= 2.0.1', required: true)
if sdl2_dependency.found()
+ dav1dplay_deps = [sdl2_dependency]
+ dav1dplay_cflags = []
+
placebo_dependency = dependency('libplacebo', version: '>= 1.18.0', required: false)
- vulkan_dependency = dependency('vulkan', required: false)
- sdl_has_vulkan = cc.has_header('SDL_vulkan.h', dependencies: [sdl2_dependency])
- sdl_has_opengl = cc.has_header('SDL_opengl.h', dependencies: [sdl2_dependency])
- cflag_placebo = []
- deps_placebo = []
+
if placebo_dependency.found()
- deps_placebo += placebo_dependency
- if vulkan_dependency.found() and sdl_has_vulkan
- cflag_placebo += '-DHAVE_PLACEBO_VULKAN=1'
- deps_placebo += vulkan_dependency
- endif
- if sdl_has_opengl
- cflag_placebo += '-DHAVE_PLACEBO_OPENGL=1'
+ dav1dplay_deps += placebo_dependency
+ dav1dplay_cflags += '-DHAVE_PLACEBO'
+
+ # If libplacebo is found, we might be able to use Vulkan
+ # with it, in which case we need the Vulkan library too.
+ vulkan_dependency = dependency('vulkan', required: false)
+ if vulkan_dependency.found()
+ dav1dplay_deps += vulkan_dependency
+ dav1dplay_cflags += '-DHAVE_VULKAN'
endif
endif
+
dav1dplay = executable('dav1dplay',
dav1dplay_sources,
rev_target,
link_with : [libdav1d, dav1d_input_objs],
include_directories : [dav1d_inc_dirs],
- dependencies : [getopt_dependency, sdl2_dependency, deps_placebo],
+ dependencies : [getopt_dependency, dav1dplay_deps],
install : true,
- c_args : cflag_placebo,
+ c_args : dav1dplay_cflags,
)
endif