Esta biblioteca pretende ser uma implementação C amigável e portátil do formato de arquivo de imagem AV1, conforme descrito aqui:
https://aomediacodec.github.io/av1-avif/
Ele pode codificar e decodificar todos os formatos YUV e profundidades de bits suportados por AV1 (com alfa).
É recomendado que você verifique/use lançamentos marcados em vez de usar apenas o branch principal. Criaremos regularmente novas versões à medida que correções de bugs e recursos forem adicionados.
Por favor, veja os exemplos no diretório "exemplos". Se você já estiver compilando libavif
, habilite a opção AVIF_BUILD_EXAMPLES
do CMake para compilar e executar os exemplos também.
libavif
é um pacote na maioria dos principais sistemas operacionais.
vcpkg install libavif
Você também pode baixar os binários oficiais do Windows na página de lançamento.
Preparação caseira:
brew install libavif
MacPorts:
sudo port install libavif
Distribuições baseadas em Debian:
sudo apt install libavif-dev
Distribuições baseadas em Red Hat:
sudo yum -y install libavif
Para o ambiente MSYS2 UCRT64 "padrão":
pacman -S mingw-w64-ucrt-x86_64-libavif
Construir o libavif requer CMake.
Nenhum codec AV1 está habilitado por padrão. Habilite-os definindo qualquer uma das seguintes opções do CMake como LOCAL
ou SYSTEM
se você deseja usar uma versão construída localmente ou uma versão instalada pelo sistema (por exemplo, -DAVIF_CODEC_AOM=LOCAL
):
AVIF_CODEC_AOM
para libaom (codificador e decodificador)AVIF_CODEC_DAV1D
para dav1d (decodificador)AVIF_CODEC_LIBGAV1
para libgav1 (decodificador)AVIF_CODEC_RAV1E
para rav1e (codificador)AVIF_CODEC_SVT
para SVT-AV1 (codificador) Quando definidas como SYSTEM
, essas bibliotecas (em seu formato API C) devem estar disponíveis externamente (detectáveis por meio de FIND_LIBRARY
do CMake) para usá-las ou, se libavif for um projeto filho do CMake, o destino CMake apropriado já deve existir no momento em que os scripts CMake do libavif são executados.
Quando definidas como LOCAL
, essas bibliotecas e outras dependências serão extraídas localmente pelo CMake para versões em boas condições.
Para substituir uma versão de dependência local ou usar uma construção customizada de uma dependência, primeiro execute o script associado no subdiretório ext/
.
Alguns testes escritos em C podem ser criados ativando a opção AVIF_BUILD_TESTS
CMake.
Os testes restantes podem ser construídos habilitando as opções AVIF_BUILD_TESTS
e AVIF_ENABLE_GTEST
CMake. Eles exigem GoogleTest ( -DAVIF_GTEST=SYSTEM
ou -DAVIF_GTEST=LOCAL
).
As instruções a seguir podem ser usadas para construir a biblioteca libavif e as ferramentas avifenc
e avifdec
.
Para vincular às bibliotecas de dependência aom
, libjpeg
e libpng
já instaladas (recomendado):
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
Para fins de desenvolvimento e depuração ou para gerar binários totalmente estáticos:
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
e avifdec.exe
vinculados estaticamente podem ser baixados na página Releases.
Por favor, verifique o wiki para recursos extras sobre libavif, como a Lista de Verificação de Lançamento.
A biblioteca libavif está escrita em C99. A maioria dos testes é escrita em C++14.
Use clang-format para formatar as fontes da pasta de nível superior (de preferência 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
Use cmake-format para formatar os arquivos CMakeLists.txt da pasta de nível superior:
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
Lançado sob a licença 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.