mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2025-02-09 03:57:24 +00:00
aa4c70e3da
Update the ffmpeg bindings and build script to use 5.0 and update our code to match the API changes since 4.4. BUG=None TEST=cargo test -p ffmpeg TEST=cargo test --features "video-decoder,ffmpeg" -p devices video TEST=v4l2r example from the crosvm book passses. Change-Id: If7820a4dd270d715e89c60d55f89b9730f40e864 Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/3835501 Reviewed-by: Tatsuyuki Ishi <ishitatsuyuki@google.com> Tested-by: Alexandre Courbot <acourbot@chromium.org> Reviewed-by: Dennis Kempin <denniskempin@google.com> Commit-Queue: Alexandre Courbot <acourbot@chromium.org> Reviewed-by: Takaya Saeki <takayas@chromium.org> Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
24 lines
1.3 KiB
Markdown
24 lines
1.3 KiB
Markdown
# FFmpeg wrapper
|
|
|
|
This is a minimal FFmpeg 5.0 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.
|