summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* ao_pipewire: Add PipeWire audio backendThomas Weißschuh2022-01-177-0/+425
| | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* vo_gpu: add HOOKED_gatherNiklas Haas2022-01-151-0/+5
| | | | | Can be used conditionally (via #ifdef HOOKED_gather) to use textureGather in custom shaders.
* vo_gpu_next: fix SUBBITMAP_BGRANiklas Haas2022-01-111-1/+1
| | | | | | | | | The only way to fix the channel order here is to create the texture with bgra format. Incidentally, there used to be a way to set the component map for overlays directly, but no more. Shouldn't matter since everything supports bgra8 anyways, though. Fixes #9699
* sub: rename SUBBITMAP_RGBA to SUBBITMAP_BGRANiklas Haas2022-01-1110-25/+25
| | | | | This was a misnomer, the actual channel order is IMGFMT_BGRA (as the comment explicitly point out). Rename the enum for consistency.
* af_lavcac3enc: fix some minor thingssfan52022-01-101-2/+3
| | | | mark an array as static, a typo and a missing free
* af_lavcac3enc: replace deprecated av_init_packet()sfan52022-01-101-11/+17
|
* encode_lavc: replace deprecated av_init_packet()sfan52022-01-102-5/+9
|
* demux/packet: replace deprecated av_init_packet()sfan52022-01-101-7/+5
|
* image_writer: replace deprecated av_init_packet()sfan52022-01-101-10/+9
|
* vo_gpu: placebo: add missing gamma functionsNiklas Haas2022-01-101-3/+10
| | | | | | | | | These got added upstream a while ago. Need to be added to the mapping helpers. It might be time to think about bumping the minimum dependency here. Reported-by: Uoti Urpala <uau@glyph.nonexistent.invalid>
* 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.
* github/workflows: remove some pip3 usagesDudemanguy2022-01-091-7/+2
| | | | | | | | | When this was originally added, some OS package managers were slow and behind the required meson version needed for mpv to build. Both opensuse tumbleweed and freebsd now appear to carry meson 0.60.3 in their repos so we no longer need to do the two-step process of installing pip3 and then installing meson via pip. Instead, just use the OS package manager version.
* vo_gpu_next: forward dovi metadata to libplaceboNiklas Haas2022-01-091-0/+17
|
* vf_format: add dolbyvision sub-optionNiklas Haas2022-01-093-2/+13
| | | | | | | | | | Useful to strip dolbyvision from the output, in cases where the user does not want it applied. Doing this as a video filter gives users the abiilty to easily toggle this stripping at runtime in a way that properly propagates to any (potentially stateful) VO. It also thematically fits the rest of the options in vf_format, which are similarly concerned with modifying the video image parameters.
* demux_lavf: properly forward dovi config recordNiklas Haas2022-01-091-0/+13
| | | | | | This needs to be forwarded from the AVStream to the AVPacket itself, so that it reaches the decoder. There exists an FFmpeg function for this, we just need to call it. (Also add some logging)
* mp_image: add dolbyvision metadataLynne2022-01-092-0/+12
| | | | Co-authored-by: Niklas Haas <git@haasn.dev>
* wayland: use `xkb_keymap_new_from_buffer`Julian Orth2022-01-081-1/+2
| | | | | | | | | | | Instead of `xkb_keymap_new_from_string`. The protocol does not require the keymap to be null terminated and if the size of the keymap is a multiple of the page size, using `_from_string` could lead to problems. Some compositors include a null byte and even include the null byte in `size`. Therefore we have to use `strnlen` to find the real length of the string. Note that `_from_string` internally uses `strlen` and then calls `_from_buffer`.
* wayland: map keymaps with `MAP_PRIVATE`Julian Orth2022-01-081-1/+1
| | | | | | | | | | While mpv uses version 1 of the `wl_seat` protocol and `MAP_PRIVATE` is only required from version 7 on, using `MAP_PRIVATE` allows us to be compatible with compositors that have only been tested with newer applications. Since the keymap is not modified after `mmap`, using `MAP_SHARED` has no advantage over `MAP_PRIVATE`.
* vo_gpu: add --tone-mapping-modeNiklas Haas2022-01-076-40/+80
| | | | | | | | | | | This merges the old desaturation control options into a single enumeration, with the goal of both simplifying how these options work and also making this list more extensible (including, notably, new options only supported by vo_gpu_next). For the hybrid option, I decided to port the (slightly tweaked) values from libplacebo's pre-refactor defaults, rather than the old values we had in mpv, to more visually match the look of the vo_gpu_next hybrid.
* vo_gpu: add --gamut-mapping-modeNiklas Haas2022-01-076-32/+60
| | | | | | | Merge --gamut-clipping and --gamut-warning into a single option, --gamut-mapping-mode, better corresponding to the new vo_gpu_next APIs and allowing us to easily extend this option as new modes are added in the future.
* vo_gpu_next: use new HDR metadata optionsNiklas Haas2022-01-073-77/+52
| | | | | Properly forward the HDR metadata from the mpi to the equivalent (new) fields in pl_color_space. Used by the new tone mapping code.
* vo_gpu_next: update for new tone mapping optionsNiklas Haas2022-01-077-34/+90
| | | | | | | 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
* vo_gpu: move image2D precision qualifier to point of usesfan52022-01-021-3/+1
| | | | | | | image2D is only defined from GLSL ES 3.1 onwards, so those statements broke GLES 2.0. Move the qualifier to a place that is only reached with the right version requirements. fixes commit 584ab29c88d6c5ffa03666bffbbc93e4f0740f67
* vd_lavc: enable hwdec for prores by defaultrcombs2021-12-291-1/+1
|
* vo_gpu_next: fix --target-peak scalingNiklas Haas2021-12-291-1/+1
| | | | This is in nits, so it needs to be converted.
* js: events registration: clarify breakage/fixAvi Halachmi (:avih)2021-12-261-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | This commit is mainly for correcting the previous commit message. The previous commit fixed an issue where [un]registering events above the first event ID "hole" is not requested from libmpv, and that's indeed true. However, this had nearly zero impact in practice, because libmpv enables all events by default anyway (except TICK). Therefore, above the first ID "hole" [un]register requests are not sent to libmpv, and the events just keep arriving. But the callback functions are still added/removed correctly (at defaults.js), and so the script is not called back even if unregister did not actually happen with libmpv. The only event which was affected is TICK - which is not enabled by default as it's deprecated, and before the previous commit could not be enabled. So the fix is more a general correctness fix now that the IDs array can have "holes", but with effctively no impact in practice.
* js: fix event registration (keys, script-message, more)Avi Halachmi (:avih)2021-12-261-3/+3
| | | | | | | | | | | | | | Commit 63205981 removed some events but left all other event IDs at their original values, which created "holes" at the events IDs array. The JS backend for mp.register_event maps a name to an ID by scanning all IDs and stopping when the name was found or a NULL name was returned. Lua does the same except that it doesn't stop on NULL name. Previously it was not possible to have a NULL name before the end of the array, but now it is possible due to the enumeration holes. Fix by skipping missing names, like lua does.
* 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.
* wayland: avoid doing unneccesary window resizesDudemanguy2021-12-201-7/+0
| | | | | | | | | | | | | | | | | Commits 04018c306196888861775b248a8596ae494f122b cd7a7a1de8d8bffa05170befef25b251711c994a introduced behavior that updated window geometry during wayland events (specifically surface and output). This is good but they also are too aggressive with automatically resizing. For example, if a window is manually resized by the user and then dragged to a different monitor with different geometry than the initial monitor, mpv will automatically resize itself to the window's resolution. The initial thought behind this logic was for autofit to automatically readjust itself on a new monitor, but doing that breaks other common use cases. An attempt could be made to distinguish between autofit and a manual resize but that introduces a lot of complexity for an edge case. It's better to simply not change the window geometry here. Internal values are recalculated and scaled of course, but wl->window_size and wl->geometry should not change.
* 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
* wscript: switch shaderc checks to pkgconfigsfan52021-12-191-3/+3
| | | | | | Shaderc has been shipping .pc files for almost three years and we all know of the advantages. If this turns out to be problematic the old checks can be re-added but I'd like to avoid doing this preemptively.
* subprocess: unblock/reset signals before running child processsfan52021-12-191-0/+21
| | | | | | | During execve() ignored and blocked signals carry over to the child process, though apparently for SIGCHLD (which the bug report was about) this is implementation-defined. fixes #9613
* vo_gpu: stop hard-coding max compute group threadsPhilip Langdale2021-12-196-6/+13
| | | | | | | | | | We've been assuming that maximum number of compute group threads is never less than the 1024 defined by the desktop GL spec. Given that we haven't had working compute shaders for GLES and I guess the Vulkan spec defines at least as high a value, we've gotten away with it so far. But we should really look the value up and respect it.
* vo_gpu_next: implement VOCTRL_EXTERNAL_RESIZEsfan52021-12-192-1/+5
| | | | | | This is only needed on Android and supposed to handle a context resize without reconfiguring the image parameters. reconfig() already does exactly this so plug it in there.
* 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.
* mp_image, f_decoder_wrapper: implement AV_FRAME_DATA_DISPLAYMATRIXAlex Xu (Hello71)2021-12-152-1/+11
| | | | | | fixes #9249 (JPEG orientation support) with ffmpeg commit [0]. [0] https://github.com/FFmpeg/FFmpeg/commit/e93c9986027d17917c3b4f533b28ee4a2ce7cd4c
* player: make deprecated track/chapter/metadata events internalsfan52021-12-158-65/+20
| | | | | We still need these to track or notify of modifications to certain properties, but they're now gone from the libmpv ABI.
* lua: remove mp.suspend, resume and resume_allsfan52021-12-154-41/+0
| | | | | | These functions were deprecated in v0.21.0 and no-ops since v0.23.0. The matching client API functions were removed in the previous commit.
* libmpv: remove opengl_cb API and other deprecated symbolssfan52021-12-1512-593/+20
| | | | | | 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.
* {player,video}: remove references to obsolete opengl-cb APIsfan52021-12-159-50/+14
|
* af_lavcac3enc: fix memory leak on no-opNiklas Haas2021-12-141-16/+19
| | | | | | | | | Simply returning out of this function leaks avpkt, need to always "goto done". Rewrite the logic a bit to make it more clear what's going on (IMO). Fixes #9593
* vo_gpu: opengl: some fixes to make compute shaders work with GLESPhilip Langdale2021-12-124-10/+15
| | | | | | | | | It's supposed to work with GLES >= 3.1 but we had all sorts of bad assumptions in our version handling, and then our compute shaders turn out not to be GLSL-ES compliant. This change contains some necessary, but insufficient, tweaks to the shaders. Perhaps we'll make it actually work some day.
* vo_gpu: opengl: fix OpenGL ES version and extension handlingPhilip Langdale2021-12-122-5/+25
| | | | | | | | Some of the extension declarations did not include the ES version where they became core functionality, and in some of these cases, there was never actually an ES extension - it first appeared in core. We also had a number of buggy version checks where ES versions were compared against required desktop GL versions.
* vo_gpu: opengl: try and create context at version 440 againPhilip Langdale2021-12-071-0/+9
| | | | | | | | | | | | | | | | | | | | | nvidia follow the OpenGL spec very strictly, with two particular consequences: * They will give you the exact context version that you ask for, rather than the highest possible version that meets your request. * They will hide extensions that the specs say require a higher version than you request, even if it's technically possible to provide the extension at lower versions. In our case, we really want a variety of extensions, particularly compute shaders that are only available in 4.2 or higher. That means that we must explicitly include a high enough version in our list of versions to check for us to be able to get a 'good' enough context. As for which version? We restore the 4.4 version that we had in the old version selection logic. This is the highest version we ever asked for, and we have separate logic that clamps the GLSL version to 4.4, so anything newer wouldn't make a difference.
* vo_gpu: opengl: fix wrong glMemoryBarrierNiklas Haas2021-12-061-1/+1
| | | | This call was completely wrong.
* sub/lavc_conv: only set subtitle text format when requiredJan Ekström2021-12-051-0/+3
| | | | | | | | | | | | | Since libavcodec major version 59, the requested "ass" format became the default as the old timing-included format was disabled starting with that version. Additionally, this option by itself has since been deprecated as it no longer serves any purpose. References: FFmpeg/FFmpeg@1f63665ca567fbc49fa80166d468a822c2999efa FFmpeg/FFmpeg@176b8d785bf7531b6eb8e3d6e8c03f75cb29de1e Fixes #9413
* vo_gpu_next: fix UB in query_format()Niklas Haas2021-12-051-1/+1
| | | | | | | | | `plane_data_from_imgfmt` doesn't zero-initialize the struct, so this contained invalid values for e.g. `row_stride`, causing formats to *randomly* fail. (Especially any formats with specific alignment requirements) Might fix #9424 and #9425.
* wayland: ensure read and draw buffers are assignedKurt Kartaltepe2021-12-043-0/+9
| | | | | | | | | | | | | | | | | This is a workaround for nvidia proprietary drivers. The authors of those drivers interpret the spec such that eglMakeCurrent will not reconfigure the read and draw buffers. Thus windows wont display anything drawn by opengl. nvidia authors refer to https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_no_config_context.txt specifically Issues 2/3 which reference eglMakeCurrent. On mesa this is a non-issue and the read/draw targets are assigned with eglMakeCurrent. The context must be made current in order to query OpenGL strings. An earlier proposal to create the wayland window surface similarly to X11 during init was deemed inappropriate so instead we manually set the targets once we have created a window surface.
* audio: fix typoAman Karmani2021-12-031-1/+1
|
* opengl: support DebugMessageCallback on ESKurt Kartaltepe2021-12-021-0/+11
| | | | | This function is provided by a different extension on OpenGL ES so we add a separate gl_functions.
* ao_openal: enable AL_SOFT_direct_channels_remix extension by defaultIvan2021-11-292-6/+10
| | | | Prevent audio distortions caused by OpenAL's 3D effects.
* player: make --keep-open=always work with --loop-playlistLeo Izen2021-11-281-2/+2
| | | | | | | | Allow --keep-open=always to work with --loop-playlist, where before this patch it would work only on the last playthrough of the playlist. This patch allows it to work on all playthroughs. Fixes #9470.
* vo_gpu_next: implement VOCTRL_SCREENSHOTNiklas Haas2021-11-281-2/+120
| | | | | | | | | | | | | | | | | | | | | | | | | | Somewhat annoying but still relatively straightforward. There are several ways to approach this, but I settled on reusing the pl_queue as a cheap way to get access to the currently mapped frame. This saves us from having to process `vo_frame` at all, and also avoids any overhead from re-uploading the same frame twice. (However maybe there's some circumstance in which `vo_frame` needs to be queried/updated first, to get a screenshot of the correct frame? I'm not sure.) I also had the option of going with either pl_render_image() on the extract pl_frame, or just calling pl_render_image_mix directly on it. I went for the latter, because in the optimal case, this allows the rendered frame to be directly retrieved from the cache, actually entirely avoiding any sort of recompute overhead. This makes e.g. ctrl+s during playback essentially free. (Except for the download cost, obviously) It would be even neater if we could make this VOCTRL asynchronous and thereby leverage libplacebo's asynchronous download capabilities. But oh well. That will have to wait for a sufficiently rainy day. Closes #9388
* vo_gpu_next: factor out some common helpersNiklas Haas2021-11-281-43/+63
| | | | In preparation of VOCTRL_SCREENSHOT support
* client API: also export mpv_client_api_versionDudemanguy2021-11-271-1/+1
| | | | | | | 20c4036daa680ebf9d379c9a7566bcf3ae12d405 switched to using symbol visibility attributes for mpv client api functions (for the meson build at least). Unfortunately mpv_client_api_version was mistakenly missed. We need to export this function as well. Fixes #9531.
* osc: fix cache displaying 60s in some casesFunami5802021-11-271-2/+2
| | | | It was caused by string.format rounding e.g. 59.9 to 60.
* vo_gpu_next: guard sentinel in free_dr_bufNiklas Haas2021-11-261-0/+1
| | | | | | As noticed in #9526, apparently there's some case in which DR buffers get corrupted. Add an explicit sentinel check to try and figure out which cases these are.
* 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).
* ci: fix the path for logs on failure in mingwDudemanguy2021-11-251-1/+1
| | | | | The old directory was wrong. The actual build directory has the matrix prefix in its name.
* vo_gpu: hwdec_vaapi: avoid drm_fourcc.h dependencyDave Airlie2021-11-251-1/+4
| | | | Suggested by haasn
* osc: add options: chapters/playlist OSD, hover chapter formatAvi Halachmi (:avih)2021-11-252