pax_global_header00006660000000000000000000000064147705643470014533gustar00rootroot0000000000000052 comment=e48ac7ce08462f5e33af6ef9deeac6fa87eef01e mpv-0.40.0/000077500000000000000000000000001477056434700124165ustar00rootroot00000000000000mpv-0.40.0/.editorconfig000066400000000000000000000007471477056434700151030ustar00rootroot00000000000000# To use this config on you editor, follow the instructions at: # http://editorconfig.org root = true [*] charset = utf-8 insert_final_newline = true indent_style = space indent_size = 4 max_line_length = 80 trim_trailing_whitespace = true [.git/COMMIT*] max_line_length = 72 [{osdep/dirent-win.h,TOOLS/osxbundle/mpv.app/Contents/PkgInfo}] charset = unset insert_final_newline = unset indent_style = unset indent_size = unset max_line_length = unset trim_trailing_whitespace = unset mpv-0.40.0/.editorconfig-checker.json000066400000000000000000000001651477056434700174470ustar00rootroot00000000000000{ "Format": "github-actions", "Disable": { "IndentSize": true, "MaxLineLength": true } } mpv-0.40.0/.github/000077500000000000000000000000001477056434700137565ustar00rootroot00000000000000mpv-0.40.0/.github/ISSUE_TEMPLATE/000077500000000000000000000000001477056434700161415ustar00rootroot00000000000000mpv-0.40.0/.github/ISSUE_TEMPLATE/2_bug_report_linux.yml000066400000000000000000000140271477056434700225000ustar00rootroot00000000000000name: "Report a Linux Issue" description: "Create a report for a runtime related Linux Issue" labels: ["os:linux"] type: Bug body: - type: textarea attributes: label: "mpv Information" placeholder: | mpv v0.38.0-96-gf776be6af5 Copyright © 2000-2024 mpv/MPlayer/mplayer2 projects built on May 5 2024 18:37:43 libplacebo version: v7.349.0 (v6.338.0-120-g7b294350) FFmpeg version: 6.1.1 FFmpeg library versions: libavutil 58.29.100 libavcodec 60.31.102 libavformat 60.16.100 libswscale 7.5.100 libavfilter 9.12.100 libswresample 4.12.100 description: | Provide the output of `mpv --version`. render: bash validations: required: false - type: textarea attributes: label: "Other Information" description: > Provide following information if applicable. - Linux Version: `cat /etc/os-release | grep "NAME"` - Kernel Version: `uname -a` - GPU Model: `lspci -nn | grep VGA` or `lshw -C display -numeric` - Mesa/GPU Driver Version: `glxinfo -B | grep "OpenGL version string"` or `vulkaninfo | grep driverInfo` - Window Manager and Version - Source of the mpv binary - Latest version of mpv you know without the problem - The time when the problem started to happen (after updating mpv, system, driver, etc.) - Possible screenshot or video of visual glitches If you're not using git master or the latest release, update. Packages and builds can be found [here](https://mpv.io/installation/). value: |- - Linux version: - Kernel Version: - GPU Model: - Mesa/GPU Driver Version: - Window Manager and Version: - Source of mpv: - Latest known working version: - Issue started after the following happened: render: text validations: required: true - type: textarea attributes: label: "Reproduction Steps" description: > Try to reproduce your issue with `--no-config` first. If it isn't reproducible with `--no-config` try to find out which option or script causes your issue. If the issue is render performance-related, try to reproduce it with `--no-config --profile=fast`, which is designed to work on lower-end mobile devices. For decoding performance-related issues, additionally try to enable hardware decoding with `--hwdec=yes` or the `Ctrl+h` shortcut. Describe the reproduction steps as precise as possible. It's very likely that the bug you experience wasn't reproduced by the developer because the workflow differs from your own. validations: required: true - type: textarea attributes: label: "Expected Behavior" placeholder: "What were you expecting?" validations: required: true - type: textarea attributes: label: "Actual Behavior" placeholder: "What happened instead?" validations: required: true - type: textarea attributes: label: "Log File" placeholder: "Drag and drop log file here (Don't paste content directly)" description: > Make a log file with `--gpu-debug --log-file=output.txt`, which is our preferred way, and attach it to the issue. If you have trouble producing a log file, you can alternatively use `--gpu-debug -v -v`, save the terminal output to a file, and attach it to the issue. In the case of a crash, please provide a [backtrace](https://wiki.archlinux.org/title/Debugging/Getting_traces). Without the log file, this issue will be closed for ignoring the issue template. Disclaimer: The log file may contain identifiable information, such as your username. Review the log file before sharing and redact any sensitive data if necessary. validations: required: true - type: textarea attributes: label: "Sample Files" placeholder: "Drag and drop sample files here" description: > Please provide sample files for a minimal reproduction case, if the issue can't be reproduced without it or it is helpful to demonstrate the issue. Preferably files should be attached directly within the text field below. Due to GitHub's upload restriction, you may need to archive the sample file first and upload it as `.zip` file. If the sample file is too big to attach directly, use a solution that is easy to access with possible long-term retention. Possible services include, but are not limited to, the following: - [0x0.st](https://0x0.st/) (no long-term retention) - [Dropbox](https://www.dropbox.com) - [Google Drive](https://www.google.com/drive/) - [iCLoud Drive](https://www.icloud.com/iclouddrive/) - [MediaFire](https://www.mediafire.com/) - [OneDrive](https://onedrive.live.com/) - type: checkboxes attributes: label: "I carefully read all instruction and confirm that I did the following:" options: - label: "I tested with the latest mpv version to validate that the issue is not already fixed." required: true - label: "I provided all required information including system and mpv version." required: true - label: >- I produced the log file with the exact same set of files, parameters, and conditions used in "Reproduction Steps", with the addition of `--log-file=output.txt`. required: true - label: >- I produced the log file while the behaviors described in "Actual Behavior" were actively observed. required: true - label: "I attached the full, untruncated log file." required: true - label: "I attached the backtrace in the case of a crash." required: true mpv-0.40.0/.github/ISSUE_TEMPLATE/2_bug_report_macos.yml000066400000000000000000000142741477056434700224470ustar00rootroot00000000000000name: "Report a macOS Issue" description: "Create a report for a runtime related macOS Issue" labels: ["os:mac"] type: Bug body: - type: textarea attributes: label: "mpv Information" placeholder: | mpv v0.38.0-96-gf776be6af5 Copyright © 2000-2024 mpv/MPlayer/mplayer2 projects built on May 5 2024 18:37:43 libplacebo version: v7.349.0 (v6.338.0-120-g7b294350) FFmpeg version: 6.1.1 FFmpeg library versions: libavutil 58.29.100 libavcodec 60.31.102 libavformat 60.16.100 libswscale 7.5.100 libavfilter 9.12.100 libswresample 4.12.100 description: | Provide the output of `mpv --version`. render: bash validations: required: false - type: textarea attributes: label: "Other Information" description: > - macOS Version: `system_profiler SPSoftwareDataType | sed -rn 's/^ *System Version: (.*$)/\1/p'` - Source of the mpv binary or bundle - Latest version of mpv you know without the problem - The time when the problem started to happen (after updating mpv, system, driver, etc.) - Possible screenshot or video of visual glitches If you're not using git master or the latest release, update. Nightly builds from master can be found [here](https://github.com/mpv-player/mpv/actions/workflows/build.yml?query=branch%3Amaster+event%3Apush), click on the latest workflow run, scroll down to the Artifacts section and download the appropriate build. Packages and builds can be found [here](https://mpv.io/installation/). value: |- - macOS version: - Source of mpv: - Latest known working version: - Issue started after the following happened: render: text validations: required: true - type: textarea attributes: label: "Reproduction Steps" description: > Try to reproduce your issue with `--no-config` first. If it isn't reproducible with `--no-config` try to find out which option or script causes your issue. If the issue is render performance-related, try to reproduce it with `--no-config --profile=fast`, which is designed to work on lower-end mobile devices. For decoding performance-related issues, additionally try to enable hardware decoding with `--hwdec=yes` or the `Ctrl+h` shortcut. Describe the reproduction steps as precise as possible. It's very likely that the bug you experience wasn't reproduced by the developer because the workflow differs from your own. validations: required: true - type: textarea attributes: label: "Expected Behavior" placeholder: "What were you expecting?" validations: required: true - type: textarea attributes: label: "Actual Behavior" placeholder: "What happened instead?" validations: required: true - type: textarea attributes: label: "Log File" placeholder: "Drag and drop log file here (Don't paste content directly)" description: > Make a log file with `--gpu-debug --log-file=output.txt`, which is our preferred way, and attach it to the issue. If you use the Bundle, a default log is created for your last run at `~/Library/Logs/mpv.log`. You can jump to that file via the `Help > Show log File…` menu. If you have trouble producing a log file, you can alternatively use `--gpu-debug -v -v`, save the terminal output to a file, and attach it to the issue. In the case of a crash, please provide the macOS Crash Report or create a [backtrace](https://developer.apple.com/library/archive/documentation/General/Conceptual/lldb-guide/chapters/C5-Examining-The-Call-Stack.html) yourself. Without the log file, this issue will be closed for ignoring the issue template. Disclaimer: The log file may contain identifiable information, such as your username. Review the log file before sharing and redact any sensitive data if necessary. validations: required: true - type: textarea attributes: label: "Sample Files" placeholder: "Drag and drop sample files here" description: > Please provide sample files for a minimal reproduction case, if the issue can't be reproduced without it or it is helpful to demonstrate the issue. Preferably files should be attached directly within the text field below. Due to GitHub's upload restriction, you may need to archive the sample file first and upload it as `.zip` file. If the sample file is too big to attach directly, use a solution that is easy to access with possible long-term retention. Possible services include, but are not limited to, the following: - [0x0.st](https://0x0.st/) (no long-term retention) - [Dropbox](https://www.dropbox.com) - [Google Drive](https://www.google.com/drive/) - [iCLoud Drive](https://www.icloud.com/iclouddrive/) - [MediaFire](https://www.mediafire.com/) - [OneDrive](https://onedrive.live.com/) - type: checkboxes attributes: label: "I carefully read all instruction and confirm that I did the following:" options: - label: "I tested with the latest mpv version to validate that the issue is not already fixed." required: true - label: "I provided all required information including system and mpv version." required: true - label: >- I produced the log file with the exact same set of files, parameters, and conditions used in "Reproduction Steps", with the addition of `--log-file=output.txt`. required: true - label: >- I produced the log file while the behaviors described in "Actual Behavior" were actively observed. required: true - label: "I attached the full, untruncated log file." required: true - label: "I attached the backtrace in the case of a crash." required: true mpv-0.40.0/.github/ISSUE_TEMPLATE/2_bug_report_windows.yml000066400000000000000000000136661477056434700230430ustar00rootroot00000000000000name: "Report a Windows Issue" description: "Create a report for a runtime related Windows Issue" labels: ["os:win"] type: Bug body: - type: textarea attributes: label: "mpv Information" placeholder: | mpv v0.38.0-96-gf776be6af5 Copyright © 2000-2024 mpv/MPlayer/mplayer2 projects built on May 5 2024 18:37:43 libplacebo version: v7.349.0 (v6.338.0-120-g7b294350) FFmpeg version: 6.1.1 FFmpeg library versions: libavutil 58.29.100 libavcodec 60.31.102 libavformat 60.16.100 libswscale 7.5.100 libavfilter 9.12.100 libswresample 4.12.100 description: | Provide the output of `mpv --version`. render: bash validations: required: false - type: textarea attributes: label: "Other Information" description: > - Windows Version: `cmd /c ver` - GPU model, driver and version - Source of the mpv binary - Latest version of mpv you know without the problem - The time when the problem started to happen (after updating mpv, system, driver, etc.) - Possible screenshot or video of visual glitches If you're not using git master or the latest release, update. Nightly builds from master can be found [here](https://github.com/mpv-player/mpv/actions/workflows/build.yml?query=branch%3Amaster+event%3Apush), click on the latest workflow run, scroll down to the Artifacts section and download the appropriate build. Packages and builds can be found [here](https://mpv.io/installation/). value: |- - Windows version: - GPU model, driver and version: - Source of mpv: - Latest known working version: - Issue started after the following happened: render: text validations: required: true - type: textarea attributes: label: "Reproduction Steps" description: > Try to reproduce your issue with `--no-config` first. If it isn't reproducible with `--no-config` try to find out which option or script causes your issue. If the issue is render performance-related, try to reproduce it with `--no-config --profile=fast`, which is designed to work on lower-end mobile devices. For decoding performance-related issues, additionally try to enable hardware decoding with `--hwdec=yes` or the `Ctrl+h` shortcut. Describe the reproduction steps as precise as possible. It's very likely that the bug you experience wasn't reproduced by the developer because the workflow differs from your own. validations: required: true - type: textarea attributes: label: "Expected Behavior" placeholder: "What were you expecting?" validations: required: true - type: textarea attributes: label: "Actual Behavior" placeholder: "What happened instead?" validations: required: true - type: textarea attributes: label: "Log File" placeholder: "Drag and drop log file here (Don't paste content directly)" description: > Make a log file with `--gpu-debug --log-file=output.txt`, which is our preferred way, and attach it to the issue. If you have trouble producing a log file, you can alternatively use `--gpu-debug -v -v`, save the terminal output to a file, and attach it to the issue. In the case of a crash, please provide a backtrace, attach the appropriate `.dmp` file from `%LOCALAPPDATA%\CrashDumps`. Without the log file, this issue will be closed for ignoring the issue template. Disclaimer: The log file may contain identifiable information, such as your username. Review the log file before sharing and redact any sensitive data if necessary. validations: required: true - type: textarea attributes: label: "Sample Files" placeholder: "Drag and drop sample files here" description: > Please provide sample files for a minimal reproduction case, if the issue can't be reproduced without it or it is helpful to demonstrate the issue. Preferably files should be attached directly within the text field below. Due to GitHub's upload restriction, you may need to archive the sample file first and upload it as `.zip` file. If the sample file is too big to attach directly, use a solution that is easy to access with possible long-term retention. Possible services include, but are not limited to, the following: - [0x0.st](https://0x0.st/) (no long-term retention) - [Dropbox](https://www.dropbox.com) - [Google Drive](https://www.google.com/drive/) - [iCLoud Drive](https://www.icloud.com/iclouddrive/) - [MediaFire](https://www.mediafire.com/) - [OneDrive](https://onedrive.live.com/) - type: checkboxes attributes: label: "I carefully read all instruction and confirm that I did the following:" options: - label: "I tested with the latest mpv version to validate that the issue is not already fixed." required: true - label: "I provided all required information including system and mpv version." required: true - label: >- I produced the log file with the exact same set of files, parameters, and conditions used in "Reproduction Steps", with the addition of `--log-file=output.txt`. required: true - label: >- I produced the log file while the behaviors described in "Actual Behavior" were actively observed. required: true - label: "I attached the full, untruncated log file." required: true - label: "I attached the backtrace in the case of a crash." required: true mpv-0.40.0/.github/ISSUE_TEMPLATE/3_bug_report.yml000066400000000000000000000131411477056434700212560ustar00rootroot00000000000000name: "Report an Issue on other platforms" description: "Create a report for a runtime related Issue on other platforms" labels: [] type: Bug body: - type: textarea attributes: label: "mpv Information" placeholder: | mpv v0.38.0-96-gf776be6af5 Copyright © 2000-2024 mpv/MPlayer/mplayer2 projects built on May 5 2024 18:37:43 libplacebo version: v7.349.0 (v6.338.0-120-g7b294350) FFmpeg version: 6.1.1 FFmpeg library versions: libavutil 58.29.100 libavcodec 60.31.102 libavformat 60.16.100 libswscale 7.5.100 libavfilter 9.12.100 libswresample 4.12.100 description: | Provide the output of `mpv --version`. render: bash validations: required: false - type: textarea attributes: label: "Important Information" description: > - Platform and Version - GPU model, driver and version - Source of the mpv binary - Latest version of mpv you know without the problem - The time when the problem started to happen (after updating mpv, system, driver, etc.) - Possible screenshot or video of visual glitches If you're not using git master or the latest release, update. Packages and builds can be found [here](https://mpv.io/installation/). value: |- - Platform version: - GPU model, driver and version: - Source of mpv: - Latest known working version: - Issue started after the following happened: render: text validations: required: true - type: textarea attributes: label: "Reproduction Steps" description: > Try to reproduce your issue with `--no-config` first. If it isn't reproducible with `--no-config` try to find out which option or script causes your issue. If the issue is render performance-related, try to reproduce it with `--no-config --profile=fast`, which is designed to work on lower-end mobile devices. For decoding performance-related issues, additionally try to enable hardware decoding with `--hwdec=yes` or the `Ctrl+h` shortcut. Describe the reproduction steps as precise as possible. It's very likely that the bug you experience wasn't reproduced by the developer because the workflow differs from your own. validations: required: true - type: textarea attributes: label: "Expected Behavior" placeholder: "What were you expecting?" validations: required: true - type: textarea attributes: label: "Actual Behavior" placeholder: "What happened instead?" validations: required: true - type: textarea attributes: label: "Log File" placeholder: "Drag and drop log file here (Don't paste content directly)" description: > Make a log file with `--gpu-debug --log-file=output.txt`, which is our preferred way, and attach it to the issue. If you have trouble producing a log file, you can alternatively use `--gpu-debug -v -v`, save the terminal output to a file, and attach it to the issue. In the case of a crash, please provide a backtrace. Without the log file, this issue will be closed for ignoring the issue template. Disclaimer: The log file may contain identifiable information, such as your username. Review the log file before sharing and redact any sensitive data if necessary. validations: required: true - type: textarea attributes: label: "Sample Files" placeholder: "Drag and drop sample files here" description: > Please provide sample files for a minimal reproduction case, if the issue can't be reproduced without it or it is helpful to demonstrate the issue. Preferably files should be attached directly within the text field below. Due to GitHub's upload restriction, you may need to archive the sample file first and upload it as `.zip` file. If the sample file is too big to attach directly, use a solution that is easy to access with possible long-term retention. Possible services include, but are not limited to, the following: - [0x0.st](https://0x0.st/) (no long-term retention) - [Dropbox](https://www.dropbox.com) - [Google Drive](https://www.google.com/drive/) - [iCLoud Drive](https://www.icloud.com/iclouddrive/) - [MediaFire](https://www.mediafire.com/) - [OneDrive](https://onedrive.live.com/) - type: checkboxes attributes: label: "I carefully read all instruction and confirm that I did the following:" options: - label: "I tested with the latest mpv version to validate that the issue is not already fixed." required: true - label: "I provided all required information including system and mpv version." required: true - label: >- I produced the log file with the exact same set of files, parameters, and conditions used in "Reproduction Steps", with the addition of `--log-file=output.txt`. required: true - label: >- I produced the log file while the behaviors described in "Actual Behavior" were actively observed. required: true - label: "I attached the full, untruncated log file." required: true - label: "I attached the backtrace in the case of a crash." required: true mpv-0.40.0/.github/ISSUE_TEMPLATE/4_bug_report_build.yml000066400000000000000000000046031477056434700224410ustar00rootroot00000000000000name: "Report a build Problem" description: "Create a report for a build related Issue" labels: ["core:meson"] type: Bug body: - type: textarea attributes: label: "Important Information" description: > - mpv version - Platform and Version - Meson version If you're not using git master or the latest release, update. Releases are listed [here](https://github.com/mpv-player/mpv/releases). value: |- - mpv version: - Platform version: - Meson version: render: text validations: required: true - type: textarea attributes: label: "Reproduction Steps" description: > Describe the reproduction steps as precise as possible. It's very likely that the bug you experience wasn't reproduced by the developer because the workflow differs from your own. validations: required: true - type: textarea attributes: label: "Expected Behavior" placeholder: "What were you expecting?" validations: required: true - type: textarea attributes: label: "Actual Behavior" placeholder: "What happened instead?" validations: required: true - type: textarea attributes: label: "Log File" placeholder: "Drag and drop log file here (Don't paste content directly)" description: > Attach meson-logs/meson-log.txt or meson setup build output to the issue. Without the log file, this issue will be closed for ignoring the issue template. validations: required: true - type: checkboxes attributes: label: "I carefully read all instruction and confirm that I did the following:" options: - label: "I tested with the latest mpv version to validate that the issue is not already fixed." required: true - label: "I provided all required information including system and mpv version." required: true - label: >- I produced the log file with the exact same set of parameters, and conditions used in "Reproduction Steps". required: true - label: >- I produced the log file while the behaviors described in "Actual Behavior" were actively observed. required: true - label: "I attached the full, untruncated log file." required: true mpv-0.40.0/.github/ISSUE_TEMPLATE/5_feature_request.yml000066400000000000000000000047111477056434700223160ustar00rootroot00000000000000name: "Request a new Feature" description: "Create a request for a new feature" labels: ["meta:feature-request"] type: Feature body: - type: textarea attributes: label: "Expected behavior of the wanted feature" description: > Before requesting a new feature, make sure it hasn't been [requested yet](https://github.com/mpv-player/mpv/labels/meta%3Afeature-request), and isn't already supported by [mpv](https://mpv.io/manual/master/), [ffmpeg](https://ffmpeg.org/documentation.html), or existing [mpv scripts](https://github.com/mpv-player/mpv/wiki/User-Scripts). If you are not sure about this, ask on [mpv Discussions](https://github.com/mpv-player/mpv/discussions) and [mpv IRC channel](https://mpv.io/community/) first before opening a feature request. validations: required: true - type: textarea attributes: label: "Alternative behavior of the wanted feature" - type: textarea attributes: label: "Log File" description: > Even if you think it's not necessary at first, it might help us later to find possible issues. Make a log file with `--log-file=output.txt`, which is our preferred way, and attach it to the issue. If you have trouble producing a log file, you can alternatively use `-v -v`, save the terminal output to a file, and attach it to the issue. - type: textarea attributes: label: "Sample Files" placeholder: "Drag and drop sample files here" description: > Please provide sample files in the case you request a format/codec/container dependent feature, and it could help us test and implement it. Preferably files should be attached directly within the text field below. Due to GitHub's upload restriction, you may need to archive the sample file first and upload it as `.zip` file. If the sample file is too big to attach directly, use a solution that is easy to access with possible long-term retention. Possible services include, but are not limited to, the following: - [0x0.st](https://0x0.st/) (no long-term retention) - [Dropbox](https://www.dropbox.com) - [Google Drive](https://www.google.com/drive/) - [iCLoud Drive](https://www.icloud.com/iclouddrive/) - [MediaFire](https://www.mediafire.com/) - [OneDrive](https://onedrive.live.com/) mpv-0.40.0/.github/ISSUE_TEMPLATE/config.yml000066400000000000000000000010061477056434700201260ustar00rootroot00000000000000blank_issues_enabled: false contact_links: - name: mpv Discussions url: https://github.com/mpv-player/mpv/discussions about: If you have questions or want to discuss things use our GitHub Discussions - name: mpv IRC channel url: https://mpv.io/community/ about: Feel free to ask questions here irc://irc.libera.chat/mpv - name: mpv IRC developer channel url: https://mpv.io/community/ about: Ask questions related to the development of mpv here irc://irc.libera.chat/mpv-devel mpv-0.40.0/.github/PULL_REQUEST_TEMPLATE000066400000000000000000000003631477056434700171620ustar00rootroot00000000000000Read this before you submit this pull request: https://github.com/mpv-player/mpv/blob/master/DOCS/contribute.md Reading this link and following the rules will get your pull request reviewed and merged faster. Nobody wants lazy pull requests. mpv-0.40.0/.github/workflows/000077500000000000000000000000001477056434700160135ustar00rootroot00000000000000mpv-0.40.0/.github/workflows/build.yml000066400000000000000000000376531477056434700176530ustar00rootroot00000000000000name: build on: push: branches: - master - ci - 'release/**' paths-ignore: - 'DOCS/**' - 'TOOLS/lua/**' - '.editorconfig' - '.github/ISSUE_TEMPLATE/**' - '.github/PULL_REQUEST_TEMPLATE' - '.gitignore' - 'Copyright' - 'README.md' - 'RELEASE_NOTES' pull_request: branches: [master] paths-ignore: - 'DOCS/**' - 'TOOLS/lua/**' - '.editorconfig' - '.github/ISSUE_TEMPLATE/**' - '.github/PULL_REQUEST_TEMPLATE' - '.gitignore' - 'Copyright' - 'README.md' - 'RELEASE_NOTES' jobs: mingw: runs-on: ubuntu-24.04 env: CCACHE_BASEDIR: ${{ github.workspace }} CCACHE_DIR: ${{ github.workspace }}/.ccache CCACHE_MAXSIZE: 500M strategy: fail-fast: false matrix: include: - target: i686-w64-mingw32 wine: wine32 - target: x86_64-w64-mingw32 wine: wine64 steps: - uses: actions/checkout@v4 - name: Get time id: get_time run: echo "timestamp=`date +%s%N`" >> $GITHUB_OUTPUT - name: Restore cache uses: actions/cache/restore@v4 with: path: ${{ env.CCACHE_DIR }} key: ${{ matrix.target }}-${{ steps.get_time.outputs.timestamp }} restore-keys: ${{ matrix.target }}- - name: Install dependencies run: | sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get install --no-install-recommends -y ccache g++-mingw-w64 gcc-multilib meson nasm ninja-build pkgconf ${{ matrix.wine }} wine - name: Install Meson Wraps run: | mkdir subprojects -p meson wrap install mujs - name: Build libraries run: | ./ci/build-mingw64.sh env: TARGET: ${{ matrix.target }} - name: Build with meson id: build run: | ./ci/build-mingw64.sh meson pack env: TARGET: ${{ matrix.target }} - name: Print meson log if: ${{ failure() && steps.build.outcome == 'failure' }} run: | cat ./mingw_build/meson-logs/meson-log.txt - name: Functional test run: | cd artifact && wine ./mpv.com -v --no-config env: WINEDEBUG: '+loaddll' - name: Run meson tests id: tests run: | meson test -C mingw_build - name: Print meson test log if: ${{ failure() && steps.tests.outcome == 'failure' }} run: | cat ./mingw_build/meson-logs/testlog.txt - uses: actions/upload-artifact@v4 with: name: mpv-${{ matrix.target }} path: mpv-git-*.zip - name: Save Cache uses: actions/cache/save@v4 if: always() with: path: ${{ env.CCACHE_DIR }} key: ${{ matrix.target }}-${{ steps.get_time.outputs.timestamp }} win32: runs-on: windows-latest env: VS: "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise" CC: "ccache clang" CXX: "ccache clang++" CC_LD: "lld" CXX_LD: "lld" WINDRES: "llvm-rc" CCACHE_BASEDIR: ${{ github.workspace }} CCACHE_DIR: "${{ github.workspace }}\\.ccache" CCACHE_MAXSIZE: 500M steps: - name: Disable autocrlf run: | git config --global core.autocrlf false git config --global core.eol lf - uses: actions/checkout@v4 - name: Get time id: get_time run: | "timestamp=$((Get-Date).Ticks)" >> $env:GITHUB_OUTPUT - name: Restore cache uses: actions/cache/restore@v4 with: path: ${{ env.CCACHE_DIR }} key: x86_64-windows-msvc-${{ steps.get_time.outputs.timestamp }} restore-keys: x86_64-windows-msvc- - name: Install dependencies run: | python -m pip install meson choco install ccache nasm - name: Update Meson WrapDB run: | meson wrap update-db # Explicitly download wraps, as nested projects may have older versions of them. meson wrap install expat meson wrap install harfbuzz meson wrap install libpng meson wrap install zlib - name: Build id: build run: | $env:PATH = ($env:PATH -split ';' | Where-Object { $_ -ne 'C:\Program Files\LLVM\bin' -and ` $_ -ne 'C:\Strawberry\c\bin' }) -join ';' $env:PATH += ';C:\Program Files\NASM' Import-Module "$env:VS\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" Enter-VsDevShell -VsInstallPath $env:VS -SkipAutomaticLocation -DevCmdArguments "-arch=x64 -host_arch=x64" ./ci/build-win32.ps1 - name: Print build log if: ${{ failure() && steps.build.outcome == 'failure' }} run: | cat ./build/meson-logs/meson-log.txt - name: Run meson tests id: tests run: | $env:PATH = ($env:PATH -split ';' | Where-Object { $_ -ne 'C:\Program Files\LLVM\bin' -and ` $_ -ne 'C:\Strawberry\c\bin' }) -join ';' $env:PATH += ';C:\Program Files\NASM' Import-Module "$env:VS\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" Enter-VsDevShell -VsInstallPath $env:VS -SkipAutomaticLocation -DevCmdArguments "-arch=x64 -host_arch=x64" meson test -C build -t 2 - name: Print meson test log if: ${{ failure() && steps.tests.outcome == 'failure' }} run: | cat ./build/meson-logs/testlog.txt - uses: actions/upload-artifact@v4 with: name: mpv-x86_64-windows-msvc path: | build/mpv.??? build/vulkan-*.dll !build/mpv.lib - name: Save Cache uses: actions/cache/save@v4 if: always() with: path: ${{ env.CCACHE_DIR }} key: x86_64-windows-msvc-${{ steps.get_time.outputs.timestamp }} macos: runs-on: ${{ matrix.os }} strategy: matrix: cc: - "clang" cxx: - "clang++" os: - "macos-13" - "macos-14" - "macos-15" include: - os: "macos-13" arch: "intel" - os: "macos-14" arch: "arm" xcode: "Xcode_15.2" - os: "macos-15" arch: "arm" steps: - uses: actions/checkout@v4 - name: Remove stray upstream python binary symlinks under /usr/local run: | find /usr/local/bin -lname '*/Library/Frameworks/Python.framework/*' -delete -print brew unlink python && brew link --overwrite python - name: Unlink pkg-config if the CI runner happens to have it already installed run: | find "$(brew config | grep HOMEBREW_PREFIX | cut -f 2- -d ' ')/bin" -lname '*/pkg-config@0*/*' -print -exec brew unlink pkg-config@0.29.2 \; -quit - name: Change Xcode version if: ${{ matrix.xcode != '' }} run: | sudo xcode-select -s /Applications/${{ matrix.xcode }}.app - name: Install dependencies run: | brew update brew install -q autoconf automake pkgconf libtool python freetype fribidi little-cms2 \ luajit libass ffmpeg meson uchardet mujs libplacebo molten-vk vulkan-loader vulkan-headers - name: Build with meson id: build run: | ./ci/build-macos.sh env: CC: "${{ matrix.cc }}" CXX: "${{ matrix.cxx }}" TRAVIS_OS_NAME: "${{ matrix.os }}" - name: Create App Bundle run: | meson compile -C build macos-bundle tar -czvf mpv.tar.gz -C build mpv.app - name: Print meson log if: ${{ failure() && steps.build.outcome == 'failure' }} run: | cat ./build/meson-logs/meson-log.txt - name: Run meson tests id: tests run: | meson test -C build - name: Print meson test log if: ${{ failure() && steps.tests.outcome == 'failure' }} run: | cat ./build/meson-logs/testlog.txt - uses: actions/upload-artifact@v4 with: name: mpv-${{ matrix.os }}-${{ matrix.arch }} path: mpv.tar.gz linux: runs-on: ubuntu-latest container: image: "registry.opensuse.org/home/mia/images/images/mpv-ci:stable-deps" env: CC: "${{ matrix.config.cc }}" CXX: "${{ matrix.config.cxx }}" CC_LD: "${{ matrix.config.ld }}" CXX_LD: "${{ matrix.config.ld }}" strategy: matrix: config: - cc: "gcc" cxx: "g++" args: "-Db_ndebug=true" - cc: "clang" cxx: "clang++" ld: "lld" args: "-Db_lto=true -Db_lto_mode=thin" steps: - uses: actions/checkout@v4 - name: Build with meson id: build run: | ./ci/build-tumbleweed.sh ${{ matrix.config.args }} - name: Print meson log if: ${{ failure() && steps.build.outcome == 'failure' }} run: | cat ./build/meson-logs/meson-log.txt - name: Run meson tests id: tests run: | export LSAN_OPTIONS="suppressions=${GITHUB_WORKSPACE}/.lsan_suppressions" meson test -C build - name: Print meson test log if: ${{ failure() && steps.tests.outcome == 'failure' }} run: | cat ./build/meson-logs/testlog.txt linux-fuzz: runs-on: ubuntu-latest container: image: "registry.opensuse.org/home/mia/images/images/mpv-ci:stable-deps" env: CC: "clang" CXX: "clang++" steps: - uses: actions/checkout@v4 - name: Build with meson id: build run: | meson setup build \ --werror \ -Dc_args="-Wno-error=deprecated -Wno-error=deprecated-declarations" \ -Dfuzzers=true -Dlibmpv=true -Dcplayer=false meson compile -C build fuzzers - name: Print meson log if: ${{ failure() && steps.build.outcome == 'failure' }} run: | cat ./build/meson-logs/meson-log.txt linux-ffmpeg-6-1: runs-on: ubuntu-latest container: # We want to test ffmpeg 6.1.1 which alpine 3.19 has exactly. # Furthermore, this is a very minimal build of mpv without commonly # used features to test build compatibility. Musl is a nice bonus as well image: alpine:3.19 steps: - uses: actions/checkout@v4 - name: Install dependencies run: | apk update apk add \ binutils \ ffmpeg-dev \ gcc \ git \ g++ \ libass-dev \ lua5.2-dev \ pulseaudio-dev \ libx11-dev \ libxfixes-dev \ libxkbcommon-dev \ libxrandr-dev \ libxpresent-dev \ libxscrnsaver-dev \ meson \ musl-dev \ samurai - name: Build with meson id: build run: | ./ci/build-linux-old.sh - name: Print meson log if: ${{ failure() && steps.build.outcome == 'failure' }} run: | cat ./build/meson-logs/meson-log.txt - name: Run meson tests id: tests run: | meson test -C build - name: Print meson test log if: ${{ failure() && steps.tests.outcome == 'failure' }} run: | cat ./build/meson-logs/testlog.txt openbsd: runs-on: ubuntu-latest # until https://github.com/actions/runner/issues/385 timeout-minutes: 30 # avoid any weirdness with the VM steps: - uses: actions/checkout@v4 - name: Test in OpenBSD VM uses: cross-platform-actions/action@v0.25.0 with: operating_system: openbsd version: '7.5' run: | sudo pkg_add -U \ cmake \ ffmpeg \ git \ libarchive \ libbluray \ libcaca \ libcdio-paranoia \ libdvdnav \ libiconv \ libplacebo \ libv4l \ libxkbcommon \ luajit \ meson \ openal \ pkgconf \ pulseaudio \ python3 \ rubberband \ sdl2 \ shaderc \ spirv-cross \ spirv-headers \ uchardet \ vulkan-loader \ vulkan-headers \ zimg ./ci/build-openbsd.sh if ! meson test -C build; then cat ./build/meson-logs/testlog.txt exit 1 fi freebsd: runs-on: ubuntu-latest # until https://github.com/actions/runner/issues/385 timeout-minutes: 30 # avoid any weirdness with the VM steps: - uses: actions/checkout@v4 - name: Test in FreeBSD VM uses: cross-platform-actions/action@v0.25.0 with: operating_system: freebsd version: '14.1' run: | sudo pkg update sudo pkg install -y \ alsa-lib \ cmake \ evdev-proto \ ffmpeg \ git \ iconv \ jackit \ libarchive \ libbluray \ libcaca \ libcdio-paranoia \ libdvdnav \ libdisplay-info \ libplacebo \ libXinerama \ libxkbcommon \ libxpresent \ libXv \ luajit \ meson \ mujs \ openal-soft \ pipewire \ pkgconf \ pulseaudio \ python3 \ rubberband \ sekrit-twc-zimg \ sdl2 \ sndio \ uchardet \ v4l_compat \ vulkan-headers \ wayland-protocols ./ci/build-freebsd.sh if ! meson test -C build; then cat ./build/meson-logs/testlog.txt exit 1 fi msys2: runs-on: windows-latest strategy: fail-fast: false matrix: sys: - clang64 - mingw64 - ucrt64 defaults: run: shell: msys2 {0} steps: - name: Disable autocrlf shell: pwsh run: | git config --global core.autocrlf false git config --global core.eol lf - uses: actions/checkout@v4 - uses: msys2/setup-msys2@v2 with: msystem: ${{ matrix.sys }} update: true install: git pacboy: >- angleproject:p ca-certificates:p cc:p cppwinrt:p ffmpeg:p lcms2:p libarchive:p libass:p libcdio-paranoia:p libdvdnav:p libjpeg-turbo:p libplacebo:p lua51:p meson:p ninja:p pkgconf:p python:p rst2pdf:p rubberband:p shaderc:p spirv-cross:p uchardet:p vapoursynth:p vulkan-devel:p - name: Build with meson id: build run: | ./ci/build-msys2.sh meson env: SYS: ${{ matrix.sys }} - name: Print meson log if: ${{ failure() && steps.build.outcome == 'failure' }} run: | cat ./build/meson-logs/meson-log.txt - name: Run meson tests id: tests run: | meson test -C build - name: Print meson test log if: ${{ failure() && steps.tests.outcome == 'failure' }} run: | cat ./build/meson-logs/testlog.txt mpv-0.40.0/.github/workflows/cleanup_caches.yml000066400000000000000000000026061477056434700214770ustar00rootroot00000000000000name: Cleanup caches on: workflow_run: workflows: [build] types: [completed] jobs: cache: runs-on: ubuntu-latest steps: - run: | gh cache list -L 100 --json id,key,ref -S last_accessed_at -O desc --jq ' map(select(.key | startswith("x86_64-w64-mingw32-") or startswith("i686-w64-mingw32-") or startswith("x86_64-windows-msvc-"))) | group_by(.ref) | map({ ref: .[0].ref, caches: map({ key: .key, prefix: (.key | capture("^(?[\\w_-]+-)\\d+$").prefix) }) | group_by(.prefix) | map({keys: map(.key)}) }) | .[] ' | while read -r group; do pr=$(echo "$group" | jq -r '.ref | capture("refs/pull/(?[0-9]+)/merge").num') if [[ -n "$pr" ]] && [ "$(gh pr view $pr --json state --jq '.state')" != "OPEN" ]; then keys=$(echo "$group" | jq -c '.caches | map(.keys) | .[]') else keys=$(echo "$group" | jq -c '.caches | map(.keys[1:]) | .[]') fi for key in $(echo "$keys" | jq -r '.[]'); do gh cache delete "$key" done done env: GH_REPO: ${{ github.repository }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} mpv-0.40.0/.github/workflows/comment.yml000066400000000000000000000033771477056434700202120ustar00rootroot00000000000000name: comment on: workflow_run: workflows: [build] types: [completed] jobs: pr_comment: if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' runs-on: ubuntu-latest steps: - env: GH_REPO: ${{ github.repository }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | pr=$(gh pr list --state open --json headRefOid,number \ --jq '.[] | select(.headRefOid == "${{ github.event.workflow_run.head_sha }}") | .number') if [ -z "$pr" ]; then echo "No matching open pull request found" exit 0 fi artifacts=$(gh api repos/{owner}/{repo}/actions/runs/${{ github.event.workflow_run.id }}/artifacts --jq '.artifacts') if [ "$(echo "$artifacts" | jq 'length')" -eq 0 ]; then echo "No artifacts found" exit 0 fi body=$(echo "$artifacts" | jq -r ' def link: "https://nightly.link/${{ github.repository }}/actions/artifacts/\(.id).zip"; def entry: "* [\(.name)](\(link))"; "Download the artifacts for this pull request:\n
Windows\n\n" + (sort_by(.name) | map(select(.name | test("w64|msvc")) | entry) | join("\n")) + "\n
\n
macOS\n\n" + (sort_by(.name) | map(select(.name | test("macos")) | entry) | join("\n")) + "\n
" ') comment_id=$(gh issue view $pr --json comments \ --jq '.comments[] | select(.author.login == "github-actions") | .id') if [ -n "$comment_id" ]; then edit=--edit-last fi gh pr comment $pr --body "$body" $edit mpv-0.40.0/.github/workflows/docs.yml000066400000000000000000000012711477056434700174670ustar00rootroot00000000000000name: docs on: push: branches: - master - ci - 'release/**' paths: - 'DOCS/**' pull_request: branches: [master] paths: - 'DOCS/**' jobs: check-docs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Docs run: | sudo apt-get install --no-install-recommends -y python3-docutils rst2pdf ./TOOLS/docutils-wrapper.py rst2man --strip-elements-with-class=contents --halt=2 ./DOCS/man/mpv.rst mpv.1 ./TOOLS/docutils-wrapper.py rst2html --halt=2 ./DOCS/man/mpv.rst mpv.html ./TOOLS/docutils-wrapper.py rst2pdf -c -b 1 --repeat-table-rows ./DOCS/man/mpv.rst -o mpv.pdf mpv-0.40.0/.github/workflows/fuzz.yml000066400000000000000000000030441477056434700175350ustar00rootroot00000000000000name: Pull Request Fuzzing on: pull_request: branches: [master] paths-ignore: - 'DOCS/**' - 'TOOLS/lua/**' - '.editorconfig' - '.github/ISSUE_TEMPLATE/**' - '.github/PULL_REQUEST_TEMPLATE' - '.gitignore' - 'Copyright' - 'README.md' - 'RELEASE_NOTES' permissions: {} jobs: Fuzzing: runs-on: ubuntu-latest permissions: security-events: write strategy: fail-fast: false matrix: sanitizer: [address, undefined, memory] steps: - name: Build Fuzzers (${{ matrix.sanitizer }}) id: build uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master with: oss-fuzz-project-name: 'mpv' language: c sanitizer: ${{ matrix.sanitizer }} - name: Run Fuzzers (${{ matrix.sanitizer }}) uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master with: oss-fuzz-project-name: 'mpv' language: c fuzz-seconds: 1200 sanitizer: ${{ matrix.sanitizer }} report-ooms: true report-timeouts: true output-sarif: true - name: Upload Crash uses: actions/upload-artifact@v4 if: failure() && steps.build.outcome == 'success' with: name: ${{ matrix.sanitizer }}-artifacts path: ./out/artifacts - name: Upload Sarif if: always() && steps.build.outcome == 'success' uses: github/codeql-action/upload-sarif@v3 with: sarif_file: cifuzz-sarif/results.sarif checkout_path: cifuzz-sarif mpv-0.40.0/.github/workflows/lint.yml000066400000000000000000000027561477056434700175160ustar00rootroot00000000000000name: lint on: push: branches: - master - ci - 'release/**' pull_request: branches: [master] jobs: commit-msg: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 50 - name: Lint run: | ./ci/lint-commit-msg.py swift: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: norio-nomura/action-swiftlint@3.2.1 lua: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: lunarmodules/luacheck@v1 ruff: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Check id: check uses: astral-sh/ruff-action@v3 with: src: ". TOOLS/umpv" - name: Suggested changes if: ${{ failure() && steps.check.outcome == 'failure' }} run: ruff check . TOOLS/umpv --diff mypy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: python/mypy@master with: install_project_dependencies: no options: '--check-untyped-defs' paths: ". TOOLS/umpv" editorconfig: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: editorconfig-checker/action-editorconfig-checker@main - run: editorconfig-checker -config .editorconfig-checker.json pre-commit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: pre-commit/action@v3.0.1 mpv-0.40.0/.gitignore000066400000000000000000000000771477056434700144120ustar00rootroot00000000000000/subprojects/* !/subprojects/packagefiles !/subprojects/*.wrap mpv-0.40.0/.lsan_suppressions000066400000000000000000000000231477056434700162040ustar00rootroot00000000000000leak:FcFontSetSort mpv-0.40.0/.luacheckrc000066400000000000000000000067071477056434700145350ustar00rootroot00000000000000local mp_globals = { mp = { fields = { command = {}, commandv = {}, command_native = {}, command_native_async = {}, add_hook = {}, abort_async_command = {}, del_property = {}, get_property = {}, get_property_osd = {}, get_property_bool = {}, get_property_number = {}, get_property_native = {}, set_property = {}, set_property_bool = {}, set_property_number = {}, set_property_native = {}, get_time = {}, add_key_binding = {}, add_forced_key_binding = {}, remove_key_binding = {}, register_event = {}, unregister_event = {}, observe_property = {}, unobserve_property = {}, add_timeout = {}, add_periodic_timer = {}, get_opt = {}, get_script_name = {}, get_script_directory = {}, osd_message = {}, get_wakeup_pipe = {}, get_next_timeout = {}, dispatch_events = {}, register_idle = {}, unregister_idle = {}, enable_messages = {}, register_script_message = {}, unregister_script_message = {}, create_osd_overlay = {}, get_osd_size = {}, msg = { fields = { fatal = {}, error = {}, warn = {}, info = {}, verbose = {}, debug = {}, trace = {}, } }, -- Not documented -- TODO: Document or remove them disable_key_bindings = {}, enable_key_bindings = {}, find_config_file = {}, format_time = {}, get_mouse_pos = {}, set_key_bindings = {}, set_mouse_area = {}, set_osd_ass = {}, } }, exit = {}, unpack = {}, } local mp_internal = { mp = { fields = { -- Internal -- TODO: Move to mp_internal module ARRAY = { fields = { info = {}, type = {} }}, MAP = { fields = { info = {}, type = {} }}, UNKNOWN_TYPE = { fields = { info = {}, type = {} }}, _legacy_overlay = { fields = { res_x = {}, res_y = {}, data = {}, update = {} }}, cancel_timer = {}, flush_keybindings = {}, get_osd_margins = {}, input_define_section = {}, input_disable_section = {}, input_enable_section = {}, input_set_section_mouse_area = {}, keep_running = {}, log = {}, raw_abort_async_command = {}, raw_command_native_async = {}, raw_hook_add = {}, raw_hook_continue = {}, raw_observe_property = {}, raw_unobserve_property = {}, raw_wait_event = {}, request_event = {}, script_name = {}, use_suspend = {}, wait_event = {}, } } } std = "min+mp" stds = { mp = { read_globals = mp_globals } } -- mp_internal seems to be merged with mp for other files too... files["player/lua/defaults.lua"] = { globals = mp_internal } files["player/lua/auto_profiles.lua"] = { globals = { "p", "get" } } max_line_length = 100 mpv-0.40.0/.pre-commit-config.yaml000066400000000000000000000013031477056434700166740ustar00rootroot00000000000000repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: - id: check-case-conflict - id: check-executables-have-shebangs - id: check-illegal-windows-names - id: check-json - id: check-shebang-scripts-are-executable - id: check-xml - id: check-yaml - id: end-of-file-fixer exclude: ^TOOLS/osxbundle/mpv.app/Contents/PkgInfo$ - id: fix-byte-order-marker - id: mixed-line-ending - id: trailing-whitespace - repo: https://github.com/codespell-project/codespell rev: v2.3.0 hooks: - id: codespell args: ["--ignore-words-list", "datas,DNE,enew,HDA,numer,ontop,optionA,Paeth,pathc,inout"] exclude: ^misc/language.c$ mpv-0.40.0/.swiftlint.yml000066400000000000000000000003261477056434700152430ustar00rootroot00000000000000disabled_rules: - identifier_name - line_length - large_tuple - void_function_in_ternary - function_body_length - cyclomatic_complexity - file_length - type_body_length strict: true mpv-0.40.0/Copyright000066400000000000000000000100001477056434700143000ustar00rootroot00000000000000mpv is a fork of mplayer2, which is a fork of MPlayer. mpv as a whole is licensed under the GNU General Public License GPL version 2 or later (called GPLv2+ in this document, see LICENSE.GPL for full license text) by default. The mpv program is licensed the GNU Lesser General Public License LGPL version 2 or later (LGPLv2.1+ in this document, see LICENSE.LGPL for full license text) if built without using any GPL only files. The -Dgpl=false configure switch is provided as a convenience for excluding the GPL only files listed below from the build process. However, do note that the build system is provided "as is" and using the -Dgpl=false configure switch does not in itself create a LGPLv2.1+ license grant. Additionally, some non-program parts, such as the documentation and some config files listed below, are still built and licensed under their respective licenses even when -Dgpl=false is used. Please consult GPLv2+ and LGPLv2.1+ license texts for further details on how to distribute these files. Most source files are LGPLv2.1+ or GPLv2+, but some files are available under more liberal licenses, such as BSD, MIT, ISC, and possibly others. Look at the copyright header of each source file, and grep the sources for "Copyright" if you need to know details. C source files without Copyright notice are usually licensed as LGPLv2.1+. Also see the list of files with specific licenses below (not all files can have a standard license header). All new contributions must be LGPLv2.1+ licensed. Using a more liberal license compatible to LGPLv2.1+ is also ok. Changes done to GPL code must come with the implicit/explicit agreement that the project can relicense the changes to LGPLv2.1+ at a later point without asking the contributor. This is a safeguard for making potential relicensing of remaining GPL code to LGPLv2.1+ easier. See DOCS/contribute.md for binding rules wrt. licensing for contributions. For information about authors and contributors, consult the git log, which contains the complete SVN and CVS history as well. mpv can be built as LGPLv2.1+ without using any GPL only files. To add a LGPL mode to mpv, MPlayer code had to be relicensed from GPLv2+ to LGPLv2.1+ by asking the MPlayer authors for permission. Since permission could not be obtained from everyone, LGPL mode disables the following features, some of them quite central: - Linux X11 video output - BSD audio output via OSS - NVIDIA/Linux hardware decoding (vdpau, although nvdec usually works) - minor features: jack, DVD, CDDA, DVB, CACA, legacy direct3d VO Some of these will be fixed in the future. The intended use for LGPL mode is with libmpv, and currently it's not recommended to build mpv CLI in LGPL mode at all. The following files are still GPL only (-Dgpl=false disables them): audio/out/ao_jack.c will stay GPL audio/out/ao_oss.c will stay GPL stream/dvb* must stay GPL stream/stream_cdda.c unknown stream/stream_dvb.* must stay GPL stream/stream_dvdnav.c unknown video/out/vo_caca.c unknown video/out/vo_direct3d.c unknown video/out/vo_vaapi.c probably impossible (some company's code) video/out/vo_vdpau.c probably impossible (nVidia's code) video/out/vo_x11.c probably impossible video/out/vo_xv.c probably impossible video/out/x11_common.* probably impossible video/vdpau.c hard (GPL-only parts must be ifdefed) video/vdpau.h unknown video/vdpau_mixer.* actual code must be rewritten DOCS/man/ GPLv2+ etc/mplayer-input.conf unknown license, probably GPLv2+ etc/mpv.desktop unknown license, probably GPLv2+ etc/restore-old-bindings.conf unknown license, probably GPLv2+ None of the cases listed above affect the final binary if it's built as LGPL. Linked libraries still can affect the final license (for example if FFmpeg was built as GPL). mpv-0.40.0/DOCS/000077500000000000000000000000001477056434700131465ustar00rootroot00000000000000mpv-0.40.0/DOCS/client-api-changes.rst000066400000000000000000000373761477056434700173530ustar00rootroot00000000000000Introduction ============ This file lists all changes that can cause compatibility issues when using mpv through the client API (libmpv and ``client.h``). Since the client API interfaces to input handling (commands, properties) as well as command line options, you should also look at ``interface-changes.rst``. Normally, changes to the C API that are incompatible to previous iterations receive a major version bump (i.e. the first version number is increased), while C API additions bump the minor version (i.e. the second number is increased). Changes to properties/commands/options may also lead to a minor version bump, in particular if they are incompatible. The version number is the same as used for MPV_CLIENT_API_VERSION (see ``client.h`` how to convert between major/minor version numbers and the flat 32 bit integer). Also, read the section ``Compatibility`` in ``client.h``, and compatibility.rst. Options, commands, properties ============================= Changes to these are not listed here, but in ``interface-changes.rst``. (Before client API version 1.17, they were listed here partially.) This listing includes changes to the bare C API and behavior only, not what you can access with them. API changes =========== :: --- mpv 0.40.0 --- 2.5 - Deprecate MPV_RENDER_PARAM_AMBIENT_LIGHT. no replacement. --- mpv 0.39.0 --- 2.4 - mpv_render_param with the MPV_RENDER_PARAM_ICC_PROFILE argument no longer has incorrect assumptions about memory allocation and can be correctly used. --- mpv 0.38.0 --- 2.3 - partially revert the changes from API version 1.27, remove libmpv as the default VO and move it to the bottom of the auto-probing order. This restores the prior behavior on all platforms other than macOS, but still auto selects libmpv/cocoa-cb on macOS if it was built with support for cocoa-cb. --- mpv 0.37.0 --- 2.2 - add mpv_time_ns() --- mpv 0.36.0 --- 2.1 - add mpv_del_property() --- mpv 0.35.0 --- 2.0 - remove headers/functions of the obsolete opengl_cb API - remove mpv_opengl_init_params.extra_exts field - remove deprecated mpv_detach_destroy. Use mpv_destroy instead. - remove obsolete mpv_suspend and mpv_resume - remove deprecated SCRIPT_INPUT_DISPATCH, PAUSE and UNPAUSE, TRACKS_CHANGED TRACK_SWITCHED, METADATA_UPDATE, CHAPTER_CHANGE events --- mpv 0.33.0 --- 1.109 - add MPV_RENDER_API_TYPE_SW and related (software rendering API) - deactivate the opengl_cb API (always fails to initialize now) The opengl_cb API was deprecated over 2 years ago. Use the render API instead. 1.108 - Deprecate MPV_EVENT_IDLE - add mpv_event_start_file - add the following fields to mpv_event_end_file: playlist_entry_id, playlist_insert_id, playlist_insert_num_entries - add mpv_event_to_node() - add mpv_client_id() 1.107 - Remove the deprecated qthelper.hpp. This was obviously not part of the libmpv API, only an "additionally" provided helper, thus this is not considered an API change. If you are maintaining a project that relies on this header, you can simply download this file and adjust the include statement to use it instead: https://raw.githubusercontent.com/mpv-player/mpv/v0.32.0/libmpv/qthelper.hpp It is a good idea to write better wrappers for your use, though. --- mpv 0.31.0 --- 1.107 - Deprecate MPV_EVENT_TICK --- mpv 0.30.0 --- 1.106 - Add cancel_fn to mpv_stream_cb_info 1.105 - Fix deadlock problems with MPV_RENDER_PARAM_ADVANCED_CONTROL and if the "vd-lavc-dr" option is enabled (which it is by default). There were no actual API changes. API users on older API versions and mpv releases should set "vd-lavc-dr" to "no" to avoid these issues. API users must still adhere to the tricky rules documented in render.h to avoid other deadlocks. 1.104 - Deprecate struct mpv_opengl_drm_params. Replaced by mpv_opengl_drm_params_v2 - Deprecate MPV_RENDER_PARAM_DRM_DISPLAY. Replaced by MPV_RENDER_PARAM_DRM_DISPLAY_V2. 1.103 - redo handling of async commands - add mpv_event_command and make it possible to return values from commands issued with mpv_command_async() or mpv_command_node_async() - add mpv_abort_async_command() 1.102 - rename struct mpv_opengl_drm_osd_size to mpv_opengl_drm_draw_surface_size - rename MPV_RENDER_PARAM_DRM_OSD_SIZE to MPV_RENDER_PARAM_DRM_DRAW_SURFACE_SIZE --- mpv 0.29.0 --- 1.101 - add MPV_RENDER_PARAM_ADVANCED_CONTROL and related API - add MPV_RENDER_PARAM_NEXT_FRAME_INFO and related symbols - add MPV_RENDER_PARAM_BLOCK_FOR_TARGET_TIME - add MPV_RENDER_PARAM_SKIP_RENDERING - add mpv_render_context_get_info() 1.100 - bump API number to avoid confusion with mpv release versions - actually apply the GL_MP_MPGetNativeDisplay change for the new render API. This also means compatibility for anything but x11 and wayland through the old opengl-cb GL_MP_MPGetNativeDisplay method is now unsupported. - deprecate mpv_get_wakeup_pipe(). It's complex, but easy to replace using normal API (just set a wakeup callback to a function which writes to a pipe). - add a 1st class hook API, which replaces the hacky mpv_command() based one. The old API is deprecated and will be removed soon. The old API was never meant to be stable, while the new API is. 1.29 - the behavior of mpv_terminate_destroy() and mpv_detach_destroy() changes subtly (see documentation in the header file). In particular, mpv_detach_destroy() will not leave the player running in all situations anymore (it gets closer to refcounting). - rename mpv_detach_destroy() to mpv_destroy() (the old function will remain valid as deprecated alias) - add mpv_create_weak_client(), which makes use of above changes - MPV_EVENT_SHUTDOWN is now returned exactly once if a mpv_handle should terminate, instead of spamming the event queue with this event 1.28 - deprecate the render opengl_cb API, and replace it with render.h and render_gl.h. The goal is allowing support for APIs other than OpenGL. The old API is emulated with the new API. Likewise, the "opengl-cb" VO is renamed to "libmpv". mpv_get_sub_api() is deprecated along the opengl_cb API. The new API is relatively similar, but not the same. The rough equivalents are: mpv_opengl_cb_init_gl => mpv_render_context_create mpv_opengl_cb_set_update_callback => mpv_render_context_set_update_callback mpv_opengl_cb_draw => mpv_render_context_render mpv_opengl_cb_report_flip => mpv_render_context_report_swap mpv_opengl_cb_uninit_gl => mpv_render_context_free The VO opengl-cb is also renamed to "libmpv". Also, the GL_MP_MPGetNativeDisplay pseudo extension is not used by the render API anymore, and the old opengl-cb API only handles the "x11" and "wl" names anymore. Support for everything else has been removed. The new render API uses proper API parameters, e.g. for X11 you pass MPV_RENDER_PARAM_X11_DISPLAY directly. - deprecate the qthelper.hpp header file. This provided some C++ helper utility functions for Qt with use of libmpv. There is no reason to keep this in the mpv git repository, nor to make it part of the libmpv API. If you're using this header, you can safely copy it into your project - it uses only libmpv public API. Alternatively, it could be maintained in a separate repository by interested parties. 1.27 - make opengl-cb the default VO. This causes a subtle behavior change if the API user called mpv_opengl_cb_init_gl(), but does not set the "vo" option. Before, it would still have used another VO (like on the CLI, e.g. vo=gpu). Now it'll behave as if vo=opengl-cb was used. --- mpv 0.28.0 --- 1.26 - remove glMPGetNativeDisplay("drm") support - add mpv_opengl_cb_window_pos and mpv_opengl_cb_drm_params and support via glMPGetNativeDisplay() for using it - make --stop-playback-on-init-failure=no the default in libmpv (just like in mpv CLI) --- mpv 0.27.0 --- 1.25 - remove setting "no-" options via mpv_set_option*(). (See corresponding deprecation in 0.23.0.) --- mpv 0.25.0 --- 1.24 - add a MPV_ENABLE_DEPRECATED preprocessor symbol, which can be defined by the user to exclude deprecated API symbols from the C headers --- mpv 0.23.0 --- 1.24 - the deprecated mpv_suspend() and mpv_resume() APIs now do nothing. --- mpv 0.22.0 --- 1.23 - deprecate setting "no-" options via mpv_set_option*(). For example, instead of "no-video=" you should set "video=no". - do not override the SIGPIPE signal handler anymore. This was done as workaround for the FFmpeg TLS code, which has been fixed long ago. - deprecate mpv_suspend() and mpv_resume(). They will be stubbed out in mpv 0.23.0. - make mpv_set_property() work to some degree before mpv_initialize(). It can now be used instead of mpv_set_option(). - semi-deprecate mpv_set_option()/mpv_set_option_string(). You should use mpv_set_property() instead. There are some deprecated properties which conflict with some options (see client.h remarks on mpv_set_option()), for which mpv_set_option() might still be required. In future mpv releases, the conflicting deprecated options/properties will be removed, and mpv_set_option() will internally translate API calls to mpv_set_property(). - qthelper.hpp: deprecate get_property_variant, set_property_variant, set_option_variant, command_variant, and replace them with get_property, set_property, command. --- mpv 0.19.0 --- 1.22 - add stream_cb API for custom protocols --- mpv 0.18.1 --- ---- - remove "status" log level from mpv_request_log_messages() docs. This is 100% equivalent to "v". The behavior is still the same, thus no actual API change. --- mpv 0.18.0 --- 1.21 - mpv_set_property() changes behavior with MPV_FORMAT_NODE. Before this change it rejected mpv_nodes with format==MPV_FORMAT_STRING if the property was not a string or did not have special mechanisms in place the function failed. Now it always invokes the option string parser, and mpv_node with a basic data type works exactly as if the function is invoked with that type directly. This new behavior is equivalent to mpv_set_option(). This also affects the mp.set_property_native() Lua function. - generally, setting choice options/properties with "yes"/"no" options can now be set as MPV_FORMAT_FLAG - reading a choice property as MPV_FORMAT_NODE will now return a MPV_FORMAT_FLAG value if the choice is "yes" (true) or "no" (false) This implicitly affects Lua and JSON IPC interfaces as well. - big changes to vo-cmdline on vo_opengl and vo_opengl_hq (but not vo_opengl_cb): options are now normally not reset, but applied on top of the current options. The special undocumented value "-" still works, but now resets all options to before any vo-cmdline command has been called. --- mpv 0.12.0 --- 1.20 - deprecate "GL_MP_D3D_interfaces"/"glMPGetD3DInterface", and introduce "GL_MP_MPGetNativeDisplay"/"glMPGetNativeDisplay" (this is a backwards-compatible rename) --- mpv 0.11.0 --- --- mpv 0.10.0 --- 1.19 - add "GL_MP_D3D_interfaces" pseudo extension to make it possible to use DXVA2 in OpenGL fullscreen mode in some situations - mpv_request_log_messages() now accepts "terminal-default" as parameter 1.18 - add MPV_END_FILE_REASON_REDIRECT, and change behavior of MPV_EVENT_END_FILE accordingly - a bunch of interface-changes.rst changes 1.17 - mpv_initialize() now blocks SIGPIPE (details see client.h) --- mpv 0.9.0 --- 1.16 - add mpv_opengl_cb_report_flip() - introduce mpv_opengl_cb_draw() and deprecate mpv_opengl_cb_render() - add MPV_FORMAT_BYTE_ARRAY 1.15 - mpv_initialize() will now load config files. This requires setting the "config" and "config-dir" options. In particular, it will load mpv.conf. - minor backwards-compatible change to the "seek" and "screenshot" commands (new flag syntax, old additional args deprecated) --- mpv 0.8.0 --- 1.14 - add mpv_wait_async_requests() - the --msg-level option changes its native type from a flat string to a key-value list (setting/reading the option as string still works) 1.13 - add MPV_EVENT_QUEUE_OVERFLOW 1.12 - add class Handle to qthelper.hpp - improve opengl_cb.h API uninitialization behavior, and fix the qml example - add mpv_create_client() function 1.11 - add OpenGL rendering interop API - allows an application to combine its own and mpv's OpenGL rendering Warning: this API is not stable yet - anything in opengl_cb.h might be changed in completely incompatible ways in minor API bumps --- mpv 0.7.0 --- 1.10 - deprecate/disable everything directly related to script_dispatch (most likely affects nobody) 1.9 - add enum mpv_end_file_reason for mpv_event_end_file.reason - add MPV_END_FILE_REASON_ERROR and the mpv_event_end_file.error field for slightly better error reporting on playback failure - add --stop-playback-on-init-failure option, and make it the default behavior for libmpv only - add qthelper.hpp set_option_variant() - mark the following events as deprecated: MPV_EVENT_TRACKS_CHANGED MPV_EVENT_TRACK_SWITCHED MPV_EVENT_PAUSE MPV_EVENT_UNPAUSE MPV_EVENT_METADATA_UPDATE MPV_EVENT_CHAPTER_CHANGE They are handled better with mpv_observe_property() as mentioned in the documentation comments. They are not removed and still work. 1.8 - add qthelper.hpp 1.7 - add mpv_command_node(), mpv_command_node_async() 1.6 - modify "core-idle" property behavior - MPV_EVENT_LOG_MESSAGE now always sends complete lines - introduce numeric log levels (mpv_log_level) --- mpv 0.6.0 --- 1.5 - change in X11 and "--wid" behavior again. The previous change didn't work as expected, and now the behavior can be explicitly controlled with the "input-x11-keyboard" option. This is only a temporary measure until XEmbed is implemented and confirmed working. Note: in 1.6, "input-x11-keyboard" was renamed to "input-vo-keyboard", although the old option name still works. 1.4 - subtle change in X11 and "--wid" behavior (this change was added to 0.5.2, and broke some things, see #1090) --- mpv 0.5.0 --- 1.3 - add MPV_MAKE_VERSION() 1.2 - remove "stream-time-pos" property (no replacement) 1.1 - remap dvdnav:// to dvd:// - add "--cache-file", "--cache-file-size" - add "--colormatrix-primaries" (and property) - add "primaries" sub-field to image format properties - add "playback-time" property - extend the "--start" option; a leading "+", which was previously insignificant is now significant - add "cache-free" and "cache-used" properties - macOS: the "coreaudio" AO spdif code is split into a separate AO --- mpv 0.4.0 --- 1.0 - the API is declared stable mpv-0.40.0/DOCS/compatibility.rst000066400000000000000000000214271477056434700165570ustar00rootroot00000000000000CLI and API compatibility policy ================================ Human users and API users rely on the mpv/libmpv/scripting/IPC interface not breaking their use case. On the other hand, active development occasionally requires breaking things, such as removing old options or changing options in a way that may break. This document lists rules when, what, and how incompatible changes can be made. It's interesting both for mpv developers, who want to change user-visible parts, and mpv users, who want to know what is guaranteed to remain stable. Any of the rules below may be overridden by statements in more specific documentation (for example, if the manpage says that a particular option may be removed any time, it means that, and the option probably won't even go through deprecation). Additions --------- Additions are basically always allowed. API users etc. are supposed to deal with the possibility that for example new API functions are added. Some parts of the API may document how they are extended. Options, commands, properties, events, hooks (command interface) ---------------------------------------------------------------- All of these are important for interfacing both with end users and API users (which include Lua scripts, libmpv, and the JSON IPC). As such, they constitute a large part of the user interface and APIs. Certain options and commands may have documented default values. These default values are considered a part of the API since scripts may already rely on these documented behaviors. Changing these defaults are considered incompatible changes and must be documented. Undocumented default values do not subject to this requirement, and it is recommended to discourage such usage in the related documentations if there is a need to frequently change such defaults. All incompatible changes to this must be declared in interface-changes.rst, which include the types of changes, the impact of these changes, and suggested actions to address such impact so that the incompatibility is alleviated. (This may also list compatible additions, but it's not a requirement.) Degrees of importance and compatibility preservation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Critical and central parts of the command interface have the strictest requirements. It may not be reasonable to break them, and other means to achieve some change have to be found. For example, the "seek" command is a bit of a mess, but since changing it would likely affect almost every user, it may be impossible to break at least the commonly used syntax. If changed anyway, there should be a deprecation period of at least 1 year, during which the command still works, and possibly a warning should remain even after this. Important/often used parts must be deprecated for at least 2 releases before they can be broken. There must be at least 1 release where the deprecated functionality still works, and a replacement is available (if technically reasonable). For example, a feature deprecated in mpv 0.30.0 may be removed in mpv 0.32.0. Minor releases do not count towards this. Under extraordinary circumstances, such as missed incompatible changes that are already included in a release, critical security fixes, or a severe shortage of developer time to address the known incompatible changes, important/often used parts may be broken immediately, but the change must be extensively documented: all of the related documentations (including manpage, interface-changes.rst, etc., retrospectively modified if applicable) must clearly state the following: the fact that the change is a breaking change; the version when the breaking change happened; and the reason, impact, and suggested remedy actions. Less useful parts can be broken immediately, but must come with some sort of removal warning. Parts for debugging and testing may be removed any time, potentially even without any sort of documentation. Currently, the importance of a part is not documented and not even well-defined, which is probably a mistake. Renaming or removing options ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Typically, renaming an option can be done in a compatible way with OPT_REPLACED. You may need to check whether the corresponding properties still work (including messy details like observing properties for changes). OPT_REMOVED can be used to inform the user of alternatives or reasons for the removal, which is better than an option not found error. Likewise, m_option.deprecation_message should be set to something helpful. Both OPT_REPLACED and OPT_REMOVED can remain in the code for a long time, since they're unintrusive and hopefully make incompatible changes less painful for users. Scripting APIs -------------- This affects internal scripting APIs (currently Lua and JavaScript). Vaguely the same rules as with the command interface apply. Since there is a large number of scripts, an effort should be made to provide compatibility for old scripts, but it does not need to be stronger than that of the command interface. Undocumented parts of the scripting APIs are _not_ guaranteed for compatibility. This applies especially for internals. Languages like Lua do not have strict access control (nor does the mpv code try to emulate any), so if a script accesses private parts, and breaks on the next mpv release, it's not mpv's problem. JSON IPC -------- The JSON IPC is a thin protocol wrapping the libmpv API and the command interface. Compatibility-wise, it's about the same as the scripting APIs. The JSON protocol commands should remain as compatible as possible, and it should probably accept the current way commands are delimited (line breaks) forever. The protocol may accept non-standard JSON extensions, but only standard JSON (possibly with restrictions) is guaranteed for compatibility. Clients which want to remain compatible should not use any extensions. CLI --- Things such as default key bindings do not necessarily require compatibility. However, the release notes should be extremely clear on changes to "important" key bindings. Bindings which restore the old behavior should be added to restore-old-bindings.conf and restore-osc-bindings.conf. Some option parsing is CLI-only and not available from libmpv or scripting. No compatibility guarantees come with them. However, the rules which mpv uses to distinguish between options and filenames must remain consistent (if the non-deprecated options syntax is used). Terminal and log output ----------------------- There are no compatibility guarantees for the terminal output, or the text logged via ``MPV_EVENT_LOG_MESSAGE`` and similar APIs. In particular, scripts invoking mpv CLI are extremely discouraged from trying to parse text output, and should use other mechanisms such as the JSON IPC. Protocols, filters, demuxers, etc. ---------------------------------- Which of these are present is generally not guaranteed, and can even depend on compile time settings. The filter list and their sub-options are considered part of the command-interface. libmpv C API ------------ The libmpv client API (such as ````) mostly gives access to the command interface. The API itself (if looked at as a component separate from the command interface) is intended to be extremely stable. All API changes are documented in client-api-changes.rst. API compatibility ^^^^^^^^^^^^^^^^^ The API is *always* compatible. Incompatible changes are only allowed on major API version changes (see ``MPV_CLIENT_API_VERSION``). A major version change is an extremely rare event, which means usually no API symbols are ever removed. Essentially removing API functions by making them always return an error, or making it do nothing is allowed in cases where it is unlikely to break most clients, but requires a deprecation period of 2 releases. (This has happened to ``mpv_suspend()`` for example.) API symbols can be deprecated. This should be clearly marked in the doxygen with ``@deprecated``, and if possible, the affected API symbols should not be visible if the API user defines ``MPV_ENABLE_DEPRECATED`` to 0. ABI compatibility ^^^^^^^^^^^^^^^^^ The ABI must never be broken, except on major API version changes. For example, constants don't change their values. Structs are tricky. If a struct can be allocated by a user (such as ``mpv_node``), no fields can be added. (Unless it's an union, and the addition does not change the offset or alignment of any of the fields or the struct itself. This has happened to ``mpv_node`` in the past.) If a struct is allocated by libmpv only, new fields can be appended to the end (for example ``mpv_event``). The ABI is only backward compatible. This means if a host application is linked to an older libmpv, and libmpv is updated to a newer version, it will still work (as in not causing any undefined behavior). Forward compatibility (an application would work with an older libmpv than it was linked to) is not required. mpv-0.40.0/DOCS/compile-windows.md000066400000000000000000000234301477056434700166120ustar00rootroot00000000000000# Compiling for Windows Compiling for Windows is supported using GNU-like compilers (GCC/Clang). Clang is compatible with both the ``w64-windows-gnu`` [MinGW-w64](https://www.mingw-w64.org/) and ``pc-windows-msvc`` [Windows SDK](https://developer.microsoft.com/windows/downloads/windows-sdk) targets. It supports the production of both 32-bit and 64-bit binaries and is suitable for building on Windows as well as cross-compiling from Linux and Cygwin. Although it is possible to build a complete MinGW-w64 toolchain yourself, there are build environments and scripts available to simplify the process, such as MSYS2 on Windows or a packaged toolchain provided by your favorite Linux distribution. Note that MinGW-w64 environments included in Linux distributions can vary in versions. As a general guideline, mpv only supports the MinGW-w64 toolchain version included in the latest Ubuntu LTS release. mpv employs Meson for building, and the process is the same as any standard Meson compilation. For the most up-to-date reference on build scripts, you can refer to [build.yml](https://github.com/mpv-player/mpv/blob/master/.github/workflows/build.yml), which builds and tests all supported configurations: ``MinGW-w64``, ``Windows SDK``, and ``MSYS2`` builds. ## Cross-compilation When cross-compiling, it is recommended to use a Meson ``--cross-file`` to set up the cross-compiling environment. For a basic example, please refer to [Cross-compilation](https://mesonbuild.com/Cross-compilation.html). Alternatively, consider using [mpv-winbuild-cmake](https://github.com/shinchiro/mpv-winbuild-cmake), which bootstraps a MinGW-w64 toolchain and builds mpv along with its dependencies. ### Example with Meson 1. Create ``cross-file.txt`` with definitions for your toolchain and target platform. Refer to [x86_64-w64-mingw32.txt](https://mesonbuild.com/Cross-compilation.html) as a directly usable example. - **Important**: Beware of pkg-config usage. By default, it uses build machine files for dependency detection, even when ``--cross-file`` is used. It must be configured correctly. Refer to ``pkg_config_libdir`` and ``sys_root`` in the [documentation](https://mesonbuild.com/Cross-compilation.html#defining-the-environment) for proper setup. **In this example pkg-config is not used/required.** 2. Initialize subprojects. This step is optional; other methods are also available to provide the necessary dependencies. ``` bash # Update the subprojects database from Meson's WrapDB. meson wrap update-db # Explicitly download wraps as nested projects may have older versions of them. meson wrap install expat meson wrap install harfbuzz meson wrap install libpng meson wrap install zlib # Add wraps for mpv's required dependencies mkdir -p subprojects cat < subprojects/libplacebo.wrap [wrap-git] url = https://github.com/haasn/libplacebo revision = master depth = 1 clone-recursive = true EOF cat < subprojects/libass.wrap [wrap-git] revision = master url = https://github.com/libass/libass depth = 1 EOF # For FFmpeg, use Meson's build system port; alternatively, you can compile # the upstream version yourself. See https://trac.ffmpeg.org/wiki/CompilationGuide cat < subprojects/ffmpeg.wrap [wrap-git] url = https://gitlab.freedesktop.org/gstreamer/meson-ports/ffmpeg.git revision = meson-7.1 depth = 1 [provide] libavcodec = libavcodec_dep libavdevice = libavdevice_dep libavfilter = libavfilter_dep libavformat = libavformat_dep libavutil = libavutil_dep libswresample = libswresample_dep libswscale = libswscale_dep EOF ``` 3. Build ``` bash meson setup -Ddefault_library=static -Dprefer_static=true \ -Dc_link_args='-static' -Dcpp_link_args='-static' \ --cross-file cross-file.txt build ninja -C build mpv.exe mpv.com ``` This will produce fully portabiel, statically linked, ``mpv.exe`` and ``mpv.com`` binaries. #### Building libmpv - To also build ``libmpv``, execute the following commands: ``` bash # For a static library meson configure build -Dlibmpv=true -Ddefault_library=static ninja -C build libmpv.a # For a shared library meson configure build -Dlibmpv=true -Ddefault_library=shared ninja -C build libmpv-2.dll ``` - Depending on the use case, you might want to use ``-Dgpl=false`` and review similar options for subprojects. - If any of Meson's subprojects are not linked statically, you might need to specify options like the following example for ffmpeg: ``-Dffmpeg:default_library=static``. #### Enabling more mpv features The process above produces a basic mpv build. You can enable additional features. Check the Meson [WrapDB packages](https://mesonbuild.com/Wrapdb-projects.html) for available dependencies or by providing them through other means. Enhancing mpv with more features is as simple as adding more arguments to the Meson setup command, for example: ``` bash -Dlua=enabled -Djavascript=enabled -Dlcms2=enabled -Dlibplacebo:lcms=enabled ``` they will be automatically downloaded and built by Meson. ## Native Compilation with Clang (Windows SDK Build) 1. Install [Build Tools for Visual Studio](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022) or the full [Visual Studio](https://visualstudio.microsoft.com/downloads/#visual-studio-community-2022): - From the installer, select the necessary components: - Clang compiler for Windows - C++ CMake tools for Windows - Windows SDK - Activate the developer shell: ``` & "\Common7\Tools\Launch-VsDevShell.ps1" -Arch amd64 -HostArch amd64 -SkipAutomaticLocation | Out-Null ``` 2. Install Meson, as outlined in [Getting Meson](https://mesonbuild.com/Getting-meson.html): 3. The following build script utilizes the Meson subprojects system to build mpv and its dependencies. To make sure all dependency versions are up-to-date, update the subprojects database from Meson's WrapDB. Also explicitly download several wraps as some nested projects may pull older versions of them. ``` meson wrap update-db meson wrap install expat meson wrap install harfbuzz meson wrap install libpng meson wrap install zlib ``` 4. Set environment variables or use the `--native-file` option in Meson. ```powershell $env:CC = 'clang' $env:CXX = 'clang++' $env:CC_LD = 'lld' $env:CXX_LD = 'lld' $env:WINDRES = 'llvm-rc' ``` Note that some dependencies (e.g. LuaJIT) may require `sed` to configure. Fortunately, it is already bundled in [Git for Windows](https://www.git-scm.com/download/win): ```powershell $env:PATH += ';\usr\bin' ``` 5. Execute [ci\build-win32.ps1](https://github.com/mpv-player/mpv/blob/master/ci/build-win32.ps1). Refer to the script for more details. This process will produce a fully static ``mpv.exe`` and ``mpv.com``, as well as a static ``libmpv.a``. ## Native Compilation with MSYS2 For Windows developers seeking a quick setup, MSYS2 is an effective tool for compiling mpv natively on a Windows machine. The MSYS2 repositories provide binary packages for most of mpv's dependencies, simplifying the process to primarily involve building mpv itself. ### Installing MSYS2 1. Follow the installation steps from [MSYS2](https://www.msys2.org/). 2. Initiate one of the [Environments](https://www.msys2.org/docs/environments/), with the CLANG64 (``clang64.exe``) being the recommended option. **Note:** This environment is distinct from the MSYS2 shell that opens automatically after the final installation dialog. You must close that initial shell and open a new one for the appropriate environment. ### Updating MSYS2 For guidance on updating MSYS2, please refer to the official documentation: [Updating MSYS2](https://www.msys2.org/docs/updating/). ### Installing mpv Dependencies ``` bash # Install pacboy and git pacman -S pactoys git # Install MSYS2 build dependencies and a MinGW-w64 compiler pacboy -S python pkgconf cc meson # Install key dependencies. libass and lcms2 are also included as dependencies # of ffmpeg. pacboy -S ffmpeg libjpeg-turbo libplacebo luajit vulkan-headers ``` ### Building mpv To compile and install mpv, execute the following commands. The binaries will be installed in the directory ``/$MSYSTEM_PREFIX/bin``. ```bash # Set up the build directory with the desired configuration meson setup build -Dlibmpv=true --prefix=$MSYSTEM_PREFIX # Compile meson compile -C build # Optionally, install the compiled binaries meson install -C build ``` ## Running mpv Depending on your build configuration, ``mpv.exe`` may rely on external libraries. To create a portable package, you will need to include these dependencies as well. The quickest way to determine which libraries are needed is to run ``mpv.exe`` and note any error messages that list the required ``.dll`` files. You can find these libraries in the sysroot used for compilation, such as ``/clang64/bin/`` in MSYS2. ## Linking libmpv with MSVC Programs Building mpv/libmpv directly with the MSVC compiler (cl.exe) is not supported due to differences in compiler flags. Our build system is designed specifically for GNU-like compiler drivers. However, you can still build programs in Visual Studio and link them with libmpv. If the toolchain used generates a ``.lib`` file, it will be ready for use. Otherwise, you will need to create an import library for the mpv DLL with the following command: ```bash lib /name:mpv-2.dll /out:mpv.lib /MACHINE:X64 ``` Ensure that the string in the ``/name:`` parameter matches the filename of the DLL, as this is the filename that the MSVC linker will reference. **Note:** Static linking is only feasible with matching compilers. For instance, if you build with Clang in Visual Studio, static linking is possible. mpv-0.40.0/DOCS/contribute.md000066400000000000000000000322041477056434700156470ustar00rootroot00000000000000How to contribute ================= General ------- The main contact for mpv development is IRC, specifically #mpv and #mpv-devel on Libera.chat. GitHub is used for code review and long term discussions. Sending patches --------------- - Make a GitHub pull request, or send a link to a plaintext patch created with ``git format-patch``. - Plain diffs posted as pastebins are not acceptable! (Especially if the http link returns HTML.) They only cause extra work for everyone, because they lack commit message and authorship information. - Never send patches to any of the developers email addresses. - If your changes are not supposed to be merged immediately, mark them as "[RFC]" in the commit message or the pull request title. - Be sure to test your changes. If you didn't, please say so in the commit message and the pull request text. Copyright of contributions -------------------------- - The copyright belongs to contributors. The project is a collaborative work. By sending your changes, you agree to license your contributions according to the requirements of this project. - All new code must be LGPLv2.1+ licensed, or come with the implicit agreement that it will be relicensed to LGPLv2.1+ later (see ``Copyright`` in the repository root directory). - 100% compatible licenses are allowed too. - Changes in files with more liberal licenses (such as BSD, MIT, or ISC) are assumed to be dual-licensed under LGPLv2.1+ and the license indicated in the file header. - You must be either the exclusive author of the patch, or acknowledge all authors involved in the commit message. If you take 3rd party code, authorship and copyright must be properly acknowledged. If you're making changes on behalf of your employer, and the employer owns the copyright, you must mention this. If the license of the code is not LGPLv2.1+, you must mention this. - These license statements are legally binding. - Don't use fake names (something that looks like an actual name, and may be someone else's name, but is not your legal name). Using a pseudonym is allowed if it can be used to identify or contact you, even if whatever account you used to submit the patch dies. - Do not add your name to the license header. This convention is not used by this project, and neither copyright law nor any of the used licenses require it. Write good commit messages -------------------------- - Write informative commit messages. Use present tense to describe the situation with the patch applied, and past tense for the situation before the change. - The subject line (the first line in a commit message) must contain a prefix identifying the sub system, followed by a short description what impact this commit has. This subject line and the commit message body must not be longer than 72 characters per line, because it messes up the output of many git tools otherwise. For example, you fixed a crash in af_volume.c: - Bad: ``fixed the bug (wtf?)`` - Good: ``af_volume: fix crash due to null pointer access`` Having a prefix gives context, and is especially useful when trying to find a specific change by looking at the history, or when running ``git blame``. Sample prefixes: ``vo_gpu: ...``, ``command: ...``, ``DOCS/input: ...``, ``TOOLS/osxbundle: ...``, ``osc.lua: ...``, etc. You can always check the git log for commits which modify specific files to see which prefixes are used. - The first word after the ``:`` is lower case. - Don't end the subject line with a ``.``. - Put an empty line between the subject line and the commit message. If this is missing, it will break display in common git tools. - The body of the commit message (everything else after the subject line) must be as informative as possible and contain everything that isn't obvious. Don't hesitate to dump as much information as you can - it doesn't cost you anything. Put some effort into it. If someone finds a bug months or years later, and finds that it's caused by your commit (even though your commit was supposed to fix another bug), it would be bad if there wasn't enough information to test the original bug. The old bug might be reintroduced while fixing the new bug. The commit message must be wrapped on 72 characters per line, because git tools usually do not break text automatically. On the other hand, you do not need to break text that would be unnatural to break (like data for test cases, or long URLs). - Another summary of good conventions: https://chris.beams.io/posts/git-commit/ Split changes into multiple commits ----------------------------------- - Follow git good practices, and split independent changes into several commits. It's usually OK to put them into a single pull request. - Try to separate cosmetic and functional changes. It's ok to make a few additional cosmetic changes in the same file you're working on. But don't do something like reformatting a whole file, and hiding an actual functional change in the same commit. - Splitting changes does _not_ mean that you should make them as fine-grained as possible. Commits should form logical steps in development. The way you split changes is important for code review and analyzing bugs. Always squash fixup commits when making changes to pull requests ---------------------------------------------------------------- - If you make fixup commits to your pull request, you should generally squash them with "git rebase -i". We prefer to have pull requests in a merge ready state. - We don't squash-merge (nor do we use GitHub's feature that does this) because pull requests with multiple commits are perfectly legitimate, and the only thing that makes sense in non-trivial cases. - With complex pull requests, it *may* make sense to keep them separate, but they should be clearly marked as such. Reviewing commits is generally easier with fixups squashed. - Reviewers are encouraged to look at individual commits instead of GitHub's "changes from all commits" view (which just encourages bad git and review practices). Touching user-visible parts may require updating the mpv docs ------------------------------------------------------------- - Most user-visible things are normally documented in DOCS/man/. If your commit touches documented behavior, list of sub-options, etc., you need to adjust the documentation. - These changes usually go into the same commit that changes the code. - Changes to command line options (addition/modification/removal) must be documented in options.rst. - Changes to input properties or input commands must be documented in input.rst. - Changes to the libmpv API must be reflected in the libmpv's headers doxygen, and in client-api-changes.rst. Interface change policy ----------------------- - All incompatible changes to the user interface (options, properties, commands) must be documented by making a new text file with a txt extension containing a small note in the DOCS/interface-changes directory. - The name of the file should be brief and related to the commit that makes the change. The content of the file should begin with the type of the change (add, remove, deprecate, change, rename, etc.). If the file contains multiple changes, the change which causes the most serious compatibility issues should be placed first. - Grouping multiple related changes in the same file is also OK. Just be sure to put each separate change on a different line. - Documenting additions in DOCS/interface-changes is optional but encouraged. - interface-changes.rst is never directly updated except when making new major releases. - See DOCS/interface-changes/example.txt for an example. Code formatting --------------- mpv uses C11 with K&R formatting, with some exceptions. - Use the K&R indent style. - Use 4 spaces of indentation, never use tabs (except in Makefiles). - Add a single space between keywords and binary operators. There are some other cases where spaces must be added. Example: ```C if ((a * b) > c) { // code some_function(a, b, c); } ``` - Break lines on 80 columns. There is a hard limit of 100 columns. You may ignore this limit if there's a strong case that not breaking the line will increase readability. Going over 100 columns might provoke endless discussions about whether such a limit is needed or not, so avoid it. - If the body of an if/for/while statement has more than 1 physical lines, then always add braces, even if they're technically redundant. Bad: ```C if (a) // do something if b if (b) do_something(); ``` Good: ```C if (a) { // do something if b if (b) do_something(); } ``` - If the if has an else branch, both branches must use braces, even if they're technically redundant. Example: ```C if (a) { one_line(); } else { one_other_line(); } ``` - If an if condition spans multiple physical lines, then put the opening brace for the if body on the next physical line. (Also, preferably always add a brace, even if technically none is needed.) Example: ```C if (very_long_condition_a && very_long_condition_b) { code(); } else { ... } ``` (If the if body is simple enough, this rule can be skipped.) - Remove any trailing whitespace. - Do not make stray whitespaces changes. Header #include statement order ------------------------------- The order of ``#include`` statements in the source code is not very consistent. New code must follow the following conventions: - Put standard includes (``#include `` etc.) on the top, - then after a blank line, add library includes (``#include `` etc.) - then after a blank line, add internal includes (``#include "player/core.h"``) - sort them alphabetically within these sections General coding -------------- - Use C11. Also freely make use of C11 features if it's appropriate, but do not use VLA and complex number types. - Don't use non-standard language (such as GNU C-only features). In some cases they may be warranted, if they are optional (such as attributes enabling printf-like format string checks). "#pragma once" is allowed as an exception. But in general, standard C11 must be used. - The same applies to libc functions. We have to be Windows-compatible too. Use functions guaranteed by C11 or POSIX only, unless your use is guarded by a configure check. Be mindful of MinGW-specifics since C11 support is not always guaranteed. - Prefer fusing declaration and initialization, rather than putting declarations on the top of a block. Obvious data flow is more important than avoiding mixing declarations and statements, which is just a C90 artifact. - If you add features that require intrusive changes, discuss them on the dev channel first. There might be a better way to add a feature and it can avoid wasted work. - Newly added code for any Apple Platform (macOS, iOS, etc), that uses Cocoa or any other object-oriented Framework or API, should be written in Swift instead of Objective-C. This also includes complete rewrites/refactors of existing code. Plain C API usages may stay as C, but can be written in Swift. Existing Objective-C code can stay as is, though Swift rewrites are welcome. Code of Conduct --------------- Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. The Contributor Code of Conduct can be found here: https://www.contributor-covenant.org/version/2/0/code_of_conduct/ Rules for git push access ------------------------- Push access to the main git repository is handed out on an arbitrary basis. If you got access, the following rules must be followed: - You are expected to follow the general development rules as outlined in this whole document. - You must be present on the IRC dev channel when you push something. - Anyone can push small fixes: typo corrections, small/obvious/uncontroversial bug fixes, edits to the user documentation or code comments, and so on. - You can freely make changes to parts of the code which you maintain. For larger changes, it's recommended to let others review the changes first. - You automatically maintain code if you wrote or modified most of it before (e.g. you made larger changes to it before, did partial or full rewrites, did major bug fixes, or you're the original author of the code). If there is more than one maintainer, you may need to come to an agreement with the others how to handle this to avoid conflict. - If you make a pull requests (especially if it's to code you maintain), and you want reviews, explicitly ping the people from which you expect reviews. - As a maintainer, you can approve pull requests by others to "your" code. - If you approve or merge 3rd party changes, make sure they follow the general development rules. - Changes to user interface and public API must always be approved by the project leader. - Seasoned project members are allowed to revert commits that broke the build, or broke basic functionality in a catastrophic way, and the developer who broke it is unavailable. (Depending on severity.) - Adhere to the CoC. - The project leader is not bound by these rules. mpv-0.40.0/DOCS/edl-mpv.rst000066400000000000000000000347061477056434700152560ustar00rootroot00000000000000EDL files ========= EDL files basically concatenate ranges of video/audio from multiple source files into a single continuous virtual file. Each such range is called a segment, and consists of source file, source offset, and segment length. For example:: # mpv EDL v0 f1.mkv,10,20 f2.mkv f1.mkv,40,10 This would skip the first 10 seconds of the file f1.mkv, then play the next 20 seconds, then switch to the file f2.mkv and play all of it, then switch back to f1.mkv, skip to the 40 second mark, and play 10 seconds, and then stop playback. The difference to specifying the files directly on command line (and using ``--{ --start=10 --length=20 f1.mkv --}`` etc.) is that the virtual EDL file appears as a virtual timeline (like a single file), instead as a playlist. The general simplified syntax is:: # mpv EDL v0 ,, If the start time is omitted, 0 is used. If the length is omitted, the estimated remaining duration of the source file is used. Note:: Usage of relative or absolute paths as well as any protocol prefixes may be prevented for security reasons. Syntax of mpv EDL files ======================= Generally, the format is relatively strict. No superfluous whitespace (except empty lines and commented lines) are allowed. You must use UNIX line breaks. The first line in the file must be ``# mpv EDL v0``. This designates that the file uses format version 0, which is not frozen yet and may change any time. (If you need a stable EDL file format, make a feature request. Likewise, if you have suggestions for improvements, it's not too late yet.) The rest of the lines belong to one of these classes: 1) An empty or commented line. A comment starts with ``#``, which must be the first character in the line. The rest of the line (up until the next line break) is ignored. An empty line has 0 bytes between two line feed bytes. 2) A header entry if the line starts with ``!``. 3) A segment entry in all other cases. Each segment entry consists of a list of named or unnamed parameters. Parameters are separated with ``,``. Named parameters consist of a name, followed by ``=``, followed by the value. Unnamed parameters have only a value, and the name is implicit from the parameter position. Syntax:: segment_entry ::= ( ',' )* param ::= [ '=' ] ( | '%' '%' ) The ``name`` string can consist of any characters, except ``=%,;\n!``. The ``value`` string can consist of any characters except of ``,;\n!``. The construct starting with ``%`` allows defining any value with arbitrary contents inline, where ``number`` is an integer giving the number of bytes in ``valuebytes``. If a parameter value contains disallowed characters, it has to be guarded by a length specifier using this syntax. The parameter name defines the meaning of the parameter: 1) ``file``, the source file to use for this segment. 2) ``start``, a time value that specifies the start offset into the source file. 3) ``length``, a time value that specifies the length of the segment. See the section below for the format of timestamps. Unnamed parameters carry implicit names. The parameter position determines which of the parameters listed above is set. For example, the second parameter implicitly uses the name ``start``. Example:: # mpv EDL v0 %18%filename,with,.mkv,10,length=20,param3=%13%value,escaped,param4=value2 this sets ``file`` to ``filename,with,.mkv``, ``start`` to ``10``, ``length`` to ``20``, ``param3`` to ``value,escaped``, ``param4`` to ``value2``. Instead of line breaks, the character ``;`` can be used. Line feed bytes and ``;`` are treated equally. Header entries start with ``!`` as first character after a line break. Header entries affect all other file entries in the EDL file. Their format is highly implementation specific. They should generally follow the file header, and come before any file entries. Disabling chapter generation and copying ======================================== By default, chapters from the source ranges are copied to the virtual file's chapters. Also, a chapter is inserted after each range. This can be disabled with the ``no_chapters`` header. Example:: !no_chapters MP4 DASH ======== This is a header that helps implementing DASH, although it only provides a low level mechanism. If this header is set, the given url designates an mp4 init fragment. It's downloaded, and every URL in the EDL is prefixed with the init fragment on the byte stream level. This is mostly for use by mpv's internal ytdl support. The ytdl script will call youtube-dl, which in turn actually processes DASH manifests. It may work only for this very specific purpose and fail to be useful in other scenarios. It can be removed or changed in incompatible ways at any times. Example:: !mp4_dash,init=url The ``url`` is encoded as parameter value as defined in the general EDL syntax. It's expected to point to an "initialization fragment", which will be prefixed to every entry in the EDL on the byte stream level. The current implementation will - ignore stream start times - use durations as hint for seeking only - not adjust source timestamps - open and close segments (i.e. fragments) as needed - not add segment boundaries as chapter points - require full compatibility between all segments (same codec etc.) Another header part of this mechanism is ``no_clip``. This header is similar to ``mp4_dash``, but does not include on-demand opening/closing of segments, and does not support init segments. It also exists solely to support internal ytdl requirements. Using ``no_clip`` with segments is not recommended and probably breaks. ``mp4_dash`` already implicitly does a variant of ``no_clip``. The ``mp4_dash`` and ``no_clip`` headers are not part of the core EDL format. They may be changed or removed at any time, depending on mpv's internal requirements. Separate files for tracks ========================= The special ``new_stream`` header lets you specify separate parts and time offsets for separate tracks. This can for example be used to source audio and video track from separate files. Example:: # mpv EDL v0 video.mkv !new_stream audio.mkv This adds all tracks from both files to the virtual track list. Upon playback, the tracks will be played at the same time, instead of appending them. The files can contain more than 1 stream; the apparent effect is the same as if the second part after the ``!new_stream`` part were in a separate ``.edl`` file and added with ``--external-file``. Note that all metadata between the stream sets created by ``new_stream`` is disjoint. Global metadata is taken from the first part only. In context of mpv, this is redundant to the ``--audio-file`` and ``--external-file`` options, but (as of this writing) has the advantage that this will use a unified cache for all streams. The ``new_stream`` header is not part of the core EDL format. It may be changed or removed at any time, depending on mpv's internal requirements. If the first ``!new_stream`` is redundant, it is ignored. This is the same example as above:: # mpv EDL v0 !new_stream video.mkv !new_stream audio.mkv Note that ``!new_stream`` must be the first header. Whether the parser accepts (i.e. ignores) or rejects other headers before that is implementation specific. Track metadata ============== The special ``track_meta`` header can set some specific metadata fields of the current ``!new_stream`` partition. The tags are applied to all tracks within the partition. It is not possible to set the metadata for individual tracks (the feature was needed only for single-track media). It provides following parameters change track metadata: ``lang`` Set the language tag. ``title`` Set the title tag. ``byterate`` Number of bytes per second this stream uses. (Purely informational.) ``index`` The numeric index of the track this should map to (default: -1). This is the 0-based index of the virtual stream as seen by the player, enumerating all audio/video/subtitle streams. If nothing matches, this is silently discarded. The special index -1 (the default) has two meanings: if there was a previous meta data entry (either ``!track_meta`` or ``!delay_open`` element since the last ``!new_stream``), then this element manipulates the previous meta data entry. If there was no previous entry, a new meta data entry that matches all streams is created. Example:: # mpv EDL v0 !track_meta,lang=bla,title=blabla file.mkv !new_stream !track_meta,title=ducks sub.srt If ``file.mkv`` has an audio and a video stream, both will use ``blabla`` as title. The subtitle stream will use ``ducks`` as title. The ``track_meta`` header is not part of the core EDL format. It may be changed or removed at any time, depending on mpv's internal requirements. Global metadata =============== The special ``global_tags`` header can set metadata fields (aka tags) of the EDL file. This metadata is supposed to be informational, much like for example ID3 tags in audio files. Due to lack of separation of different kinds of metadata it is unspecified what names are allowed, how they are interpreted, and whether some of them affect playback functionally. (Much of this is unfortunately inherited from FFmpeg. Another consequence of this is that FFmpeg "normalized" tags are recognized, or stuff like replaygain tags.) Example:: !global_tags,title=bla,something_arbitrary=even_more_arbitrary Any parameter names are allowed. Repeated use of this adds to the tag list. If ``!new_stream`` is used, the location doesn't matter. May possibly be ignored in some cases, such as delayed media opening. Delayed media opening ===================== The special ``delay_open`` header can be used to open the media URL of the stream only when the track is selected for the first time. This is supposed to be an optimization to speed up opening of a remote stream if there are many tracks for whatever reasons. This has various tricky restrictions, and also will defer failure to open a stream to "later". By design, it's supposed to be used for single-track streams. Using multiple segments requires you to specify all offsets and durations (also it was never tested whether it works at all). Interaction with ``mp4_dash`` may be strange. You can describe multiple sub-tracks by using multiple ``delay_open`` headers before the same source URL. (If there are multiple sub-tracks of the same media type, then the mapping to the real stream is probably rather arbitrary.) If the source contains tracks not described, a warning is logged when the delayed opening happens, and the track is hidden. This has the following parameters: ``media_type`` Required. Must be set to ``video``, ``audio``, or ``sub``. (Other tracks in the opened URL are ignored.) ``codec`` The mpv codec name that is expected. Although mpv tries to initialize a decoder with it currently (and will fail track selection if it does not initialize successfully), it is not used for decoding - decoding still uses the information retrieved from opening the actual media information, and may be a different codec (you should try to avoid this, of course). Defaults to ``null``. Above also applies for similar fields such as ``w``. These fields are mostly to help with user track pre-selection. ``flags`` A ``+`` separated list of boolean flags. Currently defined flags: ``default`` Set the default track flag. ``forced`` Set the forced track flag. Other values are ignored after triggering a warning. ``w``, ``h`` For video codecs: expected video size. See ``codec`` for details. ``fps`` For video codecs: expected video framerate, as integer. (The rate is usually only crudely reported, and it makes no sense to expect exact values.) ``samplerate`` For audio codecs: expected sample rate, as integer. The ``delay_open`` header is not part of the core EDL format. It may be changed or removed at any time, depending on mpv's internal requirements. Timestamp format ================ Currently, time values are floating point values in seconds. As an extension, you can set the ``timestamps=chapters`` option. If this option is set, timestamps have to be integers, and refer to chapter numbers, starting with 0. The default value for this parameter is ``seconds``, which means the time is as described in the previous paragraph. Example:: # mpv EDL v0 file.mkv,2,4,timestamps=chapters Plays chapter 3 and ends with the start of chapter 7 (4 chapters later). Implicit chapters ================= mpv will add one chapter per segment entry to the virtual timeline. By default, the chapter's titles will match the entries' filenames. You can override set the ``title`` option to override the chapter title for that segment. Example:: # mpv EDL v0 cap.ts,5,240 OP.mkv,0,90,title=Show Opening The virtual timeline will have two chapters, one called "cap.ts" from 0-240s and a second one called "Show Opening" from 240-330s. Entry which defines the track layout ==================================== Normally, you're supposed to put only files with compatible layouts into an EDL file. However, at least the mpv implementation accepts entries that use different codecs, or even have a different number of audio/video/subtitle tracks. In this case, it's not obvious, which virtual tracks the EDL show should expose when being played. Currently, mpv will apply an arbitrary heuristic which tracks the EDL file should expose. (Before mpv 0.30.0, it always used the first source file in the segment list.) You can set the ``layout`` option to ``this`` to make a specific entry define the track layout. Example:: # mpv EDL v0 file_with_2_streams.ts,5,240 file_with_5_streams.mkv,0,90,layout=this The way the different virtual EDL tracks are associated with the per-segment ones is highly implementation-defined, and uses a heuristic. If a segment is missing a track, there will be a "hole", and bad behavior may result. Improving this is subject to further development (due to being fringe cases, they don't have a high priority). If future versions of mpv change this again, this option may be ignored. Syntax of EDL URIs ================== mpv accepts inline EDL data in form of ``edl://`` URIs. Other than the header, the syntax is exactly the same. It's far more convenient to use ``;`` instead of line breaks, but that is orthogonal. Example: ``edl://f1.mkv,length=5,start=10;f2.mkv,30,20;f3.mkv`` mpv-0.40.0/DOCS/encoding.rst000066400000000000000000000126101477056434700154660ustar00rootroot00000000000000General usage ============= :: mpv infile --o=outfile [--of=outfileformat] [--ofopts=formatoptions] [--orawts] \ [(any other mpv options)] \ --ovc=outvideocodec [--ovcopts=outvideocodecoptions] \ --oac=outaudiocodec [--oacopts=outaudiocodecoptions] Help for these options is provided if giving help as parameter, as in:: mpv --ovc=help The suboptions of these generally are identical to ffmpeg's (as option parsing is simply delegated to ffmpeg). The option --ocopyts enables copying timestamps from the source as-is, instead of fixing them to match audio playback time (note: this doesn't work with all output container formats); --orawts even turns off discontinuity fixing. Note that if neither --ofps nor --oautofps is specified, VFR encoding is assumed and the time base is 24000fps. --oautofps sets --ofps to a guessed fps number from the input video. Note that not all codecs and not all formats support VFR encoding, and some which do have bugs when a target bitrate is specified - use --ofps or --oautofps to force CFR encoding in these cases. Of course, the options can be stored in a profile, like this .config/mpv/mpv.conf section:: [myencprofile] vf-add = scale=480:-2 ovc = libx264 ovcopts-add = preset=medium ovcopts-add = tune=fastdecode ovcopts-add = crf=23 ovcopts-add = maxrate=1500k ovcopts-add = bufsize=1000k ovcopts-add = rc_init_occupancy=900k ovcopts-add = refs=2 ovcopts-add = profile=baseline oac = aac oacopts-add = b=96k It's also possible to define default encoding options by putting them into the section named ``[encoding]``. (This behavior changed after mpv 0.3.x. In mpv 0.3.x, config options in the default section / no section were applied to encoding. This is not the case anymore.) One can then encode using this profile using the command:: mpv infile --o=outfile.mp4 --profile=myencprofile Some example profiles are provided in a file etc/encoding-profiles.conf; as for this, see below. Encoding examples ================= These are some examples of encoding targets this code has been used and tested for. Typical MPEG-4 Part 2 ("ASP", "DivX") encoding, AVI container:: mpv infile --o=outfile.avi \ --vf=fps=25 \ --ovc=mpeg4 --ovcopts=qscale=4 \ --oac=libmp3lame --oacopts=b=128k Note: AVI does not support variable frame rate, so the fps filter must be used. The frame rate should ideally match the input (25 for PAL, 24000/1001 or 30000/1001 for NTSC) Typical MPEG-4 Part 10 ("AVC", "H.264") encoding, Matroska (MKV) container:: mpv infile --o=outfile.mkv \ --ovc=libx264 --ovcopts=preset=medium,crf=23,profile=baseline \ --oac=libopus --oacopts=qscale=3 Typical MPEG-4 Part 10 ("AVC", "H.264") encoding, MPEG-4 (MP4) container:: mpv infile --o=outfile.mp4 \ --ovc=libx264 --ovcopts=preset=medium,crf=23,profile=baseline \ --oac=aac --oacopts=b=128k Typical VP8 encoding, WebM (restricted Matroska) container:: mpv infile -o outfile.mkv \ --of=webm \ --ovc=libvpx --ovcopts=qmin=6,b=1000000k \ --oac=libopus --oacopts=qscale=3 Device targets ============== As the options for various devices can get complex, profiles can be used. An example profile file for encoding is provided in etc/encoding-profiles.conf in the source tree. This file is installed and loaded by default. If you want to modify it, you can replace and it with your own copy by doing:: mkdir -p ~/.mpv cp /etc/mpv/encoding-profiles.conf ~/.mpv/encoding-profiles.conf Keep in mind that the default profile is the playback one. If you want to add options that apply only in encoding mode, put them into a ``[encoding]`` section. Refer to the top of that file for more comments - in a nutshell, the following options are added by it:: --profile=enc-to-dvdpal # DVD-Video PAL, use dvdauthor -v pal+4:3 -a ac3+en --profile=enc-to-dvdntsc # DVD-Video NTSC, use dvdauthor -v ntsc+4:3 -a ac3+en --profile=enc-to-bb-9000 # MP4 for Blackberry Bold 9000 --profile=enc-to-nok-6300 # 3GP for Nokia 6300 --profile=enc-to-psp # MP4 for PlayStation Portable --profile=enc-to-iphone # MP4 for iPhone --profile=enc-to-iphone-4 # MP4 for iPhone 4 (double res) --profile=enc-to-iphone-5 # MP4 for iPhone 5 (even larger res) You can encode using these with a command line like:: mpv infile --o=outfile.mp4 --profile=enc-to-bb-9000 Of course, you are free to override options set by these profiles by specifying them after the -profile option. What works ========== * Encoding at variable frame rate (default) * Encoding at constant frame rate using --vf=fps=RATE * 2-pass encoding (specify flags=+pass1 in the first pass's --ovcopts, specify flags=+pass2 in the second pass) * Hardcoding subtitles using vobsub, ass or srt subtitle rendering (just configure mpv for the subtitles as usual) * Hardcoding any other mpv OSD (e.g. time codes, using --osdlevel=3 and --vf=expand=::::1) * Encoding directly from a DVD, network stream, webcam, or any other source mpv supports * Using x264 presets/tunings/profiles (by using profile=, tune=, preset= in the --ovcopts) * Deinterlacing/Inverse Telecine with any of mpv's filters for that * Audio file converting: mpv --o=outfile.m4a infile.flac --no-video --oac=aac --oacopts=b=320k What does not work yet ====================== * 3-pass encoding (ensuring constant total size and bitrate constraints while having VBR audio; mencoder calls this "frameno") * Direct stream copy mpv-0.40.0/DOCS/interface-changes.rst000066400000000000000000002211241477056434700172500ustar00rootroot00000000000000Introduction ============ mpv provides access to its internals via the following means: - options - commands - properties - events - hooks The sum of these mechanisms is sometimes called command interface. All of these are important for interfacing both with end users and API users (which include Lua scripts, libmpv, and the JSON IPC). As such, they constitute a large part of the user interface and APIs. Also see compatibility.rst. Prior to 0.40.0, only changes had to be listed here and not necessarily new additions. After 0.40.0, all changes and additions to options/commands/etc are listed here. **Never** write to this file directly except when making releases. New changes are added in the interface-changes directory instead. See contribute.md for more details. Interface changes ================= :: --- mpv 0.41.0 --- --- mpv 0.40.0 --- - undeprecate list option suffixes that work with multiple items - add `-del` to string list and keyvalue list options - add `-clr` to keyvalue list options - undeprecate `--gamma-factor` - the `path` and `track-list/N/external-filename` properties now always return a full, absolute path - rename `--vd-lavc-software-fallback` to `--hwdec-software-fallback` - rename `--sub-ass-line-spacing` to `--sub-line-spacing` - rename `--sub-ass-shaper` to `--sub-shaper` - rename `--sub-ass-hinting` to `--sub-hinting` - rename `--load-osd-console` to `--load-console` - remove `stats-term_width_limit` script-opt - add `stats-term_clip` script-opt - remove `stats-term_height_limit` script-opt - remove `player` argument form `--media-controls`, it's handled internally now. - make `script-binding` command scalable; add `nonscalable` command prefix to restore the old behavior - deprecate `osc-message` script message in favor of `show-text` command - deprecate `osc-chapterlist` script message in favor of `show-text ${chapter-list}` - deprecate `osc-playlist` script message in favor of `show-text ${playlist}` - deprecate `osc-tracklist` script message in favor of `show-text ${track- list}` - add `visibility_modes` script-opt to osc - deprecate `--wayland-disable-vsync` - add `--wayland-internal-vsync` as a replacement for `--wayland-disable- vsync` - deprecate `--cdda-span-a` and `--cdda-span-b` - commands.lua is split out of console.lua. commands.lua runs and completes commands and adds mpv's log entries to the console's log, while console.lua handles the UI for other scripts - add `--load-commands` option - `script-binding console/enable` becomes `script-binding commands/open`, though the console one is kept as an alias - `script-message-to console type` becomes `script-message-to commands type`, though the console one is kept as an alias. This also now automatically closes the console after running the command. - change the underlying type of the `aspect`, `par`, and `sar` sub- properties to double from float - add `--video-aspect-method=ignore` - change `--video-aspect-override=no` to respect `--video-aspect-method` option - deprecate setting `--video-aspect-override` to `0` and `-1` - change several OSC mouse bindings to select.lua functions - add script-opts to configure what OSC buttons do when clicked - remove `osc-playlist_osd` script-opt and behave as if it was off by default; `playlist_osd=yes` can be replicated with `osc- playlist_prev_mbtn_left_command=playlist-prev; show-text ${playlist} 3000` and `osc-playlist_next_mbtn_left_command=playlist-next; show-text ${playlist} 3000` - remove `osc-chapters_osd` script-opt and behave as if it was off by default; `chapter_osd=yes` can be replicated with `osc- chapter_prev_mbtn_left_command=no-osd add chapter -1; show-text ${chapter- list} 3000` and `osc-chapter_next_mbtn_left_command=no-osd add chapter 1; show-text ${chapter-list} 3000` - add script-opts to define custom buttons - change `--prefetch-playlist`'s default to `yes` - change `--osd-back-color` and `--sub-back-color` defaults to #AF000000 - change `--geometry` so that it no longer unconditionally moves the window on platforms where that is possible. Use `--force-window-position` or add `+50%+50%` to your geometry command to get the old behavior back. - all options that take filepaths as values are now properly expanded (i.e. ~/ -> /home/$USER) - all commands that take filepaths as arguments are now properly expanded (i.e. ~/ -> /home/$USER) - add `ytdl_hook-include` script-opt - add `video-frame-info/gop-timecode`, `video-frame-info/smpte-timecode` and `video-frame-info/estimated-smpte-timecode` - add `term-clip-cc` - add `sub-ass-prune-delay` option to control libass automatic pruning of past - events - add `slimbottombar` and `slimtopbar` OSC layouts optimized for viewing images - add `osc-fadein` script-opt - add `mpv://` protocol - add `metadata` sub-property for `track-list` - add `keep_open` flag to `mp.input.get()` and `mp.input.select()` - `mp.input.get()` now closes automatically on submit, pass `keep_open = true` to restore the old behavior - add `autoselect_completion` flag to `mp.input.get()` - add `history_path` key to `mp.input.get()` - add `hearing-impaired`, `visual-impaired` and `attached-picture` flags to track add command - add `format` argument to `screenshot-raw` command - add `display-page-n-toggle` script bindings to stats.lua, where n is a page number - add `demuxer-mkv-crop-compat` option - add `current-watch-later-dir` property - add `console-scale_with_window` script-opt - add `console-margin-x` and `console-margin-y` script-opts - add `console-background_alpha` `console-menu_outline_size` `console- menu_outline_color` `console-corner_radius` `console-selected_color` and `console-selected_back_color` script-opts - add `--video-recenter` option - add `nvidia-true-hdr` mode to vf_d3d11vpp - add `--sub-scale-signs` to allow `--sub-scale` to also scale events detected to be signs by libass - add `--script-opt` alias for `--script-opts-append` - add `--save-watch-history` and `--watch-history-path` options - add `--osd-selected-color` and `--osd-selected-outline-color` options - add `--osd-bar-marker-scale` and `--osd-bar-marker-min-size` options - add `--osd-bar-marker-style` option - add `--input-ime` to enable or disable the IME on supported VOs (Windows, Wayland) - add `--clipboard-monitor` option - add `clipboard` property - add `current-clipboard-backend` property - add `--clipboard-backends` option - add `--archive-exts` - add `archive` to `--directory-filter-types`' default - add `--playlist-exts` - add `playlist` to `--directory-filter-types`' default - add --audio-exclusive option support for ao=audiounit and make non- exclusive the new default - `sub-blur` is now applied by `sub-ass-override=force` with new enough libass - `stats-font_size`, `stats-border_size`, `stats-shadow_x_offset`, `stats- shadow_y_offset` and `stats-plot_bg_border_width` script-opt values result in 2.5 times smaller sizes in order to have the same sizes as the values of equivalent OSD options like `--osd-font-size`. If you customized these sizes, multiply them by 2.5 to get the previous sizes. - ``glsl-shader-opts`` now has predefined parameters that can be used. See the documentation for available values. - `--hwdec=auto` now behaves like `--hwdec=auto-safe`; use `--hwdec=auto- unsafe` to get the old behavior back - Change auto profiles hook priority from 50 to 5 - add optional `frames` and `flags` arguments to `frame-step` command controlling the direction and amount of frames mpv steps through - add optional `mute` flag to `frame-step` command which mutes the player during the duration of the frame step --- mpv 0.39.0 --- - turn `--cover-art-whitelist` into a list option - reserve `user-data/osc` and `user-data/mpv` sub-paths for internal use - remove deprecated `packet-video-bitrate` `packet-audio-bitrate` and `packet-sub-bitrate` properties - remove deprecated `--cache-dir` option alias - remove deprecated `--cache-unlink-files` option alias - remove deprecated `--demuxer-cue-codepage` option alias - remove deprecated `--fps` option alias - remove deprecated `--cdrom-device` option alias - remove deprecated `--sub-forced-only` option alias - remove deprecated `--vo-sixel-exit-clear` option alias - remove deprecated `--cdda-toc-bias` option - remove deprecated `--drm-atomic` option - remove `sub-ass-vsfilter-aspect-compat`: use `sub-ass-use-video-data=none` for disabling aspect compat - remove `sub-ass-vsfilter-blur-compat`: use `sub-ass-use-video-data=aspect- ratio` for disabling blur compat - add `sub-ass-use-video-data` - add `sub-ass-video-aspect-override` - change default V keybind to cycle `sub-ass-use-video-data` instead of the now removed `sub-ass-vsfilter-aspect-compat` - remove `console-scale` script-opt - remap numpad `+ - * /` keys to `KP_ADD/KP_SUBTRACT/KP_MULTIPLY/KP_DIVIDE`; keybinds which require these numpad keys to function need to use the new names instead - numerical values of `--loop-file` no longer decrease on each iteration - add `remaining-file-loops` property as a replacement to get the remaining loop count - numerical values of `--ab-loop-count` no longer decrease on each iteration - add `remaining-ab-loops` property as a replacement to get the remaining loop count - move 'scale' above 'force' for `sub-ass-override` in documentation as well as code. This more accurately reflects destructiveness of these options. - change `sub-ass-override` default from 'yes' to 'scale'. This should result in no effective changes because 'yes' used to unintentionally do what 'scale' should've done. - change 'u' binding to cycle between 'force' and 'scale', instead of 'force' and 'yes' - deprecate `sub-text-ass` property; add `sub-text/ass` sub-property - change type of `sub-start` and `sub-end` properties to time - change `vidscale` script option type to string for osc.lua - change `vidscale` script option type to string for stats.lua - change `vidscale` default from `yes` to `auto` for osc.lua and stats.lua - change `mp.add_key_binding` so that by default, the callback is not invoked if the event is canceled; clients should now use the `complex` option to detect this situation - add `canceled` entry to `mp.add_key_binding` callback argument - add the `normalize-path` command - add `user-data/mpv/ytdl/path` and `user-data/mpv/ytdl/json-subprocess- result` properties - add `track-list/N/dolby-vision-profile` and `track-list/N/dolby-vision- level` - add `track-list/N/decoder` - add `sub-text/ass-full` sub-property - add `osc-show` script message - add `nonrepeatable` input command prefix - add `mp.input.select()` - add `--wasapi-exclusive-buffer` option - add `--vf=d3d11vpp=scaling-mode` - add `--vf=d3d11vpp=scale` - add `--sub-border-style` and `--osd-border-style` options - the border style does not depend on `--(sub/osd)-border-color` and `--(sub/osd)-shadow-color`; now it depends solely on `--(sub/osd)-border- style` - make `--(sub/osd)-border-color` an alias of `--(sub/osd)-outline-color` - make `--(sub/osd)-border-size` an alias of `--(sub/osd)-outline-size` - make `--(sub/osd)-shadow-color` an alias of `--(sub/osd)-back-color`; they cannot both be set now - make `--osd-bar-border-size` an alias of `--osd-bar-outline-size` - add `--show-in-taskbar` option - add `--pitch` option - add `--osd-playlist-entry` option - remove `osc-playlist_media_title` script-opt - add `--native-touch` option - add `--input-touch-emulate-mouse` option - add `touch-pos` property - add `--media-controls` option - add `--input-dragging-deadzone` option - add `--input-builtin-dragging` option - add `--egl-config-id` option - add `--egl-output-format` option - add `--directory-filter-types` - By default, opening a directory will create a playlist with only the media types "video, audio, image". To restore the previous behavior, use `--directory-filter-types-clr`. - add `--autocreate-playlist` - add `--video-exts` - add `--audio-exts` - add `--image-exts` - add `option-info//expects-file` sub-property - Bump dependency of VapourSynth to utilize its API version 4. New minimum VapourSynth version for runtime is R56. Some functions and plugins are changed or removed. For details, refer to VapourSynth documentation and --- mpv 0.38.0 --- - add `term-size` property - add the `escape-ass` command - add `>` for fixed precision floating-point property expansion - add `--input-comands` option - change `--pulse-latency-hacks` default to `yes` - add `context-menu` command - add `menu-data` property - add `--vo-tct-buffering` option - add `begin-vo-dragging` command - add `--deinterlace-field-parity` option - add `--volume-gain`, `--volume-gain-min`, and `--volume-gain-max` options - add `current-gpu-context` property - add `--secondary-sub-ass-override` option - add `--input-preprocess-wheel` option - remove `shared-script-properties` (`user-data` is a replacement) - add `--secondary-sub-delay`, decouple secondary subtitles from `--sub-delay` - add the `--osd-bar-border-size` option - `--screenshot-avif-pixfmt` no longer defaults to yuv420p - `--screenshot-avif-opts` defaults to lossless screenshot - rename key `MP_KEY_BACK` to `MP_KEY_GO_BACK` - add `--sub-filter-sdh-enclosures` option - added the `mp.input` scripting API to query the user for textual input - add `forced` choice to `subs-with-matching-audio` - remove `--term-remaining-playtime` option - change fallback deinterlace to bwdif - add the command `load-config-file` - add the command `load-input-conf` - remove `--vo=rpi`, `--gpu-context=rpi`, and `--hwdec=mmal` - add `auto` choice to `--deinterlace` - change `--teletext-page` default from 100 to 0 ("subtitle" in lavc) - change `--hidpi-window-scale` default to `no` - add `insert-next`, `insert-next-play`, `insert-at`, and `insert-at-play` actions to `loadfile` and `loadlist` commands - add `index` argument to `loadlist` command - add `index` argument to `loadfile` command. This breaks all existing uses of this command which make use of the argument to include the list of options to be set while the file is playing. To address this problem, the third argument now needs to be set to -1 if the fourth argument needs to be used. - move the `options` argument of the `loadfile` command from the third parameter to the fourth (after `index`) - add `--drag-and-drop=insert-next` option - rename `--background` to `--background-color` - remove `--alpha` and reintroduce `--background` option for better control over blending alpha components into specific background types - add `--border-background` option - add `video-target-params` property - add `hdr10plus` sub-parameter to `format` video filter - remove `--focus-on-open` and add replacement `--focus-on` - remove debanding from the high-quality profile --- mpv 0.37.0 --- - `--save-position-on-quit` and its associated commands now store state files in %LOCALAPPDATA% instead of %APPDATA% directory by default on Windows. - change `--subs-with-matching-audio` default from `no` to `yes` - change `--subs-fallback` default from `no` to `default` - add the `--hdr-peak-percentile` option - include `--hdr-peak-percentile` in the `gpu-hq` profile - change `--audiotrack-pcm-float` default from `no` to `yes` - add video-params/aspect-name - change type of `--sub-pos` to float - The remaining time printed in the terminal is now adjusted for speed by default. You can disable this with `--no-term-remaining-playtime`. - add `playlist-path` and `playlist/N/playlist-path` properties - add `--x11-wid-title` option - add `--libplacebo-opts` option - add `--audio-file-exts`, `--cover-art-auto-exts`, and `--sub-auto-exts` - change `slang` default back to NULL - remove special handling of the `auto` value from `--alang/slang/vlang` options - add `--subs-match-os-language` as a replacement for `--slang=auto` - add `always` option to `--subs-fallback-forced` - remove `auto` choice from `--sub-forced-only` - remove `auto-forced-only` property - rename `--sub-forced-only` to `--sub-forced-events-only` - remove `sub-forced-only-cur` property (`--sub-forced-events-only` is a replacement) - remove deprecated `video-aspect` property - add `--video-crop` - add `video-params/crop-[w,h,x,y]` - remove `--tone-mapping-mode` - change `--subs-fallback-forced` so that it works alongside `--slang` - add `--icc-3dlut-size=auto` and make it the default - add `--scale=ewa_lanczos4sharpest` - remove `--scale-wblur`, `--cscale-wblur`, `--dscale-wblur`, `--tscale-wblur` - remove `bcspline` filter (`bicubic` is now the same as `bcspline`) - rename `--cache-dir` and `--cache-unlink-files` to `--demuxer-cache-dir` and `--demuxer-cache-unlink-files` - enable `--correct-downscaling`, `--linear-downscaling`, `--sigmoid-upscaling` - `--cscale` defaults to `--scale` if not defined - change `--tscale` default to `oversample` - change `--dither-depth` to `auto` - deprecate `--profile=gpu-hq`, add `--profile=` - change `--dscale` default to `hermite` - update defaults to `--hdr-peak-decay-rate=20`, `--hdr-scene-threshold-low=1.0`, `--hdr-scene-threshold-high=3.0` - update defaults to `--deband-threshold=48`, `--deband-grain=32` - add `--directory-mode=auto` and make it the default - remove deprecated `--profile=opengl-hq` - remove several legacy fallbacks for old deprecated options (now they will just error out like normal) - remove deprecated `drop-frame-count` and `vo-drop-frame-count` property aliases - remove the ability to write to the `display-fps` property (use `override-display-fps` instead) - writing the current value to playlist-pos will no longer restart playback (use `playlist-play-index` instead) - remove deprecated `--oaoffset`, `--oafirst`, `--ovoffset`, `--ovfirst`, `--demuxer-force-retry-on-eof`, `--fit-border` options - remove deprecated `--record-file` option - remove deprecated `--vf-defaults` and `--af-defaults` options - `--drm-connector` no longer allows selecting the card number (use `--drm-device` instead) - add `--title-bar` option - add `--window-corners` option - rename `--cdrom-device` to `--cdda-device` - remove `--scale-cutoff`, `--cscale-cutoff`, `--dscale-cutoff`, `--tscale-cutoff` - remove `--scaler-lut-size` - deprecate shared-script-properties (user-data is a replacement) - add `--backdrop-type` option - add `--window-affinity` option - `--config-dir` no longer forces cache and state files to also reside in there - deprecate `--demuxer-cue-codepage` in favor of `--metadata-codepage` - change the default of `metadata-codepage` to `auto` - add `playlist-next-playlist` and `playlist-prev-playlist` commands - change `video-codec` to show description or name, not both - deprecate `--cdda-toc-bias` option, offsets are always checked now - disable `--allow-delayed-peak-detect` by default - rename `--fps` to `--container-fps-override` - rename `--override-display-fps` to `--display-fps-override` - rename `--sub-ass-force-style` to `--sub-ass-style-overrides` - alias `--screenshot-directory` to `--screenshot-dir` - alias `--watch-later-directory` to `--watch-later-dir` - rename `--play-dir` to `--play-direction` - `--js-memory-report` is now used for enabling memory reporting for javascript scripts - drop support for `-del` syntax for list options - `--demuxer-hysteresis-secs` now respects `--cache-secs` and/or `--demuxer-readahead-secs` as well - add hdr metadata to `video-params` property - add `--target-gamut` - change the way display names are retrieved on macOS, usage of options and properties `--fs-screen-name`, `--screen-name` and `display-names` needs to be adjusted - remove OpenGL cocoa backend that was deprecated in 0.29 - remove `border`, `fullscreen`, `ontop`, `osd-level` and `pause` from default `--watch-later-options` - add `video-*` and `secondary-sub-visibility` to default `--watch-later-options` --- mpv 0.36.0 --- - add `--target-contrast` - Target luminance value is now also applied when ICC profile is used. `--icc-use-luma` has been added to use ICC profile luminance value. If target luminance and ICC luminance is not used, old behavior apply, defaulting to 203 nits. (Only applies for `--vo=gpu-next`) - `playlist/N/title` gets set upon opening the file if it wasn't already set and a title is available. - add the `--vo=kitty` video output driver, as well as the options `--vo-kitty-cols`, `--vo-kitty-rows`, `--vo-kitty-width`, `--vo-kitty-height`, `--vo-kitty-left`, `--vo-kitty-top`, `--vo-kitty-config-clear`, `--vo-kitty-alt-screen` and `--vo-kitty-use-shm` - add `--force-render` - add `--vo-sixel-config-clear`, `--vo-sixel-alt-screen` and `--vo-sixel-buffered` - add `--wayland-content-type` - deprecate `--vo-sixel-exit-clear` and alias it to `--vo-sixel-alt-screen` - deprecate `--drm-atomic` - add `--demuxer-hysteresis-secs` - add `--video-sync=display-tempo` - the `start` option is no longer unconditionally written by watch-later. It is still written by default but you may need to explicitly add `start` depending on how you have `--watch-later-options` configured. - add `--vd-lavc-dr=auto` and make it the default - add support for the fractional scale protocol in wayland - in wayland, hidpi window scaling now scales the window by the compositor's dpi scale factor by default (can be disabled with --no-hidpi-window-scale if fractional scaling support exists). - change --screenshot-tag-colorspace default value from `no` to `yes` - undeprecate vf_sub - add `--tone-mapping=st2094-40` and `--tone-mapping=st2094-10` - change `--screenshot-jxl-effort` default from `3` to `4`. - add `--tone-mapping-visualize` - change type of `--brightness`, `--saturation`, `--contrast`, `--hue` and `--gamma` to float. - add `platform` property - add `--auto-window-resize` - `--save-position-on-quit` and its associated commands now store state files in the XDG_STATE_HOME directory by default. This only has an effect on linux/bsd systems. - mpv now implicitly saves cache files in XDG_CACHE_HOME by default. This only has an effect if the user enables options that would lead to cache being stored and only makes a difference on linux/bsd systems. - `--cache-on-disk` no longer requires explicitly setting the `--cache-dir` option - add `--icc-cache` and `--gpu-shader-cache` options to control whether or not to save cache files for these features; explicitly setting `--icc-cache-dir` and `--gpu-shader-cache` is no longer required - remove the `--tone-mapping-crosstalk` option - add `--gamut-mapping-mode=perceptual|relative|saturation|absolute|linear` - add `--corner-rounding` option - change `--subs-with-matching-audio` default from `yes` to `no` - change `--slang` default from blank to `auto` - add `--input-cursor-passthrough` option to allow pointer events to completely passthrough the mpv window - icc and gpu-shader cache are now saved by default (use --no-icc-shader-cache and --no-gpu-shader-cache to disable) - add `--directory-mode=recursive|lazy|ignore` - `--hwdec=yes` is now mapped to `auto-safe` rather than `auto` (also used by ctrl+h keybind) - add `--hdr-contrast-recovery` and `--hdr-contrast-smoothness` - include `--hdr-contrast-recovery` in the `gpu-hq` profile --- mpv 0.35.0 --- - add the `--vo=gpu-next` video output driver, as well as the options `--allow-delayed-peak-detect`, `--builtin-scalers`, `--interpolation-preserve` `--lut`, `--lut-type`, `--image-lut`, `--image-lut-type` and `--target-lut` along with it. - add `--target-colorspace-hint` - add `--tone-mapping-crosstalk` - add `--tone-mapping` options `auto`, `spline` and `bt.2446a` - add `--inverse-tone-mapping` - add `--gamut-mapping-mode`, replacing `--gamut-clipping` and `--gamut-warning` - add `--tone-mapping-mode`, replacing `--tone-mapping-desaturate` and `--tone-mapping-desaturate-exponent`. - add `dolbyvision` sub-parameter to `format` video filter - `--sub-visibility` no longer has any effect on secondary subtitles - add `film-grain` sub-parameter to `format` video filter - add experimental `--vo=dmabuf-wayland` video output driver - add `--x11-present` for controlling whether to use xorg's present extension - add `engine` option to the `rubberband` audio filter to support the new engine introduced in rubberband 3.0.0. Defaults to `finer` (new engine). - add `--wayland-configure-bounds` option - deprecate `--gamma-factor` - deprecate `--gamma-auto` - remove `--vulkan-disable-events` - add `--glsl-shader-opts` --- mpv 0.34.0 --- - deprecate selecting by card number with `--drm-connector`, add `--drm-device` which can be used instead - add `--screen-name` and `--fs-screen-name` flags to allow selecting the screen by its name instead of the index - add `--macos-geometry-calculation` to change the rectangle used for screen position and size calculation. the old behavior used the whole screen, which didn't take the menu bar and Dock into account. The new default behaviour includes both. To revert to the old behavior set this to `whole`. - add an additional optional `albumart` argument to the `video-add` command, which tells mpv to load the given video as album art. - undeprecate `--cache-secs` option - remove `--icc-contrast` and introduce `--icc-force-contrast`. The latter defaults to the equivalent of the old `--icc-contrast=inf`, and can instead be used to specifically set the contrast to any value. - add a `--watch-later-options` option to allow configuring which options quit-watch-later saves - make `current-window-scale` writeable and use it in the default input.conf - add `--input-builtin-bindings` flag to control loading of built-in key bindings during start-up (default: yes). - add ``track-list/N/image`` sub-property - remove `--opengl-restrict` option - js custom-init: use filename ~~/init.js instead of ~~/.init.js (dot) --- mpv 0.33.0 --- - add `--d3d11-exclusive-fs` flag to enable D3D11 exclusive fullscreen mode when the player enters fullscreen. - directories in ~/.mpv/scripts/ (or equivalent) now have special semantics (see mpv Lua scripting docs) - names starting with "." in ~/.mpv/scripts/ (or equivalent) are now ignored - js modules: ~~/scripts/modules.js/ is no longer used, global paths can be set with custom init (see docs), dir-scripts first look at /modules/ - the macOS bundle now logs to "~/Library/Logs/mpv.log" by default - deprecate the --cache-secs option (once removed, the cache cannot be limited by time anymore) - remove deprecated legacy hook API ("hook-add", "hook-ack"). Use either the libmpv API (mpv_hook_add(), mpv_hook_continue()), or the Lua scripting wrappers (mp.add_hook()). - improve how property change notifications are delivered on events and on hooks. In particular, a hook event is only returned to a client after all changes initiated before the hook point were delivered to the same client. In addition, it should no longer happen that events and property change notifications were interleaved in bad ways (it could happen that a property notification delivered after an event contained a value that was valid only before the event happened). - the playlist-pos and playlist-pos-1 properties now can return and accept -1, and are never unavailable. Out of range indexes are now accepted, but behave like writing -1. - the playlist-pos and playlist-pos-1 properties deprecate the current behavior when writing back the current value to the property: currently, this restarts playback, but in the future, it will do nothing. Using the "playlist-play-index" command is recommended instead. - add "playlist-play-index" command - add playlist-current-pos, playlist-playing-pos properties - Lua end-file events set the "error" field; this is deprecated; use the "file_error" instead for this specific event. Scripts relying on the "error" field for end-file will silently break at some point in the future. - remove deprecated --input-file option, add --input-ipc-client, which is vaguely a replacement of the removed option, but not the same - change another detail for track selection options (see --aid manpage entry) - reading loop-file property as native property or mpv_node will now return "inf" instead of boolean true (also affects loop option) - remove some --vo-direct3d-... options (it got dumbed down; use --vo=gpu) - remove video-params/plane-depth property (was too vaguely defined) - remove --video-sync-adrop-size option (implementation was changed, no replacement for what this option did) - undeprecate --video-sync=display-adrop - deprecate legacy auto profiles (profiles starting with "extension." and "protocol."). Use conditional auto profiles instead. - the "subprocess" command does not connect spawned processes' stdin to mpv's stdin anymore. Instead, stdin is connected to /dev/null by default. To get the old behavior, set the "passthrough_stdin" argument to true. - key/value list options do not accept ":" as item separator anymore, only ",". This means ":" is always considered part of the value. - remove deprecated --vo-vdpau-deint option - add `delete-watch-later-config` command to complement `write-watch-later-config` --- mpv 0.32.0 --- - change behavior when using legacy option syntax with options that start with two dashes (``--`` instead of a ``-``). Now, using the recommended syntax is required for options starting with ``--``, which means an option value must be strictly passed after a ``=``, instead of as separate argument. For example, ``--log-file f.txt`` was previously accepted and behaved like ``--log-file=f.txt``, but now causes an error. Use of legacy syntax that is still supported now prints a deprecation warning. --- mpv 0.31.0 --- - add `--resume-playback-check-mtime` to check consistent mtime when restoring playback state. - add `--d3d11-output-csp` to enable explicit selection of a D3D11 swap chain color space. - the --sws- options and similar now affect vo_image and screenshot conversion (does not matter as much for vo_gpu, which does most of this with shaders) - add a builtin "sw-fast" profile, which restores performance settings for software video conversion. These were switched to higher quality since mpv 0.30.0 (related to the previous changelog entry). This affects video outputs like vo_x11 and vo_drm, and screenshots, but not much else. - deprecate --input-file (there are no plans to remove this short-term, but it will probably eventually go away <- that was a lie) - deprecate --video-sync=display-adrop (might be removed if it's in the way; undeprecated or re-added if it's not too much of a problem) - deprecate all input section commands (these will be changed/removed, as soon as mpv internals do not require them anymore) - remove deprecated --playlist-pos alias (use --playlist-start) - deprecate --display-fps, introduce --override-display-fps. The display-fps property now is unavailable if no VO exists (or the VO did not return a display FPS), instead of returning the option value in this case. The property will keep existing, but writing to it is deprecated. - the vf/af properties now do not reject the set value anymore, even if filter chain initialization fails. Instead, the vf/af options are always set to the user's value, even if it does not reflect the "runtime" vf/af chain. - the vid/aid/sid/secondary-sid properties (and their aliases: "audio", "video", "sub") will now allow setting any track ID; before this change, only IDs of actually existing tracks could be set (the restriction was active the MPV_EVENT_FILE_LOADED/"file-loaded" event was sent). Setting an ID for which no track exists is equivalent to disabling it. Note that setting the properties to non-existing tracks may report it as selected track for a small time window, until it's forced back to "no". The exact details how this is handled may change in the future. - remove old Apple Remote support, including --input-appleremote - add MediaPlayer support and remove the old Media Key event tap on macOS. this possibly also re-adds the Apple Remote support - the "edition" property now strictly returns the value of the option, instead of the runtime value. The new "current-edition" property needs to be queried to read the runtime-chosen edition. This is a breaking change for any users which expected "edition" to return the runtime-chosen edition at default settings (--edition=auto). - the "window-scale" property now strictly returns the value of the option, instead of the actual size of the window. The new "current-window-scale" property needs to be queried to read the value as indicated by the current window size. This is a breaking change. - explicitly deprecate passing more than 1 item to "-add" suffix in key/value options (for example --script-opts-add). This was actually always deprecated, like with other list options, but the option parser did not print a warning in this particular case. - deprecate -del for list options (use -remove instead, which is by content instead of by integer index) - if `--fs` is used but `--fs-screen` is not set, mpv will now use `--screen` instead. - change the default of --hwdec to "no" on RPI. The default used to be "mmal" specifically if 'Raspberry Pi support' was enabled at configure time (equivalent to --enable-rpi). Use --hwdec=mmal to get the old behavior. --- mpv 0.30.0 --- - add `--d3d11-output-format` to enable explicit selection of a D3D11 swap chain format. - rewrite DVB channel switching to use an integer value `--dvbin-channel-switch-offset` for switching instead of the old stream controls which are now gone. Cycling this property up or down will change the offset to the channel which was initially tuned to. Example for `input.conf`: `H cycle dvbin-channel-switch-offset up`, `K cycle dvbin-channel-switch-offset down`. - adapt `stream_dvb` to support writing to `dvbin-prog` at runtime and also to consistently use dvbin-configuration over URI parameters when provided - add `--d3d11-adapter` to enable explicit selection of a D3D11 rendering adapter by name. - rename `--drm-osd-plane-id` to `--drm-draw-plane`, `--drm-video-plane-id` to `--drm-drmprime-video-plane` and `--drm-osd-size` to `--drm-draw-surface-size` to better reflect what the options actually control, that the values they accept aren't actually internal DRM ID's (like with similar options in ffmpeg's KMS support), and that the video plane is only used when the drmprime overlay hwdec interop is active, with the video being drawn to the draw plane otherwise. - in addition to the above, the `--drm-draw-plane` and `--drm-drmprime-video-plane` options now accept either an integer index, or the values primary or overlay. `--drm-draw-plane` now defaults to primary and `--drm-drmprime-video-plane` defaults to overlay. This should be similar to previous behavior on most drivers due to how planes are usually sorted. - rename --opensles-frames-per-buffer to --opensles-frames-per-enqueue to better reflect its purpose. In the past it overrides the buffer size the AO requests (but not the default/value of the generic --audio-buffer option). Now it only guarantees that the soft buffer size will not be smaller than itself while setting the size per Enqueue. - add --opensles-buffer-size-in-ms, allowing user to tune the soft buffer size. It overrides the --audio-buffer option unless it's set to 0 (with the default being 250). - remove `--linear-scaling`, replaced by `--linear-upscaling` and `--linear-downscaling`. This means that `--sigmoid-upscaling` no longer implies linear light downscaling as well, which was confusing. - the built-in `gpu-hq` profile now includes` --linear-downscaling`. - support for `--spirv-compiler=nvidia` has been removed, leaving `shaderc` as the only option. The `--spirv-compiler` option itself has been marked as deprecated, and may be removed in the future. - split up `--tone-mapping-desaturate`` into strength + exponent, instead of only using a single value (which previously just controlled the exponent). The strength now linearly blends between the linear and nonlinear tone mapped versions of a color. - add --hdr-peak-decay-rate and --hdr-scene-threshold-low/high - add --tone-mapping-max-boost - ipc: require that "request_id" fields are integers. Other types are still accepted for compatibility, but this will stop in the future. Also, if no request_id is provided, 0 will be assumed. - mpv_command_node() and mp.command_native() now support named arguments (see manpage). If you want to use them, use a new version of the manpage as reference, which lists the definitive names. - edition and disc title switching will now fully reload playback (may have consequences for scripts, client API, or when using file-local options) - with the removal of the stream cache, the following properties and options were dropped: `cache`, `cache-size`, `cache-free`, `cache-used`, `--cache-default`, `--cache-initial`, `--cache-seek-min`, `--cache-backbuffer`, `--cache-file`, `--cache-file-size` - the --cache option does not take a number value anymore - remove async playback abort hack. This may make it impossible to abort playback if --demuxer-thread=no is forced. - remove `--macos-title-bar-style`, replaced by `--macos-title-bar-material` and `--macos-title-bar-appearance`. - The default for `--vulkan-async-compute` has changed to `yes` from `no` with the move to libplacebo as the back-end for vulkan rendering. - Remove "disc-titles", "disc-title", "disc-title-list", and "angle" properties. dvd:// does not support title ranges anymore. - Remove all "tv-..." options and properties, along with the classic Linux analog TV support. - remove "program" property (no replacement) - always prefer EGL over GLX, which helps with AMD/vaapi, but will break vdpau with --vo=gpu - use --gpu-context=x11 to be able to use vdpau. This does not affect --vo=vdpau or --hwdec=vdpau-copy. - remove deprecated --chapter option - deprecate --record-file - add `--demuxer-cue-codepage` - add ``track-list/N/demux-bitrate``, ``track-list/N/demux-rotation`` and ``track-list/N/demux-par`` property - Deprecate ``--video-aspect`` and add ``--video-aspect-override`` to replace it. (The `video-aspect` option remains unchanged.) --- mpv 0.29.0 --- - drop --opensles-sample-rate, as --audio-samplerate should be used if desired - drop deprecated --videotoolbox-format, --ff-aid, --ff-vid, --ff-sid, --ad-spdif-dtshd, --softvol options - fix --external-files: strictly never select any tracks from them, unless explicitly selected (this may or may not be expected) - --ytdl is now always enabled, even for libmpv - add a number of --audio-resample-* options, which should from now on be used instead of --af-defaults=lavrresample:... - deprecate --vf-defaults and --af-defaults. These didn't work with the lavfi bridge, so they have very little use left. The only potential use is with af_lavrresample (going to be deprecated, --audio-resample-... set its defaults), and various hw deinterlacing filters (like vf_vavpp), for which you will have to stop using --deinterlace=yes, and instead use the vf toggle commands and the filter enable/disable flag to customize it. - deprecate --af=lavrresample. Use the ``--audio-resample-...`` options to customize resampling, or the libavfilter ``--af=aresample`` filter. - add --osd-on-seek - remove outfmt sub-parameter from "format" video filter (no replacement) - some behavior changes in the video filter chain, including: - before, using an incompatible filter with hwdec would disable hwdec; now it disables the filter at runtime instead - inserting an incompatible filter with hwdec at runtime would refuse to insert the filter; now it will add it successfully, but disables the filter slightly later - some behavior changes in the audio filter chain, including: - a manually inserted lavrresample filter is not necessarily used for sample format conversion anymore, so it's pretty useless - changing playback speed will not respect --af-defaults anymore - having libavfilter based filters after the scaletempo or rubberband filters is not supported anymore, and may desync if playback speed is changed (libavfilter does not support the metadata for playback speed) - the lavcac3enc filter does not auto detach itself anymore; instead it passes through the data after converting it to the sample rate and channel configuration the ac3 encoder expects; also, if the audio format changes midstream in a way that causes the filter to switch between PCM and AC3 output, the audio output won't be reconfigured, and audio playback will fail due to libswresample being unable to convert between PCM and AC3 (Note: the responsible developer didn't give a shit. Later changes might have improved or worsened this.) - inserting a filter that changes the output sample format will not reconfigure the AO - you need to run an additional "ao-reload" command to force this if you want that - using "strong" gapless audio (--gapless-audio=yes) can fail if the audio formats are not convertible (such as switching between PCM and AC3 passthrough) - if filters do not pass through PTS values correctly, A/V sync can result over time. Some libavfilter filters are known to be affected by this, such as af_loudnorm, which can desync over time, depending on how the audio track was muxed (af_lavfi's fix-pts suboption can help). - remove out-format sub-parameter from "format" audio filter (no replacement) - --lavfi-complex now requires uniquely named filter pads. In addition, unconnected filter pads are not allowed anymore (that means every filter pad must be connected either to another filter, or to a video/audio track or video/audio output). If they are disconnected at runtime, the stream will probably stall. - rename --vo=opengl-cb to --vo=libmpv (goes in hand with the opengl-cb API deprecation, see client-api-changes.rst) - deprecate the OpenGL cocoa backend, option choice --gpu-context=cocoa when used with --gpu-api=opengl (use --vo=libmpv) - make --deinterlace=yes always deinterlace, instead of trying to check certain unreliable video metadata. Also flip the defaults of all builtin HW deinterlace filters to always deinterlace. - change vf_vavpp default to use the best deinterlace algorithm by default - remove a compatibility hack that allowed CLI aliases to be set as property (such as "sub-file"), deprecated in mpv 0.26.0 - deprecate the old command based hook API, and introduce a proper C API (the high level Lua API for this does not change) - rename the the lua-settings/ config directory to script-opts/ - the way the player waits for scripts getting loaded changes slightly. Now scripts are loaded in parallel, and block the player from continuing playback only in the player initialization phase. It could change again in the future. (This kind of waiting was always a feature to prevent that playback is started while scripts are only half-loaded.) - deprecate --ovoffset, --oaoffset, --ovfirst, --oafirst - remove the following encoding options: --ocopyts (now the default, old timestamp handling is gone), --oneverdrop (now default), --oharddup (you need to use --vf=fps=VALUE), --ofps, --oautofps, --omaxfps - remove --video-stereo-mode. This option was broken out of laziness, and nobody wants to fix it. Automatic 3D down-conversion to 2D is also broken, although you can just insert the stereo3d filter manually. The obscurity of 3D content doesn't justify such an option anyway. - change cycle-values command to use the current value, instead of an internal counter that remembered the current position. - remove deprecated ao/vo auto profiles. Consider using scripts like auto-profiles.lua instead. - --[c]scale-[w]param[1|2] and --tone-mapping-param now accept "default", and if set to that value, reading them as property will also return "default", instead of float nan as in previous versions --- mpv 0.28.0 --- - rename --hwdec=mediacodec option to mediacodec-copy, to reflect conventions followed by other hardware video decoding APIs - drop previously deprecated --heartbeat-cmd and --heartbeat--interval options - rename --vo=opengl to --vo=gpu - rename --opengl-backend to --gpu-context - rename --opengl-shaders to --glsl-shaders - rename --opengl-shader-cache-dir to --gpu-shader-cache-dir - rename --opengl-tex-pad-x/y to --gpu-tex-pad-x/y - rename --opengl-fbo-format to --fbo-format - rename --opengl-gamma to --gamma-factor - rename --opengl-debug to --gpu-debug - rename --opengl-sw to --gpu-sw - rename --opengl-vsync-fences to --swapchain-depth, and the interpretation slightly changed. Now defaults to 3. - rename the built-in profile `opengl-hq` to `gpu-hq` - the semantics of --opengl-es=yes are slightly changed -> now requires GLES - remove the (deprecated) alias --gpu-context=drm-egl - remove the (deprecated) --vo=opengl-hq - remove --opengl-es=force2 (use --opengl-es=yes --opengl-restrict=300) - the --msg-level option now affects --log-file - drop "audio-out-detected-device" property - this was unavailable on all audio output drivers for quite a while (coreaudio used to provide it) - deprecate --videotoolbox-format (use --hwdec-image-format, which affects most other hwaccels) - remove deprecated --demuxer-max-packets - remove most of the deprecated audio and video filters - remove the deprecated --balance option/property - rename the --opengl-hwdec-interop option to --gpu-hwdec-interop, and change some of its semantics: extend it take the strings "auto" and "all". "all" loads all backends. "auto" behaves like "all" for vo_opengl_cb, while on vo_gpu it loads nothing, but allows on demand loading by the decoder. The empty string as option value behaves like "auto". Old --hwdec values do not work anymore. This option is hereby declared as unstable and may change any time - its old use is deprecated, and it has very little use outside of debugging now. - change the --hwdec option from a choice to a plain string (affects introspection of the option/property), also affects some properties - rename --hwdec=rpi to --hwdec=mmal, same for the -copy variant (no backwards compatibility) - deprecate the --ff-aid, --ff-vid, --ff-sid options and properties (there is no replacement, but you can manually query the track property and use the "ff-index" field to find the mpv track ID to imitate this behavior) - rename --no-ometadata to --no-ocopy-metadata --- mpv 0.27.0 --- - drop previously deprecated --field-dominance option - drop previously deprecated "osd" command - remove client API compatibility handling for "script", "sub-file", "audio-file", "external-file" (these cases used to log a deprecation warning) - drop deprecated --video-aspect-method=hybrid option choice - rename --hdr-tone-mapping to --tone-mapping (and generalize it) - --opengl-fbo-format changes from a choice to a string. Also, its value will be checked only on renderer initialization, rather than when the option is set. - Using opengl-cb now always assumes 8 bit per component depth, and dithers to this size. Before, it tried to figure out the depth of the first framebuffer that was ever passed to the renderer. Having GL framebuffers with a size larger than 8 bit per component is quite rare. If you need it, set the --dither-depth option instead. - --lavfi-complex can now be set during runtime. If you set this in expectation it would be applied only after a reload, you might observe weird behavior. - add --track-auto-selection to help with scripts/applications that make exclusive use of --lavfi-complex. - undeprecate --loop, and map it from --loop-playlist to --loop-file (the deprecation was to make sure no API user gets broken by a sudden behavior change) - remove previously deprecated vf_eq - remove that hardware deinterlace filters (vavpp, d3d11vpp, vdpaupp) changed their deinterlacing-enabled setting depending on what the --deinterlace option or property was set to. Now, a filter always does what its filter options and defaults imply. The --deinterlace option and property strictly add/remove its own filters. For example, if you run "mpv --vf=vavpp --deinterlace=yes", this will insert another, redundant filter, which is probably not what you want. For toggling a deinterlace filter manually, use the "vf toggle" command, and do not set the deinterlace option/property. To customize the filter that will be inserted automatically, use --vf-defaults. Details how this works will probably change in the future. - remove deinterlace=auto (this was not deprecated, but had only a very obscure use that stopped working with the change above. It was also prone to be confused with a feature not implemented by it: auto did _not_ mean that deinterlacing was enabled on demand.) - add shortened mnemonic names for mouse button bindings, eg. mbtn_left the old numeric names (mouse_btn0) are deprecated - remove mouse_btn3_dbl and up, since they are only generated for buttons 0-2 (these now print an error when sent from the 'mouse' command) - rename the axis bindings to wheel_up/down/etc. axis scrolling and mouse wheel scrolling are now conceptually the same thing the old axis_up/down names remain as deprecated aliases --- mpv 0.26.0 --- - remove remaining deprecated audio device options, like --alsa-device Some of them were removed in earlier releases. - introduce --replaygain... options, which replace the same functionality provided by the deprecated --af=volume:replaygain... mechanism. - drop the internal "mp-rawvideo" codec (used by --demuxer=rawvideo) - rename --sub-ass-style-override to --sub-ass-override, and rename the `--sub-ass-override=signfs` setting to `--sub-ass-override=scale`. - change default of --video-aspect-method to "bitstream". The "hybrid" method (old default) is deprecated. - remove property "video-params/nom-peak" - remove option --target-brightness - replace vf_format's `peak` suboption by `sig-peak`, which is relative to the reference white level instead of in cd/m^2 - renamed the TRCs `st2084` and `std-b67` to `pq` and `hlg` respectively - the "osd" command is deprecated (use "cycle osd-level") - --field-dominance is deprecated (use --vf=setfield=bff or tff) - --really-quiet subtle behavior change - the deprecated handling of setting "no-" options via client API is dropped - the following options change to append-by-default (and possibly separator): --script also, the following options are deprecated: --sub-paths => --sub-file-paths the following options are deprecated for setting via API: "script" (use "scripts") "sub-file" (use "sub-files") "audio-file" (use "audio-files") "external-file" (use "external-files") (the compatibility hacks for this will be removed after this release) - remove property `vo-performance`, and add `vo-passes` as a more general replacement - deprecate passing multiple arguments to -add/-pre options (affects the vf/af commands too) - remove --demuxer-lavf-cryptokey. Use --demux-lavf-o=cryptokey= or --demux-lavf-o=decryption_key= instead (whatever fits your situation). - rename --opengl-dumb-mode=no to --opengl-dumb-mode=auto, and make `no` always disable it (unless forced on by hardware limitation). - generalize --scale-clamp, --cscale-clamp etc. to accept a float between 0.0 and 1.0 instead of just being a flag. A value of 1.0 corresponds to the old `yes`, and a value of 0.0 corresponds to the old `no`. --- mpv 0.25.0 --- - remove opengl-cb dxva2 dummy hwdec interop (see git "vo_opengl: remove dxva2 dummy hwdec backend") - remove ppm, pgm, pgmyuv, tga choices from the --screenshot-format and --vo-image-format options - the "jpeg" choice in the option above now leads to a ".jpg" file extension - --af=drc is gone (you can use e.g. lavfi/acompressor instead) - remove image_size predefined uniform from OpenGL user shaders. Use input_size instead - add --sub-filter-sdh - add --sub-filter-sdh-harder - remove --input-app-events option (macOS) - deprecate most --vf and --af filters. Only some filters not in libavfilter will be kept. Also, you can use libavfilter filters directly (e.g. you can use --vf=name=opts instead of --vf=lavfi=[name=opts]), as long as the libavfilter filter's name doesn't clash with a mpv builtin filter. In the long term, --vf/--af syntax might change again, but if it does, it will switch to libavfilter's native syntax. (The above mentioned direct support for lavfi filters still has some differences, such as how strings are escaped.) If this happens, the non-deprecated builtin filters might be moved to "somewhere else" syntax-wise. - deprecate --loop - after a deprecation period, it will be undeprecated, but changed to alias --loop-file - add --keep-open-pause=no - deprecate --demuxer-max-packets - change --audio-file-auto default from "exact" to "no" (mpv won't load files with the same filename as the video, but different extension, as audio track anymore) --- mpv 0.24.0 --- - deprecate --hwdec-api and replace it with --opengl-hwdec-interop. The new option accepts both --hwdec values, as well as named backends. A minor difference is that --hwdec-api=no (which used to be the default) now actually does not preload any interop layer, while the new default ("") uses the value of --hwdec. - drop deprecated --ad/--vd features - drop deprecated --sub-codepage syntax - rename properties: - "drop-frame-count" to "decoder-frame-drop-count" - "vo-drop-frame-count" to "frame-drop-count" The old names still work, but are deprecated. - remove the --stream-capture option and property. No replacement. (--record-file might serve as alternative) - add --sub-justify - add --sub-ass-justify - internally there's a different way to enable the demuxer cache now it can be auto-enabled even if the stream cache remains disabled --- mpv 0.23.0 --- - remove deprecated vf_vdpaurb (use "--hwdec=vdpau-copy" instead) - the following properties now have new semantics: - "demuxer" (use "current-demuxer") - "fps" (use "container-fps") - "idle" (use "idle-active") - "cache" (use "cache-percent") - "audio-samplerate" (use "audio-params/samplerate") - "audio-channels" (use "audio-params/channel-count") - "audio-format" (use "audio-codec-name") (the properties equivalent to the old semantics are in parentheses) - remove deprecated --vo and --ao sub-options (like --vo=opengl:...), and replace them with global options. A somewhat complete list can be found here: https://github.com/mpv-player/mpv/wiki/Option-replacement-list#mpv-0210 - remove --vo-defaults and --ao-defaults as well - remove deprecated global sub-options (like -demuxer-rawaudio format=...), use flat options (like --demuxer-rawaudio-format=...) - the --sub-codepage option changes in incompatible ways: - detector-selection and fallback syntax is deprecated - enca/libguess are removed and deprecated (behaves as if they hadn't been compiled-in) - --sub-codepage= does not force the codepage anymore (this requires different and new syntax) - remove --fs-black-out-screens option for macOS - change how spdif codecs are selected. You can't enable spdif passthrough with --ad anymore. This was deprecated; use --audio-spdif instead. - deprecate the "family" selection with --ad/--vd forcing/excluding codecs with "+", "-", "-" is deprecated as well - explicitly mark --ad-spdif-dtshd as deprecated (it was done so a long time ago, but it didn't complain when using the option) --- mpv 0.22.0 --- - the "audio-device-list" property now sets empty device description to the device name as a fallback - add --hidpi-window-scale option for macOS - add audiounit audio output for iOS - make --start-time work with --rebase-start-time=no - add --opengl-early-flush=auto mode - add --hwdec=vdpau-copy, deprecate vf_vdpaurb - add tct video output for true-color and 256-color terminals --- mpv 0.21.0 --- - unlike in older versions, setting options at runtime will now take effect immediately (see for example issue #3281). On the other hand, it will also do runtime verification and reject option changes that do not work (example: setting the "vf" option to a filter during playback, which fails to initialize - the option value will remain at its old value). In general, "set name value" should be mostly equivalent to "set options/name value" in cases where the "name" property is not deprecated and "options/name" exists - deviations from this are either bugs, or documented as caveats in the "Inconsistencies between options and properties" manpage section. - deprecate _all_ --vo and --ao suboptions. Generally, all suboptions are replaced by global options, which do exactly the same. For example, "--vo=opengl:scale=nearest" turns into "--scale=nearest". In some cases, the global option is prefixed, e.g. "--vo=opengl:pbo" turns into "--opengl-pbo". Most of the exact replacements are documented here: https://github.com/mpv-player/mpv/wiki/Option-replacement-list - remove --vo=opengl-hq. Set --profile=opengl-hq instead. Note that this profile does not force the VO. This means if you use the --vo option to set another VO, it won't work. But this also means it can be used with opengl-cb. - remove the --vo=opengl "pre-shaders", "post-shaders" and "scale-shader" sub-options: they were deprecated in favor of "user-shaders" - deprecate --vo-defaults (no replacement) - remove the vo-cmdline command. You can set OpenGL renderer options directly via properties instead. - deprecate the device/sink options on all AOs. Use --audio-device instead. - deprecate "--ao=wasapi:exclusive" and "--ao=coreaudio:exclusive", use --audio-exclusive instead. - subtle changes in how "--no-..." options are treated mean that they are not accessible under "options/..." anymore (instead, these are resolved at parsing time). This does not affect options which start with "--no-", but do not use the mechanism for negation options. (Also see client API change for API version 1.23.) - rename the following properties - "demuxer" -> "current-demuxer" - "fps" -> "container-fps" - "idle" -> "idle-active" - "cache" -> "cache-percent" the old names are deprecated and will change behavior in mpv 0.23.0. - remove deprecated "hwdec-active" and "hwdec-detected" properties - deprecate the ao and vo auto-profiles (they never made any sense) - deprecate "--vo=direct3d_shaders" - use "--vo=direct3d" instead. Change "--vo=direct3d" to always use shaders by default. - deprecate --playlist-pos option, renamed to --playlist-start - deprecate the --chapter option, as it is redundant with --start/--end, and conflicts with the semantics of the "chapter" property - rename --sub-text-* to --sub-* and --ass-* to --sub-ass-* (old options deprecated) - incompatible change to cdda:// protocol options: the part after cdda:// now always sets the device, not the span or speed to be played. No separating extra "/" is needed. The hidden --cdda-device options is also deleted (it was redundant with the documented --cdrom-device). - deprecate --vo=rpi. It will be removed in mpv 0.23.0. Its functionality was folded into --vo=opengl, which now uses RPI hardware decoding by treating it as a hardware overlay (without applying GL filtering). Also to be changed in 0.23.0: the --fs flag will be reset to "no" by default (like on the other platforms). - deprecate --mute=auto (informally has been since 0.18.1) - deprecate "resume" and "suspend" IPC commands. They will be completely removed in 0.23.0. - deprecate mp.suspend(), mp.resume(), mp.resume_all() Lua scripting commands, as well as setting mp.use_suspend. They will be completely removed in 0.23.0. - the "seek" command's absolute seek mode will now interpret negative seek times as relative from the end of the file (and clamps seeks that still go before 0) - add almost all options to the property list, meaning you can change options without adding "options/" to the property name (a new section has been added to the manpage describing some conflicting behavior between options and properties) - implement changing sub-speed during playback - make many previously fixed options changeable at runtime (for example --terminal, --osc, --ytdl, can all be enable/disabled after mpv_initialize() - this can be extended to other still fixed options on user requests) --- mpv 0.20.0 --- - add --image-display-duration option - this also means that image duration is not influenced by --mf-fps anymore in the general case (this is an incompatible change) --- mpv 0.19.0 --- - deprecate "balance" option/property (no replacement) --- mpv 0.18.1 --- - deprecate --heartbeat-cmd - remove --softvol=no capability: - deprecate --softvol, it now does nothing - --volume, --mute, and the corresponding properties now always control softvol, and behave as expected without surprises (e.g. you can set them normally while no audio is initialized) - rename --softvol-max to --volume-max (deprecated alias is added) - the --volume-restore-data option and property are removed without replacement. They were _always_ internal, and used for watch-later resume/restore. Now --volume/--mute are saved directly instead. - the previous point means resuming files with older watch-later configs will print an error about missing --volume-restore-data (which you can ignore), and will not restore the previous value - as a consequence, volume controls will no longer control PulseAudio per-application value, or use the system mixer's per-application volume processing - system or per-application volume can still be controlled with the ao-volume and ao-mute properties (there are no command line options) --- mpv 0.18.0 --- - now ab-loops are active even if one of the "ab-loop-a"/"-b" properties is unset ("no"), in which case the start of the file is used if the A loop point is unset, and the end of the file for an unset B loop point - deprecate --sub-ass=no option by --ass-style-override=strip (also needs --embeddedfonts=no) - add "hwdec-interop" and "hwdec-current" properties - deprecated "hwdec-active" and "hwdec-detected" properties (to be removed in mpv 0.20.0) - choice option/property values that are "yes" or "no" will now be returned as booleans when using the mpv_node functions in the client API, the "native" property accessors in Lua, and the JSON API. They can be set as such as well. - the VO opengl fbo-format sub-option does not accept "rgb" or "rgba" anymore - all VO opengl prescalers have been removed (replaced by user scripts) --- mpv 0.17.0 --- - deprecate "track-list/N/audio-channels" property (use "track-list/N/demux-channel-count" instead) - remove write access to "stream-pos", and change semantics for read access - Lua scripts now don't suspend mpv by default while script code is run - add "cache-speed" property - rename --input-unix-socket to --input-ipc-server, and make it work on Windows too - change the exact behavior of the "video-zoom" property - --video-unscaled no longer disables --video-zoom and --video-aspect To force the old behavior, set --video-zoom=0 and --video-aspect=0 --- mpv 0.16.0 --- - change --audio-channels default to stereo (use --audio-channels=auto to get the old default) - add --audio-normalize-downmix - change the default downmix behavior (--audio-normalize-downmix=yes to get the old default) - VO opengl custom shaders must now use "sample_pixel" as function name, instead of "sample" - change VO opengl scaler-resizes-only default to enabled - add VO opengl "interpolation-threshold" suboption (introduces new default behavior, which can change e.g. ``--video-sync=display-vdrop`` to the worse, but is usually what you want) - make "volume" and "mute" properties changeable even if no audio output is active (this gives not-ideal behavior if --softvol=no is used) - add "volume-max" and "mixer-active" properties - ignore --input-cursor option for events injected by input commands like "mouse", "keydown", etc. --- mpv 0.15.0 --- - change "yadif" video filter defaults --- mpv 0.14.0 --- - vo_opengl interpolation now requires --video-sync=display-... to be set - change some vo_opengl defaults (including changing tscale) - add "vsync-ratio", "estimated-display-fps" properties - add --rebase-start-time option This is a breaking change to start time handling. Instead of making start time handling an aspect of different options and properties (like "time-pos" vs. "playback-time"), make it dependent on the new option. For compatibility, the "time-start" property now always returns 0, so code which attempted to handle rebasing manually will not break. --- mpv 0.13.0 --- - remove VO opengl-cb frame queue suboptions (no replacement) --- mpv 0.12.0 --- - remove --use-text-osd (useless; fontconfig isn't a requirement anymore, and text rendering is also lazily initialized) - some time properties (at least "playback-time", "time-pos", "time-remaining", "playtime-remaining") now are unavailable if the time is unknown, instead of just assuming that the internal playback position is 0 - add --audio-fallback-to-null option - replace vf_format outputlevels suboption with "video-output-levels" global property/option; also remove "colormatrix-output-range" property - vo_opengl: remove sharpen3/sharpen5 scale filters, add sharpen sub-option --- mpv 0.11.0 --- - add "af-metadata" property --- mpv 0.10.0 --- - add --video-aspect-method option - add --playlist-pos option - add --video-sync* options "display-sync-active" property "vo-missed-frame-count" property "audio-speed-correction" and "video-speed-correction" properties - remove --demuxer-readahead-packets and --demuxer-readahead-bytes add --demuxer-max-packets and --demuxer-max-bytes (the new options are not replacement and have very different semantics) - change "video-aspect" property: always settable, even if no video is running; always return the override - if no override is set, return the video's aspect ratio - remove disc-nav (DVD, BD) related properties and commands - add "option-info//set-locally" property - add --cache-backbuffer; change --cache-default default to 75MB the new total cache size is the sum of backbuffer and the cache size specified by --cache-default or --cache - add ``track-list/N/audio-channels`` property - change --screenshot-tag-colorspace default value - add --stretch-image-subs-to-screen - add "playlist/N/title" property - add --video-stereo-mode=no to disable auto-conversions - add --force-seekable, and change default seekability in some cases - add vf yadif/vavpp/vdpaupp interlaced-only suboptions Also, the option is enabled by default (Except vf_yadif, which has it enabled only if it's inserted by the deinterlace property.) - add --hwdec-preload - add ao coreaudio exclusive suboption - add ``track-list/N/forced`` property - add audio-params/channel-count and ``audio-params-out/channel-count props. - add af volume replaygain-fallback suboption - add video-params/stereo-in property - add "keypress", "keydown", and "keyup" commands - deprecate --ad-spdif-dtshd and enabling passthrough via --ad add --audio-spdif as replacement - remove "get_property" command - remove --slave-broken - add vo opengl custom shader suboptions (source-shader, scale-shader, pre-shaders, post-shaders) - completely change how the hwdec properties work: - "hwdec" now reflects the --hwdec option - "hwdec-detected" does partially what the old "hwdec" property did (and also, "detected-hwdec" is removed) - "hwdec-active" is added - add protocol-list property - deprecate audio-samplerate and audio-channels properties (audio-params sub-properties are the replacement) - add audio-params and audio-out-params properties - deprecate "audio-format" property, replaced with "audio-codec-name" - deprecate --media-title, replaced with --force-media-title - deprecate "length" property, replaced with "duration" - change volume property: - the value 100 is now always "unchanged volume" - with softvol, the range is 0 to --softvol-max, without it is 0-100 - the minimum value of --softvol-max is raised to 100 - remove vo opengl npot suboption - add relative seeking by percentage to "seek" command - add playlist_shuffle command - add --force-window=immediate - add ao coreaudio change-physical-format suboption - remove vo opengl icc-cache suboption, add icc-cache-dir suboption - add --screenshot-directory - add --screenshot-high-bit-depth - add --screenshot-jpeg-source-chroma - default action for "rescan_external_files" command changes --- mpv 0.9.0 --- mpv-0.40.0/DOCS/interface-changes/000077500000000000000000000000001477056434700165145ustar00rootroot00000000000000mpv-0.40.0/DOCS/interface-changes/example.txt000066400000000000000000000000741477056434700207110ustar00rootroot00000000000000deprecate `--foo`, instead use `--bar=foo` as a replacement mpv-0.40.0/DOCS/man/000077500000000000000000000000001477056434700137215ustar00rootroot00000000000000mpv-0.40.0/DOCS/man/af.rst000066400000000000000000000257271477056434700150560ustar00rootroot00000000000000AUDIO FILTERS ============= Audio filters allow you to modify the audio stream and its properties. The syntax is: ``--af=...`` Setup a chain of audio filters. See ``--vf`` (`VIDEO FILTERS`_) for the full syntax. This is an object settings list option. See `List Options`_ for details. .. note:: To get a full list of available audio filters, see ``--af=help``. Also, keep in mind that most actual filters are available via the ``lavfi`` wrapper, which gives you access to most of libavfilter's filters. This includes all filters that have been ported from MPlayer to libavfilter. The ``--vf`` description describes how libavfilter can be used and how to workaround deprecated mpv filters. See ``--vf`` group of options for info on how ``--af-add``, ``--af-pre``, ``--af-clr``, and possibly others work. Available filters are: ``lavcac3enc[=options]`` Encode multi-channel audio to AC-3 at runtime using libavcodec. Supports 16-bit native-endian input format, maximum 6 channels. The output is big-endian when outputting a raw AC-3 stream, native-endian when outputting to S/PDIF. If the input sample rate is not 48 kHz, 44.1 kHz or 32 kHz, it will be resampled to 48 kHz. ``tospdif=`` Output raw AC-3 stream if ``no``, output to S/PDIF for pass-through if ``yes`` (default). ``bitrate=`` The bitrate use for the AC-3 stream. Set it to 384 to get 384 kbps. The default is 640. Some receivers might not be able to handle this. Valid values: 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 448, 512, 576, 640. The special value ``auto`` selects a default bitrate based on the input channel number: :1ch: 96 :2ch: 192 :3ch: 224 :4ch: 384 :5ch: 448 :6ch: 448 ``minch=`` If the input channel number is less than ````, the filter will detach itself (default: 3). ``encoder=`` Select the libavcodec encoder used. Currently, this should be an AC-3 encoder, and using another codec will fail horribly. ``format=format:srate:channels:out-srate:out-channels`` Does not do any format conversion itself. Rather, it may cause the filter system to insert necessary conversion filters before or after this filter if needed. It is primarily useful for controlling the audio format going into other filters. To specify the format for audio output, see ``--audio-format``, ``--audio-samplerate``, and ``--audio-channels``. This filter is able to force a particular format, whereas ``--audio-*`` may be overridden by the ao based on output compatibility. All parameters are optional. The first 3 parameters restrict what the filter accepts as input. They will therefore cause conversion filters to be inserted before this one. The ``out-`` parameters tell the filters or audio outputs following this filter how to interpret the data without actually doing a conversion. Setting these will probably just break things unless you really know you want this for some reason, such as testing or dealing with broken media. ```` Force conversion to this format. Use ``--af=format=format=help`` to get a list of valid formats. ```` Force conversion to a specific sample rate. The rate is an integer, 48000 for example. ```` Force mixing to a specific channel layout. See ``--audio-channels`` option for possible values. ```` ```` *NOTE*: this filter used to be named ``force``. The old ``format`` filter used to do conversion itself, unlike this one which lets the filter system handle the conversion. ``scaletempo[=option1:option2:...]`` Scales audio tempo without altering pitch, optionally synced to playback speed. This works by playing 'stride' ms of audio at normal speed then consuming 'stride*scale' ms of input audio. It pieces the strides together by blending 'overlap'% of stride with audio following the previous stride. It optionally performs a short statistical analysis on the next 'search' ms of audio to determine the best overlap position. ``scale=`` Nominal amount to scale tempo. Scales this amount in addition to speed. (default: 1.0) ``stride=`` Length in milliseconds to output each stride. Too high of a value will cause noticeable skips at high scale amounts and an echo at low scale amounts. Very low values will alter pitch. Increasing improves performance. (default: 60) ``overlap=`` Factor of stride to overlap. Decreasing improves performance. (default: .20) ``search=`` Length in milliseconds to search for best overlap position. Decreasing improves performance greatly. On slow systems, you will probably want to set this very low. (default: 14) ``speed=`` Set response to speed change. tempo Scale tempo in sync with speed (default). pitch Reverses effect of filter. Scales pitch without altering tempo. Add this to your ``input.conf`` to step by musical semi-tones:: [ multiply speed 0.9438743126816935 ] multiply speed 1.059463094352953 .. warning:: Loses sync with video. both Scale both tempo and pitch. none Ignore speed changes. .. admonition:: Examples ``mpv --af=scaletempo --speed=1.2 media.ogg`` Would play media at 1.2x normal speed, with audio at normal pitch. Changing playback speed would change audio tempo to match. ``mpv --af=scaletempo=scale=1.2:speed=none --speed=1.2 media.ogg`` Would play media at 1.2x normal speed, with audio at normal pitch, but changing playback speed would have no effect on audio tempo. ``mpv --af=scaletempo=stride=30:overlap=.50:search=10 media.ogg`` Would tweak the quality and performance parameters. ``mpv --af=scaletempo=scale=1.2:speed=pitch audio.ogg`` Would play media at 1.2x normal speed, with audio at normal pitch. Changing playback speed would change pitch, leaving audio tempo at 1.2x. ``scaletempo2[=option1:option2:...]`` Scales audio tempo without altering pitch. The algorithm is ported from chromium and uses the Waveform Similarity Overlap-and-add (WSOLA) method. It seems to achieves higher audio quality than scaletempo, and rubberband R2 engine, or ``engine=faster``. This filter is inserted automatically if ``audio-pitch-correction`` option is used (on by default) when the playback speed is changed. By default, the ``search-interval`` and ``window-size`` parameters have the same values as in chromium. ``min-speed=`` Mute audio if the playback speed is below ````. (default: 0.25) ``max-speed=`` Mute audio if the playback speed is above ```` and `` != 0``. (default: 8.0) ``search-interval=`` Length in milliseconds to search for best overlap position. (default: 40) ``window-size=`` Length in milliseconds of the overlap-and-add window. (default: 12) ``rubberband`` High quality pitch correction with librubberband. This can be used in place of ``scaletempo`` and ``scaletempo2``, and will be used to adjust audio pitch when playing at speed different from normal. It can also be used to adjust audio pitch without changing playback speed. ``pitch-scale=`` Sets the pitch scaling factor. Frequencies are multiplied by this value. (default: 1.0) ``engine=`` Select the core Rubberband engine to be used. There are two available: :Faster: This is the Rubberband R2 engine. It uses significantly less CPU than the Finer (R3) engine. :Finer: This is the Rubberband R3 engine. This engine is only available with librubberband version 3 or newer. This produces significantly higher quality output, at the cost of higher CPU usage. (Default if available) This filter has a number of additional sub-options. You can list them with ``mpv --af=rubberband=help``. This will also show the default values for each option. The options are not documented here, because they are merely passed to librubberband. Look at the librubberband documentation to learn what each option does: https://breakfastquay.com/rubberband/code-doc/classRubberBand_1_1RubberBandStretcher.html Do note that certain options are only applicable to one of R2 (faster) and R3 (finer) engines. (The mapping of the mpv rubberband filter sub-option names and values to those of librubberband follows a simple pattern: ``"Option" + Name + Value``.) This filter supports the following ``af-command`` commands: ``set-pitch`` Set the ```` argument dynamically. This can be used to change the playback pitch at runtime. Note that speed is controlled using the standard ``speed`` property, not ``af-command``. ``multiply-pitch `` Multiply the current value of ```` dynamically. ``lavfi=graph`` Filter audio using FFmpeg's libavfilter. ```` Libavfilter graph. See ``lavfi`` video filter for details - the graph syntax is the same. .. warning:: Don't forget to quote libavfilter graphs as described in the lavfi video filter section. ``o=`` AVOptions. ``fix-pts=`` Determine PTS based on sample count (default: no). If this is enabled, the player won't rely on libavfilter passing through PTS accurately. Instead, it pass a sample count as PTS to libavfilter, and compute the PTS used by mpv based on that and the input PTS. This helps with filters which output a recomputed PTS instead of the original PTS (including filters which require the PTS to start at 0). mpv normally expects filters to not touch the PTS (or only to the extent of changing frame boundaries), so this is not the default, but it will be needed to use broken filters. In practice, these broken filters will either cause slow A/V desync over time (with some files), or break playback completely if you seek or start playback from the middle of a file. ``drop`` This filter drops or repeats audio frames to adapt to playback speed. It always operates on full audio frames, because it was made to handle SPDIF (compressed audio passthrough). This is used automatically if the ``--video-sync=display-adrop`` option is used. Do not use this filter (or the given option); they are extremely low quality. mpv-0.40.0/DOCS/man/ao.rst000066400000000000000000000333721477056434700150620ustar00rootroot00000000000000AUDIO OUTPUT DRIVERS ==================== Audio output drivers are interfaces to different audio output facilities. The syntax is: ``--ao=`` Specify a priority list of audio output drivers to be used. If the list has a trailing ',', mpv will fall back on drivers not contained in the list. This is an object settings list option. See `List Options`_ for details. .. note:: See ``--ao=help`` for a list of compiled-in audio output drivers sorted by autoprobe order. Note that the default audio output driver is subject to change, and must not be relied upon. If a certain AO needs to be used, it must be explicitly specified. Available audio output drivers are: ``alsa`` ALSA audio output driver. The following global options are supported by this audio output: ``--alsa-resample=yes`` Enable ALSA resampling plugin. (This is disabled by default, because some drivers report incorrect audio delay in some cases.) ``--alsa-mixer-device=`` Set the mixer device used with ``ao-volume`` (default: ``default``). ``--alsa-mixer-name=`` Set the name of the mixer element (default: ``Master``). This is for example ``PCM`` or ``Master``. ``--alsa-mixer-index=`` Set the index of the mixer channel (default: 0). Consider the output of "``amixer scontrols``", then the index is the number that follows the name of the element. ``--alsa-non-interleaved`` Allow output of non-interleaved formats (if the audio decoder uses this format). Currently disabled by default, because some popular ALSA plugins are utterly broken with non-interleaved formats. ``--alsa-ignore-chmap`` Don't read or set the channel map of the ALSA device - only request the required number of channels, and then pass the audio as-is to it. This option most likely should not be used. It can be useful for debugging, or for static setups with a specially engineered ALSA configuration (in this case you should always force the same layout with ``--audio-channels``, or it will work only for files which use the layout implicit to your ALSA device). ``--alsa-buffer-time=`` Set the requested buffer time in microseconds. A value of 0 skips requesting anything from the ALSA API. This and the ``--alsa-periods`` option uses the ALSA ``near`` functions to set the requested parameters. If doing so results in an empty configuration set, setting these parameters is skipped. Both options control the buffer size. A low buffer size can lead to higher CPU usage and audio dropouts, while a high buffer size can lead to higher latency in volume changes and other filtering. ``--alsa-periods=`` Number of periods requested from the ALSA API. See ``--alsa-buffer-time`` for further remarks. .. warning:: To get multichannel/surround audio, use ``--audio-channels=auto``. The default for this option is ``auto-safe``, which makes this audio output explicitly reject multichannel output, as there is no way to detect whether a certain channel layout is actually supported. You can also try `using the upmix plugin `_. This setup enables multichannel audio on the ``default`` device with automatic upmixing with shared access, so playing stereo and multichannel audio at the same time will work as expected. ``oss`` OSS audio output driver ``jack`` JACK (Jack Audio Connection Kit) audio output driver. The following global options are supported by this audio output: ``--jack-port=`` Connects to the ports with the given name (default: physical ports). ``--jack-name=`` Client name that is passed to JACK (default: ``mpv``). Useful if you want to have certain connections established automatically. ``--jack-autostart=`` Automatically start jackd if necessary (default: disabled). Note that this tends to be unreliable and will flood stdout with server messages. ``--jack-connect=`` Automatically create connections to output ports (default: enabled). When enabled, the maximum number of output channels will be limited to the number of available output ports. ``--jack-std-channel-layout=`` Select the standard channel layout (default: waveext). JACK itself has no notion of channel layouts (i.e. assigning which speaker a given channel is supposed to map to) - it just takes whatever the application outputs, and reroutes it to whatever the user defines. This means the user and the application are in charge of dealing with the channel layout. ``waveext`` uses WAVE_FORMAT_EXTENSIBLE order, which, even though it was defined by Microsoft, is the standard on many systems. The value ``any`` makes JACK accept whatever comes from the audio filter chain, regardless of channel layout and without reordering. This mode is probably not very useful, other than for debugging or when used with fixed setups. ``coreaudio`` (macOS only) Native macOS audio output driver using AudioUnits and the CoreAudio sound server. Automatically redirects to ``coreaudio_exclusive`` when playing compressed formats. The following global options are supported by this audio output: ``--coreaudio-change-physical-format=`` Change the physical format to one similar to the requested audio format (default: no). This has the advantage that multichannel audio output will actually work. The disadvantage is that it will change the system-wide audio settings. This is equivalent to changing the ``Format`` setting in the ``Audio Devices`` dialog in the ``Audio MIDI Setup`` utility. Note that this does not affect the selected speaker setup. ``--coreaudio-spdif-hack=`` Try to pass through AC3/DTS data as PCM. This is useful for drivers which do not report AC3 support. It converts the AC3 data to float, and assumes the driver will do the inverse conversion, which means a typical A/V receiver will pick it up as compressed IEC framed AC3 stream, ignoring that it's marked as PCM. This disables normal AC3 passthrough (even if the device reports it as supported). Use with extreme care. ``coreaudio_exclusive`` (macOS only) Native macOS audio output driver using direct device access and exclusive mode (bypasses the sound server). ``avfoundation`` (macOS only) Native macOS audio output driver using ``AVSampleBufferAudioRenderer`` in AVFoundation, which supports `spatial audio `_. .. warning:: Turning on spatial audio may hang the playback if mpv is not started out of the bundle, though playback with spatial audio off always works. ``audiounit`` (iOS only) Native iOS audio output driver using ``AudioUnits`` and AudioToolbox. ``openal`` OpenAL audio output driver. ``--openal-num-buffers=<2-128>`` Specify the number of audio buffers to use. Lower values are better for lower CPU usage. Default: 4. ``--openal-num-samples=<256-32768>`` Specify the number of complete samples to use for each buffer. Higher values are better for lower CPU usage. Default: 8192. ``--openal-direct-channels=`` Enable OpenAL Soft's direct channel extension when available to avoid tinting the sound with ambisonics or HRTF. Default: yes. ``pulse`` PulseAudio audio output driver The following global options are supported by this audio output: ``--pulse-host=`` Specify the host to use. An empty string uses a local connection, "localhost" uses network transfer (most likely not what you want). ``--pulse-buffer=<1-2000|native>`` Set the audio buffer size in milliseconds. A higher value buffers more data, and has a lower probability of buffer underruns. A smaller value makes the audio stream react faster, e.g. to playback speed changes. "native" lets the sound server determine buffers. ``--pulse-latency-hacks=`` Enable hacks to workaround PulseAudio timing bugs (default: yes). If enabled, mpv will do elaborate latency calculations on its own. If disabled, it will use PulseAudio automatically updated timing information. Disabling this might help with e.g. networked audio or some plugins, while enabling it might help in some unknown situations (it is currently enabled due to known bugs with PulseAudio 16.0). ``--pulse-allow-suspended=`` Allow mpv to use PulseAudio even if the sink is suspended (default: no). Can be useful if PulseAudio is running as a bridge to jack and mpv has its sink-input set to the one jack is using. ``pipewire`` PipeWire audio output driver The following global options are supported by this audio output: ``--pipewire-buffer=<1-2000|native>`` Set the audio buffer size in milliseconds. A higher value buffers more data, and has a lower probability of buffer underruns. A smaller value makes the audio stream react faster, e.g. to playback speed changes. "native" lets the sound server determine buffers. ``--pipewire-remote=`` Specify the PipeWire remote daemon name to connect to via local UNIX sockets. An empty string uses the default remote named ``pipewire-0``. ``--pipewire-volume-mode=`` Specify if the ``ao-volume`` property should apply to the channel volumes or the global volume. By default the channel volumes are used. ``sdl`` SDL 2.0+ audio output driver. Should work on any platform supported by SDL 2.0, but may require the ``SDL_AUDIODRIVER`` environment variable to be set appropriately for your system. .. note:: This driver is for compatibility with extremely foreign environments, such as systems where none of the other drivers are available. The following global options are supported by this audio output: ``--sdl-buflen=`` Sets the audio buffer length in seconds. Is used only as a hint by the sound system. Playing a file with ``-v`` will show the requested and obtained exact buffer size. A value of 0 selects the sound system default. ``null`` Produces no audio output but maintains video playback speed. You can use ``--ao=null --ao-null-untimed`` for benchmarking. The following global options are supported by this audio output: ``--ao-null-untimed`` Do not simulate timing of a perfect audio device. This means audio decoding will go as fast as possible, instead of timing it to the system clock. ``--ao-null-buffer`` Simulated buffer length in seconds. ``--ao-null-outburst`` Simulated chunk size in samples. ``--ao-null-speed`` Simulated audio playback speed as a multiplier. Usually, a real audio device will not go exactly as fast as the system clock. It will deviate just a little, and this option helps to simulate this. ``--ao-null-latency`` Simulated device latency. This is additional to EOF. ``--ao-null-broken-eof`` Simulate broken audio drivers, which always add the fixed device latency to the reported audio playback position. ``--ao-null-broken-delay`` Simulate broken audio drivers, which don't report latency correctly. ``--ao-null-channel-layouts`` If not empty, this is a ``,`` separated list of channel layouts the AO allows. This can be used to test channel layout selection. ``--ao-null-format`` Force the audio output format the AO will accept. If unset accepts any. ``pcm`` Raw PCM/WAVE file writer audio output The following global options are supported by this audio output: ``--ao-pcm-waveheader=`` Include or do not include the WAVE header (default: included). When not included, raw PCM will be generated. ``--ao-pcm-file=`` Write the sound to ```` instead of the default ``audiodump.wav``. If ``no-waveheader`` is specified, the default is ``audiodump.pcm``. ``--ao-pcm-append=`` Append to the file, instead of overwriting it. Always use this with the ``no-waveheader`` option - with ``waveheader`` it's broken, because it will write a WAVE header every time the file is opened. ``sndio`` Audio output to the OpenBSD sndio sound system (Note: only supports mono, stereo, 4.0, 5.1 and 7.1 channel layouts.) ``wasapi`` Audio output to the Windows Audio Session API. The following global options are supported by this audio output: ``--wasapi-exclusive-buffer=`` Set buffer duration in exclusive mode (i.e., with ``--audio-exclusive=yes``). ``default`` and ``min`` use the default and minimum device period reported by WASAPI, respectively. You can also directly specify the buffer duration in microseconds, in which case a duration shorter than the minimum device period will be rounded up to the minimum period. The default buffer duration should provide robust playback in most cases, but reportedly on some devices there are glitches following stream resets under the default setting. In such cases, specifying a shorter duration might help. mpv-0.40.0/DOCS/man/changes.rst000066400000000000000000000014521477056434700160650ustar00rootroot00000000000000CHANGELOG ========= There is no real changelog, but you can look at the following things: * The release changelog, which should contain most user-visible changes, including new features and bug fixes: https://github.com/mpv-player/mpv/releases * The git log, which is the "real" changelog * The file https://github.com/mpv-player/mpv/blob/master/DOCS/interface-changes.rst documents changes to the command and user interface, such as options and properties. * C API changes are listed in https://github.com/mpv-player/mpv/blob/master/DOCS/client-api-changes.rst * The file ``mplayer-changes.rst`` in the ``DOCS`` sub directory on the git repository, which used to be in place of this section. It documents some changes that happened since mplayer2 forked off MPlayer. (Not updated anymore.) mpv-0.40.0/DOCS/man/commands.rst000066400000000000000000000026661477056434700162660ustar00rootroot00000000000000COMMANDS ======== This script allows running and completing input commands in the console interactively, and also adds mpv's log to the console's log. Keybindings ----------- \` Open the console to enter commands. Commands -------- ``script-binding commands/open`` Open the console to enter commands. ``script-message-to commands type []`` Show the console and pre-fill it with the provided text, optionally specifying the initial cursor position as a positive integer starting from 1. The console is automatically closed after running the command. .. admonition:: Examples for input.conf ``% script-message-to commands type "seek absolute-percent" 6`` Enter a percent position to seek to. ``Ctrl+o script-message-to console type "loadfile ''" 11`` Enter a file or URL to play, with autocompletion of paths in the filesystem. Configuration ------------- This script can be customized through a config file ``script-opts/commands.conf`` placed in mpv's user directory and through the ``--script-opts`` command-line option. The configuration syntax is described in `mp.options functions`_. Configurable Options ~~~~~~~~~~~~~~~~~~~~ ``persist_history`` Default: no Whether to save the command history to a file and load it. ``history_path`` Default: ``~~state/command_history.txt`` The file path for ``persist_history`` (see `PATHS`_). mpv-0.40.0/DOCS/man/console.rst000066400000000000000000000117011477056434700161150ustar00rootroot00000000000000CONSOLE ======= This script provides the ability to process the user's textual input to other scripts through the ``mp.input`` API. It can be displayed on both the video window and the terminal. It can be disabled entirely using the ``--load-console=no`` option. Console can either process free-form text or select from a predefined list of items. Free-form text mode keybindings ------------------------------- ESC and Ctrl+[ Hide the console. ENTER, Ctrl+j and Ctrl+m Select the first completion if one wasn't already manually selected, and run the typed command. Shift+ENTER Type a literal newline character. LEFT and Ctrl+b Move the cursor to the previous character. RIGHT and Ctrl+f Move the cursor to the next character. Ctrl+LEFT and Alt+b Move the cursor to the beginning of the current word, or if between words, to the beginning of the previous word. Ctrl+RIGHT and Alt+f Move the cursor to the end of the current word, or if between words, to the end of the next word. HOME and Ctrl+a Move the cursor to the start of the current line. END and Ctrl+e Move the cursor to the end of the current line. BACKSPACE and Ctrl+h Delete the previous character. Ctrl+d Hide the console if the current line is empty, otherwise delete the next character. Ctrl+BACKSPACE and Ctrl+w Delete text from the cursor to the beginning of the current word, or if between words, to the beginning of the previous word. Ctrl+DEL and Alt+d Delete text from the cursor to the end of the current word, or if between words, to the end of the next word. Ctrl+u Delete text from the cursor to the beginning of the current line. Ctrl+k Delete text from the cursor to the end of the current line. Ctrl+c Clear the current line. UP and Ctrl+p Move back in the command history. DOWN and Ctrl+n Move forward in the command history. PGUP Go to the first command in the history. PGDN Stop navigating the command history. Ctrl+r Search the command history. See `SELECT`_ for the key bindings in this mode. INSERT Toggle insert mode. Ctrl+v Paste text (uses the clipboard on X11 and Wayland). Shift+INSERT Paste text (uses the primary selection on X11 and Wayland). TAB and Ctrl+i Cycle through completions. Shift+TAB Cycle through the completions backwards. Ctrl+l Clear all log messages from the console. MBTN_MID Paste text (uses the primary selection on X11 and Wayland). WHEEL_UP Move back in the command history. WHEEL_DOWN Move forward in the command history. Known issues ------------ - Non-ASCII keyboard input has restrictions - The cursor keys move between Unicode code-points, not grapheme clusters Configuration ------------- This script can be customized through a config file ``script-opts/console.conf`` placed in mpv's user directory and through the ``--script-opts`` command-line option. The configuration syntax is described in `mp.options functions`_. Configurable Options ~~~~~~~~~~~~~~~~~~~~ ``font`` The font name. When necessary to align completions in a grid, a monospace font depending on the platform is the default. When there are no completions, ``--osd-font`` is the default. ``font_size`` Default: 24 The font size. This will be multiplied by ``display-hidpi-scale`` when the console is not scaled with the window. ``border_size`` Default: 1.65 The font border size. ``background_alpha`` Default: 80 The transparency of the menu's background. Ranges from 0 (opaque) to 255 (fully transparent). ``padding`` Default: 10 The padding of the menu. ``menu_outline_size`` Default: 0 The size of the menu's border. ``menu_outline_color`` Default: #FFFFFF The color of the menu's border. ``corner_radius`` Default: 8 The radius of the menu's corners. ``margin_x`` Default: same as ``--osd-margin-x`` The margin from the left of the window. ``margin_y`` Default: same as ``--osd-margin-y`` The margin from the bottom of the window. ``scale_with_window`` Default: ``auto`` Whether to scale the console with the window height. Can be ``yes``, ``no``, or ``auto``, which follows the value of ``--osd-scale-by-window``. ``selected_color`` Default: ``#222222`` The color of the selected item. ``selected_back_color`` Default: ``#FFFFFF`` The background color of the selected item. ``match_color`` Default: ``#0088FF`` The color of characters that match the searched string. ``case_sensitive`` Default: no on Windows, yes on other platforms. Whether autocompletion is case sensitive. Only works with ASCII characters. ``history_dedup`` Default: true Remove duplicate entries in history as to only keep the latest one. ``font_hw_ratio`` Default: auto The ratio of font height to font width. Adjusts grid width of completions. Values in the range 1.8..2.5 make sense for common monospace fonts. mpv-0.40.0/DOCS/man/encode.rst000066400000000000000000000071261477056434700157160ustar00rootroot00000000000000ENCODING ======== You can encode files from one format/codec to another using this facility. ``--o=`` Enables encoding mode and specifies the output file name. ``--of=`` Specifies the output format (overrides autodetection by the file name extension of the file specified by ``--o``). See ``--of=help`` for a full list of supported formats. ``--ofopts=`` Specifies the output format options for libavformat. See ``--ofopts=help`` for a full list of supported options. This is a key/value list option. See `List Options`_ for details. ``--ofopts-add=