Wszystko co tu jest napisane, to raczej ciekawostka :)
Jak wiemy karty TV (pokroju bt848) 50 herzowy sygnal z atarki lapia w 25 herzach lecz z dwukrotnie wieksza iloscia linii w pionie wpychajac nieparzyste klatki w nieparzyste linie, a parzyste klatki w linie parzyste. W rezultacie zamiast interlejsowgo migania mamy obraz troche poszatkowany poziomymi liniami co ladnie nie wyglada. Standardowe filtry deinterlace dostepne w znanych mi programach robia to na tyle nieudolnie ze obraz nam sie rozmywa a brzydkie linie nadal pozostaja. Postanowilem wziac sprawy w swoje rece i napisalem filtr ktory idealnie eliminuje nam opisane artefakty i mamy ladny sygnal z atarki bez migania. Oczywiscie mozna zrobic to na wiele sposobow. Najprostrzy to capturowac na pol PALu (384x288) jednak dla mnie taka rozdzielczosc nie jest zadowalajaca. Wada aktualnej implementacji mojego podejscia jest koniecznosc posiadania dosc muskularnej karty graficznej implementujacej PS3.0, a to wszystko przez wykorzystanie do lapania obrazu z atarki programu Media Player Classic i jego mozliwosci nakladania shaderow na obraz. Shader jest banalny i wyglada tak:
sampler s0 : register(s0);
float4 p0 : register(c0);
#define height (p0[1])
float4 main(float2 t0 : TEXCOORD0, float2 vPos : VPOS) : COLOR
{
float4 c0 = tex2D(s0, t0);
float4 c1 = tex2D(s0, t0 + float2(0, 1/height) * (vPos.y % 2 == 0 ? 1 : -1));
return (c0+c1)/2;
}
i wymaga zrzucania obrazu w pelnym PALu czyli 768x576.
Powyzsze rozwiazanie nadaje sie tylko do ogladania obrazu. Przy nagrywaniu nie dziala. Wywczas wystarczy nagrac normalnie i zastosowac prosta kombinacje filtrow w VirtualDubie.
Czy zna ktos moze dzialajacy w jakims programie w czasie rzeczywistym filtr robiacy to samo a nie wymagajacy przetwarzania na karcie graficznej?