summaryrefslogtreecommitdiffstats
path: root/meson.build
<
Commit message (Collapse)AuthorAgeFilesLines
* 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 timing extension has been in development hell). NVIDIA also happens to have zero support for the EGL/GLX sync extensions, so we can just remove it with no loss. Only Xorg ever used it and other backends already have their own present methods. vo_vdpau VO is a special case that has its own fancying timing code in its flip_page. This presumably works well, and I have no way of testing it so just leave it as it is.
* vo: move wayland presentation to separate filesDudemanguy2022-06-191-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | Wayland had some specific code that it used for implementing the presentation time protocol. It turns out that xorg's present extension is extremely similar, so it would be silly to duplicate this whole mess again. Factor this out to separate, independent code and introduce the mp_present struct which is used for handling the ust/msc values and some other associated values. Also, add in some helper functions so all the dirty details live specifically in present_sync. The only wayland-specific part is actually obtaining ust/msc values. Since only wayland or xorg are expected to use this, add a conditional to the build that only adds this file when either one of those are present. You may observe that sbc is completely omitted. This field existed in wayland, but was completely unused (presentation time doesn't return this). Xorg's present extension also doesn't use this so just get rid of it all together. The actual calculation is slightly altered so it is correct for our purposes. We want to get the presentation event of the last frame that was just occured (this function executes right after the buffer swap). The adjustment is to just remove the vsync_duration subtraction. Also, The overly-complicated queue approach is removed. This has no actual use in practice (on wayland or xorg). Presentation statistics are only ever used after the immediate preceding swap to update vsync timings or thrown away.
* meson: use require when checking for vdpauDudemanguy2022-06-191-2/+6
| | | | | | | | Technically this was wrong. If you passed -Dvdpau=enabled but did not have x11 (a requirement for this), the build would silently just not build the vdpau VO. The correct behavior is for it to be a hard error. Accomplish this by using the require function and making sure that x11 is indeed being used before attempting to find the library.
* meson: rearrange library dependency order to avoid crash with fontconfigCrend King2022-06-181-2/+4
| | | | | | | | | In win32 build, if libass and libfontconfig appear after libmingwex during linking, crash happens whenever fontconfig calls to opendir(). Moving them before ffmpeg makes sure they always appear first. More info on https://github.com/shinchiro/mpv-winbuild-cmake/issues/217.
* audio: add AVChannelLayout helpers to convert from/to mp_chmapJan Ekström2022-06-121-1/+10
| | | | | | | | | This is the new FFmpeg channel layout structure, which now combines channel count and layout into a single location. Only unspecified (channel count only) and native (channel layout mask based) layouts are currently supported for the initial move towards non-deprecated APIs.
* vo: add new vaapi-wayland driverAaron Boxer2022-05-241-0/+6
| | | | | | | This driver makes use of dmabuffer and viewporter interfaces to enable efficient display of vaapi surfaces, avoiding any unnecessary colour space conversion, and avoiding scaling or colour conversion using GPU shader resources.
* various: remove trailing whitespaceGuido Cella2022-05-141-1/+1
|
* meson: compile mpv.exe as a win32 gui applicationDudemanguy2022-05-051-6/+1
| | | | | | | | | | | | | | | | | Some compiler flags were passed to mpv in order to get it to build as a gui application on windows. However on the meson build, this always resulted in mpv being built as a console application. This is because the function for making executables in meson specifically has a kwarg called win_subsystem* which defaults to 'console'. That always added link arguments at the end which compiled mpv.exe as a console application. The correct thing to do is to remove all of the subsystem-related flags in the meson build and use the win_subsystem kwarg as intended by setting it to 'windows,6.0'. For mpv.com, we can remove the -Wl,--subsystem,console flag since meson will set this by default in that executable. This makes mpv.exe function correctly and open with the pseudo-gui while mpv.com acts as a console wrapper. https://github.com/mesonbuild/meson/commit/1a0603835e3c9f1047d9b7694efc996219a422e4
* build: add avcodec jpegxl dependency versionsLeo Izen2022-04-281-0/+1
| | | | | Add the libavcodec version check for AV_CODEC_ID_JPEGXL to the build system rather than to any file that references it.
* vo_gpu_next: switch to unpooled hwdec mappingNiklas Haas2022-04-111-3/+3
| | | | | | | | | | | | This makes use of the new frame acquire/release callbacks to hold on to hwdec images only as long as necessary. This should greatly improve the smoothness/efficiency of hwdec interop, by not holding on to them for longer than needed. This also avoids the need to pool hwdec mappers altogether. Should fix #10067 as well, since frames are now only mapped when we actually use them.
* hwdec_vaapi_vk: rename to vaapi_plNiklas Haas2022-03-031-8/+8
| | | | | | | | There's really nothing vulkan-specific about this hwdec wrapper, and it actually works perfectly fine with an OpenGL-based ra_pl. This is not hugely important at the time, but I still think it makes sense in case we ever decide to make vo_gpu_next wrap OpenGL contexts to ra_pl instead of exposing the underlying ra_gl.
* vo_gpu_next: remove/simplify plane flipping hacksNiklas Haas2022-02-251-3/+3
| | | | | | | | | libplacebo v198 fixed this properly by adding the ability to flip planes directly, which is done automatically by the swapchain helpers. As such, we no longer need to concern ourselves with hacky logic to flip planes using the crop. This also removes the need for the OSD coordinate hack on OpenGL.
* vo_gpu_next: refactor subtitle renderingNiklas Haas2022-02-211-3/+3
| | | | | | | | | | | | | | | Render subs at the output resolution, rather than the video resolution. Uses the new APIs found in libplacebo 197+, to allow controlling the OSD resolution even for image-attached overlays. Also fixes an issue where the overlay state did not get correctly updated while paused. To avoid regenerating the OSD / flushing the cache constantly, we keep track of OSD changes and only regenerate the OSD when the OSD state is expected to change in some way (e.g. resolution change). This requires introducing a new VOCTRL to inform the VO when the UPDATE_OSD-tagged options have changed. Fixes #9744, #9524, #9399 and #9398.
* meson: remove horrifying macos luajit hackDudemanguy2022-02-071-17/+4
| | | | | | | | | | | | | | | | | | | | | | | | See the previous commit for the full explanation. Basically, luajit 2.0 has a bad pc file on macos that causes libmpv to fail during build. The workaround was, if the os was darwin and luajit was found, to save a full luajit dep and a partial luajit dep with the link args removed. The partial dep was used for compiling libmpv, and the full dep was used for the actual mpv executable. This worked and was needed for the CI to pass but it sucked. Since the previous commit now makes the CI grab lua 5.1, we don't need all this crap anymore. Just delete it and treat the dependency normally. This does effectively mean that building libmpv with luajit 2.0 on macOS will no longer work with the meson build. However libraries not being built correctly is not a mpv-specific issue. The waf build will succeed for some reason, but it has known issues and it would be better if it just failed honestly. An upstream developer said years ago that that macOS users should use the 2.1 branch (and there's no release of course). In any case, no macOS user should be building mpv with luajit 2.0, so we shouldn't be going out of our way to support this. https://github.com/mpv-player/mpv/issues/7512 https://github.com/LuaJIT/LuaJIT/issues/521#issuecomment-562999247
* libplacebo: bump minimum dependency to 4.157Niklas Haas2022-02-031-1/+1
| | | | | | This has been the latest stable release for about half a year now. This version in particular lets us get rid of all the deprecation warnings in the older code. (See the following commits)
* build: rename libplacebo version checkNiklas Haas2022-02-031-4/+4
| | | | | Rename from "libplacebo-v4" to "libplacebo-next" to more closely capture the intent, since this will become libplacebo v5 eventually (tm).
* meson: fix libdl existence check for *bsd systemsAndrew Krasavin2022-02-021-6/+7
|
* meson: add version check to wayland-protocolsDudemanguy2022-01-291-1/+1
| | | | | This was mistakenly left out. mpv requires at least 1.15 for the xdg-decoration protocol. This just matches the waf build.
* build: remove aviocontext bytes_read checkDudemanguy2022-01-251-8/+0
| | | | | | | | | | | | | | | | This define was always just a stopgap for that two month period (August 2021 - October 2021) where the bytes_read field in ffmpeg was completely missing. Before that time, it was a private member in a struct (which mpv used). Afterwards, it officially became public. Fortunately, the lack of this field never actually made it into a release, so it could have only possibly affected people building from the master branch. Since ffmpeg 5.0 came out recently, and it's been plenty of months since that two month window, we can go ahead and drop this check. This finishes up the work done in 78cfeee2b93830f2988508a653b508336147b79d. Sidenote: the cached ffmpeg version in the mingw ci were from that time period when the bytes_read field was missing. The N in the workflow is bumped to force a full rebuild and fresh clone of ffmpeg.
* ao_sndio: bugfix and small refactoring for #8314Andrew Krasavin2022-01-221-0/+8
| | | | | | | | Changes: * fixed hangups in the loop function and in some other cases * refactoring according to @michaelforney's recommendations in #8314 * a few minor and/or cosmetic changes * ability to build ao_sndio using meson
* meson: add check kwarg to run_command() callsLaserEyess2022-01-181-5/+5
| | | | | | | | | | | | Warning from meson: WARNING: You should add the boolean check kwarg to the run_command call. It currently defaults to false, but it will default to true in future releases of meson. See also: https://github.com/mesonbuild/meson/issues/9300 All of the run_command() calls currently use need to succeed for the build to work properly.
* ao_pipewire: Add PipeWire audio backendThomas Weißschuh2022-01-171-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | The AO provides a way for mpv to directly submit audio to the PipeWire audio server. Doing this directly instead of going through the various compatibility layers provided by PipeWire has the following advantages: * It reduces complexity of going through the compatibility layers * It allows a richer integration between mpv and PipeWire (for example for metadata) * Some users report issues with the compatibility layers that to not occur with the native AO For now the AO is ordered after all the other relevant AOs, so it will most probably not be picked up by default. This is for the following reasons: * Currently it is not possible to detect if the PipeWire daemon that mpv connects to is actually driving the system audio. (https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/1835) * It gives the AO time to stabilize before it is used by everyone. Based-on-patch-by: Oschowa <oschowa@web.de> Based-on-patch-by: Andreas Kempf <aakempf@gmail.com> Helped-by: Ivan <etircopyhdot@gmail.com>
* meson: remove iconv hacks and bump req. versionDudemanguy2022-01-091-10/+2
| | | | | | | There was some breakage with regards to the iconv detection in some older meson versions. This was all settled in 0.60.3 and now it simply just works. Remove the workarounds and bump the needed meson version to 0.60.3.
* vo_gpu_next: update for new tone mapping optionsNiklas Haas2022-01-071-3/+3
| | | | | | | This was significantly refactored upstream. Switch to new APIs and add new tone mapping curves and options. cf. https://code.videolan.org/videolan/libplacebo/-/merge_requests/212
* meson: fix incorrect egl_drm operator in buildDudemanguy2021-12-211-1/+1
| | | | | | | | | | Back when the meson build was still in the PR state, this particular variable was a dictionary. Later, it was refactored to simply be a feature object instead. All uses of egl_drm['use'] should have been replaced with egl_drm.allowed() but this particular line was missed (that's what I get for not just doing find/replace). The conditional in this line is usually satisified before egl_drm ever needs to be checked which was why no one noticed until now. Fixes #9631.
* meson: remove unneccesary shaderc_static checkDudemanguy2021-12-191-1/+1
| | | | | | | | | | | | | | shaderc is a special case dependency in meson. According to the documentation*, it first checks for shaderc_shared and will fallback to shaderc_combined (the order is reversed if the static keyword is true). However, shaderc also has a third .pc file (shaderc_static) which should be checked. The meson documentation doesn't indicate this, but it also actually checks shaderc_static*. shaderc_combined is first checked if meson looks for static libs and if that is not found it tries shaderc_static. So this extra fallback check is not needed. *: https://mesonbuild.com/Dependencies.html#shaderc *: https://github.com/mesonbuild/meson/blob/a2934ca9d13ede4eb97b320bc768319ecad7b525/mesonbuild/dependencies/misc.py#L539
* meson: look for rst2man.py as well as rst2manPhilip Langdale2021-12-171-1/+1
| | | | | | If you install docutils with pip in the default way, you will get a script called `rst2man.py` rather than `rst2man`, so look for both names.
* libmpv: remove opengl_cb API and other deprecated symbolssfan52021-12-151-3/+3
| | | | | | Not all deprecated symbols were removed. Only three events were removed for now since these are not used internally. This bumps the library version to 2.0.
* meson: correct champ.c to chmap.cSolomon Choina2021-11-261-1/+1
| | | meson: correct champ.c to chmap.c
* meson: add a temporary workaround for iconv crapDudemanguy2021-11-261-7/+9
| | | | | | | | | | The initial iconv dependency worked everywhere but was broken on freebsd. This was fixed in 0.60.2 but the fix accidentally broke mingw (ouch; kind of my fault for not double checking). There's another PR to fix this but that won't land until 0.60.3 so for the meantime just if/else this (both freebsd and windows work with the system method) until we want to bump the meson version (probably not for a while since opensuse tumbleweed is weirdly slow).
* vo_gpu_next: factor out context-specific code to gpu_next/context.csfan52021-11-221-1/+2
| | | | | | This is done to avoid cluttering vo_gpu_next.c with more ifdeffery and context-specific code when additional backends are added in the near future. Eventually gpu_ctx is intended to take the place of ra_ctx to further separate gpu and gpu_next.
* meson: use gnu_symbol_visibility for libmpvDudemanguy2021-11-191-1/+2
| | | | | | Following the previous commit, we can just set gnu_symbol_visibility to 'hidden' to hide everything except for the symbols we explictly want to export. This should work on gcc, clang, and msvc.
* meson: fix typo in header checkDudemanguy2021-11-181-1/+1
| | | | This should be EGL not GL. Fixes #9469.