Nějak nechápu kontext.
- Přepsal nějaký existující, nebo napsal nový? Pokud přepsal, úplně si to říká o benchmark (rychlost a kvalita/kompresní poměr).
- Celý ten patch má 2000 řádků a kromě trochy boilerplate je to vlastně jen tento soubor. Celý kodek (nebo jenom ko, nebo jenom dek?) v 2000 řádcích? To zní hodně proof-of-concept. To kóduje jenom I-framy nějakým co nejjednodušším způsobem? Nebo co to je?
- Proč je vlastně VP9 kodek v kernelu? Já jsem si myslel, že V4L2 komunikuje se světem pomocí nekomprimovaných snímků, případně YUV, případně MJPEG pokud z kamery padá MJPEG. Teď už to v kernelu kóduje a dekóduje VP9? Jaký je k tomu use-case? Nebo je to nějaké nedorozumění a jedná se o hardwarově akcelerované kódování, ke kterému je potřeba nějaká základní obsluha v rozsahu těch 2000 řádků? (ale na to je tam podezřele mnoho nějakých tabulek s konstantami)
No, on uz ten clanek na Phoronixu je zavadejici. V podstate je to tak, jak pisete - on si vybral jeden soubor s tabulkami a "mover" funkcemi, na ktery uz tri roky nikdo nesahl, a prepsal to do rustu + drobne konsekvence jinde. Cela ta taskarice ohledne kodovani a dekodovani VP9 vypada ve skutecnosti takto: https://chromium.googlesource.com/webm/libvpx/+/refs/heads/main/vp9/
Ze zajmu jsem si porovnal oba c a rs zdrojaky (ten rust nakonec mozna fakt prijde) a jako bare-metal cloveka me zaujala fce fastdiv zalozena na LUT. A tady bych potreboval pomoc od nejakeho rust znalce.
V c je tu nejprve test na divisor == 0 nebo 1
a potom teprve test na ((divisor - 2) > ARRAY_SIZE(inv))
Logicky, protoze divisor je u16
No a v tom rustu zaciname rovnou timto:
const SZ: usize = 255;
const INV: [u32; SZ] = inv::<SZ>();
if divisor - 2 >= SZ as u32 {
crate::pr_warn!("fastdiv: divisor {} too large", divisor);
return dividend;
}
Pricemz divisor je u32.
To ma rust nejakou saturacni aritmetiku ci co?
Znalec nejsem, ale podle mě to zpanikaří v runtime, když bude divisor 0 nebo 1.
Mě to přijde jako úplně univerzální vzor.
Máš projekt.
Chceš ho vylepšit.
Vždycky tam nasekáš nějdřív nějaké chyby.
Vždycky se vedení vzteká, že jsi se na to raději nevykašlal.
Nikdy si vedení nevšimne, že chybovost násobně klesla, rychlost imlementace featur se zvýšila.
Když to umíš, dokážeš to vedení doložit. Někdy i když to umíš, tak je některé vedení natvrdlé.
Rust saturační aritmetiku umí, ale takto se to nedělá. Je tam na to sada metod https://doc.rust-lang.org/std/intrinsics/fn.saturating_sub.html
https://blog.root.cz/novacisko/
Uvítám náměty na nějaká zajímavá témata co probrat.