[ borquee @ 09.11.2003. 17:01 ] @
Cao,
ima li neko rutinu za konverziju RGB -> YUV u MMX-u?

ovo trenutno koristim i dosta je sporo (ako se ima u vidu da moram da "preturim" 25 fps u 720x576 i da radim jos ponesto...)

Y = ((66 * R + 129 * G + 25 * B + 128) >> 8) + 16;
U = ((-38 * R - 74 * G + 112 * B + 128) >> 8) + 128;
V = ((112 * R - 94 * G - 18 * B + 128) >> 8) + 128;

Na netu sam nasao link na intel sajt koji se bavi ovim problemom ali je link mrtav..

Procitao sam da konverzija pomocu MMX-a ubrzava i do 10x ...

I sta raditi ako neko nema Intel procesor nego AMD?

Ima li negde tutorijal za MMX ili neki API...

B.
[ milanche @ 09.11.2003. 20:53 ] @
Imam je, pisao sam je svojerucno, ali ti je na zalost ne mogu dati point blank,
jer je vezana autorskim pravima za jednu manju, vrlo poznatu i vrlo nezgodnu firmu.

Otkricu ti jedan vrlo bitan detalj koji ti moze ustedeti dosta vremena:

Ako uradis C model 16-bitne aritmetike primenjene za izracunavanja tih formula,
videces da medjurezultati iskacu (vrlo neuredno i nepredvidljivo, ali se desava) iz
okvira 1.15f preciznosti. Tacnije, medjuvrednosti sabiranja i mnozenja mogu da budu i veci od +/- 1.0.

Zbog toga, da bi sve isterao kako treba, morao bi da formule razbijes na delove
koji nikad nece generisati prevelike vrednosti i one druge. Ove prve delove formula
moras uraditi u nekoj malo grubljoj rezoluciji (naprimer 3.13f). Rezultate svih ostalih
delova treba takodje da dovedes na tu istu odabranu rezoluciju, pa tek kad sve
zavrsis da vratis na 1.15f. To je jedini nacin da dobijes sta treba.

Takodje, algoritam je register-intensive, tako da ces morati da neki od general-purpose registara (ecx, edx, eax, ebx) da push/pop-ujes jednom po prolasku kroz
petlju.

Odgovori na ostala pitanja:

Moji najbolji rezultati sa MMX-om (naravno, sve zavisi od algoritma) su 300% (tj. 3x), mada verujem da za neke vrlo proste algoritme (tipa prosta sabiranja/oduzimanja/mnozenja) mogu i brze. Presudan preduslov je da buffer bude alociran na 8x boundary-ju, u protivnom, nema mnogo koristi od cele price.

MMX radi i na AMD-u bez problema.

Izvrstan tutorijal za MMX postoji (mmx_cbt.exe) i to online (sa animacijom) vrlo zgodan, ali ipak treba i knjizica za neke jako bitne detalje.
Medjutim, na kraju price, Intel je toliko dobro uradio run-time optimizaciju
da i kod napisan levom nogom ispadne isto toliko brz kao i kod koji je strpljivo uparivan (U/V pipeline).

Evo linka za tutorijal:
http://www.intel.com/software/products/college/ia32/mmxdown.htm

[ leka @ 09.11.2003. 21:07 ] @
Verujem da imas gotov kod za to u ffmpeg-u (http://ffmpeg.sf.net) .
[ yooyo @ 09.11.2003. 21:40 ] @
Pogledaj source od huffyuv...

http://www.math.berkeley.edu/~benrg/huffyuv.html

yooyo
[ borquee @ 15.11.2003. 12:09 ] @
hvala hvala...
iskopao sam nesto. nemam utisak da je 100% accurate ali je barem brzo
[ leka @ 22.11.2003. 12:54 ] @
Najbrze sto moze je ono sto MOZES da nadjes na dalu Intelovog sajta posvecenom MMX tehnologiji: http://www.intel.com/cd/ids/de.../mmx/index.htm?iid=sr+mmx& . Medjutim, ceo taj INTELOV odeljak je tako natrpan da ce ti trebati sat-dva da dodjes do onoga sto ti treba...