#
SwitchWave
A hardware-accelerated media player for the Nintendo Switch, built on mpv and FFmpeg.
## Features
- Custom hardware acceleration backend for FFmpeg, with dynamic frequency scaling. The following codecs can be decoded:
- MPEG1/2/4
- VC1
- H.264/AVC (10+ bit not supported by hardware)
- H.265/HEVC (12+ bit not supported by hardware)
- VP8
- VP9 (10+ bit not supported by hardware)
- Custom graphics backend for mpv using [deko3d](https://github.com/devkitPro/deko3d), supporting:
- Playback at 4k60fps
- Direct rendering (faster software decoding)
- Custom post-processing shaders
- Custom audio backend for mpv using native Nintendo APIs, supporting layouts up to 5.1 surround
- Network playback through HTTP/S, Samba, NFS or SFTP
- External drive support using [libusbhsfs](https://github.com/DarkMatterCore/libusbhsfs)
- Rich and responsive user interface, even under load
## Screenshots
## Setup
- Download the [latest release](https://github.com/averne/SwitchWave/releases/latest), and extract it to the root of your sd card (be careful to merge and not overwrite folders)
- Network shares can be configured through the app, as can mpv settings via the built-in editor (refer to the [manual](https://mpv.io/manual/master/))
- Most relevant runtime parameters can be dynamically adjusted during playback through the menu, or failing that, the console ([manual](https://mpv.io/manual/master/#console))
## Building
### Docker (recommended)
```sh
./build-docker.sh
```
This builds the toolchain image and compiles everything automatically. Output will be found in `build/`.
To build with GIMP 3 instead of the default GIMP 2:
```sh
GIMP_VERSION=3 ./build-docker.sh
```
### Manual
- Set up a [devkitpro](https://devkitpro.org/wiki/devkitPro_pacman) environment for Switch homebrew development.
- Install the following packages: `switch-bzip2`, `switch-dav1d`, `switch-freetype`, `switch-glm`, `switch-harfbuzz`, `switch-libarchive`, `switch-libass`, `switch-libfribidi`, `switch-libjpeg-turbo`, `switch-libpng`, `switch-libwebp`, `switch-curl`, `switch-libssh2`, `switch-mbedtls`, `switch-ntfs-3g` and `switch-lwext4`. In addition, the following build dependencies are required: `switch-pkg-config`, `dkp-meson-scripts`, `dkp-toolchain-vars`, and [GIMP](https://www.gimp.org/) (2 or 3).
- Compile and install a GPL build of [libusbhsfs](https://github.com/DarkMatterCore/libusbhsfs).
- Compile and install [libsmb2](misc/libsmb2/) and [libnfs](misc/libnfs/).
- Configure, compile and install FFmpeg: `make configure-ffmpeg && make build-ffmpeg -j$(nproc)`.
- Configure, compile and install libuam: `make configure-uam && make build-uam`.
- Configure, compile and install mpv: `make configure-mpv && make build-mpv`.
- Finally, compile the main application and build the release distribution: `make dist -j$(nproc)`.
- Output will be found in `build/`.
## Credits
- [Behemoth](https://github.com/HookedBehemoth) for the screenshot button overriding method.