Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

RGB -> YUV (MMX)

[es] :: C/C++ programiranje :: RGB -> YUV (MMX)

[ Pregleda: 4285 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

borquee

Član broj: 10401
Poruke: 58
*.bp13catv.broadband.hu



Profil

icon RGB -> YUV (MMX)09.11.2003. u 17:01 - pre 230 meseci
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.
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.oak.inreach.net



+1000 Profil

icon Re: RGB -> YUV (MMX)09.11.2003. u 20:53 - pre 230 meseci
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

 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.telia.com

Sajt: dejan.lekic.org


+2 Profil

icon Re: RGB -> YUV (MMX)09.11.2003. u 21:07 - pre 230 meseci
Verujem da imas gotov kod za to u ffmpeg-u (http://ffmpeg.sf.net) .
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.sbb.co.yu



Profil

icon Re: RGB -> YUV (MMX)09.11.2003. u 21:40 - pre 230 meseci
Pogledaj source od huffyuv...

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

yooyo
 
Odgovor na temu

borquee

Član broj: 10401
Poruke: 58
*.bp13catv.broadband.hu



Profil

icon Re: RGB -> YUV (MMX)15.11.2003. u 12:09 - pre 230 meseci
hvala hvala...
iskopao sam nesto. nemam utisak da je 100% accurate ali je barem brzo
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: RGB -> YUV (MMX)22.11.2003. u 12:54 - pre 229 meseci
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...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

[es] :: C/C++ programiranje :: RGB -> YUV (MMX)

[ Pregleda: 4285 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.