📄 umc_vc1_dec_blk.cpp
字号:
sMB->m_pSingleBlock[blk_num].numCoef = VC1_SBP_0;
DecodeBlockInter8x8_VC1(&pContext->m_bitstream,
m_pBlock, curr_scan,
picHeader->m_pCurrInterACDecSet,
&pContext->m_pSingleMB->EscInfo, VC1_SBP_0);
}
break;
case VC1_BLK_INTER8X4:
{
#ifdef VC1_DEBUG_ON
VM_Debug::GetInstance(VC1DebugRoutine).vm_debug_frame(-1,VC1_COEFFS,
"Inter 8x4\n");
#endif
curr_scan = sMB->ZigzagTable[VC1_BlockTable[pBlock->blkType]];
if(curr_scan==NULL)
return VC1_FAIL;
if (sMB->m_ubNumFirstCodedBlk < blk_num || picHeader->TTFRM == pBlock->blkType)
numCoef = GetSubBlockPattern_8x4_4x8(pContext, blk_num);
else
numCoef = sMB->m_pSingleBlock[blk_num].numCoef;
DecodeBlockInter8x4_VC1(&pContext->m_bitstream,
m_pBlock,
curr_scan, picHeader->m_pCurrInterACDecSet,
&pContext->m_pSingleMB->EscInfo, numCoef);
}
break;
case VC1_BLK_INTER4X8:
{
#ifdef VC1_DEBUG_ON
VM_Debug::GetInstance(VC1DebugRoutine).vm_debug_frame(-1,VC1_COEFFS,
"Inter 4x8\n");
#endif
curr_scan = sMB->ZigzagTable[VC1_BlockTable[pBlock->blkType]];
if(curr_scan==NULL)
return VC1_FAIL;
if (sMB->m_ubNumFirstCodedBlk < blk_num || picHeader->TTFRM ==
pBlock->blkType)
numCoef = GetSubBlockPattern_8x4_4x8(pContext, blk_num);
else
numCoef = sMB->m_pSingleBlock[blk_num].numCoef;
DecodeBlockInter4x8_VC1(&pContext->m_bitstream, m_pBlock,
curr_scan,
picHeader->m_pCurrInterACDecSet,
&pContext->m_pSingleMB->EscInfo, numCoef);
}
break;
case VC1_BLK_INTER4X4:
{
#ifdef VC1_DEBUG_ON
VM_Debug::GetInstance(VC1DebugRoutine).vm_debug_frame(-1,VC1_COEFFS,
"Inter 4x4\n");
#endif
curr_scan = sMB->ZigzagTable[VC1_BlockTable[pBlock->blkType]];
if(curr_scan==NULL)
return VC1_FAIL;
numCoef = GetSubBlockPattern_4x4(pContext, blk_num);
DecodeBlockInter4x4_VC1(&pContext->m_bitstream, m_pBlock,
curr_scan, picHeader->m_pCurrInterACDecSet,
&pContext->m_pSingleMB->EscInfo, numCoef);
}
break;
case VC1_BLK_INTER:
{
numCoef = GetTTBLK(pContext, blk_num);
curr_scan = sMB->ZigzagTable[VC1_BlockTable[pBlock->blkType]];
if(curr_scan==NULL)
return VC1_FAIL;
switch (pBlock->blkType)
{
case VC1_BLK_INTER8X8:
{
#ifdef VC1_DEBUG_ON
VM_Debug::GetInstance(VC1DebugRoutine).vm_debug_frame(-1,VC1_COEFFS,
"Inter\n");
#endif
DecodeBlockInter8x8_VC1(&pContext->m_bitstream, m_pBlock,
curr_scan, picHeader->m_pCurrInterACDecSet,
&pContext->m_pSingleMB->EscInfo, VC1_SBP_0);
}
break;
case VC1_BLK_INTER8X4:
{
#ifdef VC1_DEBUG_ON
VM_Debug::GetInstance(VC1DebugRoutine).vm_debug_frame(-1,VC1_COEFFS,
"Inter 8x4\n");
#endif
DecodeBlockInter8x4_VC1(&pContext->m_bitstream, m_pBlock,
curr_scan, picHeader->m_pCurrInterACDecSet,
&pContext->m_pSingleMB->EscInfo, numCoef);
}
break;
case VC1_BLK_INTER4X8:
{
#ifdef VC1_DEBUG_ON
VM_Debug::GetInstance(VC1DebugRoutine).vm_debug_frame(-1,VC1_COEFFS,
"Inter 4x8\n");
#endif
DecodeBlockInter4x8_VC1(&pContext->m_bitstream, m_pBlock,
curr_scan, picHeader->m_pCurrInterACDecSet,
&pContext->m_pSingleMB->EscInfo, numCoef);
}
break;
case VC1_BLK_INTER4X4:
{
#ifdef VC1_DEBUG_ON
VM_Debug::GetInstance(VC1DebugRoutine).vm_debug_frame(-1,VC1_COEFFS,
"Inter 4x4\n");
#endif
numCoef = GetSubBlockPattern_4x4(pContext, blk_num);
DecodeBlockInter4x4_VC1(&pContext->m_bitstream, m_pBlock,
curr_scan,picHeader->m_pCurrInterACDecSet,
&pContext->m_pSingleMB->EscInfo, numCoef);
}
break;
}
}
break;
default:
VM_ASSERT(0);
}
STATISTICS_END_TIME(m_timeStatistics->decoding_Inter_StartTime,
m_timeStatistics->decoding_Inter_EndTime,
m_timeStatistics->decoding_Inter_TotalTime);
}
#ifdef VC1_DEBUG_ON
//NEED!
VM_Debug::GetInstance(VC1DebugRoutine).vm_debug_frame(-1,VC1_COEFFS,
"Block %d\n", blk_num);
for(Ipp32u k = 0; k<8; k++)
{
for (Ipp32u t = 0; t<8; t++)
{
VM_Debug::GetInstance(VC1DebugRoutine).vm_debug_frame(-1,VC1_COEFFS,
"%d ",m_pBlock[k*16 + t]);
}
VM_Debug::GetInstance(VC1DebugRoutine).vm_debug_frame(-1,VC1_COEFFS, "\n");
}
#endif
return VC1_OK;
}
VC1Status BLKLayer_Inter_Chroma(VC1Context* pContext, Ipp32s blk_num)
{
Ipp16s* m_pBlock = pContext->m_pBlock + VC1_BlkStart[blk_num];
VC1Block* pBlock = &pContext->m_pCurrMB->m_pBlocks[blk_num];
const Ipp8u* curr_scan = NULL;
Ipp8u numCoef = 0;
VC1SingletonMB* sMB = pContext->m_pSingleMB;
VC1PictureLayerHeader * picHeader = pContext->m_picLayerHeader;
STATISTICS_START_TIME(m_timeStatistics->decoding_Inter_StartTime);
if(pContext->m_pCurrMB->m_cbpBits & (1<<(5-blk_num)))
{
switch (pBlock->blkType)
{
case VC1_BLK_INTER8X8:
{
curr_scan = sMB->ZigzagTable[VC1_BlockTable[pBlock->blkType]];
if(curr_scan==NULL)
return VC1_FAIL;
sMB->m_pSingleBlock[blk_num].numCoef = VC1_SBP_0;
DecodeBlockInter8x8_VC1(&pContext->m_bitstream, m_pBlock,
curr_scan,picHeader->m_pCurrInterACDecSet,
&pContext->m_pSingleMB->EscInfo, VC1_SBP_0);
}
break;
case VC1_BLK_INTER8X4:
{
curr_scan = sMB->ZigzagTable[VC1_BlockTable[pBlock->blkType]];
if(curr_scan==NULL)
return VC1_FAIL;
if (sMB->m_ubNumFirstCodedBlk < blk_num || picHeader->TTFRM == pBlock->blkType)
numCoef = GetSubBlockPattern_8x4_4x8(pContext, blk_num);
else
numCoef = sMB->m_pSingleBlock[blk_num].numCoef;
DecodeBlockInter8x4_VC1(&pContext->m_bitstream, m_pBlock,
curr_scan,picHeader->m_pCurrInterACDecSet,
&pContext->m_pSingleMB->EscInfo, numCoef);
}
break;
case VC1_BLK_INTER4X8:
{
curr_scan =sMB->ZigzagTable[VC1_BlockTable[pBlock->blkType]];
if(curr_scan==NULL)
return VC1_FAIL;
if (sMB->m_ubNumFirstCodedBlk < blk_num || picHeader->TTFRM == pBlock->blkType)
numCoef = GetSubBlockPattern_8x4_4x8(pContext, blk_num);
else
numCoef = sMB->m_pSingleBlock[blk_num].numCoef;
DecodeBlockInter4x8_VC1(&pContext->m_bitstream, m_pBlock,
curr_scan, picHeader->m_pCurrInterACDecSet,
&pContext->m_pSingleMB->EscInfo, numCoef);
}
break;
case VC1_BLK_INTER4X4:
{
curr_scan = sMB->ZigzagTable[VC1_BlockTable[pBlock->blkType]];
if(curr_scan==NULL)
return VC1_FAIL;
numCoef = GetSubBlockPattern_4x4(pContext, blk_num);
DecodeBlockInter4x4_VC1(&pContext->m_bitstream, m_pBlock,
curr_scan,picHeader->m_pCurrInterACDecSet,
&pContext->m_pSingleMB->EscInfo, numCoef);
}
break;
case VC1_BLK_INTER:
{
numCoef = GetTTBLK(pContext, blk_num);
curr_scan = sMB->ZigzagTable[VC1_BlockTable[pBlock->blkType]];
if(curr_scan==NULL)
return VC1_FAIL;
switch (pBlock->blkType)
{
case VC1_BLK_INTER8X8:
DecodeBlockInter8x8_VC1(&pContext->m_bitstream, m_pBlock,
curr_scan, picHeader->m_pCurrInterACDecSet,
&pContext->m_pSingleMB->EscInfo, VC1_SBP_0);
break;
case VC1_BLK_INTER8X4:
DecodeBlockInter8x4_VC1(&pContext->m_bitstream, m_pBlock,
curr_scan, picHeader->m_pCurrInterACDecSet,
&pContext->m_pSingleMB->EscInfo, numCoef);
break;
case VC1_BLK_INTER4X8:
DecodeBlockInter4x8_VC1(&pContext->m_bitstream, m_pBlock,
curr_scan, picHeader->m_pCurrInterACDecSet,
&pContext->m_pSingleMB->EscInfo, numCoef);
break;
case VC1_BLK_INTER4X4:
numCoef = GetSubBlockPattern_4x4(pContext, blk_num);
DecodeBlockInter4x4_VC1(&pContext->m_bitstream, m_pBlock,
curr_scan,picHeader->m_pCurrInterACDecSet,
&pContext->m_pSingleMB->EscInfo, numCoef);
break;
}
}
break;
default:
VM_ASSERT(0);
}
STATISTICS_END_TIME(m_timeStatistics->decoding_Inter_StartTime,
m_timeStatistics->decoding_Inter_EndTime,
m_timeStatistics->decoding_Inter_TotalTime);
}
#ifdef VC1_DEBUG_ON
//NEED!
VM_Debug::GetInstance(VC1DebugRoutine).vm_debug_frame(-1,VC1_COEFFS,
"Block %d\n", blk_num);
for(Ipp32u k = 0; k<8; k++)
{
for (Ipp32u t = 0; t<8; t++)
{
VM_Debug::GetInstance(VC1DebugRoutine).vm_debug_frame(-1,VC1_COEFFS,
"%d ", m_pBlock[k*8 + t]);
}
VM_Debug::GetInstance(VC1DebugRoutine).vm_debug_frame(-1,VC1_COEFFS, "\n");
}
#endif
return VC1_OK;
}
#endif //UMC_ENABLE_VC1_VIDEO_DECODER
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -