mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2025-02-05 02:02:52 +00:00
25 lines
1.3 KiB
Markdown
25 lines
1.3 KiB
Markdown
|
# FFmpeg wrapper
|
||
|
|
||
|
This is a minimal FFmpeg 4.4 wrapper for use with the virtio-video device, allowing to run a virtual
|
||
|
video device backed by software decoding or encoding. This is useful for development and testing in
|
||
|
situations where no supported video acceleration is available on the host.
|
||
|
|
||
|
Although several FFmpeg binding crates exist, most of them are not able to link against the system
|
||
|
FFmpeg, and [the only one that does](https://crates.io/crates/ffmpeg-sys) is released under a
|
||
|
software license that makes our lawyers nervous. Also they all run bindgen at build time, which is
|
||
|
not possible to do under the Chrome OS build system and would require to patch the crate with fully
|
||
|
generated bindings.
|
||
|
|
||
|
So taking this in consideration, as well as the extra work that it is to depend on external Rust
|
||
|
crates in Chrome OS, it is preferable to add our own simple bindings here that cover just the parts
|
||
|
of FFmpeg that we need.
|
||
|
|
||
|
This crate has minimal dependencies ; on the FFmpeg side, it just uses `libavcodec`, `libavutil` and
|
||
|
`libswscale`.
|
||
|
|
||
|
The bindings can be updated using the `bindgen.sh` script. A few elements that bindgen cannot
|
||
|
generate because they are behind C macros are re-defined in `avutil.rs` and `error.rs`, as well as
|
||
|
tests to ensure their correctness.
|
||
|
|
||
|
And that's about it.
|