📄 tdeinterlaceyuy2.cpp
字号:
else if (abs(srcp[x]-srcpp[x])<4 && abs(srcp[x]-srcpn[x])<4) maskw[x] = 110;
else maskw[x] = 60;
++x;
t1 = n == 0 ? false : (abs(srcpp[x] - prvpp[x]) < mthreshC);
t2 = n == 0 ? false : (abs(srcpn[x] - prvpn[x]) < mthreshC);
t3 = n == nfrms ? false : (abs(srcpp[x] - nxtpp[x]) < mthreshC);
t4 = n == nfrms ? false : (abs(srcpn[x] - nxtpn[x]) < mthreshC);
t5 = n <= 1 ? false : (abs(prvp[x] - prv2p[x]) < mthreshC);
t6 = n == 0 ? false : (abs(srcp[x] - prvp[x]) < mthreshC);
t7 = n == nfrms ? false : (abs(srcp[x] - nxtp[x]) < mthreshC);
if (t6 && ((t1 && t2) || (t3 && t4) || (t2 && t4 && (t5 || t7)) || (t1 && t3 && (t5 || t7))))
maskw[x] = val1;
else if (t1 && t2 && t3 && t4 && t5 && t7) maskw[x] = val1;
else if (t1 && t5 && t2) maskw[x] = 20;
else if (t3 && t7 && t4) maskw[x] = 10;
else if (abs(prvp[x]-srcpp[x])<4 && abs(prvp[x]-srcpn[x])<4) maskw[x] = 120;
else if (abs(srcp[x]-srcpp[x])<4 && abs(srcp[x]-srcpn[x])<4) maskw[x] = 110;
else maskw[x] = 60;
}
prv2p += prv2_pitch;
prvpp += prv_pitch;
prvp += prv_pitch;
prvpn += prv_pitch;
srcpp += src_pitch;
srcp += src_pitch;
srcpn += src_pitch;
nxtpp += nxt_pitch;
nxtp += nxt_pitch;
nxtpn += nxt_pitch;
maskw += mask_pitch;
}
}
else
{
for (y=1; y<Height-1; y+=2)
{
for (x=0; x<Width; ++x)
{
t1 = (abs(srcpp[x] - prvpp[x]) < mthreshL);
t2 = (abs(srcpn[x] - prvpn[x]) < mthreshL);
t3 = (abs(srcpp[x] - nxtpp[x]) < mthreshL);
t4 = (abs(srcpn[x] - nxtpn[x]) < mthreshL);
t5 = (abs(prvp[x] - prv2p[x]) < mthreshL);
t6 = (abs(srcp[x] - prvp[x]) < mthreshL);
t7 = (abs(srcp[x] - nxtp[x]) < mthreshL);
if (t6 && ((t1 && t2) || (t3 && t4) || (t2 && t4 && (t5 || t7)) || (t1 && t3 && (t5 || t7))))
maskw[x] = val1;
else if (t1 && t2 && t3 && t4 && t5 && t7) maskw[x] = val1;
else if (t1 && t5 && t2) maskw[x] = 20;
else if (t3 && t7 && t4) maskw[x] = 10;
else if (abs(prvp[x]-srcpp[x])<4 && abs(prvp[x]-srcpn[x])<4) maskw[x] = 120;
else if (abs(srcp[x]-srcpp[x])<4 && abs(srcp[x]-srcpn[x])<4) maskw[x] = 110;
else maskw[x] = 60;
++x;
t1 = (abs(srcpp[x] - prvpp[x]) < mthreshC);
t2 = (abs(srcpn[x] - prvpn[x]) < mthreshC);
t3 = (abs(srcpp[x] - nxtpp[x]) < mthreshC);
t4 = (abs(srcpn[x] - nxtpn[x]) < mthreshC);
t5 = (abs(prvp[x] - prv2p[x]) < mthreshC);
t6 = (abs(srcp[x] - prvp[x]) < mthreshC);
t7 = (abs(srcp[x] - nxtp[x]) < mthreshC);
if (t6 && ((t1 && t2) || (t3 && t4) || (t2 && t4 && (t5 || t7)) || (t1 && t3 && (t5 || t7))))
maskw[x] = val1;
else if (t1 && t2 && t3 && t4 && t5 && t7) maskw[x] = val1;
else if (t1 && t5 && t2) maskw[x] = 20;
else if (t3 && t7 && t4) maskw[x] = 10;
else if (abs(prvp[x]-srcpp[x])<4 && abs(prvp[x]-srcpn[x])<4) maskw[x] = 120;
else if (abs(srcp[x]-srcpp[x])<4 && abs(srcp[x]-srcpn[x])<4) maskw[x] = 110;
else maskw[x] = 60;
}
prv2p += prv2_pitch;
prvpp += prv_pitch;
prvp += prv_pitch;
prvpn += prv_pitch;
srcpp += src_pitch;
srcp += src_pitch;
srcpn += src_pitch;
nxtpp += nxt_pitch;
nxtp += nxt_pitch;
nxtpn += nxt_pitch;
maskw += mask_pitch;
}
}
}
}
void TDeinterlace::createMotionMap2YUY2(PVideoFrame &prv2, PVideoFrame &prv,
PVideoFrame &src, PVideoFrame &nxt, PVideoFrame &nxt2, PVideoFrame &mask, int n)
{
const unsigned char *prv2p = prv2->GetReadPtr();
int prv2_pitch = prv2->GetPitch();
prv2p += prv2_pitch*(2-field);
const unsigned char *prv2pp = prv2p - prv2_pitch;
const unsigned char *prv2pn = prv2p + prv2_pitch;
prv2_pitch *= 2;
const unsigned char *prvp = prv->GetReadPtr();
int prv_pitch = prv->GetPitch();
prvp += prv_pitch*(2-field);
const unsigned char *prvpp = prvp - prv_pitch;
const unsigned char *prvpn = prvp + prv_pitch;
prv_pitch *= 2;
const unsigned char *srcp = src->GetReadPtr();
int src_pitch = src->GetPitch();
int Width = src->GetRowSize();
int Height = src->GetHeight();
srcp += src_pitch*(2-field);
const unsigned char *srcpp = srcp - src_pitch;
const unsigned char *srcpn = srcp + src_pitch;
src_pitch *= 2;
const unsigned char *nxtp = nxt->GetReadPtr();
int nxt_pitch = nxt->GetPitch();
nxtp += nxt_pitch*(2-field);
const unsigned char *nxtpp = nxtp - nxt_pitch;
const unsigned char *nxtpn = nxtp + nxt_pitch;
nxt_pitch *= 2;
const unsigned char *nxt2p = nxt2->GetReadPtr();
int nxt2_pitch = nxt2->GetPitch();
nxt2p += nxt2_pitch*(2-field);
const unsigned char *nxt2pp = nxt2p - nxt2_pitch;
const unsigned char *nxt2pn = nxt2p + nxt2_pitch;
nxt2_pitch *= 2;
unsigned char *maskw = mask->GetWritePtr();
int mask_pitch = mask->GetPitch();
memset(maskw,10,mask_pitch*Height);
maskw += mask_pitch*(2-field);
mask_pitch *= 2;
int x, y;
unsigned char val1;
bool t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
bool t11, t12, t13, t14, t15, t16, t17, t18, t19;
if (field^order)
{
val1 = mtnmode > 1 ? (accumP <= accumN ? 10 : 30) : 40;
if (n <= 1 || n >= nfrms-1)
{
for (y=1; y<Height-1; y+=2)
{
for (x=0; x<Width; ++x)
{
t1 = n == 0 ? false : (abs(srcpp[x] - prvpp[x]) < mthreshL);
t2 = n == 0 ? false : (abs(srcpn[x] - prvpn[x]) < mthreshL);
t3 = n == nfrms ? false : (abs(srcpp[x] - nxtpp[x]) < mthreshL);
t4 = n == nfrms ? false : (abs(srcpn[x] - nxtpn[x]) < mthreshL);
t5 = n == 0 ? false : (abs(srcp[x] - prvp[x]) < mthreshL);
t6 = n == nfrms ? false : (abs(srcp[x] - nxtp[x]) < mthreshL);
t7 = n >= nfrms-1 ? false : (abs(nxtp[x] - nxt2p[x]) < mthreshL);
t8 = n <= 1 ? false : (abs(prvpp[x] - prv2pp[x]) < mthreshL);
t9 = n <= 1 ? false : (abs(prvpn[x] - prv2pn[x]) < mthreshL);
t10 = n >= nfrms-1 ? false : (abs(nxtpp[x] - nxt2pp[x]) < mthreshL);
t11 = n >= nfrms-1 ? false : (abs(nxtpn[x] - nxt2pn[x]) < mthreshL);
t12 = (abs(srcpp[x] - prv2pp[x]) < mthreshL);
t13 = (abs(srcpn[x] - prv2pn[x]) < mthreshL);
t14 = (abs(nxtpp[x] - prvpp[x]) < mthreshL);
t15 = (abs(nxtpn[x] - prvpn[x]) < mthreshL);
t16 = (abs(nxt2pp[x] - srcpp[x]) < mthreshL);
t17 = (abs(nxt2pn[x] - srcpn[x]) < mthreshL);
t18 = (abs(nxtp[x] - prvp[x]) < mthreshL);
t19 = (abs(nxt2p[x] - srcp[x]) < mthreshL);
if (t6 && ((t1 && t2 && ((t3 && t4 && t14 && t15) || (t5 && t18))) ||
(t3 && t4 && t7 && t19) ||
(t5 && t18 && ((t1 && t3 && t14) || (t2 && t4 && t15) || (t1 && t8 && t12) || (t2 && t9 && t13))) ||
(t7 && t19 && ((t1 && t3 && t14) || (t2 && t4 && t15) || (t3 && t10 && t16) || (t4 && t11 && t17)))))
maskw[x] = val1;
else if (t1 && t2 && t3 && t4 && t5 && t7 && t14 && t15) maskw[x] = val1;
else if (t1 && t5 && t2 && t8 && t9 && t12 && t13) maskw[x] = 10;
else if (t3 && t7 && t4 && t10 && t11 && t16 && t17) maskw[x] = 30;
else if (abs(srcp[x]-srcpp[x])<4 && abs(srcp[x]-srcpn[x])<4) maskw[x] = 110;
else if (abs(nxtp[x]-srcpp[x])<4 && abs(nxtp[x]-srcpn[x])<4) maskw[x] = 130;
else maskw[x] = 60;
++x;
t1 = n == 0 ? false : (abs(srcpp[x] - prvpp[x]) < mthreshC);
t2 = n == 0 ? false : (abs(srcpn[x] - prvpn[x]) < mthreshC);
t3 = n == nfrms ? false : (abs(srcpp[x] - nxtpp[x]) < mthreshC);
t4 = n == nfrms ? false : (abs(srcpn[x] - nxtpn[x]) < mthreshC);
t5 = n == 0 ? false : (abs(srcp[x] - prvp[x]) < mthreshC);
t6 = n == nfrms ? false : (abs(srcp[x] - nxtp[x]) < mthreshC);
t7 = n >= nfrms-1 ? false : (abs(nxtp[x] - nxt2p[x]) < mthreshC);
t8 = n <= 1 ? false : (abs(prvpp[x] - prv2pp[x]) < mthreshC);
t9 = n <= 1 ? false : (abs(prvpn[x] - prv2pn[x]) < mthreshC);
t10 = n >= nfrms-1 ? false : (abs(nxtpp[x] - nxt2pp[x]) < mthreshC);
t11 = n >= nfrms-1 ? false : (abs(nxtpn[x] - nxt2pn[x]) < mthreshC);
t12 = (abs(srcpp[x] - prv2pp[x]) < mthreshC);
t13 = (abs(srcpn[x] - prv2pn[x]) < mthreshC);
t14 = (abs(nxtpp[x] - prvpp[x]) < mthreshC);
t15 = (abs(nxtpn[x] - prvpn[x]) < mthreshC);
t16 = (abs(nxt2pp[x] - srcpp[x]) < mthreshC);
t17 = (abs(nxt2pn[x] - srcpn[x]) < mthreshC);
t18 = (abs(nxtp[x] - prvp[x]) < mthreshC);
t19 = (abs(nxt2p[x] - srcp[x]) < mthreshC);
if (t6 && ((t1 && t2 && ((t3 && t4 && t14 && t15) || (t5 && t18))) ||
(t3 && t4 && t7 && t19) ||
(t5 && t18 && ((t1 && t3 && t14) || (t2 && t4 && t15) || (t1 && t8 && t12) || (t2 && t9 && t13))) ||
(t7 && t19 && ((t1 && t3 && t14) || (t2 && t4 && t15) || (t3 && t10 && t16) || (t4 && t11 && t17)))))
maskw[x] = val1;
else if (t1 && t2 && t3 && t4 && t5 && t7 && t14 && t15) maskw[x] = val1;
else if (t1 && t5 && t2 && t8 && t9 && t12 && t13) maskw[x] = 10;
else if (t3 && t7 && t4 && t10 && t11 && t16 && t17) maskw[x] = 30;
else if (abs(srcp[x]-srcpp[x])<4 && abs(srcp[x]-srcpn[x])<4) maskw[x] = 110;
else if (abs(nxtp[x]-srcpp[x])<4 && abs(nxtp[x]-srcpn[x])<4) maskw[x] = 130;
else maskw[x] = 60;
}
prv2pp += prv2_pitch;
prv2p += prv2_pitch;
prv2pn += prv2_pitch;
prvpp += prv_pitch;
prvp += prv_pitch;
prvpn += prv_pitch;
srcpp += src_pitch;
srcp += src_pitch;
srcpn += src_pitch;
nxtpp += nxt_pitch;
nxtp += nxt_pitch;
nxtpn += nxt_pitch;
nxt2pp += nxt2_pitch;
nxt2p += nxt2_pitch;
nxt2pn += nxt2_pitch;
maskw += mask_pitch;
}
}
else
{
for (y=1; y<Height-1; y+=2)
{
for (x=0; x<Width; ++x)
{
t1 = (abs(srcpp[x] - prvpp[x]) < mthreshL);
t2 = (abs(srcpn[x] - prvpn[x]) < mthreshL);
t3 = (abs(srcpp[x] - nxtpp[x]) < mthreshL);
t4 = (abs(srcpn[x] - nxtpn[x]) < mthreshL);
t5 = (abs(srcp[x] - prvp[x]) < mthreshL);
t6 = (abs(srcp[x] - nxtp[x]) < mthreshL);
t7 = (abs(nxtp[x] - nxt2p[x]) < mthreshL);
t8 = (abs(prvpp[x] - prv2pp[x]) < mthreshL);
t9 = (abs(prvpn[x] - prv2pn[x]) < mthreshL);
t10 = (abs(nxtpp[x] - nxt2pp[x]) < mthreshL);
t11 = (abs(nxtpn[x] - nxt2pn[x]) < mthreshL);
t12 = (abs(srcpp[x] - prv2pp[x]) < mthreshL);
t13 = (abs(srcpn[x] - prv2pn[x]) < mthreshL);
t14 = (abs(nxtpp[x] - prvpp[x]) < mthreshL);
t15 = (abs(nxtpn[x] - prvpn[x]) < mthreshL);
t16 = (abs(nxt2pp[x] - srcpp[x]) < mthreshL);
t17 = (abs(nxt2pn[x] - srcpn[x]) < mthreshL);
t18 = (abs(nxtp[x] - prvp[x]) < mthreshL);
t19 = (abs(nxt2p[x] - srcp[x]) < mthreshL);
if (t6 && ((t1 && t2 && ((t3 && t4 && t14 && t15) || (t5 && t18))) ||
(t3 && t4 && t7 && t19) ||
(t5 && t18 && ((t1 && t3 && t14) || (t2 && t4 && t15) || (t1 && t8 && t12) || (t2 && t9 && t13))) ||
(t7 && t19 && ((t1 && t3 && t14) || (t2 && t4 && t15) || (t3 && t10 && t16) || (t4 && t11 && t17)))))
maskw[x] = val1;
else if (t1 && t2 && t3 && t4 && t5 && t7 && t14 && t15) maskw[x] = val1;
else if (t1 && t5 && t2 && t8 && t9 && t12 && t13) maskw[x] = 10;
else if (t3 && t7 && t4 && t10 && t11 && t16 && t17) maskw[x] = 30;
else if (abs(srcp[x]-srcpp[x])<4 && abs(srcp[x]-srcpn[x])<4) maskw[x] = 110;
else if (abs(nxtp[x]-srcpp[x])<4 && abs(nxtp[x]-srcpn[x])<4) maskw[x] = 130;
else maskw[x] = 60;
++x;
t1 = (abs(srcpp[x] - prvpp[x]) < mthreshC);
t2 = (abs(srcpn[x] - prvpn[x]) < mthreshC);
t3 = (abs(srcpp[x] - nxtpp[x]) < mthreshC);
t4 = (abs(srcpn[x] - nxtpn[x]) < mthreshC);
t5 = (abs(srcp[x] - prvp[x]) < mthreshC);
t6 = (abs(srcp[x] - nxtp[x]) < mthreshC);
t7 = (abs(nxtp[x] - nxt2p[x]) < mthreshC);
t8 = (abs(prvpp[x] - prv2pp[x]) < mthreshC);
t9 = (abs(prvpn[x] - prv2pn[x]) < mthreshC);
t10 = (abs(nxtpp[x] - nxt2pp[x]) < mthreshC);
t11 = (abs(nxtpn[x] - nxt2pn[x]) < mthreshC);
t12 = (abs(srcpp[x] - prv2pp[x]) < mthreshC);
t13 = (abs(srcpn[x] - prv2pn[x]) < mthreshC);
t14 = (abs(nxtpp[x] - prvpp[x]) < mthreshC);
t15 = (abs(nxtpn[x] - prvpn[x]) < mthreshC);
t16 = (abs(nxt2pp[x] - srcpp[x]) < mthreshC);
t17 = (abs(nxt2pn[x] - srcpn[x]) < mthreshC);
t18 = (abs(nxtp[x] - prvp[x]) < mthreshC);
t19 = (abs(nxt2p[x] - srcp[x]) < mthreshC);
if (t6 && ((t1 && t2 && ((t3 && t4 && t14 && t15) || (t5 && t18))) ||
(t3 && t4 && t7 && t19) ||
(t5 && t18 && ((t1 && t3 && t14) || (t2 && t4 && t15) || (t1 && t8 && t12) || (t2 && t9 && t13))) ||
(t7 && t19 && ((t1 && t3 && t14) || (t2 && t4 && t15) || (t3 && t10 && t16) || (t4 && t11 && t17)))))
maskw[x] = val1;
else if (t1 && t2 && t3 && t4 && t5 && t7 && t14 && t15) maskw[x] = val1;
else if (t1 && t5 && t2 && t8 && t9 && t12 && t13) maskw[x] = 10;
else if (t3 && t7 && t4 && t10 && t11 && t16 && t17) maskw[x] = 30;
else if (abs(srcp[x]-srcpp[x])<4 && abs(srcp[x]-srcpn[x])<4) maskw[x] = 110;
else if (abs(nxtp[x]-srcpp[x])<4 && abs(nxtp[x]-srcpn[x])<4) maskw[x] = 130;
else maskw[x] = 60;
}
prv2pp += prv2_pitch;
prv2p += prv2_pitch;
prv2pn += prv2_pitch;
prvpp += prv_pitch;
prvp += prv_pitch;
prvpn += prv_pitch;
srcpp += src_pitch;
srcp += src_pitch;
srcpn += src_pitch;
nxtpp += nxt_pitch;
nxtp += nxt_pitch;
nxtpn += nxt_pitch;
nxt2pp += nxt2_pitch;
nxt2p += nxt2_pitch;
nxt2pn += nxt2_pitch;
maskw += mask_pitch;
}
}
}
else
{
val1 = mtnmode > 1 ? (accumP < accumN ? 20 : 10) : 50;
if (n <= 1 || n >= nfrms-1)
{
for (y=1; y<Height-1; y+=2)
{
for (x=0; x<Width; ++x)
{
t1 = n == 0 ? false : (abs(srcpp[x] - prvpp[x]) < mthreshL);
t2 = n == 0 ? false : (abs(srcpn[x] - prvpn[x]) < mthreshL);
t3 = n == nfrms ? false : (abs(srcpp[x] - nxtpp[x]) < mthreshL);
t4 = n == nfrms ? false : (abs(srcpn[x] - nxtpn[x]) < mthreshL);
t5 = n <= 1 ? false : (abs(prvp[x] - prv2p[x]) < mthreshL);
t6 = n == 0 ? false : (abs(srcp[x] - prvp[x]) < mthreshL);
t7 = n == nfrms ? false : (abs(srcp[x] - nxtp[x]) < mthreshL);
t8 = n <= 1 ? false : (abs(prvpp[x] - prv2pp[x]) < mthreshL);
t9 = n <= 1 ? false : (abs(prvpn[x] - prv2pn[x]) < mthreshL);
t10 = n >= nfrms-1 ? false : (abs(nxtpp[x] - nxt2pp[x]) < mthreshL);
t11 = n >= nfrms-1 ? false : (abs(nxtpn[x] - nxt2pn[x]) < mthreshL);
t12 = (abs(srcpp[x] - prv2pp[x]) < mthreshL);
t13 = (abs(srcpn[x] - prv2pn[x]) < mthreshL);
t14 = (abs(nxtpp[x] - prvpp[x]) < mthreshL);
t15 = (abs(nxtpn[x] - prvpn[x]) < mthreshL);
t16 = (abs(nxt2pp[x] - srcpp[x]) < mthreshL);
t17 = (abs(nxt2pn[x] - srcpn[x]) < mthreshL);
t18 = (abs(srcp[x] - prv2p[x]) < mthreshL);
t19 = (abs(nxtp[x] - prvp[x]) < mthreshL);
if (t6 && ((t1 && t2 && ((t3 && t4 && t14 && t15) || (t5 && t18))) ||
(t3 && t4 && t7 && t19) ||
(t5 && t18 && ((t1 && t3 && t14) || (t2 && t4 && t15) || (t1 && t8 && t12) || (t2 && t9 && t13))) ||
(t7 && t19 && ((t1 && t3 && t14) || (t2 && t4 && t15) || (t3 && t10 && t16) || (t4 && t11 && t17)))))
maskw[x] = val1;
else if (t1 && t2 && t3 && t4 && t5 && t7 && t14 && t15) maskw[x] = val1;
else if (t1 && t5 && t2 && t8 && t9 && t12 && t13) maskw[x] = 20;
else if (t3 && t7 && t4 && t10 && t11 && t16 && t17) maskw[x] = 10;
else if (abs(prvp[x]-srcpp[x])<4 && abs(prvp[x]-srcpn[x])<4) maskw[x] = 120;
else if (abs(srcp[x]-srcpp[x])<4 && abs(srcp[x]-srcpn[x])<4) maskw[x] = 110;
else maskw[x] = 60;
++x;
t1 = n == 0 ? false : (abs(srcpp[x] - prvpp[x]) < mthreshC);
t2 = n == 0 ? false : (abs(srcpn[x] - prvpn[x]) < mthreshC);
t3 = n == nfrms ? false : (abs(srcpp[x] - nxtpp[x]) < mthreshC);
t4 = n == nfrms ? false : (abs(srcpn[x] - nxtpn[x]) < mthreshC);
t5 = n <= 1 ? false : (abs(prvp[x] - prv2p[x]) < mthreshC);
t6 = n == 0 ? false : (abs(srcp[x] - prvp[x]) < mthreshC);
t7 = n == nfrms ? false : (abs(srcp[x] - nxtp[x]) < mthreshC);
t8 = n <= 1 ? false : (abs(prvpp[x] - prv2pp[x]) < mthreshC);
t9 = n <= 1 ? false : (abs(prvpn[x] - prv2pn[x]) < mthreshC);
t10 = n >= nfrms-1 ? false : (abs(nxtpp[x] - nxt2pp[x]) < mthreshC);
t11 = n >= nfrms-1 ? false : (abs(nxtpn[x] - nxt2pn[x]) < mthreshC);
t12 = (abs(srcpp[x] - prv2pp[x]) < mthreshC);
t13 = (abs(srcpn[x] - prv2pn[x]) < mthreshC);
t14 = (abs(nxtpp[x] - prvpp[x]) < mthreshC);
t15 = (abs(nxtpn[x] - prvpn[x]) < mthreshC);
t16 = (abs(nxt2pp[x] - srcpp[x]) < mthreshC);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -