Π‘ΠΎΡΡΠΎΡΠ»ΡΡ ΡΠ΅Π»ΠΈΠ· rav1e 0.5.0, ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΡΠΈΠΊΠ° ΡΠΎΡΠΌΠ°ΡΠ° ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΠΈΠ΄Π΅ΠΎ AV1. ΠΡΠΎΠ΄ΡΠΊΡ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°ΠΌΠΈ Mozilla ΠΈ Xiph ΠΈ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΡΠ°Π»ΠΎΠ½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ libaom, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π½Π° ΡΠ·ΡΠΊΠ°Ρ C/C++, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΠΎΠ²ΡΡΠ΅Π½Π½ΡΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ ΠΊ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ (ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΡΠΆΠ°ΡΠΈΡ ΠΏΠΎΠΊΠ° ΠΎΡΡΡΠ°ΡΡ). ΠΡΠΎΠ΄ΡΠΊΡ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Rust Ρ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠΌΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠΌΠΈ (72.2% — Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ, 27.5% — Rust), ΠΊΠΎΠ΄ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ BSD. ΠΠΎΡΠΎΠ²ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Ρ Π΄Π»Ρ Windows ΠΈ macOS (ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ Linux Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΎΠΏΡΡΠ΅Π½Ρ ΠΈΠ·-Π·Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ).
Π rav1e ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π²ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ AV1, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π²Π½ΡΡΡΠ΅Π½Π½Π΅- ΠΈ Π²Π½Π΅ΡΠ½Π΅-ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠ°Π΄ΡΠΎΠ² (intra- ΠΈ inter-ΠΊΠ°Π΄ΡΠΎΠ²), ΡΡΠΏΠ΅ΡΠ±Π»ΠΎΠΊΠΎΠ² 64×64, ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΡΡΠ±Π΄ΠΈΡΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ 4:2:0, 4:2:2 ΠΈ 4:4:4, 8-, 10- ΠΈ 12-ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π³Π»ΡΠ±ΠΈΠ½Ρ ΡΠ²Π΅ΡΠ°, RDO (Rate-distortion optimization) ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡΠΊΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ΅ΠΆΠΈΠΌΡ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΌΠ΅ΠΆΠΊΠ°Π΄ΡΠΎΠ²ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΉ, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΊΠΎΡΠΎΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠ° ΠΈ Π²ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ΅Π½Ρ.
Π€ΠΎΡΠΌΠ°Ρ AV1 Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΠΎΠΏΠ΅ΡΠ΅ΠΆΠ°Π΅Ρ H.264 ΠΈ VP9 ΠΏΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌ ΡΠΆΠ°ΡΠΈΡ, Π½ΠΎ ΠΈΠ·-Π·Π° ΡΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π»Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (ΠΏΠΎ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ libaom ΠΎΡΡΡΠ°ΡΡ ΠΎΡ libvpx-vp9 Π² ΡΠΎΡΠ½ΠΈ ΡΠ°Π·, Π° ΠΎΡ x264 Π² ΡΡΡΡΡΠΈ ΡΠ°Π·). ΠΠΎΠ΄ΠΈΡΠΎΠ²ΡΠΈΠΊ rav1e ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 11 ΡΡΠΎΠ²Π½Π΅ΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π½Π°ΠΈΠ²ΡΡΡΠΈΠ΅ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΠΊΠΎΡΠΎΡΡΠΈ, Π±Π»ΠΈΠ·ΠΊΠΎΠΉ ΠΊ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠΎΠ΄ΠΈΡΠΎΠ²ΡΠΈΠΊ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΊΠ°ΠΊ Π² ΡΠΎΡΠΌΠ΅ ΡΡΠΈΠ»ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΡΠ°ΠΊ ΠΈ Π² Π²ΠΈΠ΄Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
Π Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΎΡΠΌΠ΅ΡΠ°ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ:
- ΠΠ½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΊΠΎΠ΄Π΅ΠΊΠ°;
- ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ²ΡΠ΅ΠΉ ΠΊ ΠΊΡΠ°Ρ Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΡΠΈΠΊΠ° ΠΏΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°Ρ Π²ΠΈΠ΄Π΅ΠΎ;
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ AVX2 Π΄Π»Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ (Π΄ΠΎ 13 ΡΠ°Π·) ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π²ΠΈΠ½Π΅ΡΠΎΠ²ΡΠΊΠΎΠ³ΠΎ ΠΎΡΠ΅Π½ΠΈΠ²Π°Π½ΠΈΡ Π΄Π»Ρ 16 Π±ΠΈΡ Π½Π° ΠΊΠ°Π½Π°Π». ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ SIMD-ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ²ΡΠ΅Π΅ ΡΡΠΊΠΎΡΠΈΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π΄ΠΎ 7 ΡΠ°Π· Π² Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ ;
- ΠΠ°ΡΡΠ° ΠΌΠ΅Π»ΠΊΠΈΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌ x86, arm32 ΠΈ arm64.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru