⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umc_vc1_dec_task_store.cpp

📁 audio-video-codecs.rar语音编解码器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                        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 + -