mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2025-02-08 19:33:07 +00:00
This is a reland of commit 213f9fe8a7
.
In light of the upcoming VAAPI video decoder backend, add a VAAPI
wrapper crate that exposes a safe Rust API for a subset of the VAAPI C
code. This crate will be called from the VAAPI video decoder backend in
order to decode frames.
BUG=b:214478588
TEST=cargo build --features "video-decoder,vaapi"
TEST=`cargo test -- --include-ignored` in `media/libva` passes on a
device with Intel GPU and libva installed.
Change-Id: I586a160e477e466985c5cfa65a527542ddc03226
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3752274
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
52 lines
2.3 KiB
Markdown
52 lines
2.3 KiB
Markdown
# Libva Rust wrapper
|
|
|
|
Rust wrapper for libva. Provides safe libva abstractions for use within Rust code using its own
|
|
bindgen-generated bindings.
|
|
|
|
This crate is used as part of the VirtIO Video VA-API backend. VA-API uses the GPU to perform the
|
|
actual decoding/encoding of frames. In doing so, it frees the CPU for other uses and reduces power
|
|
usage in the system. Hardware accelerated media workflows also tend to be faster than their software
|
|
counterparts.
|
|
|
|
Note: This create requires the native [libva](https://github.com/intel/libva) library at link time.
|
|
It also requires a VA-API driver to be installed on the system. The VA-API driver to use depends on
|
|
the underlying hardware, e.g.: the implementation for Intel hardware is in
|
|
[intel-media-driver](https://github.com/intel/media-driver), whereas AMD hardware will depend on
|
|
[Mesa](https://gitlab.freedesktop.org/mesa/mesa).
|
|
|
|
An easy way to see whether everything is in order is to run the `vainfo` utility. This is usually
|
|
packaged with `libva-utils` or as a standalone package in some distributions. `vainfo` will print
|
|
the VA-API version, the driver string, and a list of supported profiles and endpoints, i.e.:
|
|
|
|
```
|
|
vainfo: VA-API version: 1.13 (libva 2.13.0)
|
|
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 22.2.2 ()
|
|
vainfo: Supported profile and entrypoints
|
|
VAProfileNone : VAEntrypointVideoProc
|
|
VAProfileNone : VAEntrypointStats
|
|
VAProfileMPEG2Simple : VAEntrypointVLD
|
|
VAProfileMPEG2Simple : VAEntrypointEncSlice
|
|
VAProfileMPEG2Main : VAEntrypointVLD
|
|
VAProfileMPEG2Main : VAEntrypointEncSlice
|
|
VAProfileH264Main : VAEntrypointVLD
|
|
etc
|
|
```
|
|
|
|
For decoding, the desired profile must be supported under `VAEntrypointVLD`. For example, in order
|
|
to decode VP8 media, this line must be present in the output of `vainfo`:
|
|
|
|
```
|
|
VAProfileVP8Version0_3 : VAEntrypointVLD
|
|
```
|
|
|
|
Whereas to decode H264 Main profile media, this line must be present:
|
|
|
|
```
|
|
VAProfileH264Main : VAEntrypointVLD
|
|
```
|
|
|
|
For more information on VA-API and its usage within ChromeOS, see
|
|
[this guide](https://chromium.googlesource.com/chromium/src/+/master/docs/gpu/vaapi.md).
|
|
|
|
For a brief introduction on how to use this crate, see the `libva_utils_mpeg2vldemo` test under
|
|
src/lib.rs.
|