You're pretty close for only a minute of watching... pseudo code for what it does (Fizick correct me if I'm wrong, I only glanced at the source code):
temporal sequence of pixels (trying to create pixel 'x'):
Code:
c h
a f k
d x i
b g l
e j
int p0 = (c+h)/2;
int p1 = f;
int p2 = (d+i)/2;
int p3 = g;
int p4 = (e+j)/2;
int tdiff0 = abs(d-i);
int tdiff1 = (abs(a-f)+abs(b-g))/2;
int tdiff2 = (abs(k-f)+abs(g-l))/2;
int diff = max3(tdiff0,tdiff1,tdiff2);
int spatial_pred = edi_value;
if (mode < 2)
{
int max = max3(p2-p3,p2-p1,min(p0-p1,p4-p3));
int min = min3(p2-p3,p2-p1,max(p0-p1,p4-p3));
diff = max3(diff,min,-max);
}
if (spatial_pred > p2 + diff)
spatial_pred = p2 + diff;
if (spatial_pred < p2 - diff)
spatial_pred = p2 - diff;
x = spatial_pred;
edi_value is determined by:
trying to create pixel 'x' from neighboring lines:
Code:
a b c d e f g
x
h i j k l m n
int spatial_pred = (d+k)/2;
int spatial_score = abs(c-j)+abs(d-k)+abs(e-l);
int score = abs(b-k)+abs(c-l)+abs(d-m);
if (score < spatial_score)
{
spatial_pred = (c+l)/2;
spatial_score = score;
score = abs(a-l)+abs(b-m)+abs(c-n);
if (score < spatial_score)
{
spatial_pred = (b+m)/2;
spatial_score = score;
}
}
score = abs(d-i)+abs(e-j)+abs(f-k);
if (score < spatial_score)
{
spatial_pred = (e+j)/2;
spatial_score = score;
score = abs(e-h)+abs(f-i)+abs(g-j);
if (score < spatial_score)
{
spatial_pred = (f+i)/2;
spatial_score = score;
}
}