📄 umc_vc1_dec_task_store.cpp
字号:
break;
case VC1PreparePlane:
if ((VC1Complete == (*m_pCommonQueue[qID])[i]->m_eTasktype) )
{
(*m_pAdditionalQueue[qID])[i]->m_pBlock = (*m_pCommonQueue[qID])[i]->m_pBlock;
if (i > 0)
{
if ( ((*m_pAdditionalQueue[qID])[i-1]->m_eTasktype > VC1PreparePlane)||
((*m_pCommonQueue[qID])[i]->m_pSlice->is_NewInSlice))
(*m_pAdditionalQueue[qID])[i]->m_bIsReady = true;
else
(*m_pAdditionalQueue[qID])[i]->m_bIsReady = false;
}
else
(*m_pAdditionalQueue[qID])[i]->m_bIsReady = true;
} else
(*m_pAdditionalQueue[qID])[i]->m_bIsReady = false;
break;
case VC1Deblock:
if ((i+1) < m_pTasksInQueue[qID])
{
/* if (!(*m_pAdditionalQueue[qID])[i+1]->m_pSlice->is_NewInSlice)
(*m_pAdditionalQueue[qID])[i+1]->m_pSlice->smooth_info= pTask->m_pSlice->smooth_info;*/
if (((*m_pAdditionalQueue[qID])[i+1]->m_eTasktype == VC1PreparePlane)&&
((*m_pCommonQueue[qID])[i+1]->m_eTasktype == VC1Complete)&&
(!(*m_pCommonQueue[qID])[i+1]->m_pSlice->is_NewInSlice))
(*m_pAdditionalQueue[qID])[i+1]->m_bIsReady = true;
}
if (pTask->m_pSlice->m_picLayerHeader->FCM == VC1_FrameInterlace) // In case of Interlace Frames slices are depends
{
Ipp8u DeblockMask = 0; // 0 bit - Down edge, 1 bit - UP edge
if (i > 0)
{
if ((*m_pAdditionalQueue[qID])[i]->m_pSlice->is_LastInSlice)
{
//if ((*m_pAdditionalQueue[qID])[i+1])
if ((i+1) < m_pTasksInQueue[qID])
{
if ((*m_pAdditionalQueue[qID])[i+1]->m_eTasktype == VC1Deblock)
DeblockMask |= 1;
} else
DeblockMask |= 1;
} else
DeblockMask |= 1;
if ((*m_pAdditionalQueue[qID])[i-1]->m_eTasktype == VC1Complete)
DeblockMask |= 2;
if ((*m_pAdditionalQueue[qID])[i]->m_pSlice->is_NewInSlice)
{
if (i > 1)
{
if (((*m_pAdditionalQueue[qID])[i-1]->m_eTasktype == VC1Deblock)&&
((*m_pAdditionalQueue[qID])[i-2]->m_eTasktype == VC1Complete))
(*m_pAdditionalQueue[qID])[i-1]->m_bIsReady = true;
}
else if ((*m_pAdditionalQueue[qID])[i-1]->m_eTasktype == VC1Deblock)
(*m_pAdditionalQueue[qID])[i-1]->m_bIsReady = true;
}
} else
{
if ((*m_pAdditionalQueue[qID])[i]->m_pSlice->is_LastInSlice)
{
if ((i+1) < m_pTasksInQueue[qID])
{
if ((*m_pAdditionalQueue[qID])[i+1]->m_eTasktype == VC1Deblock)
DeblockMask = 3;
} else
DeblockMask = 3;
} else
DeblockMask = 3;
}
if (3 == DeblockMask)
(*m_pAdditionalQueue[qID])[i]->m_bIsReady = true;
else
(*m_pAdditionalQueue[qID])[i]->m_bIsReady = false;
}
else
{
if (i > 0)
{
if ((*m_pAdditionalQueue[qID])[i-1]->m_eTasktype == VC1Complete)//||
//((*m_pAdditionalQueue[qID])[i]->m_pSlice->is_NewInSlice))
{
(*m_pAdditionalQueue[qID])[i]->m_bIsReady = true;
}
else
(*m_pAdditionalQueue[qID])[i]->m_bIsReady = false;
}
else
{
(*m_pAdditionalQueue[qID])[i]->m_bIsReady = true;
}
}
break;
case VC1Complete:
if (!((*m_pCommonQueue[qID])[0]->IsDeblocking((*m_pCommonQueue[qID])[0]->m_pSlice->slice_settings)))
{
if ((i+1) < m_pTasksInQueue[qID])
{
/*if (!(*m_pAdditionalQueue[qID])[i+1]->m_pSlice->is_NewInSlice)
(*m_pAdditionalQueue[qID])[i+1]->m_pSlice->smooth_info= pTask->m_pSlice->smooth_info;*/
if (((*m_pAdditionalQueue[qID])[i+1]->m_eTasktype == VC1PreparePlane)&&
((*m_pCommonQueue[qID])[i+1]->m_eTasktype == VC1Complete)&&
(!(*m_pCommonQueue[qID])[i+1]->m_pSlice->is_NewInSlice))
(*m_pAdditionalQueue[qID])[i+1]->m_bIsReady = true;
}
}
if (pTask->m_pSlice->m_picLayerHeader->FCM == VC1_FrameInterlace) // Bad case of Interlace Frames slices are depends
{
if ((i+1) < m_pTasksInQueue[qID])
{
if ((i+2) < m_pTasksInQueue[qID])
{
if ((*m_pAdditionalQueue[qID])[i+1]->m_pSlice->is_LastInSlice)
{
if (((*m_pAdditionalQueue[qID])[i+2]->m_eTasktype == VC1Deblock)&&
((*m_pAdditionalQueue[qID])[i+1]->m_eTasktype == VC1Deblock))
(*m_pAdditionalQueue[qID])[i+1]->m_bIsReady = true;
} else if ((*m_pAdditionalQueue[qID])[i+1]->m_eTasktype == VC1Deblock)
(*m_pAdditionalQueue[qID])[i+1]->m_bIsReady = true;
}
else if ((*m_pAdditionalQueue[qID])[i+1]->m_eTasktype == VC1Deblock)
(*m_pAdditionalQueue[qID])[i+1]->m_bIsReady = true;
}
}
else if ((i+1) < m_pTasksInQueue[qID])
{
if (((*m_pAdditionalQueue[qID])[i+1]->m_eTasktype == VC1Deblock)&&
//(!(*m_pAdditionalQueue[qID])[i+1]->m_pSlice->is_NewInSlice))
((((*m_pAdditionalQueue[qID])[i+1]->m_isFieldReady)) ||
VC1_IS_NOT_PRED((*m_pAdditionalQueue[qID])[i+1]->m_pSlice->m_picLayerHeader->PTYPE)) )
{
(*m_pAdditionalQueue[qID])[i+1]->m_bIsReady = true;
}
//if ((*m_pAdditionalQueue[qID])[i+1]->m_isFirstInSecondSlice)
if ((m_pDescriptorQueue[qID]->m_pContext->m_picLayerHeader->FCM == VC1_FieldInterlace)&&
(m_pDescriptorQueue[qID]->m_iActiveTasksInFirstField == 0))
{
Ipp32u count;
VC1Context* pContext = m_pDescriptorQueue[qID]->m_pContext;
VC1PictureLayerHeader * picLayerHeader = GetFirstInSecondField(qID);
if (picLayerHeader)
{
if ((pContext->m_bIntensityCompensation)&&
(picLayerHeader->PTYPE == VC1_P_FRAME)&&
(m_pDescriptorQueue[qID]->m_bIsReferenceReady))
{
Ipp32u is_bottom = 0;
Ipp32u is_top = 0;
Ipp32s index_bottom = pContext->m_frmBuff.m_iPrevIndex;
Ipp32s index_top = pContext->m_frmBuff.m_iPrevIndex;
VC1_copy_field(pContext,!picLayerHeader->BottomField);
if (picLayerHeader->BottomField)
index_top = pContext->m_frmBuff.m_iCurrIndex;
else
index_bottom = pContext->m_frmBuff.m_iCurrIndex;
IppiSize roiSize;
roiSize.height = (pContext->m_seqLayerHeader->MAX_CODED_HEIGHT+1);
roiSize.width = 2*(pContext->m_seqLayerHeader->MAX_CODED_WIDTH+1);
if(VC1_IS_INT_TOP_FIELD(picLayerHeader->INTCOMFIELD))
{
Ipp32s YPitch = pContext->m_frmBuff.m_pFrames[index_top].m_iYPitch;
Ipp32s UPitch = pContext->m_frmBuff.m_pFrames[index_top].m_iUPitch;
Ipp32s VPitch = pContext->m_frmBuff.m_pFrames[index_top].m_iVPitch;
Ipp8u* pY = pContext->m_frmBuff.m_pFrames[index_top].m_pY;
Ipp8u* pU = pContext->m_frmBuff.m_pFrames[index_top].m_pU;
Ipp8u* pV = pContext->m_frmBuff.m_pFrames[index_top].m_pV;
YPitch *= 2;
UPitch *= 2;
VPitch *= 2;
is_top = 1;
STATISTICS_START_TIME(m_timeStatistics->intensity_StartTime);
ippiLUT_8u_C1IR(pY, YPitch, roiSize,pContext->LumaTable[2], vc1_dec_ic_level_tbl, 257);
roiSize.height /= 2;
roiSize.width /= 2;
ippiLUT_8u_C1IR(pU, UPitch, roiSize, pContext->ChromaTable[2], vc1_dec_ic_level_tbl, 257);
ippiLUT_8u_C1IR(pV, VPitch, roiSize, pContext->ChromaTable[2], vc1_dec_ic_level_tbl, 257);
STATISTICS_END_TIME(m_timeStatistics->intensity_StartTime,
m_timeStatistics->intensity_EndTime,
m_timeStatistics->intensity_TotalTime);
}
roiSize.height = (pContext->m_seqLayerHeader->MAX_CODED_HEIGHT+1);
roiSize.width = 2*(pContext->m_seqLayerHeader->MAX_CODED_WIDTH+1);
if(VC1_IS_INT_BOTTOM_FIELD(picLayerHeader->INTCOMFIELD) )
{
Ipp32s YPitch = pContext->m_frmBuff.m_pFrames[index_bottom].m_iYPitch;
Ipp32s UPitch = pContext->m_frmBuff.m_pFrames[index_bottom].m_iUPitch;
Ipp32s VPitch = pContext->m_frmBuff.m_pFrames[index_bottom].m_iVPitch;
Ipp8u* pY = pContext->m_frmBuff.m_pFrames[index_bottom].m_pY;
Ipp8u* pU = pContext->m_frmBuff.m_pFrames[index_bottom].m_pU;
Ipp8u* pV = pContext->m_frmBuff.m_pFrames[index_bottom].m_pV;
pY += YPitch;
pU += UPitch;
pV += VPitch;
YPitch *= 2;
UPitch *= 2;
VPitch *= 2;
is_bottom = 1;
STATISTICS_START_TIME(m_timeStatistics->intensity_StartTime);
ippiLUT_8u_C1IR(pY, YPitch, roiSize,pContext->LumaTable[3], vc1_dec_ic_level_tbl, 257);
roiSize.height /= 2;
roiSize.width /= 2;
ippiLUT_8u_C1IR(pU, UPitch, roiSize, pContext->ChromaTable[3], vc1_dec_ic_level_tbl, 257);
ippiLUT_8u_C1IR(pV, VPitch, roiSize, pContext->ChromaTable[3], vc1_dec_ic_level_tbl, 257);
STATISTICS_END_TIME(m_timeStatistics->intensity_StartTime,
m_timeStatistics->intensity_EndTime,
m_timeStatistics->intensity_TotalTime);
}
pContext->m_frmBuff.m_pFrames[index_top].m_bIsExpanded = 0;
if (is_top)
{
if (index_top == pContext->m_frmBuff.m_iCurrIndex || pContext->typeOfPreviousFrame == VC1_FieldInterlace)
ExpandFrame_Field(pContext, &pContext->m_frmBuff.m_pFrames[index_top],0);
else
{
ExpandIntens_table[pContext->typeOfPreviousFrame](pContext, &pContext->m_frmBuff.m_pFrames[index_top]);
}
}
pContext->m_frmBuff.m_pFrames[index_bottom].m_bIsExpanded = 0;
if (is_bottom)
{
if (index_bottom == pContext->m_frmBuff.m_iCurrIndex || pContext->typeOfPreviousFrame == VC1_FieldInterlace)
ExpandFrame_Field(pContext, &pContext->m_frmBuff.m_pFrames[index_bottom],1);
else
{
ExpandIntens_table[pContext->typeOfPreviousFrame](pContext, &pContext->m_frmBuff.m_pFrames[index_bottom]);
}
}
}
else
{
if ((VC1_IS_REFERENCE(picLayerHeader->PTYPE)&&
(m_pDescriptorQueue[qID]->m_bIsReferenceReady)))
pContext->m_bIntensityCompensation = 0;
}
}
//if ((picLayerHeader->PTYPE == VC1_P_FRAME)||
// (picLayerHeader->PTYPE == VC1_B_FRAME))
//{
// !!!!!!! MAY_BE. ExpandFrame_Field is used 2
pContext->m_frmBuff.m_pFrames[pContext->m_frmBuff.m_iCurrIndex].m_bIsExpanded = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -