summaryrefslogtreecommitdiffstats
path: root/meson.build
Commit message (Collapse)AuthorAgeFilesLines
* meson: bump libplacebo-next required version to 5.264Philip Langdale2023-03-261-3/+3
| | | | | | | This is the latest stable release, and what we should use for libplacebo-next per haasn's recommendation. The previous 202 version wasn't even a release.
* meson: rst2pdf handle dependency fileThomas Weißschuh2023-03-241-1/+11
|
* test: integrate unittests with mesonDudemanguy2023-03-021-14/+16
| | | | | | | | | | | | This reworks all of mpv's unit tests so they are compiled as separate executables (optional) and run via meson test. Because most of the tests are dependant on mpv's internals, existing compiled objects are leveraged to create static libs and used when necessary. As an aside, a function was moved into video/out/gpu/utils for sanity's sake (otherwise most of vo would have been needed). As a plus, meson multithreads running tests automatically and also the output no longer pollutes the source directory. There are tests that can break due to ffmpeg changes, so they require a specific minimum libavutil version to be built.
* player: remove unittest optionDudemanguy2023-03-021-17/+0
| | | | | | | | | Since meson has its own unit testing system, let's rework mpv's tests so they integrate nicely with this. To prepare for this, start off by dropping the unittest option. Of course, this means that tests will no longer be supported in the waf build at all but it will be dropped anyway. Note that the tests option is preserved for the meson build. We will still make use of this in the future commits.
* zimg: add ZIMG_TRANSFER_ST428 mappingKacper Michajłow2023-03-021-0/+1
|
* command: add platform propertyDudemanguy2023-02-271-0/+1
| | | | | | | | | | | | | | | | | | | | | | | This returns the value of the target OS that mpv was built on as reported by the build system. It is quite conceivable that script writers and API users would need to make OS-dependent choices in some cases. Such people end up writing boilerplate/hacks to guess what OS they are on. Assuming you trust the build system (if you don't, we're in really deep trouble), then mpv actually knows exactly what OS it was built on. Simply take this information at configuration time, make it a define, and let mp_property_platform return the value. Note that mpv has two build systems (waf and meson), so the names of the detected OSes may not be exactly the same. Since meson is the newer build system, the value of this property follows meson's naming conventions*. In the waf build, there is a small function to map known naming deviations to match meson (i.e. changing "win32" to "windows"). waf's documentation is a nightmare to follow, but it seems to simply take the output of sys.platform in python and strip away any trailing numbers if they exist (exception being win32 and os2)*. *: https://mesonbuild.com/Reference-tables.html#operating-system-names *: https://waf.io/apidocs/Utils.html#waflib.Utils.unversioned_sys_platform
* Vulkan: add configure check for VK_KHR_display extensionrcombs2023-02-201-1/+7
| | | | This allows building directly against ICDs that don't implement this extension.
* meson: move vector check inside of meson.buildDudemanguy2023-02-021-3/+5
| | | | | It's three lines. There's no real reason to have this as a separate file when we've removed every other compile check sourced from outside files.
* meson: check macos touchbar with has_headerDudemanguy2023-02-021-2/+2
|
* meson: check pthread provider with has_functionDudemanguy2023-02-021-10/+10
| | | | | Previously, we did this doing code fragments, but we can be a bit more clever and use has_function as well as the platform we're on.
* meson: replace check_header with has_headerDudemanguy2023-01-311-2/+2
| | | | | | | | It turns out that there's a has_header check, and we should actually be using that instead. We only care here if the header actually exists so the pre-processor check is all that is needed. check_header depends on what arguments the user passes among other things. That makes it more complicated than necessary for our purposes.
* meson: actually use -Werror=format-securityDudemanguy2023-01-311-1/+1
| | | | | | We tested for this flag, but never added -Wformat in addition to -Werror=format-security. The latter was silently ignored and actually did nothing.
* meson: add missing library dep for egl_angle_lib checkKacper Michajłow2023-01-281-0/+5
|
* meson: reuse libmpv objects for cplayerThomas Weißschuh2023-01-261-10/+13
| | | | | | | When building both cplayer and libmpv in the same build previously all sources were built twice. By reusing the objects from libmpv in cplayer we can thus save 50% percent of the build steps.
* meson: skip some unneeded macos-specific checksDudemanguy2023-01-201-23/+24
| | | | | A couple of programs were always unconditionally searched for, but we don't have to do this if we're not on darwin.
* meson: drop feature plain-glThomas Weißschuh2023-01-191-2/+1
|
* meson: limit vaapi checksThomas Weißschuh2023-01-191-3/+3
|
* meson: don't add libmpv and cplayer features to conf_dataThomas Weißschuh2023-01-191-3/+4
| | | | | | | Core code should not use these features as it would mean that a libmpv build could change an mpv executable and vice-versa. Also changing one of them should not force a full recompile of the other one through a change to config.h.
* meson: remove dependency from libmpv to plain-glThomas Weißschuh2023-01-191-2/+2
| | | | | | | | The libmpv feature should not have any impact on the built core code. Otherwise a mpv executable compiled in a build together with libmpv has different features than one from a build without. The gl feature doesn't hurt, so always enable it.
* meson: add simple test executable for libmpvThomas Weißschuh2023-01-191-0/+3
| | | | This can be used to make sure that the built libmpv is functional.
* TOOLS/docutils-wrapper: make executable + alphabetizeDudemanguy2023-01-131-1/+1
| | | | | | I should have caught this during review but the feature was too cool and I didn't really pay attention (sorry). For consistency with the rest of the scripts here.
* meson: also search for rst2html with .py extensionIonen Wolkens2023-01-131-1/+1
| | | | | This allows using rst2html.py from docutils if present, this was already done for rst2man.py (unneeded for rst2pdf).
* meson: dynamically compute dependencies for manpage and html buildThomas Weißschuh2023-01-081-2/+12
| | | | | | | | | This allows us to rebuild the manpages and html documentation only when necessary. It is not necessary to manually keep the list of dependencies up to date. Unfortunately rst2pdf does not yet support this feature, see https://github.com/rst2pdf/rst2pdf/issues/1108
* build: add configure test for POSIX shm for the sake of vo_kittysfan52022-12-261-0/+5
| | | | Android's POSIX coverage is pretty sketchy but not like we have a choice.
* vo_kitty: Introduce modern sixel alternativeMia Herkt2022-12-211-0/+1
| | | | | | | | | | | | | See https://sw.kovidgoyal.net/kitty/graphics-protocol/ This makes no attempt at querying terminal features or handling terminal errors, as it would require mpv to pass the response codes from the terminal to the vo instead of interpreting them as keystrokes made by the user and acting very unpredictably. Tested with kitty and konsole. Fixes #9605
* ffmpeg: increase minimum required version to 4.4Philip Langdale2022-12-011-7/+7
| | | | | | | | | Now that 0.35 has been released, we can consider increasing our minimum required ffmpeg version. Currently, we think 4.4 is the most recent version we can move to (from the current requirement of 4.0). This allows us to remove a few conditionals. There are more that we won't be able to remove unless we move further up to 5.1.
* meson: fix stdatomic detection on bsdDudemanguy2022-11-221-3/+4
| | | | | | | BSDs use compiler-rt instead of libatomic for atomic types. In this case, we can handle it similar to how dl is detected. Check for the library (allowing for it to fail), and then check for a header symbol while linking latomic. Fixes #10906.
* meson: unbreak dl check on BSDs without libdlDudemanguy2022-11-201-1/+1
| | | | | | Regression from 1835dfc05c8298262dbf8e08a31d61bbfecdb30b. The actual libdl dependency is not always required for the function symbol check. Fixes #10901.
* meson: prepend MPV_CONFDIR path with prefixDudemanguy2022-11-191-1/+1
| | | | | | | | | | | | | | Meson uses the sysconfdir option for setting the global config directory. This conveniently defaults to /etc if the prefix is set to /usr which is nice for linux distros. BSDs tend to use /usr/local which causes this value to become 'etc' by default which is not an absolute path so you would need to set something like -Dsysconfdir=/usr/local/etc as well in the configuration step. It turns out we can have our cake and eat it too by just joining the paths of prefix and sysconfdir together. In the case where -Dprefix=/usr, this still results in /etc/mpv as the path since the path joining logic just drops the leading '/usr/'. For the /usr/local case, it ends up as /usr/local/etc/mpv as expected. This fixes #10882.
* meson: fix macos-touchbar checkDudemanguy2022-11-111-9/+5
| | | | | | | | Apparently, it is possible for touchbar.m to compile on non-macos machines. Also, the disable switch didn't actually work either. Fix this by using the require() function and making sure that Cocoa (should be apple-only) is found in addition to the compile check passing which is what waf does. Fixes #10847.
* meson: move dmabuf-wayland specific files under the right checkDudemanguy2022-11-031-3/+3
| | | | | This doesn't need to be under the generic wayland check, but the dmabuf-wayland one. Matches the waf build.
* meson: add more hardcoded values to configurationDudemanguy2022-10-291-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | mpv has a CONFIGURATION define which is defined at configure time in both build systems and printed out when you use verbose flags. In waf, this is line is exactly what the user passes on cli at configure time. In meson, there's currently no way to do that (someone did recently open up a PR that would make this possible), so we just hardcode the prefix and call it a day. This is a bit of a tangent, but the build also copies waf and sets an optimize variable (true or false) that is also printed out on verbose output. For waf, this makes some sense because the build has a specific --optimize option (internally all it does is pass -O2). In meson, optimizing is a built-in option and we just set anything that's not -O0 as "optimize". Furthermore, there is a new optimization option added in meson 0.64 called "plain" which passes no flags at all* so this logic would need to be updated to account for this. In retrospect, this is all just stupid though. optimization is not a boolean value and there's no real use for treating it like one just because that's what waf does. Let's remove it from the features array. Instead, we can expose this information in the CONFIGURATION variable along with the prefix option so we know exactly what optimization was used in the compiled executable. For good measure, let's also throw in buildtype since it's related. *: https://github.com/mesonbuild/meson/commit/a590cfde0cf719c637b75e4784be0c0ae60e3b1f
* meson: use 'dl' instead of 'libdl' in find_libraryDudemanguy2022-10-291-1/+1
| | | | | | | Meson's master branch helpfully prints out a warning here now saying that "find_library('libdl') starting in "lib" only works by accident and is not portable". We'll go ahead and trust them and instead change this to dl which works with no issues.
* ci: use meson setup build instead of meson buildDudemanguy2022-10-291-1/+1
| | | | | | | | | | | | The old "meson build" build command was actually deprecated a few months ago*. It turns out that you're supposed to use "meson setup build" instead which has been around for years. Go ahead and be a good citizen and update this in the CI. Also replace any mention of "meson build" with "meson setup build" in the documentation as well and change the one random hardcoded string we have in meson.build to "meson configure build" (might as well). *: https://github.com/mesonbuild/meson/commit/3c7ab542c0c4770241eae149b0d4cd8de329aee0
* ao_pipewire: compatibility for libpipewire 0.3.19Thomas Weißschuh2022-10-261-1/+1
|
* vo_vaapi_wayland: remove, as it is superceded by vo_dmabuf_waylandAaron Boxer2022-10-261-5/+0
|
* vo_dmabuf_wayland: wayland VO displaying dmabuf buffersAaron Boxer2022-10-261-0/+9
| | | | | | | | | | | | | Wayland VO that can display images from either vaapi or drm hwdec The PR adds the following changes: 1. a context_wldmabuf context with no gl dependencies 2. no-op ra_wldmabuf and dmabuf_interop_wldmabuf objects no-op because there is no need to map/unmap the drmprime buffer, and there is no need to manage any textures. Tested on both x86_64 and rk3399 AArch64
* vo_gpu/hwdec: rename and introduce legacy names for some interopsPhilip Langdale2022-10-111-1/+1
| | | | | | | | | | | | We've had some annoying names for interops, which we can't simply rename because that would break config files and command lines. So we need to put a little more effort in and add a concept of legacy names that allow us to continue loading them, but with a warning. The two I'm renaming here are: * vaapi-egl -> vaapi (vaapi works with Vulkan too) * drmprime-drm -> drmprime-overlay (actually describes what it does) * cuda-nvdec -> cuda (cuda interop is not nvdec specific)
* vo_gpu: hwdec: add Android hwdec utilizing AImageReadersfan52022-10-021-0/+9
|
* mpv.metainfo.xml: add XDG appstream metadata manifestVitaly Zaitsev2022-09-091-0/+1
|
* meson: fix condition for enabling vaapi-eglOwen Rafferty2022-08-271-1/+1
|
* meson: fix libplacebo checkNiklas Haas2022-08-261-1/+1
| | | | | | Missing waf quivalent, and doesn't necessarily output a good error message. But I might as well submit this rather than sitting on it unnecessarily.
* misc/random: add xoshiro random number implementationLeo Izen2022-08-171-0/+1
| | | | | | | Add xoshiro as a PRNG implementation instead of relying on srand() and rand() from the C standard library. This, in particular, lets us avoid platform-defined behavior with respect to threading.
* meson: fix the build-date optionDudemanguy2022-08-161-1/+1
| | | | Rewrites are hard.
* meson: fix building without glDudemanguy2022-08-151-0/+1
| | | | This needs to be unconditionally added.
* meson: consistently use feature['foo']Dudemanguy2022-08-151-267/+246
| | | | | | | | | | Since the previous commit introduced the notion of a features dictionary that conveniently tells us whether or not to use a feature in a simple yes/no, we can make use of this everywhere in the build. Instead of doing something like 'if foo.()', change it to 'if feature['foo'] instead. This enforces a consistent standard instead of having a lot of different possible combinations of booleans that may or may not do something.
* meson: refactor generating config.hDudemanguy2022-08-151-412/+239
| | | | | | | | | | | | | | mpv has a ton of defines that are generated during building. Previously, the meson build just had this as a big giant wall of text that manually set each one but we can do this smarter. Instead, change the "features" object to a dictionary and have it hold the name of the feature and its value (true/false on whether it is enabled). Then at the end, just loop through it and reformat the name of the feature so it becomes HAVE_FEATURE. A side effect of this is that a lot of extra defines are generated that aren't actually used in the code, but the waf build worked like this for years anyway. A nice result of this is that the use of foo['use'] internally can be completely eliminated and replaced with feature['foo'] instead when needed.
* meson: reduce dictionary usageDudemanguy2022-08-151-98/+61
| | | | | | | The build was a bit overzealous with using dictionaries. These are fine for when the feature checking is more complicated, but there's no point in having them for the simplier things. This also eliminates the usage of the 'name' key completely.
* meson: add comment clarifying windows-internal-pthreadsDudemanguy2022-08-151-0/+5
|
* drm_common: remove hard dependency on drmIsKMS()sfan52022-08-111-0/+10
| | | | | | ae768a1e141eb88243e46757d41ca0cada9502b4 forgot to bump the required libdrm version however Debian 11 just barely misses the requirement, which is a good reason not to require it unconditionally anyway.
* hwdec/drmprime: add drmprime hwdec-interopPhilip Langdale2022-08-091-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In the confusing landscape of hardware video decoding APIs, we have had a long standing support gap for the v4l2 based APIs implemented for the various SoCs from Rockship, Amlogic, Allwinner, etc. While VAAPI is the defacto default for desktop GPUs, the developers who work on these SoCs (who are not the vendors!) have preferred to implement kernel APIs rather than maintain a userspace driver as VAAPI would require. While there are two v4l2 APIs (m2m and requests), and multiple forks of ffmpeg where support for those APIs languishes without reaching upstream, we can at least say that these APIs export frames as DRMPrime dmabufs, and that they use the ffmpeg drm hwcontext. With those two constants, it is possible for us to write a hwdec-interop without worrying about the mess underneath - for the most part. Accordingly, this change implements a hwdec-interop for any decoder that produces frames as DRMPrime dmabufs. The bulk of the heavy lifting is done by the dmabuf interop code we already had from supporting vaapi, and which I refactored for reusability in a previous set of changes. When we combine that with the fact that we can't probe for supported formats, the new code in this change is pretty simple. This change also includes the hwcontext_fns that are required for us to be able to configure the hwcontext used by `hwdec=drm-copy`. This is technically unrelated, but it seemed a good time to fill this gap. From a testing perspective, I have directly tested on a RockPRO64, while others have tested with different flavours of Rockchip and on Amlogic, providing m2m coverage. I have some other SoCs that I need to spin up to test with, but I don't expect big surprises, and when we inevitably need to account for new special cases down the line, we can do so - we won't be able to support every possible configuration blindly.
* hwdec/dmabuf_interop: use AVDRMFrameDescriptor to describe dmabufsPhilip Langdale2022-08-031-2/+22
| | | | | | | | | | | | Annoyingly, libva and libdrm use different structs to describe dmabufs and if we are going to support drmprime, we must pick one format and do some shuffling in the other case. I've decided to use AVDRMFrameDescriptor as our internal format as this removes the libva dependency from dmabuf_interop. That means that the future drmprime hwdec will be able to populate it directly and the existing hwdec_vaapi needs to copy the struct members around, but that's cheap and not a concern.
* hwdec/vaapi: rename interops to reflect more general usePhilip Langdale2022-08-031-2/+2
| | | | | | | | | | | This is the first in a series of changes that will introduce a drmprime hwdec. As our vaapi hwdec is based around exporting surfaces as drmprime dmabufs, we've actually got a lot of useful code already in place in the GL/PL interops. I'm going to reorganise and adjust this code to make the interops usable with the new hwdec as well. The first step is to rename the files and functions. There are no functional or other changes here. They will come next.
* af_rubberband: add new engine option in rubberband 3.0.0Christoph Heinrich2022-08-031-0/+1
|
* meson: fix rst2html commandJ. Dekker2022-07-051-1/+1
|
* meson: add a summary at the end of configurationDudemanguy2022-06-271-0/+11
| | | | | | | | | | The meson build does a lot of checks and if you aren't familiar with the internals of the meson.build, it may not be clear what is actually enabled and what isn't. It turns out that meson has a handy function, summary, exactly for this. This just prints a pretty summary of some notable features in the build. It's not meant to be a comprehensive list, but rather just what users are likely to care the most about (i.e. x11, vulkan, etc.)
* meson: remove pointless d3d11 dictionaryDudemanguy2022-06-201-5/+0
| | | | | | | Immediately after this, d3d11 is defined again and the rest of the meson.build uses that. Probably, this dictionary was from the original meson PR and removing it was forgotten at some point while stuff was being rewritten.
* x11: support xorg present extensionDudemanguy2022-06-191-4/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This builds off of present_sync which was introduced in a previous commit to support xorg's present extension in all of the X11 backends (sans vdpau) in mpv. It turns out there is an Xpresent library that integrates the xorg present extention with Xlib (which barely anyone seems to use), so this can be added without too much trouble. The workflow is to first setup the event by telling Xorg we would like to receive PresentCompleteNotify (there are others in the extension but this is the only one we really care about). After that, just call XPresentNotifyMSC after every buffer swap with a target_msc of 0. Xorg then returns the last presentation through its usual event loop and we go ahead and use that information to update mpv's values for vsync timing purposes. One theoretical weakness of this approach is that the present event is put on the same queue as the rest of the XEvents. It would be nicer for it be placed somewhere else so we could just wait on that queue without having to deal with other possible events in there. In theory, xcb could do that with special events, but it doesn't really matter in practice. Unsurprisingly, this doesn't work on NVIDIA. Well NVIDIA does actually receive presentation events, but for whatever the calculations used make timings worse which defeats the purpose. This works perfectly fine on Mesa however. Utilizing the previous commit that detects Xrandr providers, we can enable this mechanism for users that have both Mesa and not NVIDIA (to avoid messing up anyone that has a switchable graphics system or such). Patches welcome if anyone figures out how to fix this on NVIDIA. Unlike the EGL/GLX sync extensions, the present extension works with any graphics API (good for vulkan since its tim