📄 umc_vc1_dec_seq.h
字号:
{
pMB->m_pBlocks[Count].mv[Backwards][0] = (Ipp16s)MVx;
pMB->m_pBlocks[Count].mv[Backwards][1] = (Ipp16s)MVy;
}
}
else if((pMB->mbType&0x03) == VC1_MB_2MV_INTER)
{
for(Count = 0; Count < 2; Count++)
{
pMB->m_pBlocks[Count+blk_num].mv[Backwards][0] = (Ipp16s)MVx;
pMB->m_pBlocks[Count+blk_num].mv[Backwards][1] = (Ipp16s)MVy;
}
}
else /* 4MV */
{
pMB->m_pBlocks[blk_num].mv[Backwards][0] = (Ipp16s)MVx;
pMB->m_pBlocks[blk_num].mv[Backwards][1] = (Ipp16s)MVy;
}
*pMVx = MVx;
*pMVy = MVy;
//#ifdef VC1_DEBUG_ON
// VM_Debug::GetInstance().vm_debug_frame(-1,VC1_MV,VM_STRING("ApplyPred : MV_X = %d, MV_Y = %d\n"),MVx, MVy);
//#endif
}
/* Apply MVPrediction need to lead to ApplyMVPredictionCalculate*/
void ApplyMVPredictionCalculate (VC1Context* pContext,
Ipp16s* pMVx,
Ipp16s* pMVy,
Ipp32s dmv_x,
Ipp32s dmv_y);
void ApplyMVPredictionCalculateOneReference( VC1PictureLayerHeader* picLayerHeader,
Ipp16s* pMVx,
Ipp16s* pMVy,
Ipp32s dmv_x,
Ipp32s dmv_y,
Ipp8u same_polatity);
void ApplyMVPredictionCalculateTwoReference( VC1PictureLayerHeader* picLayerHeader,
Ipp16s* pMVx,
Ipp16s* pMVy,
Ipp32s dmv_x,
Ipp32s dmv_y,
Ipp8u same_polatity);
void Decode_BMVTYPE (VC1Context* pContext);
void Decode_InterlaceFrame_BMVTYPE (VC1Context* pContext);
void Decode_InterlaceField_BMVTYPE (VC1Context* pContext);
void CalculateMV (Ipp16s x[],Ipp16s y[], Ipp16s *X, Ipp16s* Y);
void CalculateMV_Interlace (Ipp16s x[],Ipp16s y[],
Ipp16s x_bottom[],Ipp16s y_bottom[],
Ipp16s *Xt, Ipp16s* Yt,Ipp16s *Xb, Ipp16s* Yb );
void CalculateMV_InterlaceField (VC1Context* pContext,Ipp16s x[],Ipp16s y[],
Ipp16s *X, Ipp16s* Y);
void Scale_Direct_MV (VC1PictureLayerHeader* picHeader, Ipp16s X, Ipp16s Y,
Ipp16s* Xf, Ipp16s* Yf,Ipp16s* Xb, Ipp16s* Yb);
void Scale_Direct_MV_Interlace(VC1PictureLayerHeader* picHeader, Ipp16s X, Ipp16s Y,
Ipp16s* Xf, Ipp16s* Yf,Ipp16s* Xb, Ipp16s* Yb);
void PullBack_PPred(VC1Context* pContext, Ipp16s *pMVx, Ipp16s* pMVy, Ipp32s blk_num);
void PullBack_PPred4MV(VC1SingletonMB* sMB, Ipp16s *pMVx, Ipp16s* pMVy, Ipp32s blk_num);
void AssignCodedBlockPattern (VC1MB * pMB,VC1SingletonMB* sMB);
Ipp8u GetSubBlockPattern_8x4_4x8 (VC1Context* pContext,Ipp32s num_blk);
Ipp8u GetSubBlockPattern_4x4 (VC1Context* pContext,Ipp32s num_blk);
Ipp32u GetDCStepSize (Ipp32s MQUANT);
inline Ipp16s median3(Ipp16s* pSrc)
{
if(pSrc[0] > pSrc[1])
{
if(pSrc[1]>pSrc[2])
return pSrc[1];
if(pSrc[0]>pSrc[2])
return pSrc[2];
else
return pSrc[0];
}
else
{
if(pSrc[0]>pSrc[2])
return pSrc[0];
if(pSrc[1]>pSrc[2])
return pSrc[2];
else
return pSrc[1];
}
}
inline Ipp16s median4(Ipp16s* pSrc)
{
Ipp16s max, min;
Ipp16s med;
static IppiSize size = {1,4};
ippiMinMax_16s_C1R(pSrc, 2, size, &min, &max);
med = (pSrc[0]+ pSrc[1] + pSrc[2] + pSrc[3] - max - min) / 2;
return med;
}
inline
Ipp16u vc1_abs_16s(Ipp16s pSrc)
{
Ipp16u S;
S = pSrc >> 15;
S = (pSrc + S)^S;
return S;
}
void ExpandMBRowSM(VC1Context* pContext, Ipp32s StartMBPos, Ipp32s EndMBPos);
void DecodeTransformInfo (VC1Context* pContext);
VC1Status GetTTMB (VC1Context* pContext);
//MV prediction
//common
void DeriveSecondStageChromaMV (VC1Context* pContext,
Ipp16s* xMV,
Ipp16s* yMV);
void DeriveSecondStageChromaMV_Interlace (VC1Context* pContext,
Ipp16s* xMV,
Ipp16s* yMV);
void save_MV (VC1Context* pContext);
void save_MV_InterlaceField (VC1Context* pContext);
void save_MV_InterlaceFrame (VC1Context* pContext);
inline void Derive4MV(VC1SingletonMB* sMB, Ipp16s* xMV, Ipp16s* yMV)
{
Ipp32u _MVcount = sMB->MVcount;
Ipp16s* xLuMV = sMB->xLuMV;
Ipp16s* yLuMV = sMB->yLuMV;
switch(_MVcount)
{
case 0:
case 1:
{
*xMV = VC1_MVINTRA;
*yMV = VC1_MVINTRA;
return;
}
case 2:
{
*xMV = (xLuMV[0] + xLuMV[1]) / 2;
*yMV = (yLuMV[0] + yLuMV[1]) / 2;
return;
}
case 3:
{
*xMV = median3(xLuMV);
*yMV = median3(yLuMV);
return;
}
case 4:
{
*xMV = median4(xLuMV);
*yMV = median4(yLuMV);
return;
}
}
}
void Derive4MV_Field (Ipp32u _MVcount,
Ipp16s* xMV, Ipp16s* yMV,
Ipp16s* xLuMV, Ipp16s* yLuMV);
void GetPredictProgressiveMV (VC1Block *pA,
VC1Block *pB,
VC1Block *pC,
Ipp16s *pX,
Ipp16s *pY,
Ipp32s Back);
void HybridMV (VC1Context* pContext,
VC1Block *pA,
VC1Block *pC,
Ipp16s *pPredMVx,
Ipp16s *pPredMVy,
Ipp32s Back);
void CalculateMV (Ipp16s x[],
Ipp16s y[],
Ipp16s *X,
Ipp16s* Y);
void Decode_BMVTYPE (VC1Context* pContext);
void Decode_InterlaceFrame_BMVTYPE (VC1Context* pContext);
VC1Status MVRangeDecode (VC1Context* pContext);
VC1Status PredictBlock_P (VC1Context* pContext);
VC1Status PredictBlock_B (VC1Context* pContext);
VC1Status PredictBlock_InterlacePPicture (VC1Context* pContext);
VC1Status PredictBlock_InterlaceBPicture (VC1Context* pContext);
VC1Status PredictBlock_InterlaceFieldPPicture (VC1Context* pContext);
VC1Status PredictBlock_InterlaceFieldBPicture (VC1Context* pContext);
void CropLumaPullBack (VC1Context* pContext,
Ipp16s* xMV, Ipp16s* yMV);
void CropChromaPullBack (VC1Context* pContext,
Ipp16s* xMV, Ipp16s* yMV);
#define PullBack_BDirect CropChromaPullBack // same algorithm
void ExpandFrame (Frame* pFrame,
IppiSize roiSize);
void ExpandFrame_Adv (VC1Context* pContext,
Frame* pFrame);
void ExpandFrame_Interlace (VC1Context* pContext,
Frame* pFrame);
void ExpandFrame_Field (VC1Context* pContext,
Frame* pFrame,
Ipp32u bottom_field);
VC1Status EntryPointLayer (VC1Context* m_pContext);
VC1Status FillTablesForIntensityCompensation (VC1Context* pContext,
Ipp32u scale,
Ipp32u shift);
VC1Status FillTablesForIntensityCompensation_Adv (VC1Context* pContext,
Ipp32u scale,
Ipp32u shift,
Ipp32u bottom_field,
Ipp32s index);
void VC1CompensateFrame (VC1Context* pContext,
VC1PictureLayerHeader* SecFieldPicLayerHeader);
void VC1CompensateFrame (VC1Context* pContext);
void VC1_copy_field (VC1Context*pContext,
Ipp32u bottom);
VC1Status Set_MQuant (VC1Context* pContext);
VC1Status Set_MQuant_Field (VC1Context* pContext);
VC1Status Set_Alt_MQUANT (VC1Context* pContext);
void GetMQUANT (VC1Context* pContext);
//advanced
void CropLumaPullBack_Adv (VC1Context* pContext,
Ipp16s* xMV,
Ipp16s* yMV);
void CropLumaPullBackField_Adv (VC1Context* pContext,
Ipp16s* xMV,
Ipp16s* yMV);
void CropChromaPullBack_Adv (VC1Context* pContext,
Ipp16s* xMV,
Ipp16s* yMV);
void CalculateProgressive1MV (VC1Context* pContext,
Ipp16s *pPredMVx,
Ipp16s *pPredMVy);
void CalculateProgressive4MV (VC1Context* pContext,
Ipp16s *pPredMVx,
Ipp16s *pPredMVy,
Ipp32s blk_num);
void CalculateProgressive4MV_Adv (VC1Context* pContext,
Ipp16s *pPredMVx,Ipp16s *pPredMVy,
Ipp32s blk_num);
void CalculateProgressive1MV_B (VC1Context* pContext,
Ipp16s *pPredMVx,
Ipp16s *pPredMVy,
Ipp32s Back);
void CalculateProgressive1MV_B_Adv (VC1Context* pContext,
Ipp16s *pPredMVx,
Ipp16s *pPredMVy,
Ipp32s Back);
void CalculateInterlaceFrame1MV_P (VC1MVPredictors* MVPredictors,
Ipp16s *pPredMVx,
Ipp16s *pPredMVy);
void CalculateInterlaceFrame1MV_B (VC1MVPredictors* MVPredictors,
Ipp16s *f_x,Ipp16s *f_y,
Ipp16s *b_x,Ipp16s *b_y,
Ipp32u back);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -