Opublikowano wydanie biblioteki SVT-AV1 2.0 (Scalable Video Technology AV1) z implementacjami kodera i dekodera formatu kodowania wideo AV1, do przyspieszenia którego wykorzystywane są dostępne w nowoczesnych procesorach Intel środki sprzętowego przetwarzania równoległego. Projekt został stworzony przez firmę Intel we współpracy z Netflix w celu osiągnięcia poziomu wydajności odpowiedniego do transkodowania wideo w czasie rzeczywistym oraz stosowania w serwisach oferujących wideo na żądanie (VOD). Obecnie rozwój przebiega pod egidą sojuszu Open Media (AOMedia), który nadzoruje rozwój formatu kodowania wideo AV1. Wcześniej projekt rozwijał się w ramach projektu OpenVisualCloud, który również opracowuje kodery SVT-HEVC i SVT-VP9. Kod jest udostępniany na licencji BSD.
SVT-AV1 może być kompilowany dla systemów opartych na różnych architekturach, dla których dostępny jest kompilator wspierający standard C99, ale najlepsza wydajność osiągana jest na systemach x86_64, gdzie stosowane są optymalizacje assemblerowe oparte na instrukcjach SIMD (zaleca się wsparcie AVX2 w CPU, choć minimum to SS2). Zużycie pamięci zależy od liczby rdzeni procesora używanych w procesie kodowania, regulowanych opcją "--lp". Ze względu na skomplikowanie algorytmów stosowanych w AV1, do kodowania w tym formacie potrzebne są znacznie większe zasoby niż w przypadku innych formatów, co uniemożliwia wykorzystanie domyślnego kodera AV1 do transkodowania w czasie rzeczywistym. Na przykład domyślny koder projektu AV1 wymaga 5721, 5869 i 658 razy większej mocy obliczeniowej w porównaniu do koderów x264 (profil "main"), x264 (profil "high") i libvpx-vp9.
Wśród zmian w nowym wydaniu SVT-AV1:
- Zaimplementowano nową numerację wersji, w której pierwsza cyfra wersji będzie się zmieniać przy każdej zmianie API/ABI.
- Wprowadzono zmiany w API związane z przejściem na sygnalizację zakończenia strumienia (EOS - End Of Stream) w ostatniej klatce zamiast wykorzystania pustej klatki, co pozwoliło na wyeliminowanie opóźnienia na oczekiwanie na zbędną klatkę. Zmiana API została już odzwierciedlona w bazie kodu FFmpeg.
- Usunięto tryb zmiennego bitrate'u z trzema przejściami (3-pass VBR), zamiast którego teraz stosowany jest mechanizm wieloprzebiegowego VBR. Tryb VBR ograniczono do wykonania dwóch przebiegów w celu zapewnienia integracji z FFmpeg.
- Do kodera dodano optymalizacje, które zwiększyły efektywność kompresji presetów M9-M13 o 1-4%, a zużycie pamięci w presecie M5 zmniejszyło się o 20-35% w trybie LP 8 i o 1-5% w innych trybach. Zużycie pamięci w pozostałych presetach zmniejszyło się o 1-5%.
- Zoptymalizowano kompromisy jakość/szybkość dla presetów, które oferują wysoki poziom jakości. Działanie presetu MR, zapewniającego referencyjną jakość, przyspieszono o 100%.
- W funkcjach napisanych wyłącznie w języku C dodano optymalizacje specyficzne dla architektury ARM.
Dodatkowo warto wspomnieć o wydaniu projektu dav1d 1.4.1, w ramach którego społeczności VideoLAN i FFmpeg rozwijają bibliotekę z implementacją alternatywnego, wolnego dekodera formatu kodowania wideo AV1. Biblioteka dav1d obsługuje wszystkie możliwości AV1, w tym rozszerzone wersje subdyskretyzacji oraz wszystkie zadeklarowane w specyfikacji parametry kontroli głębi koloru (8, 10 i 12 bitów). Kluczową cechą dav1d jest orientacja na osiągnięcie maksymalnej wydajności dekodowania i zapewnienie jakości pracy w trybie wielowątkowym. Kod projektu napisano w języku C (C99) z wstawkami asemblerowymi (NASM/GAS) i jest udostępniany na licencji BSD. Zrealizowano wsparcie dla architektur x86, x86_64, ARMv7 i ARMv8 oraz systemów operacyjnych FreeBSD, Linux, Windows, macOS, Android i iOS.
Wersja dav1d 1.4 wyróżnia się wsparciem dla nowych architektur Loongarch i RISC-V, a także wykorzystaniem dodatkowych optymalizacji opartych na instrukcjach AVX-512, przyspieszeniem działania filtrów 6tap w systemach ARM, poprawą efektywności pracy wielowątkowej i zmniejszeniem rozmiaru danych binarnych w systemach ARM64, ARM32 i RISC-V. Usunięto podatność CVE-2024-1580, która prowadziła do zapisu w obszarze poza granicami bufora z powodu przepełnienia całkowitego przy przetwarzaniu klatek o bardzo dużych rozmiarach.
Źródło: opennet.ru
