| # AVIF-info |
| |
| **libavifinfo** is a standalone library that can be used to extract the width, |
| height, bit depth, number of channels and other metadata from an AVIF payload. |
| |
| See `avifinfo.h` for details on the API and `avifinfo.c` for the implementation. |
| See `tests/avifinfo_demo.cc` for API usage examples. |
| |
| ## How to use |
| |
| **libavifinfo** can be used when only a few AVIF features are needed and when |
| linking to or including [libavif](https://github.com/AOMediaCodec/libavif) is |
| not an option. For decoding an image or extracting more features, please rely on |
| [libavif](https://github.com/AOMediaCodec/libavif). |
| |
| Note: The C implementation `AvifInfoGetFeatures()` is designed to return the |
| same `avifImage` field values as |
| [`avifDecoderParse()`](https://github.com/AOMediaCodec/libavif/blob/e34204f5370509c72b3b2f065e5ebb2767cbbd48/include/avif/avif.h#L1049). |
| However **libavifinfo** is often more permissive and may return features of |
| images considered invalid by **libavif**. |
| |
| ## C implementation |
| |
| ### Coding style |
| |
| [Google C/C++ Style Guide](https://google.github.io/styleguide/cppguide.html) is |
| used in this project. |
| |
| ### Build |
| |
| `avifinfo.c` is written in C. To build from this directory: |
| |
| ```sh |
| cmake -S . -B build && \ |
| cmake --build build --config Release |
| ``` |
| |
| ### Test |
| |
| GoogleTest is required for the C++ tests (e.g. `sudo apt install libgtest-dev`). |
| |
| ```sh |
| cmake -S . -B build -DAVIFINFO_BUILD_TESTS=ON && \ |
| cmake --build build --config Debug && \ |
| ctest --test-dir build build |
| ``` |
| |
| ## PHP implementation |
| |
| The PHP implementation of libavifinfo is a subset of the C API. |
| |
| `libavifinfo` was [implemented](https://github.com/php/php-src/pull/7711) into |
| **php-src** natively and is available through `getimagesize()` at head. If it is |
| not available in the PHP release version you use, you can fallback to |
| `avifinfo.php` instead. |
| |
| See `tests/avifinfo_test.php` for a usage example. |
| |
| ### PHP test |
| |
| ```sh |
| cd tests && \ |
| php avifinfo_test.php |
| ``` |
| |
| ## Development |
| |
| ### Submitting patches {#submitting-patches} |
| |
| If you would like to contribute to **libavifinfo**, please follow the steps for |
| **libaom** at https://aomedia.googlesource.com/aom/#submitting-patches. Summary: |
| |
| - Log in at https://aomedia.googlesource.com |
| - Sign in at https://aomedia-review.googlesource.com |
| - Execute the contributor agreement if necessary, see http://aomedia.org/license |
| - Test all implementations as described in this document |
| - Copy the commit message hook: |
| `cd libavifinfo && curl -Lo .git/hooks/commit-msg https://chromium-review.googlesource.com/tools/hooks/commit-msg && chmod u+x .git/hooks/commit-msg` |
| - Create a commit |
| - `git push https://aomedia.googlesource.com/libavifinfo/ HEAD:refs/for/main` |
| - Request a review from a project maintainer |
| |
| ## Known users of libavifinfo |
| |
| - [Chromium](https://source.chromium.org/chromium/chromium/src/+/main:third_party/libavifinfo) |
| uses the C impl to extract the gain map item for HDR tone mapping. |
| - [PHP-src](https://github.com/php/php-src/tree/master/ext/standard/libavifinfo) |
| uses the C impl to parse image features without relying on libavif or libheif. |
| - [WordPress](https://github.com/WordPress/wordpress-develop/blob/trunk/src/wp-includes/class-avif-info.php) |
| uses the PHP impl to support AVIF images with older versions of PHP. |
| |
| ## Bug reports |
| |
| Bug reports can be filed in the Alliance for Open Media |
| [issue tracker](https://bugs.chromium.org/p/aomedia/issues/list). |