README.md 4.3 KB
Newer Older
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
1 2
# dav1d

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
3
**dav1d** is a new **AV1** cross-platform **d**ecoder, open-source, and focused on speed and correctness.
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
4 5 6

The canonical repository URL for this repo is https://code.videolan.org/videolan/dav1d

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
7 8
This project is partially funded by the *Alliance for Open Media*/**AOM**.

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
9 10
## Goal and Features

11
The goal of this project is to provide a decoder for **most platforms**, and achieve the **highest speed** possible to overcome the temporary lack of AV1 hardware decoder.
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
12

13
It supports all features from AV1, including all subsampling and bit-depth parameters.
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
14 15 16 17 18

In the future, this project will host simple tools or simple wrappings *(like, for example, an MFT transform)*.

## License

19
**dav1d** is released under a very liberal license, a contrario from the other VideoLAN projects, so that it can be embedded anywhere, including non-open-source software; or even drivers, to allow the creation of hybrid decoders.
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
20

21
The reasoning behind this decision is the same as for libvorbis, see [RMS on vorbis](https://lwn.net/2001/0301/a/rms-ov-license.php3).
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
22 23 24 25 26

# Roadmap

The plan is the folllowing:

27
### Reached
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
28 29 30
1. Complete C implementation of the decoder,
2. Provide a usable API,
3. Port to most platforms,
31
4. Make it fast on desktop, by writing asm for AVX-2 chips.
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
32

33 34 35 36 37
### On-going
5. Make it fast on mobile, by writing asm for ARMv8 chips,
6. Make it fast on older desktop, by writing asm for SSE chips.

### After
38
7. Improve C code base with [various tweaks](https://code.videolan.org/videolan/dav1d/wikis/task-list),
39 40
8. Accelerate for less common architectures,
9. Use more GPU, when possible.
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
41 42 43 44 45 46

# Contribute

Currently, we are looking for help from:
- C developers,
- asm developers,
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
47
- platform-specific developers,
48
- GPGPU developers,
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
49
- testers.
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
50

51
Our contributions guidelines are quite strict. We want to build a coherent codebase to simplify maintenance and achieve the highest possible speed.
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
52 53 54 55 56 57 58 59 60 61 62

Notably, the codebase is in pure C and asm.

We are on IRC, on the **#dav1d** channel on *Freenode*.

See the [contributions document](CONTRIBUTING.md).

## CLA

There is no CLA.

63
People will keep their copyright and their authorship rights, while adhering to the BSD 2-clause license.
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
64 65 66 67 68 69 70 71 72

VideoLAN will only have the collective work rights.

## CoC

The [VideoLAN Code of Conduct](https://wiki.videolan.org/CoC) applies to this project.

# Compile

73
1. Install [Meson](https://mesonbuild.com/) (0.47 or higher), [Ninja](https://ninja-build.org/), and, for x86\* targets, [nasm](https://nasm.us/) (2.13.02 or higher)
Thomas Daede's avatar
Thomas Daede committed
74
2. Run `meson build --buildtype release`
Marvin Scholz's avatar
Marvin Scholz committed
75
3. Build with `ninja -C build`
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
76

77 78 79 80 81 82 83 84 85
# Run tests

1. During initial build dir setup or `meson configure` specify `-Dbuild_tests=true`
2. In the build directory run `meson test` optionally with `-v` for more verbose output, especially useful
   for checkasm

# Run testdata based tests

1. Checkout the test data repository
86

87 88 89 90
   ```
   git clone https://code.videolan.org/videolan/dav1d-test-data.git tests/dav1d-test-data
   ```
2. During initial build dir setup or `meson configure` specify `-Dbuild_tests=true` and `-Dtestdata_tests=true`
91 92 93 94

   ```
   meson .test -Dbuild_tests=true -Dtestdata_tests=true
   ```
95 96
3. In the build directory run `meson test` optionally with `-v` for more verbose output

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
97 98 99 100
# Support

This project is partially funded by the *Alliance for Open Media*/**AOM** and is supported by TwoOrioles and VideoLabs.

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
101
These companies can provide support and integration help, should you need it.
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
102 103 104 105 106 107


# FAQ

## Why do you not improve libaom rather than starting a new project?

108
- We believe that libaom is a very good library. It was however developed for research purposes during AV1 design.
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
We think that an implementation written from scratch can achieve faster decoding, in the same way that *ffvp9* was faster than *libvpx*.

## Is dav1d a recursive acronym?

- Yes.

## Can I help?

- Yes. See the [contributions document](CONTRIBUTING.md).

## I am not a developer. Can I help?

- Yes. We need testers, bug reporters, and documentation writers.

## What about the AV1 patent license?

125
- This project is an implementation of a decoder. It gives you no special rights on the AV1 patents.
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
126 127

Please read the [AV1 patent license](doc/PATENTS) that applies to the AV1 specification and codec.
128 129 130 131 132

## Will you care about <my_arch>? <my_os>?

- We do, but we don't have either the time or the knowledge. Therefore, patches and contributions welcome.