Shader do MediaPlayerClassic s VMR9
Mozna jste si vsimli, ze VMR9 sebou prinasi par problemu. Osobne mi prijde, ze prinasi vic problemu nez resi. Alespon v porovnani s Overlay rendererem v ATi grafikach s AVIVO.
Proto jsem napsal shader do MPC, ktery resi nize popsane problemy. Je na nej potreba SM2.0 grafika s podporou VMR9 renderless modu a lepsi.
1. problem je hloubka barev. RGB rozsah je tady 16-255, oproti 0-255 a tedy cerna neni cerna, ale seda.(minimalni je tedy RGB [16,16,16])
2. problem je spis zalezitost codecu, ale souvisi s nim. Renderuje se do desktop targetu a tedy vetsinou R8G8B8A8 nebo X8R8G8B8, potom dojde k prepocitani bit-depth barev a to ma za nasledek vetsi viditelnosti chyb v barevnych prechodech. V pripade XviD/DivX je to hlavne problem cervene, pripadne modre.
MediaPlayerClassic ve VMR9 Renderless modu umoznuje pouzivat vlastni shadery na zpracovani obrazu.Zkontrolujte si, ze fam funguji spravne.(Nektere prehravace maji neco podobneho jiz v sobe)
Problem c.1: Ukazka problemu. Vsimnete si svetleho pruhu na miste filmu. To neni filmem samotnym, ten je opravdu presne [0,0,0].
S pouzitim tohoto shaderu je vysledek korektni.
2. Resi i tento problem.(ten ovsem nelze odstranit uplne kvuli nizke hloubce barev v XviD/DivX) Bez shaderu. Se shaderem. Vsimnete si zmizeleho/potlaceneho ctvereckovani na cervenych odstinech.
Shader vypada takto:
Kód:
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 c1 (16.0/255.0)
#define c2 (255.0/219.0)
#define sharpen_width (0.35)
#define val0 (1.5)
#define val1 (-0.075)
#define PI acos(-1)
float4 main(float2 tex : TEXCOORD0) : COLOR
{
//Depth_Correction
float2 YV12fix = ((1.0-sharpen_width)/width, (1.0-sharpen_width)/height);
tex+=YV12fix;
float dx = sharpen_width/width + YV12fix;
float dy = sharpen_width/height + YV12fix;
//Sharpen convolution matrix
float4 s1 = tex2D(s0, tex + float2(-dx,-dy)) * val1 ;
float4 s2 = tex2D(s0, tex + float2(0,-dy)) * val1;
float4 s3 = tex2D(s0, tex + float2(-dx,0)) * val1;
float4 s4 = tex2D(s0, tex + float2(dx,0)) * val1;
float4 s5 = tex2D(s0, tex + float2(0,dy)) * val1;
float4 s6 = tex2D(s0, tex + float2(dx,dy)) * val1;
float4 s7 = tex2D(s0, tex + float2(-dx,+dy)) * val1;
float4 s8 = tex2D(s0, tex + float2(+dx,-dy)) * val1;
float4 s9 = tex2D(s0, tex) * val0;
float4 c0x = (s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 +s9);
// Rescale color depth
float4 c0 = (c0x-c1)*c2;
//Color output
return c0;
}
Do MPC ho muzete vlozit copy-paste zpusobem(nezapomente prekompilovat) a nebo stahnout tento konfiguracni soubor a prehrat jim stavajici, co mate u MPC. Potom spustit film a vybrat v Shaders->VMR9 Haste Shader.
Good Luck :)
ps. Pokud budete mit nekdo navrhy na lepsi metodu, jak vyresit ono ctvereckovani(tedy nez samplovani subpixelu pri rescalu textury), tak smele do toho. Navrhy jsou vitany.
Re: Shader do MediaPlayerClassic s VMR9
Skvele, zajimave, prinosne :)
Ad: k tomu 16-235 bugu, ktery jsem doposud resil takto: http://4um.overclocking.cz/showpost....96&postcount=3
Existuji 2 druhy videi
- bud maji tenhle prepocet [0-255=>16-235] jiz aplikovan - pote pri pouziti VMR9 vypadaji opravdu spatne - jsou to vetsinou neprilis dobre zvladnute DivX ripy.
- videa kde je "cerna opravdu cerna" - v tomto pripade, ja casto pouzivam prave VMR9 bez aplikovani teto korekce - na mnoha monitorech (LCD i CRT) mi jinak prijdou bezna videa prilis tmava. Je to ale za cenu ztraty kontrastua nekomu muzou prijit ty sede plochy neprijemne.
Na tomto linku http://www.avsforum.com/avs-vb/showthread.php?t=523614 je k tomuto tematu vice, bohuzel jsem se do dneska neodhodlal ho prostudovat :oops:
Re: Shader do MediaPlayerClassic s VMR9
Vsechno mi funguje a filmy podle me opravdu vypadaji lip. Ovsem mam jeden dotazecek: da se nejak zaridit, aby se ten shader automaticky zapinal pri spousteni MPC? Ted ho musim vzdycky vybrat z nabidky a to me otravuje...
Re: Shader do MediaPlayerClassic s VMR9
Ja jsem pouzil to ini a po jednom nastaveni uz mi ten shader drzi. Vypada to opravdu lip, diky za to.
Re: Shader do MediaPlayerClassic s VMR9
Citace:
Původně odeslal
Masster
Ja jsem pouzil to ini a po jednom nastaveni uz mi ten shader drzi. Vypada to opravdu lip, diky za to.
Mne prave ne, ani za boha to nedokazu rozchodit tak, aby se to nastaveni uz automaticky aktivovalo.
Predpokladam, ze jsi jen vybral ten shader a priste ho tam uz mas rovnou pri spusteni filmu, je to tak?
Re: Shader do MediaPlayerClassic s VMR9
Re: Shader do MediaPlayerClassic s VMR9
Citace:
Původně odeslal
Masster
Presne tak.
Tak to me softwarovy Buh musi nesnaset, protoze mne to takhle proste nefunguje... :-(
Re: Shader do MediaPlayerClassic s VMR9
Ze vam do toho kecam trochou mierneho OT:
K "niektorym prehravacom" co to riesia uspesne svojpomocne patri napriklad GOM player, tam neni ziadny problem s vyblitym obrazom :)