Coder Social home page Coder Social logo

io.mpv.mpv's Introduction

mpv - a free, open source, and cross-platform media player - Built for flatpak

https://mpv.io/

Information for Users

Installation

Follow this guide to install flatpak and setup the flathub repository.

You can then install mpv various ways:

By visiting https://flathub.org/apps/details/io.mpv.Mpv and clicking install, this will open Discover, Gnome Software or another GUI package installation program.

By using a GUI package installation program like Discover or Gnome Software, search for mpv and click install.

By using a command line interface:

Install only for your user: flatpak --user install io.mpv.Mpv

Install systemwide: flatpak install io.mpv.Mpv

Running

From a command line:

flatpak run io.mpv.Mpv

You can also create an alias by running the following command:

echo "alias mpv='flatpak run io.mpv.Mpv'" >> ~/.bashrc && source ~/.bashrc

Then you can use the command mpv in a terminal.

Another method is creating an executable shell script called mpv inside of your path with the following:

echo '
    #!/bin/sh
    flatpak run io.mpv.Mpv "$@"
' > mpv

Make it executable with chmod +x mpv

Information for Developers / Testers

io.mpv.Mpv.appdata.xml

The date and version are automatically updated when building mpv.

Building from source

If you want to test changes to the io.mpv.Mpv.yml file you can build this repository from source.

Install flatpak-builder using your package manager. If it's not available, install it through flatpak: flatpak install flathub org.flatpak.Builder

Download the SDK used by io.mpv.Mpv.yml (see the file for the current version):

flatpak --user install flathub org.freedesktop.Platform//22.08 org.freedesktop.Sdk//22.08

Clone this repository:

git clone https://github.com/flathub/io.mpv.Mpv.git

cd io.mpv.Mpv

Build and install the project:

flatpak-builder --user --install --force-clean build-dir io.mpv.Mpv.yml

If you're testing changes and don't want to recheck any of the remote sources:

flatpak-builder --user --install --force-clean --disable-download build-dir io.mpv.Mpv.yml

Locally testing the x-checker-data

Install flatpak-external-data-checker:

flatpak install --from https://dl.flathub.org/repo/appstream/org.flathub.flatpak-external-data-checker.flatpakref

Clone this repository:

git clone https://github.com/flathub/io.mpv.Mpv.git

Run flatpak-external-data-checker:

flatpak run --filesystem="$(realpath io.mpv.Mpv)" org.flathub.flatpak-external-data-checker io.mpv.Mpv/io.mpv.Mpv.yml

If you run into errors and want more verbose output, append the -v flag:

flatpak run --filesystem="$(realpath io.mpv.Mpv)" org.flathub.flatpak-external-data-checker io.mpv.Mpv/io.mpv.Mpv.yml -v

io.mpv.mpv's People

Contributors

catsout avatar dawidpotocki avatar dgcampea avatar easrng avatar erick555 avatar fakeshemp avatar fastrizwaan avatar faveoled avatar flathubbot avatar guldoman avatar keftie22 avatar kevinlekiller avatar man2dev avatar minmotech avatar pugaizai avatar teohhanhui avatar xduugu avatar yakushabb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

io.mpv.mpv's Issues

Using waf to build mpv is deprecated, we should use meson.

According to mpv-player/mpv@3858a81 using waf is deprecated, 0.36.0 might be the last version with waf as a build system.

I've been trying to build using meson with:

- name: mpv
  buildsystem: meson
  config-opts:
    - -Dlibmpv=true
    - -Dbuild-date=false
    - -Dmanpage-build=disabled
    - -Dalsa=disabled
    - -Dsdl2=enabled
    - -Dlibarchive=enabled
    - -Ddvbin=enabled
    - -Dcdda=enabled
    - -Ddvdnav=enabled
    - -Dshaderc=enabled
    - -Dvulkan=enabled
  cleanup:
    - /include
    - /lib/pkgconfig
  post-install:
    - install -D -m644 io.mpv.Mpv.appdata.xml /app/share/appdata/io.mpv.Mpv.appdata.xml
    # save screenshots at ~/Pictures/mpv
    - echo "screenshot-directory=~/Pictures/mpv" > /app/etc/mpv/mpv.conf
  sources:
    - type: file
      path: io.mpv.Mpv.appdata.xml
    - type: git
      url: https://github.com/mpv-player/mpv.git
      tag: v0.35.1
      commit: 140ec21c89d671d392877a7f3b91d67e7d7b9239
      x-checker-data:
          type: git
          tag-pattern: ^v([\d.]+)$

Only issue is the post-install command doesn't find io.mpv.Mpv.appdata.xml so it dies.

install: cannot stat 'io.mpv.Mpv.appdata.xml': No such file or directory

Vulkan video output driver support

Related: #6

Since #15 (Update runtime to 21.08) was merged, support for Vulkan output should be possible.
Unfortunately, it looks like it will take more than a simple manifest file change.
Recompiling it fails to enable vulkan support and it looks like many of the dependencies for vulkan are already in the runtime/sdk but fail to get picked up during compilation. Manually adding them doesn't change much as some dependencies seem to require manual patching to work within the runtime.

hwdec=auto-safe makes mpv fail

It used to work until a few versions ago not sure when it got broken but currently if you have hwdec=auto-safe in your mpv.conf mpv fails to open the video. Here is the log:

[cplayer] Command line options: '-v' 'kek.mkv'
[cplayer] mpv 0.33.1 Copyright © 2000-2020 mpv/MPlayer/mplayer2 projects
[cplayer]  built on UNKNOWN
[cplayer] FFmpeg library versions:
[cplayer]    libavutil       56.70.100
[cplayer]    libavcodec      58.134.100
[cplayer]    libavformat     58.76.100
[cplayer]    libswscale      5.9.100
[cplayer]    libavfilter     7.110.100
[cplayer]    libswresample   3.9.100
[cplayer] FFmpeg version: 4.4
[cplayer] 
[cplayer] Configuration: waf configure --prefix=/app --enable-libmpv-shared --disable-build-date --disable-alsa --enable-libmpv-shared --enable-sdl2 --enable-libarchive
[cplayer] List of enabled features: asm cplayer cplugins cuda-hwaccel cuda-interop debug-build drm egl egl-drm egl-helpers egl-x11 ffmpeg ffnvcodec gbm gbm.h gl gl-wayland glibc-thread-name glob glob-posix gpl iconv jack jpeg lcms2 libarchive libass libavdevice libdl libm libmpv-shared librt linux-fstatfs linux-input-event-codes lua luajit memfd_create optimize plain-gl posix posix-or-mingw pthreads pulse sdl2 sdl2-audio sdl2-gamepad sdl2-video stdatomic uchardet vaapi vaapi-drm vaapi-egl vaapi-wayland vaapi-x-egl vaapi-x11 vdpau vt.h wayland wayland-protocols x11 xv zlib
[cplayer] Reading config file /app/etc/mpv/encoding-profiles.conf
[cplayer] Applying profile 'default'...
[cplayer] Reading config file /app/etc/mpv/mpv.conf
[cplayer] Applying profile 'default'...
[cplayer] Setting option 'screenshot-directory' = '~/Pictures/mpv-screenshots' (flags = 4)
[cplayer] Reading config file /var/home/salty/.var/app/io.mpv.Mpv/config/mpv/mpv.conf
[cplayer] Applying profile 'default'...
[cplayer] Setting option 'hwdec' = 'auto-safe' (flags = 4)
[cplayer] Setting option 'v' = '' (flags = 8)
[file] Opening /app/etc/mpv/input.conf
[input] Parsing input config file /app/etc/mpv/input.conf
[input] Input config file /app/etc/mpv/input.conf parsed: 2 binds
[cplayer] Waiting for scripts...
[cplayer] Set property: shared-script-properties -> 1
[osd/libass] Shaper: FriBidi 1.0.9 (SIMPLE) HarfBuzz-ng 2.7.2 (COMPLEX)
[osd/libass] Setting up fonts...
[osd/libass] Using font provider fontconfig
[osd/libass] Done.
[cplayer] Set property: shared-script-properties -> 1
[mpv_thumbnail_script_client_osc]  
[osd/libass] Shaper: FriBidi 1.0.9 (SIMPLE) HarfBuzz-ng 2.7.2 (COMPLEX)
[osd/libass] Setting up fonts...
[osd/libass] Using font provider fontconfig
[osd/libass] Done.
[cplayer] Set property: osc=false -> 1
[mpv_thumbnail_script_client_osc] The 'tracks-changed' event is deprecated and will be removed.
[cplayer] Set property: shared-script-properties -> 1
[cplayer] Set property: shared-script-properties -> 1
[cplayer] Done loading scripts.
[cplayer] Running hook: ytdl_hook/on_load
[ytdl_hook] ytdl:// hook 
[ytdl_hook] not a ytdl:// url 
[cplayer] Set property: shared-script-properties -> 1
[osd/libass] Shaper: FriBidi 1.0.9 (SIMPLE) HarfBuzz-ng 2.7.2 (COMPLEX)
[osd/libass] Setting up fonts...
[osd/libass] Using font provider fontconfig
[osd/libass] Done.
[file] Opening kek.mkv
[demux] Trying demuxers for level=normal.
[mkv] Seeking to 1530583150 to read header element 0x1c53bb6b.
[file] stream level seek from 131072 to 1530583150
[mkv] Parsing cues...
[mkv] Seeking to 1530645329 to read header element 0x1254c367.
[file] stream level seek from 1530646329 to 5731
[mkv] All headers are parsed!
[demux] Detected file format: Matroska
[cplayer] Opening done: kek.mkv
[find_files] Loading external files in .
[cplayer] Running hook: ytdl_hook/on_preloaded
[mkv] select track 0
[mkv] select track 1
[mkv] select track 2
[cplayer]  (+) Video --vid=1 (*) (hevc 1920x800 23.976fps)
[cplayer]  (+) Audio --aid=1 --alang=eng (*) (aac 6ch 48000Hz)
[cplayer]  (+) Subs  --sid=1 (*) (subrip)
[vo/gpu] Probing for best GPU context.
[vo/gpu/opengl] Initializing GPU context 'wayland'
[vo/gpu/wayland] Registered for protocol wl_compositor
[vo/gpu/wayland] Registered for protocol wl_shm
[vo/gpu/wayland] Registered for protocol wl_output
[vo/gpu/wayland] Registered for protocol wl_data_device_manager
[vo/gpu/wayland] Registered for protocol xdg_wm_base
[vo/gpu/wayland] Registered for protocol wl_seat
[vo/gpu/wayland] Registered for protocol wp_presentation
[vo/gpu/wayland] GNOME's wayland compositor lacks support for the idle inhibit protocol. This means the screen can blank during playback.
[vo/gpu/wayland] Compositor doesn't support the zxdg_decoration_manager_v1 protocol!
[vo/gpu/wayland] Compositor doesn't support the zwp_idle_inhibit_manager_v1 protocol!
[vo/gpu/opengl] EGL_VERSION=1.4
[vo/gpu/opengl] EGL_VENDOR=Mesa Project
[vo/gpu/opengl] EGL_CLIENT_APIS=OpenGL OpenGL_ES 
[vo/gpu/opengl] Trying to create Desktop OpenGL context.
[vo/gpu/wayland] GL_VERSION='4.2 (Core Profile) Mesa 21.0.3 (git-091978e0ec)'
[vo/gpu/wayland] Detected desktop OpenGL 4.2.
[vo/gpu/wayland] GL_VENDOR='Intel Open Source Technology Center'
[vo/gpu/wayland] GL_RENDERER='Mesa DRI Intel(R) HD Graphics 4000 (IVB GT2)'
[vo/gpu/wayland] GL_SHADING_LANGUAGE_VERSION='4.20'
[vo/gpu/wayland] Loaded extension GL_ARB_buffer_storage.
[vo/gpu/wayland] Loaded extension GL_ARB_shader_storage_buffer_object.
[vo/gpu/wayland] Loaded extension GL_ARB_compute_shader.
[vo/gpu/wayland] Loaded extension GL_ARB_arrays_of_arrays.
[vo/gpu/wayland] Loaded extension GL_ARB_debug_output.
[vo/gpu] Testing FBO format rgba16f
[vo/gpu] Using FBO format rgba16f.
[vo/gpu] No advanced processing required. Enabling dumb mode.
[vo/gpu/wayland] Registered output LGD 0x03a3 (0x4):
[vo/gpu/wayland] 	x: 0px, y: 0px
[vo/gpu/wayland] 	w: 1366px (280mm), h: 768px (160mm)
[vo/gpu/wayland] 	scale: 1
[vo/gpu/wayland] 	Hz: 60.018000
[vo/gpu] Resize: 0x0
[vd] Container reported FPS: 23.976024
[vd] Codec list:
[vd]     hevc - HEVC (High Efficiency Video Coding)
[vd]     hevc_v4l2m2m (hevc) - V4L2 mem2mem HEVC decoder wrapper
[vd]     hevc_cuvid (hevc) - Nvidia CUVID HEVC decoder
[vd] Opening decoder hevc
[vd] Looking at hwdec hevc-nvdec...
[vo/gpu] Loading hwdec driver 'vaapi-egl'
[vo/gpu/vaapi-egl] using VAAPI EGL interop
[vo/gpu/vaapi-egl] Trying to open a x11 VA display...
[vo/gpu/vaapi-egl] Trying to open a wayland VA display...
wl_drm@23: error 0: authenticate failed
VA error: wayland: Wayland roundtrip error: Protocol error (errno 71)
[vo/gpu/vaapi-egl/vaapi] libva: vaGetDriverNameByIndex() failed with invalid VADisplay, driver_name = (null)
[vo/gpu] Loading failed.
[vo/gpu] Loading hwdec driver 'cuda-nvdec'
Cannot load libcuda.so.1
[vo/gpu/cuda-nvdec] Failed to load CUDA symbols
[vo/gpu] Loading failed.
[vo/gpu] Loading hwdec driver 'drmprime-drm'
[vo/gpu/drmprime-drm] Failed to retrieve DRM fd from native display.
[vo/gpu] Loading failed.
[vd] Could not create device.
[vd] Looking at hwdec hevc-vaapi...
[vd] Could not create device.
[vd] Looking at hwdec hevc-nvdec-copy...
[ffmpeg] AVHWDeviceContext: Cannot load libcuda.so.1
[ffmpeg] AVHWDeviceContext: Could not dynamically load CUDA
[vd] Could not create device.
[vd] Looking at hwdec hevc-vaapi-copy...
[vo/gpu/wayland] Error occurred on the display fd, closing
[vaapi] libva: /usr/lib/x86_64-linux-gnu/dri/intel-vaapi-driver/iHD_drv_video.so init failed
[vaapi] Initialized VAAPI: version 1.8
[vd] Trying hardware decoding via hevc-vaapi-copy.
[vd] Selected codec: hevc (HEVC (High Efficiency Video Coding))
[vf] User filter list:
[vf]   (empty)
[ad] Codec list:
[ad]     aac - AAC (Advanced Audio Coding)
[ad]     aac_fixed (aac) - AAC (Advanced Audio Coding)
[ad]     libfdk_aac (aac) - Fraunhofer FDK AAC
[ad] Opening decoder aac
[ad] Requesting 1 threads for decoding.
[ad] Selected codec: aac (AAC (Advanced Audio Coding))
[af] User filter list:
[af]   (empty)
[sub/ass] Shaper: FriBidi 1.0.9 (SIMPLE) HarfBuzz-ng 2.7.2 (COMPLEX)
[sub/ass] Setting up fonts...
[sub/ass] Using font provider fontconfig
[sub/ass] Done.
[cplayer] Starting playback...
[vd] Pixel formats supported by decoder: vaapi_vld vdpau cuda yuv420p10le
[vd] Codec profile: Main 10 (0x2)
[vd] Requesting pixfmt 'vaapi_vld' from decoder.
[ffmpeg/video] hevc: No support for codec hevc profile 2.
[ffmpeg/video] hevc: Failed setup for format vaapi_vld: hwaccel initialisation returned error.
[vd] Pixel formats supported by decoder: vdpau cuda yuv420p10le yuv420p10le
[vd] Codec profile: Main 10 (0x2)
[vd] Requesting pixfmt 'yuv420p10le' from decoder.
[vd] Falling back to software decoding.
[vd] Detected 4 logical cores.
[vd] Requesting 5 threads for decoding.
[vd] DR failed - disabling.
[vd] Using software decoding.
[vd] Decoder format: 1920x800 yuv420p10 auto/auto/auto/limited/auto CL=mpeg2/4/h264
[vd] Using container aspect ratio.
[vf] [in] 1920x800 yuv420p10 bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264
[vf] [userdeint] 1920x800 yuv420p10 bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264
[vf] [userdeint] (disabled)
[vf] [autorotate] 1920x800 yuv420p10 bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264
[vf] [autorotate] (disabled)
[vf] [convert] 1920x800 yuv420p10 bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264
[vf] [convert] (disabled)
[vf] [out] 1920x800 yuv420p10 bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264
[af] [in] 48000Hz 5.1 6ch floatp
[af] [userspeed] 48000Hz 5.1 6ch floatp
[af] [userspeed] (disabled)
[af] [convert] 48000Hz 5.1 6ch floatp
[cplayer] EOF code: 5  
[cplayer] finished playback, success (reason 3)
[cplayer] 
[cplayer] Exiting... (Quit)
[cplayer] Set property: shared-script-properties -> 1
[cplayer] Set property: shared-script-properties -> 1
[vo/gpu/wayland] Deregistering output LGD 0x03a3 (0x4)

