DirectShow filter za pomicanje subpixela

poruka: 6
|
čitano: 747
|
moderatori: pirat, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
neaktivan
offline
DirectShow filter za pomicanje subpixela

Kao što naslov kaže - postoji li takvo nešto? Googlao sam i ništa nisam našao.

 

Preciznije pojašnjenje što bi filter trebao raditi: za svaki pixel u videu ostaviti npr. crvenu i plavu komponentu gdje jesu, a zelenu premjestiti jedan pixel udesno.

----

Edit: otkrio sam... pixel shaderi! Napisah ovo, radi goreopisano u MPC-HC-u:

 

sampler s0 : register(s0);
float4 p0 :  register(c0);
float4 p1 :  register(c1);

#define width   (p0[0])
#define height  (p0[1])
#define counter (p0[2])
#define clock   (p0[3])
#define one_over_width  (p1[0])
#define one_over_height (p1[1])
#define PI acos(-1)

float4 main(float2 tex : TEXCOORD0) : COLOR
{
    float4 c0 = tex2D(s0, tex);
    float2 texG = float2(tex.x+one_over_width, tex.y);
    c0.g = tex2D(s0, texG).g;
    return c0;
}

 

Pojašnjenja ako si netko želi modificirati, a da ne mora prolaziti desetke sajtova da pokupi informacije:

  • one_over_width je 1/širina_videa, npr. 1.f/1920.f - shaderi preferiraju floate umjesto integera
  • tex je array[2] s koordinatama pixela za koji se trenutno izračunava boja
  • s0 je tekstura koja sadrži trenutni video frame
  • c0 je boja koja se vraća za trenutni pixel u formatu r,g,b,x
  • texG su koordinate mog željenog pomaknutog subpixela
  • ... i onda pridružim njegovu zelenu komponentu trenutnom pixelu 

 

Poruka je uređivana zadnji put pet 11.4.2014 22:47 (DigiMagic).
Moj PC  
1 0 hvala 0
17 godina
moderator
online
Re: DirectShow filter za pomicanje subpixela

Kul! {#} Ne znam koliko si upoznat s AviSynthom - ako se ne varam, ffdshowov dekoder ima mogućnost pisanja AviSynth skripte - tako nešto bi se možda dalo izvesti i pomoću njega. A ako ti treba za rekodiranje, tu ti je AviSynth pravo rješenje, pogotovo jer ga podržava velik broj enkodera, odnosno velik broj enkodera može skriptne .avs datoteke uzeti kao ulazne.

17 godina
neaktivan
offline
DirectShow filter za pomicanje subpixela

AviSyntha se uopće nisam sjetio {#} ... a on bi bio još fleksibilnije rješenje.

 

Uglavnom upravo sam provjerio stvar u praksi - radi, ali zasad nisam uspio skroz postići što želim. Možda bih trebao paziti i na vertikalnu komponentu. I, kao da djeluje drukčije na tekst koji se miče, nego koji je stacionaran. Nije mi baš jasno zašto bi se to dogodilo... Ako proradi ovako, vidjet ću bi li moglo i s AviSynthom.

Uglavnom uglavnom, radi se o realtime korekciji optike 3-LCD projektora (... niže klase, recimo, jer bolji navodno imaju to ugrađeno).

 

Moj PC  
0 0 hvala 0
17 godina
moderator
online
Re: DirectShow filter za pomicanje subpixela

Ti shaderi rade na originalnom videu frameu (ulaznom), ili na skaliranom koji se prikazuje na ekranoskoj (projektorskoj) rezoluciji (izlaznom)? Ako je ono prvo u pitanju, to bi mogao biti uzrok - niska rezolucija koja se ne preslikava na rezoluciju projektora. Ne znam jesam li te dobro shvatio...

17 godina
neaktivan
offline
DirectShow filter za pomicanje subpixela

MPC-HC podržava oboje, i shader na "ulaznom" frameu bilo koje rezolucije, i shader na "izlaznom" frameu skaliranom na ekran. Mislim da u mom slučaju ne bi smjelo imati veze, jer em sam stavio shader samo na "izlazni" frame, em je video ionako iste rezolucije kao ekran.

 

Moj PC  
0 0 hvala 0
17 godina
moderator
online
Re: DirectShow filter za pomicanje subpixela

Napravi si neku sliku s nekoliko tankih linija (horizontalnih i vertikalnih), s točkicama, pravokutnicima, čimeveć, u različitim bojama i u rezoluciji u kojoj video reproduciraš te iz nje napravi video od minute. Tako ćeš vidjeti što točno ti shader radi da slikom. {#}

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice