📄 tdeinterlaceyv12.cpp
字号:
t4 = (abs(srcpnU[x] - nxtpnU[x]) < mthreshC);
t5 = (abs(prvpU[x] - prv2pU[x]) < mthreshC);
t6 = (abs(srcpU[x] - prvpU[x]) < mthreshC);
t7 = (abs(srcpU[x] - nxtpU[x]) < mthreshC);
if (t6 && ((t1 && t2) || (t3 && t4) || (t2 && t4 && (t5 || t7)) || (t1 && t3 && (t5 || t7))))
maskwU[x] = val1;
else if (t1 && t2 && t3 && t4 && t5 && t7) maskwU[x] = val1;
else if (t1 && t5 && t2) maskwU[x] = 20;
else if (t3 && t7 && t4) maskwU[x] = 10;
else if (abs(prvpU[x]-srcppU[x])<4 && abs(prvpU[x]-srcpnU[x])<4) maskwU[x] = 120;
else if (abs(srcpU[x]-srcppU[x])<4 && abs(srcpU[x]-srcpnU[x])<4) maskwU[x] = 110;
else maskwU[x] = 60;
}
prv2pV += prv2_pitchUV;
prv2pU += prv2_pitchUV;
prvppV += prv_pitchUV;
prvpV += prv_pitchUV;
prvpnV += prv_pitchUV;
prvppU += prv_pitchUV;
prvpU += prv_pitchUV;
prvpnU += prv_pitchUV;
srcppV += src_pitchUV;
srcpV += src_pitchUV;
srcpnV += src_pitchUV;
srcppU += src_pitchUV;
srcpU += src_pitchUV;
srcpnU += src_pitchUV;
nxtppV += nxt_pitchUV;
nxtpV += nxt_pitchUV;
nxtpnV += nxt_pitchUV;
nxtppU += nxt_pitchUV;
nxtpU += nxt_pitchUV;
nxtpnU += nxt_pitchUV;
maskwV += mask_pitchUV;
maskwU += mask_pitchUV;
}
}
}
}
void TDeinterlace::createMotionMap2YV12(PVideoFrame &prv2, PVideoFrame &prv,
PVideoFrame &src, PVideoFrame &nxt, PVideoFrame &nxt2, PVideoFrame &mask, int n)
{
const unsigned char *prv2pY = prv2->GetReadPtr(PLANAR_Y);
const unsigned char *prv2pV = prv2->GetReadPtr(PLANAR_V);
const unsigned char *prv2pU = prv2->GetReadPtr(PLANAR_U);
int prv2_pitchY = prv2->GetPitch(PLANAR_Y);
int prv2_pitchUV = prv2->GetPitch(PLANAR_V);
prv2pY += prv2_pitchY*(2-field);
prv2pV += prv2_pitchUV*(2-field);
prv2pU += prv2_pitchUV*(2-field);
const unsigned char *prv2ppY = prv2pY - prv2_pitchY;
const unsigned char *prv2ppV = prv2pV - prv2_pitchUV;
const unsigned char *prv2ppU = prv2pU - prv2_pitchUV;
const unsigned char *prv2pnY = prv2pY + prv2_pitchY;
const unsigned char *prv2pnV = prv2pV + prv2_pitchUV;
const unsigned char *prv2pnU = prv2pU + prv2_pitchUV;
prv2_pitchY *= 2;
prv2_pitchUV *= 2;
const unsigned char *prvpY = prv->GetReadPtr(PLANAR_Y);
const unsigned char *prvpV = prv->GetReadPtr(PLANAR_V);
const unsigned char *prvpU = prv->GetReadPtr(PLANAR_U);
int prv_pitchY = prv->GetPitch(PLANAR_Y);
int prv_pitchUV = prv->GetPitch(PLANAR_V);
prvpY += prv_pitchY*(2-field);
prvpV += prv_pitchUV*(2-field);
prvpU += prv_pitchUV*(2-field);
const unsigned char *prvppY = prvpY - prv_pitchY;
const unsigned char *prvppV = prvpV - prv_pitchUV;
const unsigned char *prvppU = prvpU - prv_pitchUV;
const unsigned char *prvpnY = prvpY + prv_pitchY;
const unsigned char *prvpnV = prvpV + prv_pitchUV;
const unsigned char *prvpnU = prvpU + prv_pitchUV;
prv_pitchY *= 2;
prv_pitchUV *= 2;
const unsigned char *srcpY = src->GetReadPtr(PLANAR_Y);
const unsigned char *srcpV = src->GetReadPtr(PLANAR_V);
const unsigned char *srcpU = src->GetReadPtr(PLANAR_U);
int src_pitchY = src->GetPitch(PLANAR_Y);
int src_pitchUV = src->GetPitch(PLANAR_V);
int WidthY = src->GetRowSize(PLANAR_Y);
int HeightY = src->GetHeight(PLANAR_Y);
int WidthUV = src->GetRowSize(PLANAR_V);
int HeightUV = src->GetHeight(PLANAR_V);
srcpY += src_pitchY*(2-field);
srcpV += src_pitchUV*(2-field);
srcpU += src_pitchUV*(2-field);
const unsigned char *srcppY = srcpY - src_pitchY;
const unsigned char *srcppV = srcpV - src_pitchUV;
const unsigned char *srcppU = srcpU - src_pitchUV;
const unsigned char *srcpnY = srcpY + src_pitchY;
const unsigned char *srcpnV = srcpV + src_pitchUV;
const unsigned char *srcpnU = srcpU + src_pitchUV;
src_pitchY *= 2;
src_pitchUV *= 2;
const unsigned char *nxtpY = nxt->GetReadPtr(PLANAR_Y);
const unsigned char *nxtpV = nxt->GetReadPtr(PLANAR_V);
const unsigned char *nxtpU = nxt->GetReadPtr(PLANAR_U);
int nxt_pitchY = nxt->GetPitch(PLANAR_Y);
int nxt_pitchUV = nxt->GetPitch(PLANAR_V);
nxtpY += nxt_pitchY*(2-field);
nxtpV += nxt_pitchUV*(2-field);
nxtpU += nxt_pitchUV*(2-field);
const unsigned char *nxtppY = nxtpY - nxt_pitchY;
const unsigned char *nxtppV = nxtpV - nxt_pitchUV;
const unsigned char *nxtppU = nxtpU - nxt_pitchUV;
const unsigned char *nxtpnY = nxtpY + nxt_pitchY;
const unsigned char *nxtpnV = nxtpV + nxt_pitchUV;
const unsigned char *nxtpnU = nxtpU + nxt_pitchUV;
nxt_pitchY *= 2;
nxt_pitchUV *= 2;
const unsigned char *nxt2pY = nxt2->GetReadPtr(PLANAR_Y);
const unsigned char *nxt2pV = nxt2->GetReadPtr(PLANAR_V);
const unsigned char *nxt2pU = nxt2->GetReadPtr(PLANAR_U);
int nxt2_pitchY = nxt2->GetPitch(PLANAR_Y);
int nxt2_pitchUV = nxt2->GetPitch(PLANAR_V);
nxt2pY += nxt2_pitchY*(2-field);
nxt2pV += nxt2_pitchUV*(2-field);
nxt2pU += nxt2_pitchUV*(2-field);
const unsigned char *nxt2ppY = nxt2pY - nxt2_pitchY;
const unsigned char *nxt2ppV = nxt2pV - nxt2_pitchUV;
const unsigned char *nxt2ppU = nxt2pU - nxt2_pitchUV;
const unsigned char *nxt2pnY = nxt2pY + nxt2_pitchY;
const unsigned char *nxt2pnV = nxt2pV + nxt2_pitchUV;
const unsigned char *nxt2pnU = nxt2pU + nxt2_pitchUV;
nxt2_pitchY *= 2;
nxt2_pitchUV *= 2;
unsigned char *maskwY = mask->GetWritePtr(PLANAR_Y);
unsigned char *maskwV = mask->GetWritePtr(PLANAR_V);
unsigned char *maskwU = mask->GetWritePtr(PLANAR_U);
int mask_pitchY = mask->GetPitch(PLANAR_Y);
int mask_pitchUV = mask->GetPitch(PLANAR_V);
memset(maskwY,10,mask_pitchY*HeightY);
memset(maskwU,10,mask_pitchUV*HeightUV);
memset(maskwV,10,mask_pitchUV*HeightUV);
maskwY += mask_pitchY*(2-field);
maskwV += mask_pitchUV*(2-field);
maskwU += mask_pitchUV*(2-field);
mask_pitchY *= 2;
mask_pitchUV *= 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<HeightY-1; y+=2)
{
for (x=0; x<WidthY; ++x)
{
t1 = n == 0 ? false : (abs(srcppY[x] - prvppY[x]) < mthreshL);
t2 = n == 0 ? false : (abs(srcpnY[x] - prvpnY[x]) < mthreshL);
t3 = n == nfrms ? false : (abs(srcppY[x] - nxtppY[x]) < mthreshL);
t4 = n == nfrms ? false : (abs(srcpnY[x] - nxtpnY[x]) < mthreshL);
t5 = n == 0 ? false : (abs(srcpY[x] - prvpY[x]) < mthreshL);
t6 = n == nfrms ? false : (abs(srcpY[x] - nxtpY[x]) < mthreshL);
t7 = n >= nfrms-1 ? false : (abs(nxtpY[x] - nxt2pY[x]) < mthreshL);
t8 = n <= 1 ? false : (abs(prvppY[x] - prv2ppY[x]) < mthreshL);
t9 = n <= 1 ? false : (abs(prvpnY[x] - prv2pnY[x]) < mthreshL);
t10 = n >= nfrms-1 ? false : (abs(nxtppY[x] - nxt2ppY[x]) < mthreshL);
t11 = n >= nfrms-1 ? false : (abs(nxtpnY[x] - nxt2pnY[x]) < mthreshL);
t12 = (abs(srcppY[x] - prv2ppY[x]) < mthreshL);
t13 = (abs(srcpnY[x] - prv2pnY[x]) < mthreshL);
t14 = (abs(nxtppY[x] - prvppY[x]) < mthreshL);
t15 = (abs(nxtpnY[x] - prvpnY[x]) < mthreshL);
t16 = (abs(nxt2ppY[x] - srcppY[x]) < mthreshL);
t17 = (abs(nxt2pnY[x] - srcpnY[x]) < mthreshL);
t18 = (abs(nxtpY[x] - prvpY[x]) < mthreshL);
t19 = (abs(nxt2pY[x] - srcpY[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)))))
maskwY[x] = val1;
else if (t1 && t2 && t3 && t4 && t5 && t7 && t14 && t15) maskwY[x] = val1;
else if (t1 && t5 && t2 && t8 && t9 && t12 && t13) maskwY[x] = 10;
else if (t3 && t7 && t4 && t10 && t11 && t16 && t17) maskwY[x] = 30;
else if (abs(srcpY[x]-srcppY[x])<4 && abs(srcpY[x]-srcpnY[x])<4) maskwY[x] = 110;
else if (abs(nxtpY[x]-srcppY[x])<4 && abs(nxtpY[x]-srcpnY[x])<4) maskwY[x] = 130;
else maskwY[x] = 60;
}
prv2ppY += prv2_pitchY;
prv2pY += prv2_pitchY;
prv2pnY += prv2_pitchY;
prvppY += prv_pitchY;
prvpY += prv_pitchY;
prvpnY += prv_pitchY;
srcppY += src_pitchY;
srcpY += src_pitchY;
srcpnY += src_pitchY;
nxtppY += nxt_pitchY;
nxtpY += nxt_pitchY;
nxtpnY += nxt_pitchY;
nxt2ppY += nxt2_pitchY;
nxt2pY += nxt2_pitchY;
nxt2pnY += nxt2_pitchY;
maskwY += mask_pitchY;
}
for (y=1; y<HeightUV-1; y+=2)
{
for (x=0; x<WidthUV; ++x)
{
t1 = n == 0 ? false : (abs(srcppV[x] - prvppV[x]) < mthreshC);
t2 = n == 0 ? false : (abs(srcpnV[x] - prvpnV[x]) < mthreshC);
t3 = n == nfrms ? false : (abs(srcppV[x] - nxtppV[x]) < mthreshC);
t4 = n == nfrms ? false : (abs(srcpnV[x] - nxtpnV[x]) < mthreshC);
t5 = n == 0 ? false : (abs(srcpV[x] - prvpV[x]) < mthreshC);
t6 = n == nfrms ? false : (abs(srcpV[x] - nxtpV[x]) < mthreshC);
t7 = n >= nfrms-1 ? false : (abs(nxtpV[x] - nxt2pV[x]) < mthreshC);
t8 = n <= 1 ? false : (abs(prvppV[x] - prv2ppV[x]) < mthreshC);
t9 = n <= 1 ? false : (abs(prvpnV[x] - prv2pnV[x]) < mthreshC);
t10 = n >= nfrms-1 ? false : (abs(nxtppV[x] - nxt2ppV[x]) < mthreshC);
t11 = n >= nfrms-1 ? false : (abs(nxtpnV[x] - nxt2pnV[x]) < mthreshC);
t12 = (abs(srcppV[x] - prv2ppV[x]) < mthreshC);
t13 = (abs(srcpnV[x] - prv2pnV[x]) < mthreshC);
t14 = (abs(nxtppV[x] - prvppV[x]) < mthreshC);
t15 = (abs(nxtpnV[x] - prvpnV[x]) < mthreshC);
t16 = (abs(nxt2ppV[x] - srcppV[x]) < mthreshC);
t17 = (abs(nxt2pnV[x] - srcpnV[x]) < mthreshC);
t18 = (abs(nxtpV[x] - prvpV[x]) < mthreshC);
t19 = (abs(nxt2pV[x] - srcpV[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)))))
maskwV[x] = val1;
else if (t1 && t2 && t3 && t4 && t5 && t7 && t14 && t15) maskwV[x] = val1;
else if (t1 && t5 && t2 && t8 && t9 && t12 && t13) maskwV[x] = 10;
else if (t3 && t7 && t4 && t10 && t11 && t16 && t17) maskwV[x] = 30;
else if (abs(srcpV[x]-srcppV[x])<4 && abs(srcpV[x]-srcpnV[x])<4) maskwV[x] = 110;
else if (abs(nxtpV[x]-srcppV[x])<4 && abs(nxtpV[x]-srcpnV[x])<4) maskwV[x] = 130;
else maskwV[x] = 60;
t1 = n == 0 ? false : (abs(srcppU[x] - prvppU[x]) < mthreshC);
t2 = n == 0 ? false : (abs(srcpnU[x] - prvpnU[x]) < mthreshC);
t3 = n == nfrms ? false : (abs(srcppU[x] - nxtppU[x]) < mthreshC);
t4 = n == nfrms ? false : (abs(srcpnU[x] - nxtpnU[x]) < mthreshC);
t5 = n == 0 ? false : (abs(srcpU[x] - prvpU[x]) < mthreshC);
t6 = n == nfrms ? false : (abs(srcpU[x] - nxtpU[x]) < mthreshC);
t7 = n >= nfrms-1 ? false : (abs(nxtpU[x] - nxt2pU[x]) < mthreshC);
t8 = n <= 1 ? false : (abs(prvppU[x] - prv2ppU[x]) < mthreshC);
t9 = n <= 1 ? false : (abs(prvpnU[x] - prv2pnU[x]) < mthreshC);
t10 = n >= nfrms-1 ? false : (abs(nxtppU[x] - nxt2ppU[x]) < mthreshC);
t11 = n >= nfrms-1 ? false : (abs(nxtpnU[x] - nxt2pnU[x]) < mthreshC);
t12 = (abs(srcppU[x] - prv2ppU[x]) < mthreshC);
t13 = (abs(srcpnU[x] - prv2pnU[x]) < mthreshC);
t14 = (abs(nxtppU[x] - prvppU[x]) < mthreshC);
t15 = (abs(nxtpnU[x] - prvpnU[x]) < mthreshC);
t16 = (abs(nxt2ppU[x] - srcppU[x]) < mthreshC);
t17 = (abs(nxt2pnU[x] - srcpnU[x]) < mthreshC);
t18 = (abs(nxtpU[x] - prvpU[x]) < mthreshC);
t19 = (abs(nxt2pU[x] - srcpU[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)))))
maskwU[x] = val1;
else if (t1 && t2 && t3 && t4 && t5 && t7 && t14 && t15) maskwU[x] = val1;
else if (t1 && t5 && t2 && t8 && t9 && t12 && t13) maskwU[x] = 10;
else if (t3 && t7 && t4 && t10 && t11 && t16 && t17) maskwU[x] = 30;
else if (abs(srcpU[x]-srcppU[x])<4 && abs(srcpU[x]-srcpnU[x])<4) maskwU[x] = 110;
else if (abs(nxtpU[x]-srcppU[x])<4 && abs(nxtpU[x]-srcpnU[x])<4) maskwU[x] = 130;
else maskwU[x] = 60;
}
prv2ppV += prv2_pitchUV;
prv2pV += prv2_pitchUV;
prv2pnV += prv2_pitchUV;
prv2ppU += prv2_pitchUV;
prv2pU += prv2_pitchUV;
prv2pnU += prv2_pitchUV;
prvppV += prv_pitchUV;
prvpV += prv_pitchUV;
prvpnV += prv_pitchUV;
prvppU += prv_pitchUV;
prvpU += prv_pitchUV;
prvpnU += prv_pitchUV;
srcppV += src_pitchUV;
srcpV += src_pitchUV;
srcpnV += src_pitchUV;
srcppU += src_pitchUV;
srcpU += src_pitchUV;
srcpnU += src_pitchUV;
nxtppV += nxt_pitchUV;
nxtpV += nxt_pitchUV;
nxtpnV += nxt_pitchUV;
nxtppU += nxt_pitchUV;
nxtpU += nxt_pitchUV;
nxtpnU += nxt_pitchUV;
nxt2ppV += nxt2_pitchUV;
nxt2pV += nxt2_pitchUV;
nxt2pnV += nxt2_pitchUV;
nxt2ppU += nxt2_pitchUV;
nxt2pU += nxt2_pitchUV;
nxt2pnU += nxt2_pitchUV;
maskwV += mask_pitchUV;
maskwU += mask_pitchUV;
}
}
else
{
for (y=1; y<HeightY-1; y+=2)
{
for (x=0; x<WidthY; ++x)
{
t1 = (abs(srcppY[x] - prvppY[x]) < mthreshL);
t2 = (abs(srcpnY[x] - prvpnY[x]) < mthreshL);
t3 = (abs(srcppY[x] - nxtppY[x]) < mthreshL);
t4 = (abs(srcpnY[x] - nxtpnY[x]) < mthreshL);
t5 = (abs(srcpY[x] - prvpY[x]) < mthreshL);
t6 = (abs(srcpY[x] - nxtpY[x]) < mthreshL);
t7 = (abs(nxtpY[x] - nxt2pY[x]) < mthreshL);
t8 = (abs(prvppY[x] - prv2ppY[x]) < mthreshL);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -