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.