• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..--

.github/workflows/25-Apr-2025-4439

android/25-Apr-2025-7352

lib/25-Apr-2025-7,4165,942

.gitignoreD25-Apr-202520 32

Android.bpD25-Apr-2025334 119

CONTRIBUTING.mdD25-Apr-20251.1 KiB3422

Cargo.tomlD25-Apr-202587 75

LICENSED25-Apr-20251.4 KiB2721

METADATAD25-Apr-2025551 1917

MODULE_LICENSE_BSDD25-Apr-20250

OWNERSD25-Apr-202545 21

README.mdD25-Apr-20253 KiB8464

cargo_embargo.jsonD25-Apr-2025161 109

README.md

1# Libva Rust Wrapper
2
3This crate provides lightweight and (hopefully) safe libva abstractions for use
4within Rust code with minimal dependencies. It is developed for use in
5ChromeOS, but has no ChromeOS specifics or dependencies and should thus be
6usable anywhere.
7
8## Dependencies
9
10The native [libva](https://github.com/intel/libva) library is required at link
11time, so make sure to have the `libva-dev` or equivalent package for your
12distribution installed. The compatible libva version is 1.22.0. The VA-API
13driver corresponding to your hardware is also required: for Intel hardware it
14will be [intel-media-driver](https://github.com/intel/media-driver), whereas AMD
15hardware relies on [Mesa](https://gitlab.freedesktop.org/mesa/mesa).
16
17An easy way to see whether everything is in order is to run the `vainfo`
18utility packaged with `libva-utils` or as a standalone package in some
19distributions. `vainfo` will print the VA-API version, driver string, and a
20list of supported profiles and endpoints, i.e.:
21
22```
23vainfo: VA-API version: 1.13 (libva 2.13.0)
24vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 22.2.2 ()
25vainfo: Supported profile and entrypoints
26      VAProfileNone                   : VAEntrypointVideoProc
27      VAProfileNone                   : VAEntrypointStats
28      VAProfileMPEG2Simple            : VAEntrypointVLD
29      VAProfileMPEG2Simple            : VAEntrypointEncSlice
30      VAProfileMPEG2Main              : VAEntrypointVLD
31      VAProfileMPEG2Main              : VAEntrypointEncSlice
32      VAProfileH264Main               : VAEntrypointVLD
33      etc
34```
35
36For decoding, the desired profile must be supported under `VAEntrypointVLD`.
37For example, in order to decode VP8 media, this line must be present in the
38output of `vainfo`:
39
40```
41      VAProfileVP8Version0_3          : VAEntrypointVLD
42```
43
44Whereas to decode H264 Main profile media, this line must be present:
45
46```
47      VAProfileH264Main               : VAEntrypointVLD
48```
49
50For more information on VA-API and its usage within ChromeOS, see [this
51guide](https://chromium.googlesource.com/chromium/src/+/master/docs/gpu/vaapi.md).
52
53cros-libva can also be built in Android. Android.bp files are provided that
54should work on AOSP >= 15. Just check this repository into
55external/rust/crates/cros-libva and the libcros_libva library target will be
56 available.
57
58## Using
59
60The name of this crate is `cros-libva` to highlight the fact that it originates
61from ChromeOS and it not an official bindings. For ease of use, it is
62recommended to rename it to just `libva` in your project by using the following
63line in your `Cargo.toml`:
64
65```
66libva = { package = "cros-libva", version = "0.0.1" }
67```
68
69## Testing
70
71For a brief introduction on how to use this crate, see the
72`libva_utils_mpeg2vldemo` test under `src/lib.rs`. You can also quickly test
73MPEG2 decoding by running it:
74
75```
76cargo test -- --ignored libva_utils_mpeg2vldemo
77```
78
79## Credits
80
81The first version of this crate was written by Daniel Almeida and hosted in the
82[crosvm repository](https://chromium.googlesource.com/crosvm/crosvm/) before
83being split.
84