GLib-GIO-CRITICAL error when quitting on the terminal

When I play an audio file on the terminal (I used the suggested symlink to run the flatpak version), then MPV soon goes into the background, I get an alert to tell me it is doing it. I don't want it to do this, and don't know why it does it.

When I press ctrl-c to quit I get:

Exiting... (Quit)

(process:2): GLib-GIO-CRITICAL **: 09:48:23.827: g_dbus_connection_emit_signal: assertion 'G_IS_DBUS_CONNECTION (connection)' failed

(process:2): GLib-GIO-CRITICAL **: 09:48:23.827: g_dbus_connection_unregister_object: assertion 'G_IS_DBUS_CONNECTION (connection)' failed

(process:2): GLib-GIO-CRITICAL **: 09:48:23.827: g_dbus_connection_unregister_object: assertion 'G_IS_DBUS_CONNECTION (connection)' failed

I am using the latest RHEL 9.2, thanks!

Bundled MPRIS plugin can error on SIGINT

As mentioned on this mpv issue, every time I run mpv from cli and then ctrl_c (SIGNINT) I get this on stdout:

(process:2): GLib-GIO-CRITICAL **: 18:25:10.679: g_dbus_connection_emit_signal: assertion 'G_IS_DBUS_CONNECTION (connection)' failed
(process:2): GLib-GIO-CRITICAL **: 18:25:10.685: g_dbus_connection_unregister_object: assertion 'G_IS_DBUS_CONNECTION (connection)' failed
(process:2): GLib-GIO-CRITICAL **: 18:25:10.685: g_dbus_connection_unregister_object: assertion 'G_IS_DBUS_CONNECTION (connection)' failed

CounterPillow mention:

mpv itself does not utilise dbus in any way, therefore you're at the wrong place here.

So I suspect here is the right place.

about mpv mpris and general scripts

First thank you for the mpv flatpak. I have an question how we can install scripts to mpv. I tried to put it under .var/app/io.mpv.Mpv/config/scripts and .var/app/io.mpv.Mpv/config/mpv/scripts but I couldn't get https://github.com/hoyon/mpv-mpris work. One more question is do you think mpris support should come out of the box or users should install it?

~/Pictures/mpv-screenshots:create ignores ~/.config/user-dirs.dirs

Currently, the filesystem permissions for the screenshots directory are hard-coded to ~/Pictures/mpv-screenshots:create but I've changed XDG_PICTURES_DIR in ~/.config/user-dirs.dirs, so it just clutters up my $HOME with a folder I don't want without asking me.

Please adjust things so it uses something like xdg-pictures/mpv-screenshots:create instead.

...though, if you use a wrapper script to configure MPV to obey that on first run, please make sure it's also named mpv. I launch MPV almost exclusively from the command-line and it currently Just Works™ with my script which generates launchers as follows:

BIN_DIR=~/.local/bin/flatpak

