English version is here.
Prejšnja objava o tem projektu je tukaj.
Jutro se je začelo kar dobro. Po tem, ko sem do treh zjutraj risal načrte za ušesa in podobne mehanizme, me je zjutraj na telefonu čakalo nekaj lepih sporočilc. Ta so pravila, da bo Aliexpress dostavljal stvari. Na žalost je bila to drugotna/plan B kamera namesto tista glavna, vendar pa je to še vedno dovolj da se z določenimi stvarmi poigramo ter jih pretestiramo.

Kamero povežem z računalnikom, odprem OBS ter nastavim kamero. Prva stvar, ki jo preverim je to, če se je Xinnie express kaj lagal — 3000-nekej x 2000-nekej prek USB 2.0 povezave se pač na prvo žogo sliši malo veliko, četudi zgolj na 15 fps. Vendar pa se zdi, da kamera to pač zmore, kar je lepo.
AMPAK
Tega modula nisem vzel zaradi preveč x preveč na 15 fps. Ta modul sem si kupil zaradi mejhn x mejhn na 30 fps, oziroma — če se glavna kamera ne pokaže v mojem kaslcu — 2k30012560×1440 ni 2k, 1920×1080 je 2k. In kdorkoli se je zmislil, da se 1440p ločljivosti reče 2k, si zasluži en teden non-stop električnega pastirja v rit. Če ta oseba preživi cel teden teden, potem se jo postavi pred zid in ustreli (znova in znova). Za konec bi bilo lepo, če nekdo detonira jedrsko konico sredi določene zgradbe v obliki črke O, ki se nahaja v kraju Cupertino v Kaliforniji ter s tem zagotovi, da v prihodnosti nikoli več ne pride do podobnih traparij.. Že 30 fps iskreno ni dovolj za pogled iz kostuma v živo, manj kot to pa še manj.

In tukaj počasi pride do težav. Ker, glej ga zlomka, OBS mi tudi na 800×600 ponuja zgolj 15 sličic na sekundo:

Ampak v redu, ta kamera bo večinoma gledala zgolj v tla. 15 sličic na sekundo je pogojno sprejemljivo za ta namen. Bomo že preživeli.
Toda — ko bom v kostumu, ne bom s sabo nosil mojega računalnika. Kamere bodo lavfale na Steam Deck-u. Sprva za ta namen nisem nameraval uporabljati OBS, temveč sta bili možnosti:
- sseri skupaj razporeditev v HTML, odpri Chrome, ter pretakaj sliko iz kamer tja
- vprašaj ChatGPT, da mi sserje en enostaven in lahek program, ki prikazuje sliko iz kamer
Obe možnosti bi vsebovale tudi nek osnoven vmesnik, ki bi se kazal preko slike in ki bi mi dovolil prižigati in ugašati dodatne funkcionalnosti. A preden se lotim katerekoli izmed teh dveh stvari, je treba najprej preveriti, če vse dela kot je treba — in nič ni bolj priročno za ta namen kot ukazna vrstica. Prvi rezultati niso bili najbolj vzpodbudni, kajti program za ukazno vrstico ni prišel niti blizu oglaševanim ločljivostim in hitrostim. Pri največji ločljivosti ffplay ni zmogel več kot 2 sličici na sekundo. Za 720p ni šlo čez 10.
Temu (heh) je sledilo tam 10 minut žokanja s “matr, a sm se zajebal” prelivom, a na koncu dneva … če je OBS (približno) delal na Windows, potem bo mogoče tudi na Linux? Odgovor na to je precej manj gotov “ja” kot bi si človek mislil (težave sicer ponavadi ne kuha OBS ki bi mogel delati približno enako na obeh operacijskih sistemih, temveč gonilniki — ti se lahko med Linux in Windows različico kar dosti razlikujejo), vendar pa sem po namestitvi OBS teh sladkih 15 fps dobival tudi na Steam Deck-u.
Poleg vsega tega je kamera precej eh. Ima slab dinamičen razpon; ko zmanjka svetlobe pa stvari tudi zgledajo bolj temno:

Bolj zaskrbljujoče je bilo to, da je kamera prilagajala svetlost na najsvetlejšo stvar v vidnem polju. Je v vidnem polju zelo majhen in hkrati zelo svetel (napram ostalim stvarem) predmet? Kamera se mu bo prilagodila — tudi če to pomeni, da bo preostanek slike pretemen.
Saj vem, da od €35 kamere ne gre pričakovati kaj veliko, ampak kljub temu. Zgleda, da se bo treba pripraviti na jebo z brezveznim foram.

