Wydanie kodera SVT-AV1 2.0 i dekodera dav1d 1.4 dla formatu wideo AV1

Opublikowano wydanie biblioteki SVT-AV1 2.0 (Scalable Video Technology AV1) z implementacjami kodera i dekodera formatu kodowania wideo AV1, do którego akceleracji wykorzystywane są środki sprzętowego przetwarzania równoległego obecne w nowoczesnych procesorach Intel. Projekt został stworzony przez firmę Intel we współpracy z Netfliksem w celu osiągnięcia poziomu wydajności odpowiedniego do transkodowania wideo w locie i wykorzystania w usługach wideo na żądanie (VOD). Obecnie prace nad nim prowadzone są pod auspicjami Open Media Alliance (AOMedia), które nadzoruje rozwój formatu kodowania wideo AV1. Wcześniej projekt był rozwijany w ramach projektu OpenVisualCloud, w ramach którego rozwijane są także kodery SVT-HEVC i SVT-VP9. Kod rozpowszechniany jest na licencji BSD.

Kompilacja SVT-AV1 może być przeznaczona dla systemów opartych na dowolnej architekturze, dla których istnieje kompilator obsługujący standard C99, ale najlepszą wydajność uzyskuje się w systemach x86_64, które wykorzystują optymalizacje asemblera oparte na instrukcjach SIMD (pożądana jest obsługa AVX2 w procesorze, ale jako minimum wystarczy SS2). Zużycie pamięci zależy od liczby rdzeni procesora biorących udział w kodowaniu, którą kontroluje opcja „--lp”. Z uwagi na złożoność algorytmów stosowanych w AV1, kodowanie tego formatu wymaga znacznie więcej zasobów niż w przypadku innych formatów, co nie pozwala na wykorzystanie standardowego kodera AV1 do transkodowania w czasie rzeczywistym. Na przykład standardowy enkoder z projektu AV1 wymaga odpowiednio 5721, 5869 i 658 razy więcej obliczeń w porównaniu do enkoderów x264 (profil „main”), x264 (profil „high”) i libvpx-vp9.

Wśród zmian w nowej wersji SVT-AV1:

  • Dokonano przejścia na nową numerację wersji, zgodnie z którą pierwsza cyfra wersji będzie się zmieniać przy każdej zmianie w API/ABI.
  • Wprowadzono zmiany w interfejsie API związane z przejściem do wskaźnika końca strumienia (EOS) w ostatniej klatce zamiast używania pustej klatki, co eliminuje opóźnienie spowodowane oczekiwaniem na dodatkową klatkę. Zmiana API została już uwzględniona w bazie kodu FFmpeg.
  • Tryb 3-przebiegowej zmiennej przepływności bitowej (XNUMX-przebiegowy VBR) został usunięty i zastąpiony wieloprzebiegowym mechanizmem VBR. Tryb wieloprzebiegowy VBR został zredukowany do dwóch przebiegów, aby umożliwić integrację z FFmpeg.
  • Udoskonalono enkoder poprzez wprowadzenie optymalizacji, które zwiększyły wydajność kompresji dla ustawień wstępnych M9-M13 o 1-4% oraz zmniejszyły zużycie pamięci dla ustawienia wstępnego M5 o 20-35% w trybie LP 8 i o 1-5% w pozostałych trybach. Zużycie pamięci w innych ustawieniach predefiniowanych zostało zmniejszone o 1-5%.
  • Zoptymalizowano kompromisy pomiędzy jakością i szybkością dla ustawień wstępnych, które ustawiają wysokie poziomy jakości. Predefiniowane ustawienie MR, zapewniające jakość referencyjną, zostało przyspieszone o 100%.
  • Do funkcji napisanych wyłącznie w języku C dodano optymalizacje specyficzne dla architektury ARM.

Dodatkowo warto odnotować wydanie projektu dav1d 1.4.1, w ramach którego społeczności VideoLAN i FFmpeg opracowują bibliotekę zawierającą implementację alternatywnego, darmowego dekodera dla formatu kodowania wideo AV1. Biblioteka dav1d obsługuje wszystkie funkcje AV1, w tym zaawansowane podpróbkowanie i wszystkie określone opcje kontroli głębi kolorów (8, 10 i 12 bitów). Najważniejszą cechą dav1d jest nacisk na osiągnięcie najwyższej możliwej wydajności dekodowania i zapewnienie wysokiej jakości działania w trybie wielowątkowym. Kod projektu napisano w języku C (C99) z wykorzystaniem wstawek assemblera (NASM/GAS) i rozpowszechniano na podstawie licencji BSD. Wprowadzono obsługę 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ę obsługą nowych architektur Loongarch i RISC-V, a także dodatkowymi optymalizacjami opartymi na instrukcjach AVX-512, przyspieszeniem filtrów 6tap w systemach ARM, zwiększoną wydajnością wielowątkowości i zmniejszonym rozmiarem danych binarnych w systemach ARM64, ARM32 i RISC-V. Naprawiono lukę w zabezpieczeniach CVE-2024-1580, która powodowała zapis poza zakresem z powodu przepełnienia liczby całkowitej podczas obsługi bardzo dużych ramek.

Źródło: opennet.ru

Dodaj komentarz