📄 umc_vc1_dec_mb_com.cpp
字号:
//chroma
//block 4
DCPred.DC[11] = pC->DCBlkPred[4].DC;
DCPred.ACTOP[11] = pC->DCBlkPred[4].ACTOP;
DCPred.ACLEFT[11] = pC->DCBlkPred[4].ACLEFT;
//block 5
DCPred.DC[13] = pC->DCBlkPred[5].DC,QurrQuant;
DCPred.ACTOP[13] = pC->DCBlkPred[5].ACTOP;
DCPred.ACLEFT[13] = pC->DCBlkPred[5].ACLEFT;
}
break;
case (VC1_LEFT_MB):
{
pA = CurrDC - width;
DCPred.BlkPattern[0] = 4;
DCPred.BlkPattern[1] = 7;
DCPred.BlkPattern[2] = 4;
DCPred.BlkPattern[3] = 7;
DCPred.BlkPattern[4] = 4;
DCPred.BlkPattern[5] = 4;
DCPred.DoubleQuant[0] = pA->DoubleQuant;
//Luma
DCPred.DC[6] = pA->DCBlkPred[2].DC;
DCPred.ACTOP[6] = pA->DCBlkPred[2].ACTOP;
DCPred.ACLEFT[6] = pA->DCBlkPred[2].ACLEFT;
DCPred.DC[7] = pA->DCBlkPred[3].DC;
DCPred.ACTOP[7] = pA->DCBlkPred[3].ACTOP;
DCPred.ACLEFT[7] = pA->DCBlkPred[3].ACLEFT;
//chroma
//block 4
DCPred.DC[10] = pA->DCBlkPred[4].DC;
DCPred.ACTOP[10] = pA->DCBlkPred[4].ACTOP;
DCPred.ACLEFT[10] = pA->DCBlkPred[4].ACLEFT;
//block 5
DCPred.DC[12] = pA->DCBlkPred[5].DC;
DCPred.ACTOP[12] = pA->DCBlkPred[5].ACTOP;
DCPred.ACLEFT[12] = pA->DCBlkPred[5].ACLEFT;
break;
case (VC1_TOP_LEFT_MB):
{
DCPred.BlkPattern[0] = 0;
DCPred.BlkPattern[1] = 1;
DCPred.BlkPattern[2] = 4;
DCPred.BlkPattern[3] = 7;
DCPred.BlkPattern[4] = 0;
DCPred.BlkPattern[5] = 0;
}
break;
}
}
memcpy(&pContext->DCPred, &DCPred,sizeof(VC1DCPredictors));
}
void GetPScaleDCPredictors(VC1Context* pContext)
{
VC1DCMBParam* CurrDC = pContext->CurrDC;
VC1DCPredictors DCPred;
Ipp32u QurrQuant = CurrDC->DoubleQuant;
Ipp32u QurrDCStep = CurrDC->DCStepSize;
VC1MB* pCurrMB = pContext->m_pCurrMB;
Ipp32u LeftTopFlag = pCurrMB->LeftTopRightPositionFlag & 0xFF0;
Ipp32s width = pContext->m_seqLayerHeader->widthMB;
VC1DCMBParam* pA = NULL, *pB = NULL, *pC = NULL;
memset(&DCPred.BlkPattern, 0, 6);
Ipp8u AIntraFlag = 0, BIntraFlag = 0, CIntraFlag = 0;
Ipp8u CurrIntraFlag = pCurrMB->IntraFlag;
DCPred.DoubleQuant[2] = QurrQuant;
DCPred.ACTOP[0] = CurrDC->DCBlkPred[0].ACTOP;
DCPred.ACLEFT[0] = CurrDC->DCBlkPred[0].ACLEFT;
DCPred.ACTOP[1] = CurrDC->DCBlkPred[1].ACTOP;
DCPred.ACLEFT[1] = CurrDC->DCBlkPred[1].ACLEFT;
DCPred.ACTOP[2] = CurrDC->DCBlkPred[2].ACTOP;
DCPred.ACLEFT[2] = CurrDC->DCBlkPred[2].ACLEFT;
switch(LeftTopFlag)
{
case (VC1_COMMON_MB):
{
pA = CurrDC - width;
AIntraFlag = (pCurrMB - width)->IntraFlag;
pB = CurrDC - width - 1;
BIntraFlag = (pCurrMB - width - 1)->IntraFlag;
pC = CurrDC - 1;
CIntraFlag = (pCurrMB - 1)->IntraFlag;
DCPred.DoubleQuant[0] = pA->DoubleQuant;
DCPred.DoubleQuant[1] = pC->DoubleQuant;
if(AIntraFlag & 0x04)
{
DCPred.DC[6] = GetScaleDC(pA->DCBlkPred[2].DC,QurrQuant,
pA->DoubleQuant, QurrDCStep,
pA->DCStepSize);
DCPred.ACTOP[6] = pA->DCBlkPred[2].ACTOP;
DCPred.ACLEFT[6] = pA->DCBlkPred[2].ACLEFT;
DCPred.BlkPattern[0]|=0x04;
DCPred.BlkPattern[1]|=0x02;
}
if(AIntraFlag & 0x08)
{
DCPred.DC[7] = GetScaleDC(pA->DCBlkPred[3].DC,QurrQuant,
pA->DoubleQuant, QurrDCStep,
pA->DCStepSize);
DCPred.ACTOP[7] = pA->DCBlkPred[3].ACTOP;
DCPred.ACLEFT[7] = pA->DCBlkPred[3].ACLEFT;
DCPred.BlkPattern[1]|=0x04;
}
if(BIntraFlag & 0x08)
{
DCPred.DC[3] = GetScaleDC(pB->DCBlkPred[3].DC,QurrQuant,
pB->DoubleQuant, QurrDCStep,
pB->DCStepSize);
DCPred.ACTOP[3] = pB->DCBlkPred[3].ACTOP;
DCPred.ACLEFT[3] = pB->DCBlkPred[3].ACLEFT;
DCPred.BlkPattern[0]|=0x02;
}
if(CIntraFlag & 0x02)
{
DCPred.DC[8] = GetScaleDC(pC->DCBlkPred[1].DC,QurrQuant,
pC->DoubleQuant, QurrDCStep,
pC->DCStepSize);
DCPred.ACTOP[8] = pC->DCBlkPred[1].ACTOP;
DCPred.ACLEFT[8] = pC->DCBlkPred[1].ACLEFT;
DCPred.BlkPattern[0]|=0x01;
DCPred.BlkPattern[2]|=0x02;
}
if(CIntraFlag & 0x08)
{
DCPred.DC[9] = GetScaleDC(pC->DCBlkPred[3].DC,QurrQuant,
pC->DoubleQuant, QurrDCStep,
pC->DCStepSize);
DCPred.ACTOP[9] = pC->DCBlkPred[3].ACTOP;
DCPred.ACLEFT[9] = pC->DCBlkPred[3].ACLEFT;
DCPred.BlkPattern[2]|=0x01;
}
if(CurrIntraFlag & 0x01)
{
DCPred.BlkPattern[1]|=0x01;
DCPred.BlkPattern[2]|=0x04;
DCPred.BlkPattern[3]|=0x02;
}
if(CurrIntraFlag & 0x02)
{
DCPred.BlkPattern[3]|=0x04;
}
if(CurrIntraFlag & 0x04)
{
DCPred.BlkPattern[3]|=0x01;
}
//block 4
if(AIntraFlag & 0x10)
{
DCPred.DC[10] = GetScaleDC(pA->DCBlkPred[4].DC,QurrQuant,
pA->DoubleQuant, QurrDCStep,
pA->DCStepSize);
DCPred.ACTOP[10] = pA->DCBlkPred[4].ACTOP;
DCPred.ACLEFT[10] = pA->DCBlkPred[4].ACLEFT;
DCPred.BlkPattern[4]|=0x04;
}
if(BIntraFlag & 0x10)
{
DCPred.DC[4] = GetScaleDC(pB->DCBlkPred[4].DC,QurrQuant,
pB->DoubleQuant, QurrDCStep,
pB->DCStepSize);
DCPred.ACTOP[4] = pB->DCBlkPred[4].ACTOP;
DCPred.ACLEFT[4] = pB->DCBlkPred[4].ACLEFT;
DCPred.BlkPattern[4]|=0x02;
}
if(CIntraFlag & 0x10)
{
DCPred.DC[11] = GetScaleDC(pC->DCBlkPred[4].DC,QurrQuant,
pC->DoubleQuant, QurrDCStep,
pC->DCStepSize);
DCPred.ACTOP[11] = pC->DCBlkPred[4].ACTOP;
DCPred.ACLEFT[11] = pC->DCBlkPred[4].ACLEFT;
DCPred.BlkPattern[4]|=0x01;
}
//block 5
if(AIntraFlag & 0x20)
{
DCPred.DC[12] = GetScaleDC(pA->DCBlkPred[5].DC,QurrQuant,
pA->DoubleQuant, QurrDCStep,
pA->DCStepSize);
DCPred.ACTOP[12] = pA->DCBlkPred[5].ACTOP;
DCPred.ACLEFT[12] = pA->DCBlkPred[5].ACLEFT;
DCPred.BlkPattern[5]|=0x04;
}
if(BIntraFlag & 0x20)
{
DCPred.DC[5] = GetScaleDC(pB->DCBlkPred[5].DC,QurrQuant,
pB->DoubleQuant, QurrDCStep,
pB->DCStepSize);
DCPred.ACTOP[5] = pB->DCBlkPred[5].ACTOP;
DCPred.ACLEFT[5] = pB->DCBlkPred[5].ACLEFT;
DCPred.BlkPattern[5]|=0x02;
}
if(CIntraFlag & 0x20)
{
DCPred.DC[13] = GetScaleDC(pC->DCBlkPred[5].DC,QurrQuant,
pC->DoubleQuant, QurrDCStep,
pC->DCStepSize);
DCPred.ACTOP[13] = pC->DCBlkPred[5].ACTOP;
DCPred.ACLEFT[13] = pC->DCBlkPred[5].ACLEFT;
DCPred.BlkPattern[5]|=0x01;
}
}
break;
case(VC1_TOP_MB):
{
pC = CurrDC - 1;
CIntraFlag = (pCurrMB - 1)->IntraFlag;
DCPred.DoubleQuant[1] = pC->DoubleQuant;
if(CIntraFlag & 0x02)
{
DCPred.DC[8] = GetScaleDC(pC->DCBlkPred[1].DC,QurrQuant,
pC->DoubleQuant, QurrDCStep,
pC->DCStepSize);
DCPred.ACTOP[8] = pC->DCBlkPred[1].ACTOP;
DCPred.ACLEFT[8] = pC->DCBlkPred[1].ACLEFT;
DCPred.BlkPattern[0]|=0x01;
DCPred.BlkPattern[2]|=0x02;
}
if(CIntraFlag & 0x08)
{
DCPred.DC[9] = GetScaleDC(pC->DCBlkPred[3].DC,QurrQuant,
pC->DoubleQuant, QurrDCStep,
pC->DCStepSize);
DCPred.ACTOP[9] = pC->DCBlkPred[3].ACTOP;
DCPred.ACLEFT[9] = pC->DCBlkPred[3].ACLEFT;
DCPred.BlkPattern[2]|=0x01;
}
if(CurrIntraFlag & 0x01)
{
DCPred.BlkPattern[1]|=0x01;
DCPred.BlkPattern[2]|=0x04;
DCPred.BlkPattern[3]|=0x02;
}
if(CurrIntraFlag & 0x02)
{
DCPred.BlkPattern[3]|=0x04;
}
if(CurrIntraFlag & 0x04)
{
DCPred.BlkPattern[3]|=0x01;
}
//block 4
if(CIntraFlag & 0x10)
{
DCPred.DC[11] = GetScaleDC(pC->DCBlkPred[4].DC,QurrQuant,
pC->DoubleQuant, QurrDCStep,
pC->DCStepSize);
DCPred.ACTOP[11] = pC->DCBlkPred[4].ACTOP;
DCPred.ACLEFT[11] = pC->DCBlkPred[4].ACLEFT;
DCPred.BlkPattern[4]|=0x01;
}
//block 5
if(CIntraFlag & 0x20)
{
DCPred.DC[13] = GetScaleDC(pC->DCBlkPred[5].DC,QurrQuant,
pC->DoubleQuant, QurrDCStep,
pC->DCStepSize);
DCPred.ACTOP[13] = pC->DCBlkPred[5].ACTOP;
DCPred.ACLEFT[13] = pC->DCBlkPred[5].ACLEFT;
DCPred.BlkPattern[5]|=0x01;
}
}
break;
case (VC1_LEFT_MB):
{
pA = CurrDC - width;
AIntraFlag = (pCurrMB - width)->IntraFlag;
DCPred.DoubleQuant[0] = pA->DoubleQuant;
if(AIntraFlag & 0x04)
{
DCPred.DC[6] = GetScaleDC(pA->DCBlkPred[2].DC,QurrQuant,
pA->DoubleQuant, QurrDCStep,
pA->DCStepSize);
DCPred.ACTOP[6] = pA->DCBlkPred[2].ACTOP;
DCPred.ACLEFT[6] = pA->DCBlkPred[2].ACLEFT;
DCPred.BlkPattern[0]|=0x04;
DCPred.BlkPattern[1]|=0x02;
}
if(AIntraFlag & 0x08)
{
DCPred.DC[7] = GetScaleDC(pA->DCBlkPred[3].DC,QurrQuant,
pA->DoubleQuant, QurrDCStep,
pA->DCStepSize);
DCPred.ACTOP[7] = pA->DCBlkPred[3].ACTOP;
DCPred.ACLEFT[7] = pA->DCBlkPred[3].ACLEFT;
DCPred.BlkPattern[1]|=0x04;
}
if(CurrIntraFlag & 0x01)
{
DCPred.BlkPattern[1]|=0x01;
DCPred.BlkPattern[2]|=0x04;
DCPred.BlkPattern[3]|=0x02;
}
if(CurrIntraFlag & 0x02)
{
DCPred.BlkPattern[3]|=0x04;
}
if(CurrIntraFlag & 0x04)
{
DCPred.BlkPattern[3]|=0x01;
}
//block 4
if(AIntraFlag & 0x10)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -