该库旨在成为 AV1 图像文件格式的友好、可移植的 C 实现,如下所述:
https://aomediacodec.github.io/av1-avif/
它可以编码和解码所有 AV1 支持的 YUV 格式和位深度(带 alpha)。
建议您检查/使用标记版本,而不是仅使用主分支。随着错误修复和功能添加,我们将定期创建新版本。
请参阅“examples”目录中的示例。如果您已经在构建libavif
,请启用 CMake 选项AVIF_BUILD_EXAMPLES
以便也构建并运行示例。
libavif
是大多数主要操作系统中的软件包。
vcpkg install libavif
您还可以在发布页面下载官方 Windows 二进制文件。
自制:
brew install libavif
Mac 端口:
sudo port install libavif
基于 Debian 的发行版:
sudo apt install libavif-dev
基于 Red Hat 的发行版:
sudo yum -y install libavif
对于“默认”MSYS2 UCRT64 环境:
pacman -S mingw-w64-ucrt-x86_64-libavif
构建 libavif 需要 CMake。
默认情况下不启用任何 AV1 编解码器。无论您想要使用本地构建的版本还是系统安装的版本(例如-DAVIF_CODEC_AOM=LOCAL
),都可以通过将以下任何 CMake 选项设置为LOCAL
或SYSTEM
来启用它们:
AVIF_CODEC_AOM
用于 libaom(编码器和解码器)AVIF_CODEC_DAV1D
用于 dav1d(解码器)AVIF_CODEC_LIBGAV1
用于 libgav1(解码器)AVIF_CODEC_RAV1E
用于 rav1e(编码器)AVIF_CODEC_SVT
用于 SVT-AV1(编码器)当设置为SYSTEM
时,这些库(以其 C API 形式)必须在外部可用(可通过 CMake 的FIND_LIBRARY
发现)才能使用它们,或者如果 libavif 是子 CMake 项目,则在 libavif 的 CMake 脚本时,相应的 CMake 目标必须已存在被处决。
当设置为LOCAL
时,这些库和其他依赖项将由 CMake 在本地拉取到已知良好的版本。
要覆盖本地依赖项版本或使用依赖项的自定义构建,请首先运行ext/
子目录中的关联脚本。
可以通过启用AVIF_BUILD_TESTS
CMake 选项来构建一些用 C 编写的测试。
其余测试可以通过启用AVIF_BUILD_TESTS
和AVIF_ENABLE_GTEST
CMake 选项来构建。它们需要 GoogleTest( -DAVIF_GTEST=SYSTEM
或-DAVIF_GTEST=LOCAL
)。
以下说明可用于构建 libavif 库以及avifenc
和avifdec
工具。
要链接到已安装的aom
、 libjpeg
和libpng
依赖库(推荐):
git clone -b v1.1.1 https://github.com/AOMediaCodec/libavif.git
cmake -S libavif -B libavif/build -DAVIF_CODEC_AOM=SYSTEM -DAVIF_BUILD_APPS=ON
cmake --build libavif/build --parallel
用于开发和调试目的,或生成完全静态的二进制文件:
git clone -b v1.1.1 https://github.com/AOMediaCodec/libavif.git
cmake -S libavif -B libavif/build -DBUILD_SHARED_LIBS=OFF -DAVIF_CODEC_AOM=LOCAL -DAVIF_LIBYUV=LOCAL -DAVIF_LIBSHARPYUV=LOCAL -DAVIF_JPEG=LOCAL -DAVIF_ZLIBPNG=LOCAL -DAVIF_BUILD_APPS=ON -DCMAKE_C_FLAGS_RELEASE= " -static " -DCMAKE_EXE_LINKER_FLAGS= " -static "
cmake --build libavif/build --parallel
静态链接的avifenc.exe
和avifdec.exe
可以从发布页面下载。
请检查 wiki 以获取有关 libavif 的额外资源,例如发布清单。
libavif 库是用 C99 编写的。大多数测试都是用 C++14 编写的。
使用 clang-format 格式化顶级文件夹中的源(首选clang-format-16
):
clang-format -style=file -i
apps/ * .c apps/ * / * .c apps/ * / * .cc apps/ * / * .h examples/ * .c
include/avif/ * .h src/ * .c src/ * .cc
tests/ * .c tests/ * / * .cc tests/ * / * .h
使用 cmake-format 格式化顶级文件夹中的 CMakeLists.txt 文件:
cmake-format -i
CMakeLists.txt
tests/CMakeLists.txt
cmake/Modules/ * .cmake
contrib/CMakeLists.txt
contrib/gdk-pixbuf/CMakeLists.txt
android_jni/avifandroidjni/src/main/jni/CMakeLists.txt
根据 BSD 许可证发布。
Copyright 2019 Joe Drago. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1 . Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2 . Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.