Cros-codecs Extended
A lightweight, simple, low-dependency, and hopefully safe crate for hardware-accelerated video decoding and encoding on Linux.
Fork provenance
The cros-codecs-extended package is published from Discord's
discord-0.0.5 fork of cros-codecs. It keeps Discord's VA-API packed
header and native surface changes for consumers that cannot use a Git
dependency. Its VA-API feature uses the matching cros-libva-extended
package. The original ChromiumOS and Discord copyright and license notices are
preserved.
It is developed for use in ChromeOS (particularly crosvm), but has no dependency to ChromeOS and should be usable anywhere.
Current features
- Simple decoder API,
- VAAPI decoder support (using cros-libva) for H.264, H.265, VP8, VP9 and AV1,
- VAAPI encoder support for H.264, VP9 and AV1,
- Stateful V4L2 encoder support.
Planned features
- Stateful V4L2 decoder support,
- Stateless V4L2 decoder support,
- Support for more encoder codecs,
- C API to be used in non-Rust projects.
Non-goals
- Support for systems other than Linux.
Example programs
The ccdec example program can decode an encoded stream and write the decoded
frames to a file. As such it can be used for testing purposes.
$ cargo build --examples
$ ./target/debug/examples/ccdec --help
Usage: ccdec <input> [--output <output>] --input-format <input-format> [--output-format <output-format>] [--compute-md5 <compute-md5>]
Simple player using cros-codecs
Positional Arguments:
input input file
Options:
--output output file to write the decoded frames to
--input-format input format to decode from.
--output-format pixel format to decode into. Default: i420
--compute-md5 whether to display the MD5 of the decoded stream, and at
which granularity (stream or frame)
--help display usage information
Testing
Fluster can be used for testing, using the ccdec example program described
above. This branch
contains support for cros-codecs testing. Just make sure the ccdec binary is
in your PATH, and run Fluster using one of the ccdec decoders, e.g.
python fluster.py run -d ccdec-H.264 -ts JVT-AVC_V1
Credits
The majority of the code in the initial commit has been written by Daniel Almeida as a VAAPI backend for crosvm, before being split into this crate.