rm -f "$BIN_DIR"/*
mkdir -p "$BIN_DIR"

for X in $(flatpak list --columns=ref); do
    app_command="$(flatpak info -m "$X" | grep command= | cut -d= -f2)"
    cmd_path="$BIN_DIR"/"$app_command"

    if [ -n "$app_command" ]; then
        printf '#!/bin/sh\nexec flatpak run "%s" "$@"' "$X" >"$cmd_path"
        chmod +x "$cmd_path"
    fi
done

Split scripts and non-core mpv functionality into flatpak extensions

Bundling non-upstream extensions blurs what is part of mpv and what isn't and slightly bloats the package size.
There's also documentation issues and extension bugs that the users may run into, leading them to think its an upstream problem.

io.mpv.Mpv should be only about mpv and its dependencies.
Extra functionality should be introduced via flatpak extension points.

Build ffmpeg with webp support

Since mpv supports webp screenshots as well, building ffmpeg with --enable-libwebp will allow webp encoding so users can take webp screenshots (currently doesn't work because of missing support)

The mpv run input command fails

The run input command fails when mpv is installed with flatpak:

Binding:

k run code /home/username/.config/mpv/input.conf

BS ~> mpv
Starting subprocess failed: init

Another unrelated issue is that users are expected to create symlinks, this kind of obstacle does not exist with command line apps installed with Microsoft Store (MSIX) or winget.

ln -s ~/.var/app/io.mpv.Mpv/config/mpv/ ~/.config/mpv
ln -s /var/lib/flatpak/app/io.mpv.Mpv/current/active/export/bin/io.mpv.Mpv ~/bin/mpv

mpv-player/mpv#10926

Flatpak MPV doesn't detect libaacs and can't play Blu-rays

When trying to play a Blu-ray using io.mpv.Mpv bd://[title][device], MPV complains that no libaacs is detected so it can't start the playback, while native MPV works fine. (libaacs is installed ofc)
Is there a way to make Flatpak MPV detect libaacs?
Thank you in advance.

MPV not accesible from Konsole

I installed the MPV version 0.35.0 using Discover app on my Steam Deck and I do tried to launch-i from the Konsole app but if I type mpv in Konsole nothing happens. Seems that MPV can't be launched from terminal.

add yt-dlp

since system yt-dlp doesn't work. Any way to add it?

vo/gpu-next/libplacebo errors

The video is rendered as solid purple, with audio playing in the background

Video will render on lower than native (4k UHD) resolutions like FHD but without shaders.

Log

vo/gpu-next/libplacebo: shaderc output:
vo/gpu-next/libplacebo: input:103: error: 'limitations' : inductive-loop init-declaration requires the form "type-specifier loop-index = constant-expression"
vo/gpu-next/libplacebo: 
vo/gpu-next/libplacebo: shaderc compile status 'error' (1 errors, 0 warnings)
vo/gpu-next/libplacebo: vk_compile_glsl(gpu, tmp, GLSL_SHADER_FRAGMENT, params->glsl_shader, &frag): VK_ERROR_INITIALIZATION_FAILED (../src/vulkan/gpu_pass.c:511)
vo/gpu-next/libplacebo: vertex shader source:
vo/gpu-next/libplacebo: [  1] #version 450
vo/gpu-next/libplacebo: [  2] #extension GL_KHR_shader_subgroup_basic : enable 
vo/gpu-next/libplacebo: [  3] #extension GL_KHR_shader_subgroup_vote : enable 
vo/gpu-next/libplacebo: [  4] #extension GL_KHR_shader_subgroup_arithmetic : enable 
vo/gpu-next/libplacebo: [  5] #extension GL_KHR_shader_subgroup_ballot : enable 
vo/gpu-next/libplacebo: [  6] #extension GL_KHR_shader_subgroup_shuffle : enable 
vo/gpu-next/libplacebo: [  7] #extension GL_ARB_texture_gather : enable
vo/gpu-next/libplacebo: [  8] layout(std430, push_constant) uniform PushC {
vo/gpu-next/libplacebo: [  9]     layout(offset=0) vec2 _tex_size_2_0;
vo/gpu-next/libplacebo: [ 10]     layout(offset=8) vec2 _tex_pt_3_0;
vo/gpu-next/libplacebo: [ 11]     layout(offset=16) vec2 _offset_4_0;
vo/gpu-next/libplacebo: [ 12]     layout(offset=24) vec2 _tex_size_8_0;
vo/gpu-next/libplacebo: [ 13]     layout(offset=32) vec2 _tex_pt_9_0;
vo/gpu-next/libplacebo: [ 14]     layout(offset=40) vec2 _offset_10_0;
vo/gpu-next/libplacebo: [ 15]     layout(offset=48) int _frame_12_0;
vo/gpu-next/libplacebo: [ 16]     layout(offset=52) float _random_13_0;
vo/gpu-next/libplacebo: [ 17]     layout(offset=56) vec2 _input_size_14_0;
vo/gpu-next/libplacebo: [ 18]     layout(offset=64) vec2 _target_size_15_0;
vo/gpu-next/libplacebo: [ 19]     layout(offset=72) vec2 _tex_offset_16_0;
vo/gpu-next/libplacebo: [ 20] };
vo/gpu-next/libplacebo: [ 21] layout(constant_id=0) const float _const_5_0 = 1; 
vo/gpu-next/libplacebo: [ 22] layout(constant_id=1) const float _const_11_0 = 1; 
vo/gpu-next/libplacebo: [ 23] layout(constant_id=2) const float _const_0_1 = 1; 
vo/gpu-next/libplacebo: [ 24] layout(constant_id=3) const float _const_1_1 = 1; 
vo/gpu-next/libplacebo: [ 25] layout(constant_id=4) const float _const_0_2 = 1; 
vo/gpu-next/libplacebo: [ 26] layout(constant_id=5) const float _const_1_2 = 1; 
vo/gpu-next/libplacebo: [ 27] layout(binding=0) uniform  sampler2D _hook_tex_0_0;
vo/gpu-next/libplacebo: [ 28] layout(binding=1) uniform  sampler2D _hook_tex_6_0;
vo/gpu-next/libplacebo: [ 29] layout(location=0) in vec2 _tex_coord_1_0_v;
vo/gpu-next/libplacebo: [ 30] layout(location=0) out vec2 _tex_coord_1_0;
vo/gpu-next/libplacebo: [ 31] layout(location=1) in vec2 _tex_coord_7_0_v;
vo/gpu-next/libplacebo: [ 32] layout(location=1) out vec2 _tex_coord_7_0;
vo/gpu-next/libplacebo: [ 33] layout(location=2) in vec2 _position_19_0_v;
vo/gpu-next/libplacebo: [ 34] void main() {
vo/gpu-next/libplacebo: [ 35] _tex_coord_1_0 = _tex_coord_1_0_v;
vo/gpu-next/libplacebo: [ 36] _tex_coord_7_0 = _tex_coord_7_0_v;
vo/gpu-next/libplacebo: [ 37] vec2 va_pos = _position_19_0_v; 
vo/gpu-next/libplacebo: [ 38] gl_Position = vec4(va_pos, 0.0, 1.0); 
vo/gpu-next/libplacebo: [ 39] }
vo/gpu-next/libplacebo: fragment shader source:
vo/gpu-next/libplacebo: [  1] #version 450
vo/gpu-next/libplacebo: [  2] #extension GL_KHR_shader_subgroup_basic : enable 
vo/gpu-next/libplacebo: [  3] #extension GL_KHR_shader_subgroup_vote : enable 
vo/gpu-next/libplacebo: [  4] #extension GL_KHR_shader_subgroup_arithmetic : enable 
vo/gpu-next/libplacebo: [  5] #extension GL_KHR_shader_subgroup_ballot : enable 
vo/gpu-next/libplacebo: [  6] #extension GL_KHR_shader_subgroup_shuffle : enable 
vo/gpu-next/libplacebo: [  7] #extension GL_ARB_texture_gather : enable
vo/gpu-next/libplacebo: [  8] layout(std430, push_constant) uniform PushC {
vo/gpu-next/libplacebo: [  9]     layout(offset=0) vec2 _tex_size_2_0;
vo/gpu-next/libplacebo: [ 10]     layout(offset=8) vec2 _tex_pt_3_0;
vo/gpu-next/libplacebo: [ 11]     layout(offset=16) vec2 _offset_4_0;
vo/gpu-next/libplacebo: [ 12]     layout(offset=24) vec2 _tex_size_8_0;
vo/gpu-next/libplacebo: [ 13]     layout(offset=32) vec2 _tex_pt_9_0;
vo/gpu-next/libplacebo: [ 14]     layout(offset=40) vec2 _offset_10_0;
vo/gpu-next/libplacebo: [ 15]     layout(offset=48) int _frame_12_0;
vo/gpu-next/libplacebo: [ 16]     layout(offset=52) float _random_13_0;
vo/gpu-next/libplacebo: [ 17]     layout(offset=56) vec2 _input_size_14_0;
vo/gpu-next/libplacebo: [ 18]     layout(offset=64) vec2 _target_size_15_0;
vo/gpu-next/libplacebo: [ 19]     layout(offset=72) vec2 _tex_offset_16_0;
vo/gpu-next/libplacebo: [ 20] };
vo/gpu-next/libplacebo: [ 21] layout(constant_id=0) const float _const_5_0 = 1; 
vo/gpu-next/libplacebo: [ 22] layout(constant_id=1) const float _const_11_0 = 1; 
vo/gpu-next/libplacebo: [ 23] layout(constant_id=2) const float _const_0_1 = 1; 
vo/gpu-next/libplacebo: [ 24] layout(constant_id=3) const float _const_1_1 = 1; 
vo/gpu-next/libplacebo: [ 25] layout(constant_id=4) const float _const_0_2 = 1; 
vo/gpu-next/libplacebo: [ 26] layout(constant_id=5) const float _const_1_2 = 1; 
vo/gpu-next/libplacebo: [ 27] layout(binding=0) uniform  sampler2D _hook_tex_0_0;
vo/gpu-next/libplacebo: [ 28] layout(binding=1) uniform  sampler2D _hook_tex_6_0;
vo/gpu-next/libplacebo: [ 29] layout(location=0) in vec2 _tex_coord_1_0;
vo/gpu-next/libplacebo: [ 30] layout(location=1) in vec2 _tex_coord_7_0;
vo/gpu-next/libplacebo: [ 31] layout(location=0)  out vec4 out_color;
vo/gpu-next/libplacebo: [ 32] 
vo/gpu-next/libplacebo: [ 33] #define CHROMA_raw _hook_tex_0_0 
vo/gpu-next/libplacebo: [ 34] #define CHROMA_pos _tex_coord_1_0 
vo/gpu-next/libplacebo: [ 35] #define CHROMA_map _tex_coord_1_0_map 
vo/gpu-next/libplacebo: [ 36] #define CHROMA_size _tex_size_2_0 
vo/gpu-next/libplacebo: [ 37] #define CHROMA_pt _tex_pt_3_0 
vo/gpu-next/libplacebo: [ 38] #define CHROMA_off _offset_4_0 
vo/gpu-next/libplacebo: [ 39] #define CHROMA_mul _const_5_0 
vo/gpu-next/libplacebo: [ 40] #define CHROMA_rot mat2(1.0, 0.0, 0.0, 1.0) 
vo/gpu-next/libplacebo: [ 41] #define CHROMA_tex(pos) (_const_5_0 * vec4(texture(_hook_tex_0_0, pos))) 
vo/gpu-next/libplacebo: [ 42] #define CHROMA_texOff(off) (CHROMA_tex(_tex_coord_1_0 + _tex_pt_3_0 * vec2(off))) 
vo/gpu-next/libplacebo: [ 43] #define CHROMA_gather(pos, c) (_const_5_0 * vec4(textureGather(_hook_tex_0_0, pos, c))) 
vo/gpu-next/libplacebo: [ 44] #define HOOKED_raw CHROMA_raw 
vo/gpu-next/libplacebo: [ 45] #define HOOKED_pos CHROMA_pos 
vo/gpu-next/libplacebo: [ 46] #define HOOKED_size CHROMA_size 
vo/gpu-next/libplacebo: [ 47] #define HOOKED_rot CHROMA_rot 
vo/gpu-next/libplacebo: [ 48] #define HOOKED_off CHROMA_off 
vo/gpu-next/libplacebo: [ 49] #define HOOKED_pt CHROMA_pt 
vo/gpu-next/libplacebo: [ 50] #define HOOKED_map CHROMA_map 
vo/gpu-next/libplacebo: [ 51] #define HOOKED_mul CHROMA_mul 
vo/gpu-next/libplacebo: [ 52] #define HOOKED_tex CHROMA_tex 
vo/gpu-next/libplacebo: [ 53] #define HOOKED_texOff CHROMA_texOff 
vo/gpu-next/libplacebo: [ 54] #define HOOKED_gather CHROMA_gather 
vo/gpu-next/libplacebo: [ 55] #define LUMA_raw _hook_tex_6_0 
vo/gpu-next/libplacebo: [ 56] #define LUMA_pos _tex_coord_7_0 
vo/gpu-next/libplacebo: [ 57] #define LUMA_map _tex_coord_7_0_map 
vo/gpu-next/libplacebo: [ 58] #define LUMA_size _tex_size_8_0 
vo/gpu-next/libplacebo: [ 59] #define LUMA_pt _tex_pt_9_0 
vo/gpu-next/libplacebo: [ 60] #define LUMA_off _offset_10_0 
vo/gpu-next/libplacebo: [ 61] #define LUMA_mul _const_11_0 
vo/gpu-next/libplacebo: [ 62] #define LUMA_rot mat2(1.0, 0.0, 0.0, 1.0) 
vo/gpu-next/libplacebo: [ 63] #define LUMA_tex(pos) (_const_11_0 * vec4(texture(_hook_tex_6_0, pos))) 
vo/gpu-next/libplacebo: [ 64] #define LUMA_texOff(off) (LUMA_tex(_tex_coord_7_0 + _tex_pt_9_0 * vec2(off))) 
vo/gpu-next/libplacebo: [ 65] #define LUMA_gather(pos, c) (_const_11_0 * vec4(textureGather(_hook_tex_6_0, pos, c))) 
vo/gpu-next/libplacebo: [ 66] #define frame _frame_12_0 
vo/gpu-next/libplacebo: [ 67] #define random _random_13_0 
vo/gpu-next/libplacebo: [ 68] #define input_size _input_size_14_0 
vo/gpu-next/libplacebo: [ 69] #define target_size _target_size_15_0 
vo/gpu-next/libplacebo: [ 70] #define tex_offset _tex_offset_16_0 
vo/gpu-next/libplacebo: [ 71] vec4 _sub_17_0(vec4 color) {
vo/gpu-next/libplacebo: [ 72] // pl_shader_linearize           
vo/gpu-next/libplacebo: [ 73] color.rgb = max(color.rgb, 0.0); 
vo/gpu-next/libplacebo: [ 74] color.rgb = _const_1_1 * pow(color.rgb + vec3(_const_0_1), vec3(2.4)); 
vo/gpu-next/libplacebo: [ 75] return color;
vo/gpu-next/libplacebo: [ 76] }
vo/gpu-next/libplacebo: [ 77] 
vo/gpu-next/libplacebo: [ 78] #define linearize _sub_17_0 
vo/gpu-next/libplacebo: [ 79] vec4 _sub_18_0(vec4 color) {
vo/gpu-next/libplacebo: [ 80] // pl_shader_delinearize 
vo/gpu-next/libplacebo: [ 81] color.rgb = max(color.rgb, 0.0); 
vo/gpu-next/libplacebo: [ 82] color.rgb = pow(_const_1_2 * color.rgb, vec3(1.0/2.4)) - vec3(_const_0_2); 
vo/gpu-next/libplacebo: [ 83] return color;
vo/gpu-next/libplacebo: [ 84] }
vo/gpu-next/libplacebo: [ 85] 
vo/gpu-next/libplacebo: [ 86] #define delinearize _sub_18_0 
vo/gpu-next/libplacebo: [ 87] 
vo/gpu-next/libplacebo: [ 88] #define offset      vec2(0)
vo/gpu-next/libplacebo: [ 89] 
vo/gpu-next/libplacebo: [ 90] #define axis        1
vo/gpu-next/libplacebo: [ 91] 
vo/gpu-next/libplacebo: [ 92] #define Kernel(x)   dot(vec3(0.42659, -0.49656, 0.076849), cos(vec3(0, 1, 2) * acos(-1.) * (x + 1.)))
vo/gpu-next/libplacebo: [ 93] 
vo/gpu-next/libplacebo: [ 94] vec4 hook() {
vo/gpu-next/libplacebo: [ 95]     // Calculate bounds
vo/gpu-next/libplacebo: [ 96]     float low  = ceil((LUMA_pos - CHROMA_pt) * LUMA_size - offset - 0.5)[axis];
vo/gpu-next/libplacebo: [ 97]     float high = floor((LUMA_pos + CHROMA_pt) * LUMA_size - offset - 0.5)[axis];
vo/gpu-next/libplacebo: [ 98] 
vo/gpu-next/libplacebo: [ 99]     float W = 0.0;
vo/gpu-next/libplacebo: [100]     vec4 avg = vec4(0);
vo/gpu-next/libplacebo: [101]     vec2 pos = LUMA_pos;
vo/gpu-next/libplacebo: [102] 
vo/gpu-next/libplacebo: [103]     for (float k = low; k <= high; k++) {
vo/gpu-next/libplacebo: [104]         pos[axis] = LUMA_pt[axis] * (k - offset[axis] + 0.5);
vo/gpu-next/libplacebo: [105]         float rel = (pos[axis] - LUMA_pos[axis])*CHROMA_size[axis];
vo/gpu-next/libplacebo: [106]         float w = Kernel(rel);
vo/gpu-next/libplacebo: [107] 
vo/gpu-next/libplacebo: [108]         vec4 y = textureGrad(LUMA_raw, pos, vec2(0.0), vec2(0.0)).xxxx * LUMA_mul;
vo/gpu-next/libplacebo: [109]         y.y *= y.y;
vo/gpu-next/libplacebo: [110]         avg += w * y;
vo/gpu-next/libplacebo: [111]         W += w;
vo/gpu-next/libplacebo: [112]     }
vo/gpu-next/libplacebo: [113]     avg /= W;
vo/gpu-next/libplacebo: [114]     avg.y = abs(avg.y - avg.x * avg.x);
vo/gpu-next/libplacebo: [115]     return avg;
vo/gpu-next/libplacebo: [116] }
vo/gpu-next/libplacebo: [117] 
vo/gpu-next/libplacebo: [118] vec4 _main_20_0() {
vo/gpu-next/libplacebo: [119] vec4 color = hook(); 
vo/gpu-next/libplacebo: [120] return color;
vo/gpu-next/libplacebo: [121] }
vo/gpu-next/libplacebo: [122] 
vo/gpu-next/libplacebo: [123] void main() {
vo/gpu-next/libplacebo: [124] out_color = _main_20_0();
vo/gpu-next/libplacebo: [125] }
vo/gpu-next/libplacebo: Failed creating render pass for dispatch
vo/gpu-next/libplacebo: Failed executing hook, disabling
vo/gpu-next/libplacebo: shaderc output:
vo/gpu-next/libplacebo: input:106: error: 'limitations' : inductive-loop init-declaration requires the form "type-specifier loop-index = constant-expression"
vo/gpu-next/libplacebo: 
vo/gpu-next/libplacebo: shaderc compile status 'error' (1 errors, 0 warnings)
vo/gpu-next/libplacebo: vk_compile_glsl(gpu, tmp, GLSL_SHADER_FRAGMENT, params->glsl_shader, &frag): VK_ERROR_INITIALIZATION_FAILED (../src/vulkan/gpu_pass.c:511)
vo/gpu-next/libplacebo: vertex shader source:
vo/gpu-next/libplacebo: [  1] #version 450
vo/gpu-next/libplacebo: [  2] #extension GL_KHR_shader_subgroup_basic : enable 
vo/gpu-next/libplacebo: [  3] #extension GL_KHR_shader_subgroup_vote : enable 
vo/gpu-next/libplacebo: [  4] #extension GL_KHR_shader_subgroup_arithmetic : enable 
vo/gpu-next/libplacebo: [  5] #extension GL_KHR_shader_subgroup_ballot : enable 
vo/gpu-next/libplacebo: [  6] #extension GL_KHR_shader_subgroup_shuffle : enable 
vo/gpu-next/libplacebo: [  7] #extension GL_ARB_texture_gather : enable
vo/gpu-next/libplacebo: [  8] layout(std430, push_constant) uniform PushC {
vo/gpu-next/libplacebo: [  9]     layout(offset=0) vec2 _tex_size_2_0;
vo/gpu-next/libplacebo: [ 10]     layout(offset=8) vec2 _tex_pt_3_0;
vo/gpu-next/libplacebo: [ 11]     layout(offset=16) vec2 _offset_4_0;
vo/gpu-next/libplacebo: [ 12]     layout(offset=24) vec2 _tex_size_8_0;
vo/gpu-next/libplacebo: [ 13]     layout(offset=32) vec2 _tex_pt_9_0;
vo/gpu-next/libplacebo: [ 14]     layout(offset=40) vec2 _offset_10_0;
vo/gpu-next/libplacebo: [ 15]     layout(offset=48) int _frame_12_0;
vo/gpu-next/libplacebo: [ 16]     layout(offset=52) float _random_13_0;
vo/gpu-next/libplacebo: [ 17]     layout(offset=56) vec2 _input_size_14_0;
vo/gpu-next/libplacebo: [ 18]     layout(offset=64) vec2 _target_size_15_0;
vo/gpu-next/libplacebo: [ 19]     layout(offset=72) vec2 _tex_offset_16_0;
vo/gpu-next/libplacebo: [ 20] };
vo/gpu-next/libplacebo: [ 21] layout(constant_id=0) const float _const_5_0 = 1; 
vo/gpu-next/libplacebo: [ 22] layout(constant_id=1) const float _const_11_0 = 1; 
vo/gpu-next/libplacebo: [ 23] layout(constant_id=2) const float _const_0_1 = 1; 
vo/gpu-next/libplacebo: [ 24] layout(constant_id=3) const float _const_1_1 = 1; 
vo/gpu-next/libplacebo: [ 25] layout(constant_id=4) const float _const_0_2 = 1; 
vo/gpu-next/libplacebo: [ 26] layout(constant_id=5) const float _const_1_2 = 1; 
vo/gpu-next/libplacebo: [ 27] layout(binding=0) uniform  sampler2D _hook_tex_0_0;
vo/gpu-next/libplacebo: [ 28] layout(binding=1) uniform  sampler2D _hook_tex_6_0;
vo/gpu-next/libplacebo: [ 29] layout(location=0) in vec2 _tex_coord_1_0_v;
vo/gpu-next/libplacebo: [ 30] layout(location=0) out vec2 _tex_coord_1_0;
vo/gpu-next/libplacebo: [ 31] layout(location=1) in vec2 _tex_coord_7_0_v;
vo/gpu-next/libplacebo: [ 32] layout(location=1) out vec2 _tex_coord_7_0;
vo/gpu-next/libplacebo: [ 33] layout(location=2) in vec2 _position_19_0_v;
vo/gpu-next/libplacebo: [ 34] void main() {
vo/gpu-next/libplacebo: [ 35] _tex_coord_1_0 = _tex_coord_1_0_v;
vo/gpu-next/libplacebo: [ 36] _tex_coord_7_0 = _tex_coord_7_0_v;
vo/gpu-next/libplacebo: [ 37] vec2 va_pos = _position_19_0_v; 
vo/gpu-next/libplacebo: [ 38] gl_Position = vec4(va_pos, 0.0, 1.0); 
vo/gpu-next/libplacebo: [ 39] }
vo/gpu-next/libplacebo: fragment shader source:
vo/gpu-next/libplacebo: [  1] #version 450
vo/gpu-next/libplacebo: [  2] #extension GL_KHR_shader_subgroup_basic : enable 
vo/gpu-next/libplacebo: [  3] #extension GL_KHR_shader_subgroup_vote : enable 
vo/gpu-next/libplacebo: [  4] #extension GL_KHR_shader_subgroup_arithmetic : enable 
vo/gpu-next/libplacebo: [  5] #extension GL_KHR_shader_subgroup_ballot : enable 
vo/gpu-next/libplacebo: [  6] #extension GL_KHR_shader_subgroup_shuffle : enable 
vo/gpu-next/libplacebo: [  7] #extension GL_ARB_texture_gather : enable
vo/gpu-next/libplacebo: [  8] layout(std430, push_constant) uniform PushC {
vo/gpu-next/libplacebo: [  9]     layout(offset=0) vec2 _tex_size_2_0;
vo/gpu-next/libplacebo: [ 10]     layout(offset=8) vec2 _tex_pt_3_0;
vo/gpu-next/libplacebo: [ 11]     layout(offset=16) vec2 _offset_4_0;
vo/gpu-next/libplacebo: [ 12]     layout(offset=24) vec2 _tex_size_8_0;
vo/gpu-next/libplacebo: [ 13]     layout(offset=32) vec2 _tex_pt_9_0;
vo/gpu-next/libplacebo: [ 14]     layout(offset=40) vec2 _offset_10_0;
vo/gpu-next/libplacebo: [ 15]     layout(offset=48) int _frame_12_0;
vo/gpu-next/libplacebo: [ 16]     layout(offset=52) float _random_13_0;
vo/gpu-next/libplacebo: [ 17]     layout(offset=56) vec2 _input_size_14_0;
vo/gpu-next/libplacebo: [ 18]     layout(offset=64) vec2 _target_size_15_0;
vo/gpu-next/libplacebo: [ 19]     layout(offset=72) vec2 _tex_offset_16_0;
vo/gpu-next/libplacebo: [ 20] };
vo/gpu-next/libplacebo: [ 21] layout(constant_id=0) const float _const_5_0 = 1; 
vo/gpu-next/libplacebo: [ 22] layout(constant_id=1) const float _const_11_0 = 1; 
vo/gpu-next/libplacebo: [ 23] layout(constant_id=2) const float _const_0_1 = 1; 
vo/gpu-next/libplacebo: [ 24] layout(constant_id=3) const float _const_1_1 = 1; 
vo/gpu-next/libplacebo: [ 25] layout(constant_id=4) const float _const_0_2 = 1; 
vo/gpu-next/libplacebo: [ 26] layout(constant_id=5) const float _const_1_2 = 1; 
vo/gpu-next/libplacebo: [ 27] layout(binding=0) uniform  sampler2D _hook_tex_0_0;
vo/gpu-next/libplacebo: [ 28] layout(binding=1) uniform  sampler2D _hook_tex_6_0;
vo/gpu-next/libplacebo: [ 29] layout(location=0) in vec2 _tex_coord_1_0;
vo/gpu-next/libplacebo: [ 30] layout(location=1) in vec2 _tex_coord_7_0;
vo/gpu-next/libplacebo: [ 31] layout(location=0)  out vec4 out_color;
vo/gpu-next/libplacebo: [ 32] 
vo/gpu-next/libplacebo: [ 33] #define POSTKERNEL_raw _hook_tex_0_0 
vo/gpu-next/libplacebo: [ 34] #define POSTKERNEL_pos _tex_coord_1_0 
vo/gpu-next/libplacebo: [ 35] #define POSTKERNEL_map _tex_coord_1_0_map 
vo/gpu-next/libplacebo: [ 36] #define POSTKERNEL_size _tex_size_2_0 
vo/gpu-next/libplacebo: [ 37] #define POSTKERNEL_pt _tex_pt_3_0 
vo/gpu-next/libplacebo: [ 38] #define POSTKERNEL_off _offset_4_0 
vo/gpu-next/libplacebo: [ 39] #define POSTKERNEL_mul _const_5_0 
vo/gpu-next/libplacebo: [ 40] #define POSTKERNEL_rot mat2(1.0, 0.0, 0.0, 1.0) 
vo/gpu-next/libplacebo: [ 41] #define POSTKERNEL_tex(pos) (_const_5_0 * vec4(texture(_hook_tex_0_0, pos))) 
vo/gpu-next/libplacebo: [ 42] #define POSTKERNEL_texOff(off) (POSTKERNEL_tex(_tex_coord_1_0 + _tex_pt_3_0 * vec2(off))) 
vo/gpu-next/libplacebo: [ 43] #define POSTKERNEL_gather(pos, c) (_const_5_0 * vec4(textureGather(_hook_tex_0_0, pos, c))) 
vo/gpu-next/libplacebo: [ 44] #define HOOKED_raw POSTKERNEL_raw 
vo/gpu-next/libplacebo: [ 45] #define HOOKED_pos POSTKERNEL_pos 
vo/gpu-next/libplacebo: [ 46] #define HOOKED_size POSTKERNEL_size 
vo/gpu-next/libplacebo: [ 47] #define HOOKED_rot POSTKERNEL_rot 
vo/gpu-next/libplacebo: [ 48] #define HOOKED_off POSTKERNEL_off 
vo/gpu-next/libplacebo: [ 49] #define HOOKED_pt POSTKERNEL_pt 
vo/gpu-next/libplacebo: [ 50] #define HOOKED_map POSTKERNEL_map 
vo/gpu-next/libplacebo: [ 51] #define HOOKED_mul POSTKERNEL_mul 
vo/gpu-next/libplacebo: [ 52] #define HOOKED_tex POSTKERNEL_tex 
vo/gpu-next/libplacebo: [ 53] #define HOOKED_texOff POSTKERNEL_texOff 
vo/gpu-next/libplacebo: [ 54] #define HOOKED_gather POSTKERNEL_gather 
vo/gpu-next/libplacebo: [ 55] #define PREKERNEL_raw _hook_tex_6_0 
vo/gpu-next/libplacebo: [ 56] #define PREKERNEL_pos _tex_coord_7_0 
vo/gpu-next/libplacebo: [ 57] #define PREKERNEL_map _tex_coord_7_0_map 
vo/gpu-next/libplacebo: [ 58] #define PREKERNEL_size _tex_size_8_0 
vo/gpu-next/libplacebo: [ 59] #define PREKERNEL_pt _tex_pt_9_0 
vo/gpu-next/libplacebo: [ 60] #define PREKERNEL_off _offset_10_0 
vo/gpu-next/libplacebo: [ 61] #define PREKERNEL_mul _const_11_0 
vo/gpu-next/libplacebo: [ 62] #define PREKERNEL_rot mat2(1.0, 0.0, 0.0, 1.0) 
vo/gpu-next/libplacebo: [ 63] #define PREKERNEL_tex(pos) (_const_11_0 * vec4(texture(_hook_tex_6_0, pos))) 
vo/gpu-next/libplacebo: [ 64] #define PREKERNEL_texOff(off) (PREKERNEL_tex(_tex_coord_7_0 + _tex_pt_9_0 * vec2(off))) 
vo/gpu-next/libplacebo: [ 65] #define PREKERNEL_gather(pos, c) (_const_11_0 * vec4(textureGather(_hook_tex_6_0, pos, c))) 
vo/gpu-next/libplacebo: [ 66] #define frame _frame_12_0 
vo/gpu-next/libplacebo: [ 67] #define random _random_13_0 
vo/gpu-next/libplacebo: [ 68] #define input_size _input_size_14_0 
vo/gpu-next/libplacebo: [ 69] #define target_size _target_size_15_0 
vo/gpu-next/libplacebo: [ 70] #define tex_offset _tex_offset_16_0 
vo/gpu-next/libplacebo: [ 71] vec4 _sub_17_0(vec4 color) {
vo/gpu-next/libplacebo: [ 72] // pl_shader_linearize           
vo/gpu-next/libplacebo: [ 73] color.rgb = max(color.rgb, 0.0); 
vo/gpu-next/libplacebo: [ 74] color.rgb = _const_1_1 * pow(color.rgb + vec3(_const_0_1), vec3(2.4)); 
vo/gpu-next/libplacebo: [ 75] return color;
vo/gpu-next/libplacebo: [ 76] }
vo/gpu-next/libplacebo: [ 77] 
vo/gpu-next/libplacebo: [ 78] #define linearize _sub_17_0 
vo/gpu-next/libplacebo: [ 79] vec4 _sub_18_0(vec4 color) {
vo/gpu-next/libplacebo: [ 80] // pl_shader_delinearize 
vo/gpu-next/libplacebo: [ 81] color.rgb = max(color.rgb, 0.0); 
vo/gpu-next/libplacebo: [ 82] color.rgb = pow(_const_1_2 * color.rgb, vec3(1.0/2.4)) - vec3(_const_0_2); 
vo/gpu-next/libplacebo: [ 83] return color;
vo/gpu-next/libplacebo: [ 84] }
vo/gpu-next/libplacebo: [ 85] 
vo/gpu-next/libplacebo: [ 86] #define delinearize _sub_18_0 
vo/gpu-next/libplacebo: [ 87] 
vo/gpu-next/libplacebo: [ 88] #define axis 1
vo/gpu-next/libplacebo: [ 89] 
vo/gpu-next/libplacebo: [ 90] #define offset      vec2(0,0)
vo/gpu-next/libplacebo: [ 91] 
vo/gpu-next/libplacebo: [ 92] #define MN(B,C,x)   (x < 1.0 ? ((2.-1.5*B-(C))*x + (-3.+2.*B+C))*x*x + (1.-(B)/3.) : (((-(B)/6.-(C))*x + (B+5.*C))*x + (-2.*B-8.*C))*x+((4./3.)*B+4.*C))
vo/gpu-next/libplacebo: [ 93] #define Kernel(x)   MN(.0, .5, abs(x))
vo/gpu-next/libplacebo: [ 94] #define taps        2.0
vo/gpu-next/libplacebo: [ 95] 
vo/gpu-next/libplacebo: [ 96] vec4 hook() {
vo/gpu-next/libplacebo: [ 97]     vec2 base = PREKERNEL_pt * (PREKERNEL_pos * input_size + tex_offset);
vo/gpu-next/libplacebo: [ 98] 
vo/gpu-next/libplacebo: [ 99]     float low  = ceil((PREKERNEL_pos - taps*POSTKERNEL_pt) * input_size - offset + tex_offset - 0.5)[axis];
vo/gpu-next/libplacebo: [100]     float high = floor((PREKERNEL_pos + taps*POSTKERNEL_pt) * input_size - offset + tex_offset - 0.5)[axis];
vo/gpu-next/libplacebo: [101] 
vo/gpu-next/libplacebo: [102]     float W = 0.0;
vo/gpu-next/libplacebo: [103]     vec4 avg = vec4(0);
vo/gpu-next/libplacebo: [104]     vec2 pos = base;
vo/gpu-next/libplacebo: [105] 
vo/gpu-next/libplacebo: [106]     for (float k = low; k <= high; k++) {
vo/gpu-next/libplacebo: [107]         pos[axis] = PREKERNEL_pt[axis] * (k - offset[axis] + 0.5);
vo/gpu-next/libplacebo: [108]         float rel = (pos[axis] - base[axis])*POSTKERNEL_size[axis];
vo/gpu-next/libplacebo: [109]         float w = Kernel(rel);
vo/gpu-next/libplacebo: [110] 
vo/gpu-next/libplacebo: [111]         vec4 tex = textureLod(PREKERNEL_raw, pos, 0.0) * PREKERNEL_mul;
vo/gpu-next/libplacebo: [112]         avg += w * tex * tex;
vo/gpu-next/libplacebo: [113]         W += w;
vo/gpu-next/libplacebo: [114]     }
vo/gpu-next/libplacebo: [115]     avg /= W;
vo/gpu-next/libplacebo: [116] 
vo/gpu-next/libplacebo: [117]     return avg;
vo/gpu-next/libplacebo: [118] }
vo/gpu-next/libplacebo: [119] 
vo/gpu-next/libplacebo: [120] vec4 _main_20_0() {
vo/gpu-next/libplacebo: [121] vec4 color = hook(); 
vo/gpu-next/libplacebo: [122] return color;
vo/gpu-next/libplacebo: [123] }
vo/gpu-next/libplacebo: [124] 
vo/gpu-next/libplacebo: [125] void main() {
vo/gpu-next/libplacebo: [126] out_color = _main_20_0();
vo/gpu-next/libplacebo: [127] }
vo/gpu-next/libplacebo: Failed creating render pass for dispatch
vo/gpu-next/libplacebo: Failed executing hook, disabling

Certain options do not work

I tried to use the --corner-rounding option but it wouldn't work. I think you may need to update the version of libplacebo that's included.

It is a little difficult to use the flatpak for language learning (needs xclip and libXmu)

MPV is popular with the language learning community, I'm currently using it as described by MattVsJapan here: https://www.youtube.com/watch?v=bbg6ztWecbU

Basically it uses an extension for mpv that access xclip to copy subs to the clipboard as they appear. I watch in japanese which I am learning. A texthooker (https://anacreondjt.gitlab.io/docs/texthooker/) is open all the while, which displays whatever is on the clipboard. This means that when I come across a word I am unfamiliar with I can highlight it and create a flashcard with the firefox extensions yomichan easily.

The problem is xclip didn't come with the flatpak package.

I've now built it, but it was a little difficult and it looks like I can't update it now.

Would it be possible to make this easier, either by including the packages 'xclip' and 'libXmu' or adding them as separate plugins for the flatpak app mpv.

To get my language learning setup I had to add the following to the io.mpv.Mpv.yml file.

And then run flatpak-builder --install builds io.mpv.Mpv.yml

- name: libXmu
      buildsystem: autotools
      sources:
      - type: archive
        url: https://github.com/freedesktop/libXmu/archive/libXmu-1.1.2.tar.gz
        sha256: fb1485a0ffcc360c0cc8fe18f54a2f49af6fc384da743c0b136ab99cc6c6e54c

    - name: xclip
      buildsystem: autotools
      sources:
        - type: archive
          url: https://github.com/astrand/xclip/archive/0.13.tar.gz
          sha256: ca5b8804e3c910a66423a882d79bf3c9450b875ac8528791fb60ec9de667f758

(I think mpv is popular with the language learning community so it wouldn't be too esoteric a use case)

Thanks a lot!

Broken video after libplacebo upgrade

Commit 4db9d0c breaks video playback.
The video is rendered as solid blue, with audio playing in the background.
Reverting to previous version with:

sudo flatpak update --commit=98c2098ac8fbf8169eb252f7dba028ff8c3aa361c6eccaba2f175a7eb1001afa io.mpv.Mpv

fixes this.

Logs

[vo/gpu/libplacebo] shaderc output:
[vo/gpu/libplacebo] error:input: Unknown SPIR-V version 10600
[vo/gpu/libplacebo] shaderc compile status 'error' (1 errors, 0 warnings)
[vo/gpu/libplacebo] vk_compile_glsl(gpu, tmp, GLSL_SHADER_VERTEX, params->vertex_shader, &vert): VK_ERROR_INITIALIZATION_FAILED (../src/vulkan/gpu_pass.c:509)
[vo/gpu/libplacebo] vertex shader source:

Remove notice for GNOME + Wayland

[vo/gpu-next/wayland] GNOME's wayland compositor lacks support for the idle inhibit protocol. This means the screen can blank during playback.

ALSA support

Could you please consider enabling ALSA support, as it's currently disabled at

- -Dalsa=disabled
.

Without ALSA getting pass-through to work is often problematic.
Thanks.

Support XDG_CONFIG_HOME config directory

Is it possible for the XDG_CONFIG_HOME config directory to be mounted inside of this Flatpak by default?

I expected the mpv Flatpak to work as a drop-in replacement for the official package, but the Flatpak reads its config from ~/.var/app/io.mpv.Mpv/config/mpv/ instead of ~/.config/mpv/ meaning I have to symlink or move the config for it to work.

Anything to simplify the process of moving to Flatpak would be great. I think this issue will continue to confuse people reading official mpv documentation and examples where ~/.config is used.

mpv freezes on Linux Mint 21.1 with audio enabled

Hello all,

I detected the following issue with flatpak mpv on Linux Mint 21.1.

When I try to load a video with sound enabled it freezes and does not load the file at all, however, works fine if I run it with no audio and just the video:
mpv_issue

I tested on another computer with Mint installed and same issue occours.

Attached log:

log.txt

This does not happen with mpv installed with apt.

I'm not sure if the issue is located on distro or on the flatpak package, so I apologize in advance if I have not reported the issue in the proper place.

Many thanks for your time.

No changelog for mpv flatpak

in the last 2 weeks the flatpak version has been rebuilt several times. when i search for changes i am directed to the github relase page stand jan. '22.

would it be possible to document a change log?

ytdl_hook: EDL doesn't support fragmentswithout duration with MP4 DASH

Playing youtube videos with mpv results in some video's playing without any sound

cb@tumbleweed-pc:~> mpv https://youtu.be/s9TIMDxTpcc
   cplayer: Auto-loading profile 'protocol.https'
 ytdl_hook: EDL doesn't support fragmentswithout duration with MP4 DASH 
     demux: EDL specifies no segments.'
     demux: EDL parsing failed.
     demux: Error in EDL.
     demux: EDL: source file 'edl://!mp4_dash,init=%914%https://rr2---sn-8nxoxu-njol.googlevideo.com/videoplayback?expire=1679177591&ei=F-MVZKfeHannx_AP9NK-oAU&ip=185.231.254.91&id=o-AEp5PMtLTdlITuetFNeHXFkUzvUaOV6WC-QdQrYSM3Do&itag=251&source=youtube&requiressl=yes&mh=0w&mm=31%2C29&mn=sn-8nxoxu-njol%2Csn-4g5lzned&ms=au%2Crdu&mv=m&mvi=2&pl=22&initcwndbps=1900000&spc=H3gIhg1Ll474K_92gjNfW2Nw3SmjXmQ&vprv=1&svpuc=1&mime=audio%2Fwebm&gir=yes&clen=3654525&dur=235.021&lmt=1665674125804043&mt=1679155505&fvip=3&keepalive=yes&fexp=24007246&c=ANDROID&txp=5432434&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AOq0QJ8wRQIhAJTVTljvtNPOS-0YRbRD3DxOIXLvL6g__-MzIa-BCmWNAiAbvQF_DlAieleTI-z2IYOuOFf-ruB_Mob3NRWYPQ8ZEQ%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRQIgLIGF2hcaxwRzYkBXWI4ps3u4Yqq7QfGnRluZVWVmwzECIQC1XVfASLLxx2fUMGMgAE5gLVwBqSH6C_NkzfdvnSx6iQ%3D%3D&range=0-3654525;' has unknown duration.
   cplayer:  (+) Video --vid=1 (*) (vp9 1920x1080 30.000fps)
display-tags: File tags:
display-tags:  Uploader: Uknow
display-tags:  Channel_URL: https://www.youtube.com/channel/UC-EU5_XII6cij1lUbSaPevg
vo/gpu-next/wayland: GNOME's wayland compositor lacks support for the idle inhibit protocol. This means the screen can blank during playback.
Cannot load libcuda.so.1
quality_menu: fetching available formats... 
        vd: Using hardware decoding (vaapi).
   cplayer: VO: [gpu-next] 1920x1080 vaapi[nv12]
statusline: V: 00:00:00 / 00:03:54 (0%) Cache: 95s/5MB
auto_profiles: Applying auto profile: full-hd30 
statusline: V: 00:00:03 / 00:03:54 (1%) DS: 4.802/0 Cache: 231s/14MB
   cplayer: 
   cplayer: Exiting... (Quit)
cb@tumbleweed-pc:~> 

Slower seek performance in flatpak compared to Ubuntu 22.04 apt version

On Ubuntu 22.04, mpv in flatpak form has slower seek performance than the apt package. Both are currently v0.34.1. While playing a video file, holding right stutters immensely on the flatpak mpv, but is very snappy on the apt version.

No idea if this is some flatpak limitation, I hope not! I'd like to think flatpaks are capable of nearly identical I/O perf.

--loop-file (and possibily other) config parameters show no effect in flatpak mpv

Tested on

Flatpak 1.12.2
app/io.mpv.Mpv/x86_64/stable - 2021-10-23 06:59:31

Description

Setting loop-file=inf in mpv.conf or providing it as a command line argument does not show the expected effect on the flatpak version of mpv.

To reproduce:

  • Create an mpv.conf containing loop-file=inf OR
  • call flatpak run io.mpv.Mpv --loop-file=inf <some_file_path>

Diffing the logs of an rpm mpv and flatpak mpv using -v shows that the flatpak mpv is doing some parameter resets in the end (which is not shown for the rpm version of mpv).

Both rpm and flatpak mpv show:

[cplayer] Setting option 'loop-file' = 'inf' (flags = 8)

Only flatpak mpv afterwards shows (which I presume results in a reset of the parameters):

[cplayer] Set property: loop-file=false -> 1
[cplayer] Set property: loop-playlist=true -> 1
[cplayer] Set property: loop-file=false -> 1
[cplayer] Set property: loop-playlist=false -> 1

Noticed that on startup flatpak mpv is also loading one additional config file which I was not able to locate:

[cplayer] Reading config file /app/etc/mpv/mpv.conf
[cplayer] Applying profile 'default'...
[cplayer] Setting option 'screenshot-directory' = '~/Pictures/mpv-screenshots' (flags = 4)
[cplayer] Reading config file /var/home/mershl/.var/app/io.mpv.Mpv/config/mpv/mpv.conf

Does the Flatpak version read my user pipewire settings?

I have created a user config for pipewire in my home directory to set the sample rates that my audio interface provides by doing the following:

  • Create a PipeWire user config file: cp /usr/share/pipewire/pipewire.conf ~/.config/pipewire/
  • Add/modify the sound cards available sample rates by editing ~/.config/pipewire/pipewire.conf:

The Fedora 38 default is:

#default.clock.allowed-rates = [ 48000 ]

For my audio interface I use:

default.clock.allowed-rates = [ 44100 48000 88200 96000 176400 192000 ]

My understanding is that unless I do this pipewire will FORCE the audio to be resampled to 48000, which is of course awful. The default was recently changed to default.clock.allowed-rates = [ 48000 ] and was controversial.

So, is MPV respecting my settings, and how could I tell? When it is playing from the terminal it says:

AO: [pipewire] 44100Hz stereo 2ch floatp

but is this just the source sample rate, how can I tell?

Thanks!

Is it possible to avoid empty ~/Videos/mpv-cut?

Hi @fastrizwaan,

Thanks for maintaining this flatpak. I have a small question regarding the introducion of the video-cutter plugin.

After the video-cutter introduction io.mpv.Mpv started creating the folder ~/Videos/mpv-cut on start-up. Is it possible to delay the creation of this folder until usage of the plugin? I use Mpv as a pure media player and the empty mpv-cut folder in Videos is a little inconvenient.

[Request] Include libmysofa in the ffmpeg submodule.

Would it possible to add --enable-libmysofa to the ffmpeg build options, to enable SOFA based HRTF?

This allows using sofalizer with mpv to translate multi channel (7.1 for example) audio to stereo headphones.

Edit: Text under this is for testing purposes, not recommendations for this flathub package.

Usage example (using mpv / ffmpeg built with libmysofa):

Download a SOFA HRTF file, for example ClubFritz4.sofa.

Place the SOFA file in a suitable location, example : /home/kevin/.config/mpv/sofa/ClubFritz4.sofa

Download a multichannel test file, for example this Dolby TrueHD 7.1 channel check file.

Play the file using mpv using the following command (adjust paths accordingly) while wearing headphones:

mpv --no-config --af-add=sofalizer=sofa=/home/kevin/.config/mpv/sofa/ClubFritz4.sofa:gain=15 ~/Downloads/dolby-truehd-channel-check-lossless-\(www.demolandia.net\).mkv

(This can also be added to mpv.conf as a auto-profile:

[hrtf]
profile-desc=Add sofalizer on > 2 audio channels
# https://github.com/mpv-player/mpv/issues/8672
profile-cond=not get("core-idle", default_value) and get("audio-params/channel-count", default_value) > 2
profile-restore=copy
af-add=sofalizer=sofa=/home/kevin/.config/mpv/sofa/ClubFritz4.sofa:gain=15

Thanks.

FFMPEG don't support networking. Failing to play over smb.

$ flatpak run io.mpv.Mpv smb://oleg-laptop.local/Home/Видео/qwe.webm
[ffmpeg] Protocol not found. Make sure ffmpeg/Libav is compiled with networking support.
Failed to open smb://oleg-laptop.local/Home/Видео/qwe.webm.

Exiting... (Errors when loading file)

Thumbnailing failed, check console for details

Any video I open I get "Thumbnailing failed, check console for details" message from mpv.

mpv log:

[cplayer] Command line options: '-v' 'kek3.mkv'
[cplayer] mpv 0.33.1 Copyright © 2000-2020 mpv/MPlayer/mplayer2 projects
[cplayer]  built on UNKNOWN
[cplayer] FFmpeg library versions:
[cplayer]    libavutil       56.70.100
[cplayer]    libavcodec      58.134.100
[cplayer]    libavformat     58.76.100
[cplayer]    libswscale      5.9.100
[cplayer]    libavfilter     7.110.100
[cplayer]    libswresample   3.9.100
[cplayer] FFmpeg version: 4.4
[cplayer] 
[cplayer] Configuration: waf configure --prefix=/app --enable-libmpv-shared --disable-build-date --disable-alsa --enable-libmpv-shared --enable-sdl2 --enable-libarchive
[cplayer] List of enabled features: asm cplayer cplugins cuda-hwaccel cuda-interop debug-build drm egl egl-drm egl-helpers egl-x11 ffmpeg ffnvcodec gbm gbm.h gl gl-wayland glibc-thread-name glob glob-posix gpl iconv jack jpeg lcms2 libarchive libass libavdevice libdl libm libmpv-shared librt linux-fstatfs linux-input-event-codes lua luajit memfd_create optimize plain-gl posix posix-or-mingw pthreads pulse sdl2 sdl2-audio sdl2-gamepad sdl2-video stdatomic uchardet vaapi vaapi-drm vaapi-egl vaapi-wayland vaapi-x-egl vaapi-x11 vdpau vt.h wayland wayland-protocols x11 xv zlib
[cplayer] Reading config file /app/etc/mpv/encoding-profiles.conf
[cplayer] Applying profile 'default'...
[cplayer] Reading config file /app/etc/mpv/mpv.conf
[cplayer] Applying profile 'default'...
[cplayer] Setting option 'screenshot-directory' = '~/Pictures/mpv-screenshots' (flags = 4)
[cplayer] Setting option 'v' = '' (flags = 8)
[file] Opening /app/etc/mpv/input.conf
[input] Parsing input config file /app/etc/mpv/input.conf
[input] Input config file /app/etc/mpv/input.conf parsed: 2 binds
[cplayer] Waiting for scripts...
[cplayer] Set property: shared-script-properties -> 1
[osd/libass] Shaper: FriBidi 1.0.9 (SIMPLE) HarfBuzz-ng 2.7.2 (COMPLEX)
[osd/libass] Setting up fonts...
[osd/libass] Using font provider fontconfig
[osd/libass] Done.
[cplayer] Set property: shared-script-properties -> 1
[osd/libass] Shaper: FriBidi 1.0.9 (SIMPLE) HarfBuzz-ng 2.7.2 (COMPLEX)
[osd/libass] Setting up fonts...
[osd/libass] Using font provider fontconfig
[osd/libass] Done.
[mpv_thumbnail_script_client_osc]  
[cplayer] Set property: osc=false -> 1
[mpv_thumbnail_script_client_osc] The 'tracks-changed' event is deprecated and will be removed.
[cplayer] Set property: shared-script-properties -> 1
[cplayer] Set property: shared-script-properties -> 1
[cplayer] Done loading scripts.
[cplayer] Running hook: ytdl_hook/on_load
[ytdl_hook] ytdl:// hook 
[ytdl_hook] not a ytdl:// url 
[file] Opening kek3.mkv
[demux] Trying demuxers for level=normal.
[cplayer] Set property: shared-script-properties -> 1
[osd/libass] Shaper: FriBidi 1.0.9 (SIMPLE) HarfBuzz-ng 2.7.2 (COMPLEX)
[osd/libass] Setting up fonts...
[mkv] Seeking to 1445032989 to read header element 0x1c53bb6b.
[file] stream level seek from 5912220 to 1445032989
[mkv] Parsing cues...
[mkv] Seeking to 1445056062 to read header element 0x1254c367.
[file] stream level seek from 1445057230 to 5781148
[mkv] All headers are parsed!
[demux] Detected file format: Matroska
[cplayer] Opening done: kek3.mkv
[osd/libass] Using font provider fontconfig
[osd/libass] Done.
[find_files] Loading external files in .
[cplayer] Running hook: ytdl_hook/on_preloaded
[mkv] select track 0
[mkv] select track 1
[mkv] select track 2
[cplayer]  (+) Video --vid=1 (*) (h264 1920x1080 23.976fps)
[cplayer]  (+) Audio --aid=1 --alang=jpn (*) (aac 2ch 44100Hz)
[cplayer]  (+) Subs  --sid=1 --slang=eng (*) 'English subs' (ass)
[vo/gpu] Probing for best GPU context.
[vo/gpu/opengl] Initializing GPU context 'wayland'
[vo/gpu/wayland] Registered for protocol wl_compositor
[vo/gpu/wayland] Registered for protocol wl_shm
[vo/gpu/wayland] Registered for protocol wl_output
[vo/gpu/wayland] Registered for protocol wl_data_device_manager
[vo/gpu/wayland] Registered for protocol xdg_wm_base
[vo/gpu/wayland] Registered for protocol wl_seat
[vo/gpu/wayland] Registered for protocol wp_presentation
[vo/gpu/wayland] GNOME's wayland compositor lacks support for the idle inhibit protocol. This means the screen can blank during playback.
[vo/gpu/wayland] Compositor doesn't support the zxdg_decoration_manager_v1 protocol!
[vo/gpu/wayland] Compositor doesn't support the zwp_idle_inhibit_manager_v1 protocol!
[vo/gpu/opengl] EGL_VERSION=1.4
[vo/gpu/opengl] EGL_VENDOR=Mesa Project
[vo/gpu/opengl] EGL_CLIENT_APIS=OpenGL OpenGL_ES 
[vo/gpu/opengl] Trying to create Desktop OpenGL context.
[vo/gpu/wayland] GL_VERSION='4.2 (Core Profile) Mesa 21.0.3 (git-091978e0ec)'
[vo/gpu/wayland] Detected desktop OpenGL 4.2.
[vo/gpu/wayland] GL_VENDOR='Intel Open Source Technology Center'
[vo/gpu/wayland] GL_RENDERER='Mesa DRI Intel(R) HD Graphics 4000 (IVB GT2)'
[vo/gpu/wayland] GL_SHADING_LANGUAGE_VERSION='4.20'
[vo/gpu/wayland] Loaded extension GL_ARB_buffer_storage.
[vo/gpu/wayland] Loaded extension GL_ARB_shader_storage_buffer_object.
[vo/gpu/wayland] Loaded extension GL_ARB_compute_shader.
[vo/gpu/wayland] Loaded extension GL_ARB_arrays_of_arrays.
[vo/gpu/wayland] Loaded extension GL_ARB_debug_output.
[vo/gpu] Testing FBO format rgba16f
[vo/gpu] Using FBO format rgba16f.
[vo/gpu] No advanced processing required. Enabling dumb mode.
[vo/gpu/wayland] Registered output LGD 0x03a3 (0x4):
[vo/gpu/wayland] 	x: 0px, y: 0px
[vo/gpu/wayland] 	w: 1366px (280mm), h: 768px (160mm)
[vo/gpu/wayland] 	scale: 1
[vo/gpu/wayland] 	Hz: 60.018000
[vo/gpu] Resize: 0x0
[vd] Container reported FPS: 23.976024
[vd] Codec list:
[vd]     h264 - H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
[vd]     h264_v4l2m2m (h264) - V4L2 mem2mem H.264 decoder wrapper
[vd]     h264_cuvid (h264) - Nvidia CUVID H264 decoder
[vd] Opening decoder h264
[vd] No hardware decoding requested.
[vd] Using software decoding.
[vd] Detected 4 logical cores.
[vd] Requesting 5 threads for decoding.
[vd] DR failed - disabling.
[vd] Selected codec: h264 (H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10)
[vf] User filter list:
[vf]   (empty)
[ad] Codec list:
[ad]     aac - AAC (Advanced Audio Coding)
[ad]     aac_fixed (aac) - AAC (Advanced Audio Coding)
[ad]     libfdk_aac (aac) - Fraunhofer FDK AAC
[ad] Opening decoder aac
[ad] Requesting 1 threads for decoding.
[ad] Selected codec: aac (AAC (Advanced Audio Coding))
[af] User filter list:
[af]   (empty)
[sub/ass] Shaper: FriBidi 1.0.9 (SIMPLE) HarfBuzz-ng 2.7.2 (COMPLEX)
[sub/ass] Setting up fonts...
[sub/ass] Using font provider fontconfig
[sub/ass] Done.
[cplayer] Starting playback...
[vd] Using software decoding.
[vd] Decoder format: 1920x1080 yuv420p auto/auto/auto/auto/auto CL=mpeg2/4/h264
[vd] Using container aspect ratio.
[vf] [in] 1920x1080 yuv420p bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264
[vf] [userdeint] 1920x1080 yuv420p bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264
[vf] [userdeint] (disabled)
[vf] [autorotate] 1920x1080 yuv420p bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264
[vf] [autorotate] (disabled)
[vf] [convert] 1920x1080 yuv420p bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264
[vf] [convert] (disabled)
[vf] [out] 1920x1080 yuv420p bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264
[af] [in] 44100Hz stereo 2ch floatp
[af] [userspeed] 44100Hz stereo 2ch floatp
[af] [userspeed] (disabled)
[af] [convert] 44100Hz stereo 2ch floatp
[ao] Trying audio driver 'pulse'
[ao/pulse] requested format: 44100 Hz, stereo channels, floatp
[ao/pulse] Library version: 13.0.0
[ao/pulse] Proto: 33
[ao/pulse] Server proto: 4294967295
[ao/pulse] Channel layouts:
[ao/pulse]  - #fl
[ao/pulse]  - #fr
[ao/pulse]  - #fc
[ao/pulse]  - #lfe
[ao/pulse]  - #bl
[ao/pulse]  - #br
[ao/pulse]  - #flc
[ao/pulse]  - #frc
[ao/pulse]  - #bc
[ao/pulse]  - #sl
[ao/pulse]  - #sr
[ao/pulse]  - #tc
[ao/pulse]  - #tfl
[ao/pulse]  - #tfc
[ao/pulse]  - #tfr
[ao/pulse]  - #tbl
[ao/pulse]  - #tbc
[ao/pulse]  - #tbr
[ao/pulse] result: stereo
[ao/pulse] device buffer: 4410 samples.
[ao/pulse] using soft-buffer of 8820 samples.
[cplayer] AO: [pulse] 44100Hz stereo 2ch float
[cplayer] AO: Description: PulseAudio audio output
[autoconvert] inserting resampler
[swresample] format change, reinitializing resampler
[swresample] 44100Hz stereo floatp -> 44100Hz stereo float
[af] [out] 44100Hz stereo 2ch float
[cplayer] VO: [gpu] 1920x1080 yuv420p
[cplayer] VO: Description: Shader-based GPU Renderer
[vo/gpu] reconfig to 1920x1080 yuv420p bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264
[vo/gpu/wayland] Reconfiguring!
[vo/gpu] Resize: 1920x1080
[vo/gpu] Window size: 1920x1080 (Borders: l=0 t=0 r=0 b=0)
[vo/gpu] Video source: 1920x1080 (1:1)
[vo/gpu] Video display: (0, 0) 1920x1080 -> (0, 0) 1920x1080
[vo/gpu] Video scale: 1.000000/1.000000
[vo/gpu] OSD borders: l=0 t=0 r=0 b=0
[vo/gpu] Video borders: l=0 t=0 r=0 b=0
[vo/gpu] Texture for plane 0: 1920x1080
[vo/gpu] Texture for plane 1: 960x540
[vo/gpu] Texture for plane 2: 960x540
[vo/gpu] Testing FBO format rgba16f
[vo/gpu] Using FBO format rgba16f.
[vo/gpu] No advanced processing required. Enabling dumb mode.
[vo/gpu/wayland] Handling resize on the egl side
[vo/gpu] Resize: 1920x1080
[vo/gpu] Window size: 1920x1080 (Borders: l=0 t=0 r=0 b=0)
[vo/gpu] Video source: 1920x1080 (1:1)
[vo/gpu] Video display: (0, 0) 1920x1080 -> (0, 0) 1920x1080
[vo/gpu] Video scale: 1.000000/1.000000
[vo/gpu] OSD borders: l=0 t=0 r=0 b=0
[vo/gpu] Video borders: l=0 t=0 r=0 b=0
[vo/gpu] Reported display depth: 8
[sub/ass] fontselect: (Roboto Medium, 400, 0) -> Roboto-Medium, 0, Roboto-Medium
[sub/ass] fontselect: (Roboto Medium, 700, 0) -> Roboto-Medium, 0, Roboto-Medium
[sub/ass] mangling colors like vsfilter: RGB -> bt.601 limited -> bt.709 bt.601 -> RGB
[vo/gpu] Reallocating OSD texture to 256x256.
[vo/gpu/wayland] Resizing due to xdg from 1920x1080 to 1366x736
[vo/gpu/wayland] Given DND offer with mime type text/plain
[vo/gpu/wayland] Given DND offer with mime type text/plain;charset=utf-8
[cplayer] first video frame after restart shown
[vo/gpu] Resize: 1920x1080
[vo/gpu] Window size: 1920x1080 (Borders: l=0 t=0 r=0 b=0)
[vo/gpu] Video source: 1920x1080 (1:1)
[vo/gpu] Video display: (0, 0) 1920x1080 -> (0, 0) 1920x1080
[vo/gpu] Video scale: 1.000000/1.000000
[vo/gpu] OSD borders: l=0 t=0 r=0 b=0
[vo/gpu] Video borders: l=0 t=0 r=0 b=0
[vo/gpu] Reported display depth: 8
[vo/gpu/wayland] Handling resize on the egl side
[vo/gpu] Resize: 1366x736
[vo/gpu] Window size: 1366x736 (Borders: l=0 t=0 r=0 b=0)
[vo/gpu] Video source: 1920x1080 (1:1)
[vo/gpu] Video display: (0, 0) 1920x1080 -> (29, 0) 1308x736
[vo/gpu] Video scale: 0.681250/0.681481
[vo/gpu] OSD borders: l=29 t=0 r=29 b=0
[vo/gpu] Video borders: l=29 t=0 r=29 b=0
[vo/gpu] Reported display depth: 8
[cplayer] audio ready
[cplayer] starting audio playback
[cplayer] playback restart complete @ 0.000000, audio=playing, video=playing
[cplayer] Set property: shared-script-properties -> 1
[ao/pulse] starting AO
[cplayer] Set property: shared-script-properties -> 1
[vo/gpu/wayland] Surface entered output LGD 0x03a3 (0x4), scale = 1
[vo/gpu] Assuming 60.018000 FPS for display sync.
[mpv_thumbnail_script_server] Thumbnailing command failed! 
[mpv_thumbnail_script_server] mpv process error: nil 
[mpv_thumbnail_script_server] Process stdout:  
[mpv_thumbnail_script_server] Debug log: /tmp/mpv_thumbs_cache/kek3-1445057230/000000.bgra.log 
[mpv_thumbnail_script_server] Output file missing! /tmp/mpv_thumbs_cache/kek3-1445057230/000000.bgra 
[osd/libass] Shaper: FriBidi 1.0.9 (SIMPLE) HarfBuzz-ng 2.7.2 (COMPLEX)
[osd/libass] Setting up fonts...
[osd/libass] Using font provider fontconfig
[osd/libass] Done.
[osd/libass] fontselect: (sans-serif, 400, 0) -> /usr/share/fonts/dejavu/DejaVuSans.ttf, 0, DejaVuSans
[vo/gpu] Reallocating OSD texture to 2048x128.
[cplayer] EOF code: 5  
[cplayer] finished playback, success (reason 3)
[cplayer] 
[cplayer] Exiting... (Quit)
[cplayer] Set property: shared-script-properties -> 1
[vo/gpu/wayland] Deregistering output LGD 0x03a3 (0x4)

Log from "[mpv_thumbnail_script_server] Debug log: /tmp/mpv_thumbs_cache/kek3-1445057230/000000.bgra.log"

[   0.009][v][cplayer] mpv 0.33.1 Copyright © 2000-2020 mpv/MPlayer/mplayer2 projects
[   0.010][v][cplayer]  built on UNKNOWN
[   0.010][v][cplayer] FFmpeg library versions:
[   0.010][v][cplayer]    libavutil       56.70.100
[   0.010][v][cplayer]    libavcodec      58.134.100
[   0.010][v][cplayer]    libavformat     58.76.100
[   0.010][v][cplayer]    libswscale      5.9.100
[   0.010][v][cplayer]    libavfilter     7.110.100
[   0.010][v][cplayer]    libswresample   3.9.100
[   0.010][v][cplayer] FFmpeg version: 4.4
[   0.010][v][cplayer] 
[   0.010][v][cplayer] Configuration: waf configure --prefix=/app --enable-libmpv-shared --disable-build-date --disable-alsa --enable-libmpv-shared --enable-sdl2 --enable-libarchive
[   0.010][v][cplayer] List of enabled features: asm cplayer cplugins cuda-hwaccel cuda-interop debug-build drm egl egl-drm egl-helpers egl-x11 ffmpeg ffnvcodec gbm gbm.h gl gl-wayland glibc-thread-name glob glob-posix gpl iconv jack jpeg lcms2 libarchive libass libavdevice libdl libm libmpv-shared librt linux-fstatfs linux-input-event-codes lua luajit memfd_create optimize plain-gl posix posix-or-mingw pthreads pulse sdl2 sdl2-audio sdl2-gamepad sdl2-video stdatomic uchardet vaapi vaapi-drm vaapi-egl vaapi-wayland vaapi-x-egl vaapi-x11 vdpau vt.h wayland wayland-protocols x11 xv zlib
[   0.010][v][cplayer] Command line options: '--msg-level=all=no' '--no-ytdl' '--user-agent=libmpv' '--referrer=' '--hwdec=no' '--log-file=/tmp/mpv_thumbs_cache/kek3-1445057230/000000.bgra.log' 'kek3.mkv' '--start=4.7333865' '--frames=1' '--hr-seek=yes' '--no-audio' '--vf=scale=200:112' '--vf-add=format=bgra' '--of=rawvideo' '--ovc=rawvideo' '--o=/tmp/mpv_thumbs_cache/kek3-1445057230/000000.bgra'
[   0.010][v][cplayer] mpv 0.33.1 Copyright © 2000-2020 mpv/MPlayer/mplayer2 projects
[   0.010][v][cplayer]  built on UNKNOWN
[   0.010][v][cplayer] FFmpeg library versions:
[   0.010][v][cplayer]    libavutil       56.70.100
[   0.010][v][cplayer]    libavcodec      58.134.100
[   0.010][v][cplayer]    libavformat     58.76.100
[   0.010][v][cplayer]    libswscale      5.9.100
[   0.010][v][cplayer]    libavfilter     7.110.100
[   0.010][v][cplayer]    libswresample   3.9.100
[   0.010][v][cplayer] FFmpeg version: 4.4
[   0.010][v][cplayer] 
[   0.010][v][cplayer] Configuration: waf configure --prefix=/app --enable-libmpv-shared --disable-build-date --disable-alsa --enable-libmpv-shared --enable-sdl2 --enable-libarchive
[   0.010][v][cplayer] List of enabled features: asm cplayer cplugins cuda-hwaccel cuda-interop debug-build drm egl egl-drm egl-helpers egl-x11 ffmpeg ffnvcodec gbm gbm.h gl gl-wayland glibc-thread-name glob glob-posix gpl iconv jack jpeg lcms2 libarchive libass libavdevice libdl libm libmpv-shared librt linux-fstatfs linux-input-event-codes lua luajit memfd_create optimize plain-gl posix posix-or-mingw pthreads pulse sdl2 sdl2-audio sdl2-gamepad sdl2-video stdatomic uchardet vaapi vaapi-drm vaapi-egl vaapi-wayland vaapi-x-egl vaapi-x11 vdpau vt.h wayland wayland-protocols x11 xv zlib
[   0.010][d][global] config path: '' -> '/var/home/salty/.var/app/io.mpv.Mpv/config/mpv'
[   0.010][d][global] user path: '~~home/' -> '/var/home/salty/.var/app/io.mpv.Mpv/config/mpv'
[   0.010][d][global] user path: '~~old_home/' -> '/var/home/salty/.mpv'
[   0.010][d][global] config path: 'encoding-profiles.conf' -/-> '/var/home/salty/.var/app/io.mpv.Mpv/config/mpv/encoding-profiles.conf'
[   0.010][d][global] config path: 'encoding-profiles.conf' -/-> '/var/home/salty/.mpv/encoding-profiles.conf'
[   0.010][d][global] config path: 'encoding-profiles.conf' -> '/app/etc/mpv/encoding-profiles.conf'
[   0.010][v][cplayer] Reading config file /app/etc/mpv/encoding-profiles.conf
[   0.013][v][cplayer] Applying profile 'default'...
[   0.013][d][global] config path: 'mpv.conf' -/-> '/var/home/salty/.var/app/io.mpv.Mpv/config/mpv/mpv.conf'
[   0.013][d][global] config path: 'config' -/-> '/var/home/salty/.var/app/io.mpv.Mpv/config/mpv/config'
[   0.013][d][global] config path: 'mpv.conf' -/-> '/var/home/salty/.mpv/mpv.conf'
[   0.013][d][global] config path: 'config' -/-> '/var/home/salty/.mpv/config'
[   0.013][d][global] config path: 'mpv.conf' -> '/app/etc/mpv/mpv.conf'
[   0.013][d][global] config path: 'config' -/-> '/app/etc/mpv/config'
[   0.013][v][cplayer] Reading config file /app/etc/mpv/mpv.conf
[   0.013][v][cplayer] Applying profile 'default'...
[   0.013][v][cplayer] Applying profile 'encoding'...
[   0.013][v][cplayer] Setting option 'vo' = 'lavc' (flags = 4)
[   0.013][v][cplayer] Setting option 'ao' = 'lavc' (flags = 4)
[   0.013][v][cplayer] Setting option 'keep-open' = 'no' (flags = 4)
[   0.013][v][cplayer] Setting option 'force-window' = 'no' (flags = 4)
[   0.013][v][cplayer] Setting option 'gapless-audio' = 'yes' (flags = 4)
[   0.013][v][cplayer] Setting option 'resume-playback' = 'no' (flags = 4)
[   0.013][v][cplayer] Setting option 'load-scripts' = 'no' (flags = 4)
[   0.013][v][cplayer] Setting option 'osc' = 'no' (flags = 4)
[   0.013][v][cplayer] Setting option 'framedrop' = 'no' (flags = 4)
[   0.013][v][cplayer] Setting option 'msg-level' = 'all=no' (flags = 8)
[   0.013][v][cplayer] Setting option 'ytdl' = 'no' (flags = 8)
[   0.013][v][cplayer] Setting option 'user-agent' = 'libmpv' (flags = 8)
[   0.013][v][cplayer] Setting option 'referrer' = '' (flags = 8)
[   0.013][v][cplayer] Setting option 'hwdec' = 'no' (flags = 8)
[   0.013][v][cplayer] Setting option 'log-file' = '/tmp/mpv_thumbs_cache/kek3-1445057230/000000.bgra.log' (flags = 8)
[   0.013][v][cplayer] Setting option 'start' = '4.7333865' (flags = 8)
[   0.013][v][cplayer] Setting option 'frames' = '1' (flags = 8)
[   0.013][v][cplayer] Setting option 'hr-seek' = 'yes' (flags = 8)
[   0.013][v][cplayer] Setting option 'audio' = 'no' (flags = 8)
[   0.013][v][cplayer] Setting option 'vf' = 'scale=200:112' (flags = 8)
[   0.014][v][cplayer] Setting option 'vf-add' = 'format=bgra' (flags = 8)
[   0.014][v][cplayer] Setting option 'of' = 'rawvideo' (flags = 8)
[   0.014][v][cplayer] Setting option 'ovc' = 'rawvideo' (flags = 8)
[   0.014][v][cplayer] Setting option 'o' = '/tmp/mpv_thumbs_cache/kek3-1445057230/000000.bgra' (flags = 8)
[   0.015][d][global] config path: 'input.conf' -/-> '/var/home/salty/.var/app/io.mpv.Mpv/config/mpv/input.conf'
[   0.015][d][global] config path: 'input.conf' -/-> '/var/home/salty/.mpv/input.conf'
[   0.015][d][global] config path: 'input.conf' -> '/app/etc/mpv/input.conf'
[   0.015][d][global] user path: '/app/etc/mpv/input.conf' -> '/app/etc/mpv/input.conf'
[   0.016][v][file] Opening /app/etc/mpv/input.conf
[   0.016][d][file] resize stream to 131072 bytes, drop 0 bytes
[   0.016][d][file] Stream opened successfully.
[   0.016][v][input] Parsing input config file /app/etc/mpv/input.conf
[   0.016][v][input] Input config file /app/etc/mpv/input.conf parsed: 2 binds
[   0.016][d][global] user path: '/tmp/mpv_thumbs_cache/kek3-1445057230/000000.bgra.log' -> '/tmp/mpv_thumbs_cache/kek3-1445057230/000000.bgra.log'
[   0.016][d][stats] Loading lua script @stats.lua...
[   0.016][d][console] Loading lua script @console.lua...
[   0.016][d][auto_profiles] Loading lua script @auto_profiles.lua...
[   0.016][d][stats] loading mp.defaults
[   0.016][f][encode] format not found
[   0.016][i][cplayer] Encoding initialization failed.
[   0.016][i][cplayer] Exiting... (Fatal error)
[   0.016][d][console] loading mp.defaults
[   0.017][d][stats] loading @stats.lua
[   0.018][d][console] loading @console.lua
[   0.019][d][stats] reading options for stats 
[   0.019][d][global] config path: 'script-opts/stats.conf' -/-> '/var/home/salty/.var/app/io.mpv.Mpv/config/mpv/script-opts/stats.conf'
[   0.019][d][global] config path: 'script-opts/stats.conf' -/-> '/var/home/salty/.mpv/script-opts/stats.conf'
[   0.019][d][global] config path: 'script-opts/stats.conf' -/-> '/app/etc/mpv/script-opts/stats.conf'
[   0.019][d][stats] script-opts/stats.conf not found. 
[   0.019][d][global] config path: 'lua-settings/stats.conf' -/-> '/var/home/salty/.var/app/io.mpv.Mpv/config/mpv/lua-settings/stats.conf'
[   0.019][d][global] config path: 'lua-settings/stats.conf' -/-> '/var/home/salty/.mpv/lua-settings/stats.conf'
[   0.019][d][global] config path: 'lua-settings/stats.conf' -/-> '/app/etc/mpv/lua-settings/stats.conf'
[   0.019][d][stats] lua-settings/stats.conf not found. 
[   0.019][d][console] reading options for console 
[   0.020][d][global] config path: 'script-opts/console.conf' -/-> '/var/home/salty/.var/app/io.mpv.Mpv/config/mpv/script-opts/console.conf'
[   0.020][d][global] config path: 'script-opts/console.conf' -/-> '/var/home/salty/.mpv/script-opts/console.conf'
[   0.020][d][global] config path: 'script-opts/console.conf' -/-> '/app/etc/mpv/script-opts/console.conf'
[   0.020][d][console] script-opts/console.conf not found. 
[   0.020][d][global] config path: 'lua-settings/console.conf' -/-> '/var/home/salty/.var/app/io.mpv.Mpv/config/mpv/lua-settings/console.conf'
[   0.020][d][global] config path: 'lua-settings/console.conf' -/-> '/var/home/salty/.mpv/lua-settings/console.conf'
[   0.020][d][global] config path: 'lua-settings/console.conf' -/-> '/app/etc/mpv/lua-settings/console.conf'
[   0.020][d][console] lua-settings/console.conf not found. 
[   0.020][d][stats] Exiting...
[   0.021][d][console] Exiting...
[   0.021][d][auto_profiles] loading mp.defaults
[   0.022][d][auto_profiles] loading @auto_profiles.lua
[   0.024][d][auto_profiles] Exiting...

Tried to fully remove and re-install mpv (with clearing data) but I still get that error anytime I open a video. Related #2

--osc=no has no effect

I'd love to switch from using the version of MPV that comes in the Ubuntu 20.04 LTS repositories to Flatpak-provided MPV but, despite my best efforts, the Flatpak version is ignoring both osc=no in ~/.var/app/io.mpv.Mpv/config/mpv/config and --osc=no on the command-line.

That's a deal-breaker. I insist on having a completely unadorned video window which doesn't do anything fancy when I move my mouse cursor over it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.