summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* video/drmprime: fix use-after-freePhilip Langdale2022-08-091-1/+2
| | | | Same thing as in hwdec/drmprime.
* hwdec/drmprime: fix buildPhilip Langdale2022-08-091-1/+1
| | | | I accidentally included an adjustment for a pending change.
* hwdec/dmabuf_interop: Properly prefix `priv` structPhilip Langdale2022-08-095-14/+14
| | | | | Obviously, this should be dmabuf_interop_priv as it's declared in a header file that could get included anywhere.
* hwdec/drmprime: Fix small issuesPhilip Langdale2022-08-091-6/+21
| | | | | | | | sfan5 found a few things after I pushed the change, so this fixes them. * Use-after-free on drm_device_Path * Not comparing render_fd against -1 * Not handling dup() errors
* audio: drain ao on EOFThomas Weißschuh2022-08-091-0/+1
| | | | | | | | | | This gives pull-based AOs the chance to play all queued audio. Also it will make sure that the audio has finished playing so we can reinitialize the AO if format changes are necessary. Fixes #10018 Fixes #9835 Fixes #8904
* hwdec/drmprime: add drmprime hwdec-interopPhilip Langdale2022-08-098-1/+318
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* ao_pipewire: tell audio server about number of queued samplesThomas Weißschuh2022-08-091-1/+2
|
* man: remove unhelpful languageMia Herkt2022-08-071-28/+8
| | | | | | | | Whether or not the GNOME project has a tendency to make life difficult for anyone outside their ecosystem, the user manual is no place for childish rants such as this. Keep it to what is relevant for users.
* ao_pipewire: use mpv loggingThomas Weißschuh2022-08-041-1/+1
|
* hwdec/dmabuf_interop_gl: support basic multi-plane formatsPhilip Langdale2022-08-031-38/+53
| | | | | | | | | | | | | | | | | I already added the equivalent logic for dmabuf_interop_pl previously but I skipped the GL support because importing dmabufs into GL requires explicitly providing the DRM format, and if you are taking a multi-plane format and trying to treat each plane as a separate layer, you need to come up with a DRM format for each synthetic layer. But my initial testing has shown that the RockPRO64 board I've got to work on drmprime hwdec will only produce NV12 in a single layer multi plane format, and it doesn't have Vulkan support, so I have had to tackle the GL multi-plane problem. To that end, this change introduces the infrastructure to provide new formats for synthetic layers. We only have lookup code for NV12 and P010 as these were the only ones I could test.
* hwdec/dmabuf_interop: use AVDRMFrameDescriptor to describe dmabufsPhilip Langdale2022-08-037-31/+80
| | | | | | | | | | | | 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/dmabuf_interop: refactor out hwdec_vaapi dependenciesPhilip Langdale2022-08-034-39/+53
| | | | | | With the files renamed, we can now disentangle the shared private struct between the interops and hwdec_vaapi. We need this separation to allow the future drmprime hwdec to use the interops.
* hwdec/vaapi: rename interops to reflect more general usePhilip Langdale2022-08-036-15/+15
| | | | | | | | | | | 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-034-2/+22
|
* drm_common: skip cards that don't support KMS for autodetectionsfan52022-08-031-0/+15
| | | | | | Avoids another pitfall on systems where the first card has a primary node but is not capable of KMS. With this change --drm-context=drm should work correctly out-of-the-box in all cases.
* drm: avoid drmModeAtomicCommit races by blockingHo Ming Shun2022-08-031-1/+1
| | | | | | | | On S905X (meson) boards drmModeAtomicCommit called from disable_video_plane in hwdec_drmprime_drm.c might still be running when another call is made from queue_flip in context_drm_egl.c. This causes EBUSY error in queue_flip, and causes mpv to hang.
* video: remove unnecessary codeAaron Boxer2022-08-011-1/+1
| | | | plane_clear[p] is never NULL
* ytdl_hook: fix playlist index extractionChristoph Heinrich2022-07-261-2/+4
| | | | | | | The example given in #3024 would not play the correct video when combined with `--ytdl-raw-options=yes-playlist=`. Allowing `youtube:tab` as extractor and correcting the id check fixes that.
* ci: bump macos runner versionSukkaW2022-07-261-2/+2
|
* wayland: add missing newline in wayland_commonEmmanuel Gil Peyrot2022-07-231-1/+1
|
* hwdec_vaapi_pl: support simple multi-plane image formatsPhilip Langdale2022-07-233-11/+31
| | | | | | | | | | | | | | | | | This is somewhat academic for now, as we explicitly ask for separate layers and the scenarios where multi-plane images are required also use complex formats that cannot be decomposed after the fact, but nevertheless it is possible for us to consume simple multi-plane images where there is one layer with n planes instead of n layers with one plane each. In these cases, we just treat the planes the same as we would if they were each in a separate layer and everything works out. It ought to be possible to make this work for OpenGL but I couldn't wrap my head around how to provide the right DRM fourcc when pretending a plane is a layer by itself. So I've left that unimplemented.
* vo_gpu_next: fix screenshots on single-frame filesNiklas Haas2022-07-231-1/+1
| | | | | This check was wrong/outdated. PL_QUEUE_MORE does not imply an empty frame mix, it can still contain partial frames.
* vo_gpu/d3d11: fix VRAM leakGraham Booker2022-07-211-1/+1
| | | | | | A VRAM memory leak was present in d3d11 when `idle=yes` and playback stops for an item. This patch re-enables some of the code which is only used during diagnostic which fixes the issue.
* osc.lua: add osc-tcspace script optionRyan Hendrickson2022-07-192-0/+14
| | | | | | | | | | Generally, the hard-coded sizes used for the OSC elements are comfortable regardless of the font used, but the timecode fields have relatively many characters, and so are affected to a greater degree by fonts with a wider or narrower average character width than expected. This allow users to adjust the space reserved for the timecode fields to compensate.
* osc.lua: add osc-unicodeminus script optionRyan Hendrickson2022-07-192-2/+12
| | | | | | This option enables the use of the Unicode U+2212 Minus Sign character when displaying the time remaining, instead of "-" (U+002D Hyphen-Minus).
* vo_gpu_next: don't crash on !frame->currentNiklas Haas2022-07-181-5/+7
| | | | This path incorrectly assumes there is a current frame.
* ytdl_hook: always set HTTP headersChristoph Heinrich2022-07-181-2/+6
| | | | | In some cases HTTP headers were not set, leading to some sites not working despite being supported by yt-dlp/youtube-dl.
* libplacebo: fix compatibility with libplacebo >= 5Coelacanthus2022-07-161-1/+1
| | | | | | | | | | | | libplacebo 4.157 [1] rename context.h to log.h, and left a compatibility header. In 5.x, this header has been removed. Since we require libplacebo 4.157 to build mpv, we can just use log.h to fix compatibility with 5.x. [1]: https://github.com/haasn/libplacebo/commit/2459200a133d1a0f36f092a32a2d5d443cfbee55 Signed-off-by: Coelacanthus <coelacanthus@outlook.com>
* github/workflows: upgrade FreeBSD to 13.1Jan Beich2022-07-151-1/+1
| | | | | FreeBSD doesn't support /latest and /quarterly package repos on EOL versions. 13.0 reaches EOL on 2022-08-31, so avoid CI breakage.
* vo_gpu: fix 3DLUT precisionNiklas Haas2022-07-151-2/+3
| | | | | | | | | | | | | Using cmsFLAGS_HIGHRESPRECALC results in Little-CMS generating an internal 49x49x49 3DLUT, from which it then samples our own 3DLUT. This is completely pointless and not only destroys the accuracy of the 3DLUT, but also results in no additional gain from increasing the 3DLUT precision further. The correct flag for us to be using is cmsFLAGS_NOOPTIMIZE, which suppresses this internal 3DLUT generation and gives us the full precision. We can also specify cmsFLAGS_NOCACHE, which is negligible but in theory prevents Little-CMS from unnecessary pixel equality tests.
* ao_pipewire: prevent deprecation warning for pw_stream_get_time()Thomas Weißschuh2022-07-081-1/+7
|
* ao_pipewire: pipewire uses linear volumeWim Taymans2022-07-081-3/+2
| | | | Don't use cube root volumes, pipewire uses linear volumes.
* ao_pipewire: don't access core after disconnectWim Taymans2022-07-081-1/+0
| | | | | | | | pw_core_disconnect frees the core, so accessing it afterward to destroy the context is not allowed. Instead, just destroy the context, the first thing it does is disconnect all cores for us.
* ao_pipewire: zero listenersWim Taymans2022-07-081-0/+2
| | | | | The listeners need to be cleared because removing them might invoke the removed handler, which could otherwise point to invalid memory.
* ao_pipewire: support ao-volume on non-stereo channel layoutsAlex B2022-07-081-9/+23
| | | | | | | | mpv only remembers volume for two channels. Always apply the same volume to all channels in case of non-stereo layout similarly to ao_pulse. Don't try to do anything smart when averaging volumes, normally they are equal anyway.
* DOCS/encoding: remove the legacy option syntaxhooke0072022-07-071-37/+37
|
* drm_prime: fix newline in error messageHo Ming Shun2022-07-051-1/+1
|
* meson: fix rst2html commandJ. Dekker2022-07-051-1/+1
|
* context_x11egl: remove supposed transparency fixDudemanguy2022-07-011-3/+0
| | | | | | | | | | | | | | | | This was introduced in 7fb972fd3997bfa389caa7c1eb899ea4b8444083 and later revised in f5a094db047ee0162774301a2ce4ed685ca9d539. Transparency in EGL/X11 has been broken upstream for years in Mesa unfortunately. However, the first commit claimed to have found a way to preserve transparency by doing a trick with picking EGLConfigs (the second commit revises this but keeps the logic in place). However, it doesn't appear that the first commit actually fixes anything (transparency doesn't work on my machine) and no one else seems to have reported it working. On the other hand, if Mesa does ever actually fix this, transparency would immediately be broken since mpv would always set the EGL_ALPHA_SIZE to 0. Go ahead and remove this since it doesn't seem to have any actual utility and is technically a bit of a timebomb (not that deleting two lines is a lot of work but still) if upstream ever does fix this.
* DOCS: fix typo257924312022-07-011-1/+1
|
* DOCS/osc: fix option "showidlescreen" -> "idlescreen"dyphire2022-07-011-1/+1
| | | | This option was added in mpv-player@ec236f7, but its name in the document description is incorrect
* 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.)
* vo_gpu_next: implement --cscaleNiklas Haas2022-06-241-0/+3
| | | | Fixes #9451
* swresample: don't forcibly clip on every conversionNiklas Haas2022-06-231-22/+0
| | | | | | | | | | | | | This was introduced in 04257417 without a clear explanation of the bug it was solving, so I have no idea if it's still needed (or why it ever was). And it definitely creates unexpected behavior, e.g. forced clipping when converting between float and floatp. I therefore think we should simply remove this logic and see if it regresses anything else, then fix those other bugs *properly* (if they're still around). Fixes #9979
* js: key bindings: ensure priorities for same-key - againAvi Halachmi (:avih)2022-06-231-1/+1
| | | | | | | | | | | | Commit 7f4841ff sorted the bindings so that if the same key was bound more than once, then the newest binding takes priority (sorted last). However, it got the comparison function wrong, which means the result of the sort depended on the algorithm and not on the actual data, so the priority for keys with more than one binding was still arbitraty. Fix the sort function, and finally ensure that later binding acutally override earlier bindings of the same key.
* x11: avoid XPresent API calls when it's not neededDudemanguy2022-06-227-23/+52
| | | | | | | | | | | This commit kind of mixes several related things together. The main thing is to avoid calling any XPresent functions or internal functions related to presentation when the feature is not auto-whitelisted or enabled by the user. Internally rework this so it all works off of a use_present bool (have_present is eliminated because having a non-zero present_code covers exactly the same thing) and make sure it updates on runtime. Finally, put some actual logging in here whenever XPresent is enabled/disabled. Fixes #10326.
* lua: command_native_async: make the callback optionalCogentRedTester2022-06-221-0/+1
| | | | | | | The documentation states that the callback is optional, but it actually was not. Now it's optional, as docuented.
* lua: command_native_async: always callback a-syncCogentRedTester2022-06-223-2/+4
| | | | | | | | | | | | | | | | | Previously if the raw command_native_async returned an error then the callback function was run directly. This meant that script writers potentially had to account for both synchronous and asynchronous logic in the callback, which can happen even with seemingly 'safe' commands if the mpv event queue is full. This was at odds with the Javascript implementation of the function, which always runs the callback asynchronously. Now the mp.add_timeout function is used to run the callback asynchronously on error, replicating the Javascript implementation. This provides consistency for developers in how the callback is handled in Lua, and increases consistency between the Lua and Javascript APIs.
* x11: add --x11-present optionDudemanguy2022-06-225-3/+27
| | | | | | | | | | | With the recent addition of the libxpresent, it should improve frame timings for most users. However, there were known cases of bad behavior (Nvidia) which lead to a construction of a whitelist instead of just enabling this all the time. Since there's no way to predict whatever combination of hardware/drivers/etc. may work correctly, just give users an option to switch the usage of xorg's presentation statistics on/off. The default value, auto, works like before (basically, Mesa drivers and no Nvidia are allowed), but now one can force it on/off if needed.
* x11: add nouveau to the xpresent whitelistDudemanguy2022-06-221-1/+3
| | | | | A user noted that this worked correctly (i.e. vsync jitter of 0) so go ahead and add it here as a safe driver for xpresent to use.
* x11: correct provider detection logicDudemanguy2022-06-211-2/+2
| | | | | | | | | | | | The old logic always reset the x11->has_mesa/has_nvidia values on every loop through the provider. This meant that it would always just match whatever the last provider happened to be. So in the case of a dual GPU system, if nvidia was the very first provider and the integrated intel/amd card was the second (in practice, this is probably mostly the other way around), then mpv would set has_mesa to true and has_nvidia to false and thus try to use presentation. This is not the intended behavior. Just rework this by also checking x11->has_mesa/has_nvidia in the loop so a true value from the previous iteration is preserved.
* vo_vaapi_wayland: remove vaapi format query as formats are never usedAaron Boxer2022-06-211-25/+2
| | | | | | | | This code was taken from the older vo_vaapi driver, which does use the vaapi format list, but the new driver has no use for these formats, as it is only interested in va surfaces that can be mapped to wl buffers. The format doesn't enter into it at all.
* 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: replace strcasestr usage with bstrDudemanguy2022-06-191-6/+8
| | | | | strcasestr is a GNU extension, but we can just use bstr instead to do the same thing.
* github/workflows: install libxpresent on freebsdDudemanguy2022-06-191-0/+1
| | | | This is needed for x11 which is in turn needed for vdpau.
* x11: support xorg present extensionDudemanguy2022-06-1913-196/+99
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* x11: use xrandr providers for driver detectionDudemanguy2022-06-192-0/+27
| | | | | | | | | | | | | | Unfortunately there's a certain company that makes graphics drivers that are harder to deal with. The next commit aims to implement presentation, but some empirical testing from users show that it's actually broken. Give up and just tap into Xrandr so we can figure what drivers (or well, providers by the extension terminology) are driving the screen. Basically if we find intel, amd, or radeon, assume it's a Mesa driver. If we find nvidia, then it must be nvidia. This detection requires randr 1.4 (which means using presentation in mpv secretly depends on randr 1.4), but this protocol version is nearly a decade old anyway so probably 99.9% of users are fine. Do the version query check and all that anyway just to be on the safe side.
* vo: move wayland presentation to separate filesDudemanguy2022-06-1910-120/+163
| | | | | | | | | | | | | | | | | | | | | | | | | Wayland had some specific code that it used for implementing the presentation time protocol. It turns out that