Ko ni svetlobe, se slika ob premkanju tudi močno zabrisuje, kar je škoda. Kot sem že rekel — vem, da od kamere za 35€ kaj veliko pač ne gre pričakovati — vendar pa ima slika kamere presenetljivo malo šuma tudi na robu zmogljivosti. Če bi obstajala možnost, da zamenjam boljši ISO s hitrejšo zaslonko, potem bi to storil takoj in brez razmišljanja. ISO šum (oziroma njegova odsotnost) za moje potrebe ni ravno najbolj pomemben.
Glavna kamera (& preostanek tolpe)
Za ostale kamere je poštar potreboval še dodaten teden, vendar pa sem sčasoma dobil še glavno kamero ter kamero za pogled nazaj.

Ne bom še enkrat razlagal o tem, kako sem se rabil spet ukvarjati z OBS — pač, ista pesem kot prej, z izjemo tega, da so se hitrosti in ločljivosti v OBS dejansko ujemale s tem, kar je bilo oglaševano. Vsaj v večjem delu, 90fps velik poba je šel zgolj do 90 fps, vendar pa je bil to verjetno bolj Windows problem (kasneje sem na Linuxu dobil 90 fps), tako da se s tem nisem ukvarjal dalje ker razlogi12razlogi: to bo prikopljeno na Steam Deck, tako da mi za Windows kar dost dol visi.
Zatem sem se odločil naresti primerjavo z razporeditvijo, ki je približno spominjala na to, kako sem stvar nameraval uporabljati (tako iz vidika razporeditve kamer na zaslonu, kot tudi iz vidika tega, kako so stvari priklopljene na računalnik).
Tukaj je postavitev:

In tukaj so stvari, ki se kažejo na zasalonu:

Je sicer res, da nobena nagrada ne bo požela kaj dosti nagrad iz naslova kakovosti slike, vendar pa stvari za moje potrebe morajo zgolj delovati — in dve od treh kamer iz zgornje slike te zahteve izpolnjujeta zadovoljivo. Zrnata slika nas ne bo ubila, barvnih nakazni (angl. chromatic aberration) pa se bomo rešili z enim izrekom uroka “zaščita pred dobrim in zlom.”
A preizkus na računalniku ni bil povsem brez težav. Stvar ni kaj preveč robustna: če se katerikoli izmed kablov izklopi, potem se kamera v OBS ne bo pokazala sama od sebe. Če hočeš kamero nazaj, potem se rabiš ukvarjati z vmesnikom. Za velikega fanta z globalno zaslonko ter poceni kamerami je sicer dovolj tudi ponovni zagon OBS, vendar pa je plan B kamera precej bolj sitna. Včasih se zgodi, da se po ponovnem zagonu OBS ne pojavi sama od sebe — in če pride do tega, potem se kamero lahko ponovno usposobi le z naključno kombinacijo ponovnih zagonov OBS, onemogočanja in ponovnega omogočanja kamere v OBS, odpiranja dialogov z nastavitvami kamere ter spreminjanjem katerega koli izmed spustnih seznamov na neko drugo možnost ter potem spet nazaj, in/ali iztikanja ter ponovnega vtikanja USB kabla. Torej v glavnem — stvari, ki jih v kostumu (z izjemo ponovnega zagona OBS) ne bom ravno mogel delati.
To mi ni všeč.
Ampak bomo nekako že preživeli, še posebej če se to dogaja samo s “Plan B” kamero.
Pripravljanje Steam Deck-a
Kot sem že rekel: vse skupaj mora teči na Steam Deck-u, ne na mojem računalniku. Zato sem USB razdelilec, v katerega so bile priklopljene kamere, odklopil iz računalnika ter ga vklopil v Steam Deck. Potem sem na Steam Deck odprl še OBS ter v prizor poskusil dodati vse tri kamere. Pojavila se je zgolj ena težava:

Samo dve kamere. Kaj je fora?
Torej: Steam Deck ti da en USB priključek tipa C. Specifikacije pravijo, da je ta priključek USB 3.2 Gen 2 vrste. Podpira DP alt mode vse do 89k60, ali 4k120. Najvišja ločljivost mojih očal je 1920×1600@120, kar ni dovolj, da zapolni vso kapaciteto. Človek bi si naivno mislil, da bo to za ostale USB naprave pustilo več kot dovolj proste kapacitete za kamere. Vendar pa bi s takim mišljenjem pozabil na eno majhno — a zelo pomembno — stvar.
USB2 naprave ne morejo izkoristiti USB3 hitrosti.
Pa tudi: USB3 razdelilci USB2 prometa ne pretvarjajo v USB3 promet.
To pomeni, da so USB2 naprave na USB razdelilcu v najboljšem primeru omejene na skupno 480 Mb/s.
Ampak, a sta dve kameri dovolj, da požre vso USB kapaciteto?
Aleksa, predvajaj vsauce glasbo.
dmesg23Na Linux sta dmesg in journalctl orodji, ki izpišeta dogodke in napake, ki jih zabeleži operacijski sistem. pravi, da je temu prav res tako:

