crosvm/media/libva
Daniel Almeida 5ede18b6f7 media: libva: take ownership of SegmentParamVP9 in the wrapper
It's not ergonomic for the calling code to pass in an array of
references.

Just take ownership of that array, as it's not going to be used again
when the calling code succeeds in creating the wrapper.

BUG=b:214478588
TEST="cargo build --features=video-decoder,vaapi" successfully builds
the libva crate

Change-Id: I97d91f9f996c298450e65c21c126a9739ec4615f
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/3900314
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
2022-10-12 12:55:23 +00:00
..
src media: libva: take ownership of SegmentParamVP9 in the wrapper 2022-10-12 12:55:23 +00:00
bindgen.sh health-check: enforce blank line after copyright 2022-09-13 22:24:35 +00:00
build.rs Update all copyright headers to match new style 2022-09-13 18:41:29 +00:00
Cargo.toml Reland "Add a VAAPI wrapper crate" 2022-07-13 06:51:27 +00:00
libva-wrapper.h Update all copyright headers to match new style 2022-09-13 18:41:29 +00:00
README.md Reland "Add a VAAPI wrapper crate" 2022-07-13 06:51:27 +00:00

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 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, whereas AMD hardware will depend on 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.

For a brief introduction on how to use this crate, see the libva_utils_mpeg2vldemo test under src/lib.rs.