Pa lahko izpisom dnevnika res zaupamo? Ker uporabljamo Linux lahko varno privzamemo, da nekje obstaja hitro in enostavno dostopno orodje, ki nam v ukazni vrstici izpiše hitrosti prenosa podatkov preko USB vodil. Glavna in cheapo pomožna kamera zasedata zgolj ~35 Mb/s — precej daleč od teoretičnega maksimuma.

Aja, ko mam lih še gajbo od žajfe. Pomembno obvestilo:
1k = 1000 (10³), 1M = 10⁶, 1G = 10⁹, itd. Trdi diski niso edina stvar, ki pravilno uporabljajo SI predpone — hitrosti prenosa (vključno z internetom in WIFI), bitna hitrost video in zvočnih posnetkov, hitrost CDjev, itd. prav tako ne zlorabljajo SI predpon. Če se ne strinjaš: tukaj je celotna USB 2.0 specifikacija. Stegn si dol, odpri
usb_20.pdf, ter se poсукаj do tabele 5-3. Ali se pod ‘max’ v stolpcu ‘bytes/second’ slučajno nahaja 62914560? Ne? Potlej šuti in drži gobec.Kje je moj “zaznano neskladje” knof?
Mogoče je čas, da pogledamo, kaj “not enough bandwidth for new device state” pomeni. Po dolgih urah iskanja se izkaže, da lahko USB naprava računalniku reče “ej kolega, daj mi [določeno količino] pasovne širine.” Ali je mogoče, da se naprava laže?
Mogoče se res lahko. Ker smo na Linuxu, lahko gonilniku rečemo, da kamere rezervacij hitrosti prenosa ne računajo prav:
# rmmod uvcvideo
(izklopi USB razdelilec tukaj)
# modprobe uvcvideo quirks=0x80
(vklopi USB razdelilec tu)
Če je težava res v tem, da kamera rezervira preveč, potem bi nas to moralo rešiti pred “not enough bandwidth” dmesg izpisu, vendar pa vse kamere kljub temu ne delujejo. V konzoli se izpisujejo napake o pokvarjenih podatkih in ostale ne-lepe stvari. Sčasoma vse začne kazati na neko drugo možnost:
usbtop se laže.
In ja, seveda se izkaže, da USB laže. Izpis pravi, da so hitrosti podane v kb/s. Izkaže se, ta so dejanske enote kiB/s (in valda nikjer nič dokumentirano).
Pisanje programov, ki nepravilno uporabljajo enoti b in B (1B = 8b), bi se moralo kaznovati s smrtno kaznijo.
Ampak bodimo pošteni. Polovica krivde leži na dejstvu, da
v AUR že dolgo časa ni bil posodobljen ter tako ne vključuje (več let starih) posodobitev, ki so to napako odpravili. Tako bi razvijalecusbtopušel smrtni kazni, vendar pa se zaradi uporabe kiB/s (ter nepravilne kapitalizacije) zaporu kljub temu ne bi ognil.usbtop
Ampak še vedno: dejanske hitrosti prenosa v usbtop niti približno ne pridejo do 58593,75 kiB/s.
… kar kaže tudi na to, da nam tudi gonilnik porabo hitrosti za kamero računa precej bolj potratno, kot je treba. Penis.
Ampak: a nam ni Windows podpiral tri kamere namesto dveh?
Temu je res tako, vendar pa se izkaže, da je dosti teh stvari odvisno tudi od specifičnih krmilnikov. Windows na računalniku dela. Na moji Surface Pro tablici, stvari prav tako ne delujejo (dobim zgolj dve kameri), s tem da imajo na tablici vse kamere zelo veliko latence. Ko sem na moj računalnik namestil še CachyOS (mimogredeOS, ampak z dodatnimi koraki), je stvar spet delovala z do 3 kamerami. Vedno bolj postaja jasno, da je USB standard nepopisen šmorn.
Prišli smo do točke, kjer nam različni forumi pravijo, da ne moremo storiti nič, medtem ko ChatGPT pomagljivo predlaga, da spišemo patch za Linux kernel/gonilnik. To je verjetno znak, da se bom moral sprijazniti s tem, da bomo imeli na voljo dve kameri.
Ali pa—
NE. Cene za Raspberry Pi so šle gor v višave, stvar stane trikrat toliko kot eno leto nazaj, tako da se ne bom spuščal v “USB over IP” zato, da dobim še eno ekstra kamero. Vsaj ne zdaj.