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

📄 umc_vc1_choose_table.cpp

📁 audio-video-codecs.rar语音编解码器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    IppiSize    roiSize;
    roiSize.width  =    pContext->m_seqLayerHeader->widthMB  * VC1_PIXEL_IN_LUMA;
    roiSize.height =    HeightMB * VC1_PIXEL_IN_LUMA;

    if (0 == StartMBPos)
        FirstLastMask |=    1;
    if (pContext->m_seqLayerHeader->heightMB == (StartMBPos + HeightMB))
        FirstLastMask |=    2;

    ExpandRows(pContext->m_pCurrMB->currYPlane, roiSize.width,   roiSize.height,   pContext->m_pCurrMB->currYPitch, 64, FirstLastMask);
    ExpandRows(pContext->m_pCurrMB->currUPlane, roiSize.width/2, roiSize.height/2, pContext->m_pCurrMB->currUPitch, 32, FirstLastMask);
    ExpandRows(pContext->m_pCurrMB->currVPlane, roiSize.width/2, roiSize.height/2, pContext->m_pCurrMB->currVPitch, 32, FirstLastMask);
}

void ExpandPlane(Ipp8u* StartPtr, Ipp32s width, Ipp32s height, Ipp32s pitch, Ipp32s padSize)
{
    Ipp32s i, m;
    Ipp8u *p, *p1, *pc;
    IppiSize roiSize;

    //Area (1)
    p = StartPtr + pitch * (height - 1);
    pc = p + pitch;

    roiSize.height = padSize;
    roiSize.width = width;
    ippiCopy_8u_C1R(p, 0, pc, pitch, roiSize);

    //Area (2)
    p = StartPtr;
    p1 = StartPtr + width;
    m = height + padSize;

    for(i = 0; i < m; i++)
    {
        ippsSet_8u(p[0], p-padSize, padSize);
        ippsSet_8u(p1[-1], p1, padSize);
        p  += pitch;
        p1 += pitch;
    }

    //Area (3)
    p = StartPtr - padSize;
    pc = p - pitch;
    m = width + 2*padSize;

    roiSize.width = m;
    ippiCopy_8u_C1R(p, 0, pc, -pitch, roiSize);

}

void ExpandPlane_Interlace(Ipp8u* StartPtr, Ipp32s width, Ipp32s height, Ipp32s pitch, Ipp32s padSize)
{
    Ipp32s i, m;// j;
    Ipp8u *p, *p1, *pc;
    IppiSize roiSize;

    //Area (1)
    p = StartPtr + pitch * (height - 1);
    pc = p + 2*pitch;

    roiSize.height = padSize/2;
    roiSize.width = width;
    ippiCopy_8u_C1R(p, 0, pc, 2*pitch, roiSize);


    p = StartPtr + pitch * (height - 2);
    pc = p + 2*pitch;

    ippiCopy_8u_C1R(p, 0, pc, 2*pitch, roiSize);

    //Area (2)
    p = StartPtr;
    p1 = StartPtr + width;
    m = height + padSize;

    for(i = 0; i < m; i++)
    {
        ippsSet_8u(p[0], p-padSize, padSize);
        ippsSet_8u(p1[-1], p1, padSize);
        p  += pitch;
        p1 += pitch;
    }

    //Area (3)
    p = StartPtr - padSize;
    pc = p - 2*pitch;
    m = width + 2*padSize;

    roiSize.width = m;
    ippiCopy_8u_C1R(p, 0, pc, -2*pitch, roiSize);


    p = StartPtr + pitch - padSize;
    pc = p - 2*pitch;
    m = width + 2*padSize;

    roiSize.width = m;
    ippiCopy_8u_C1R(p, 0, pc, -2*pitch, roiSize);
}


void ExpandPlane_Field(Ipp8u* StartPtr, Ipp32s width, Ipp32s height, Ipp32s pitch, Ipp32s padSize,Ipp32s bottom)
{
    Ipp32s i, m;
    Ipp8u *p, *p1, *pc;
    Ipp32s offset_up = 0, offset_down =0;
    IppiSize roiSize;

    if (bottom)
    {
        offset_down = 1;
        offset_up   = pitch;
    } else
    {
        offset_down = 2;
        offset_up   = 0;
    }

    //Area (1)
    p = StartPtr + pitch * (height - offset_down);
    pc = p + 2*pitch;

    roiSize.height = padSize/2;
    roiSize.width = width;
    ippiCopy_8u_C1R(p, 0, pc, 2*pitch, roiSize);

    //Area (2)
    p = StartPtr + offset_up;
    p1 = StartPtr + width + offset_up;
    m = height + padSize;

    for(i = 0; i < m/2; i++)
    {
        ippsSet_8u(p[0], p-padSize, padSize);
        ippsSet_8u(p1[-1], p1, padSize);
        p  += 2*pitch;
        p1 += 2*pitch;
    }

    //Area (3)
    p = StartPtr +offset_up - padSize;
    pc = p - 2*pitch;
    m = width + 2*padSize;

    roiSize.width = m;
    ippiCopy_8u_C1R(p, 0, pc, -2*pitch, roiSize);
}

void ExpandFrame(Frame* pFrame,IppiSize roiSize)
{
    if(pFrame->m_bIsExpanded == 0)
    {
        ExpandPlane(pFrame->m_pY, roiSize.width,   roiSize.height,   pFrame->m_iYPitch, 64);
        ExpandPlane(pFrame->m_pU, roiSize.width/2, roiSize.height/2, pFrame->m_iUPitch, 32);
        ExpandPlane(pFrame->m_pV, roiSize.width/2, roiSize.height/2, pFrame->m_iVPitch, 32);
        pFrame->m_bIsExpanded = 1;
    }

}
void ExpandFrame_Adv(VC1Context* pContext, Frame* pFrame)
{
    Ipp32s width  = 2*(pContext->m_seqLayerHeader->MAX_CODED_WIDTH+1);
    Ipp32s height = 2*(pContext->m_seqLayerHeader->MAX_CODED_HEIGHT+1);

    if(pFrame->m_bIsExpanded == 0)
    {
        ExpandPlane(pFrame->m_pY, width, height,     pFrame->m_iYPitch, 64);
        ExpandPlane(pFrame->m_pU, width/2, height/2, pFrame->m_iUPitch, 32);
        ExpandPlane(pFrame->m_pV, width/2, height/2, pFrame->m_iVPitch, 32);
        pFrame->m_bIsExpanded = 1;
    }
}

void ExpandFrame_Interlace(VC1Context* pContext, Frame* pFrame)
{
    Ipp32s width  = 2*(pContext->m_seqLayerHeader->MAX_CODED_WIDTH+1);
    Ipp32s height = 2*(pContext->m_seqLayerHeader->MAX_CODED_HEIGHT+1);

    if((pFrame->m_bIsExpanded == 0)||(pContext->m_picLayerHeader->FCM == VC1_FieldInterlace))
    {
        ExpandPlane_Interlace(pFrame->m_pY, width, height,     pFrame->m_iYPitch, 64);
        ExpandPlane_Interlace(pFrame->m_pU, width/2, height/2, pFrame->m_iUPitch, 32);
        ExpandPlane_Interlace(pFrame->m_pV, width/2, height/2, pFrame->m_iVPitch, 32);
        pFrame->m_bIsExpanded = 1;
    }
}

void ExpandFrame_Field(VC1Context* pContext, Frame* pFrame, Ipp32u bottom_field)
{
    Ipp32s width  = 2*(pContext->m_seqLayerHeader->MAX_CODED_WIDTH+1);
    Ipp32s height = 2*(pContext->m_seqLayerHeader->MAX_CODED_HEIGHT+1);

    ExpandPlane_Field(pFrame->m_pY, width, height,     pFrame->m_iYPitch, 64, bottom_field);
    ExpandPlane_Field(pFrame->m_pU, width/2, height/2, pFrame->m_iUPitch, 32, bottom_field);
    ExpandPlane_Field(pFrame->m_pV, width/2, height/2, pFrame->m_iVPitch, 32, bottom_field);
}

void ChooseMBModeInterlaceFrame(VC1Context* pContext,
                                Ipp32u MV4SWITCH,
                                Ipp32u MBMODETAB)
{
  if(MV4SWITCH == 1)
  {
    pContext->m_picLayerHeader->m_pMBMode =
        pContext->m_vlcTbl->MBMODE_INTERLACE_FRAME_TABLES[MBMODETAB];
  }
  else
  {
    pContext->m_picLayerHeader->m_pMBMode =
        pContext->m_vlcTbl->MBMODE_INTERLACE_FRAME_TABLES[MBMODETAB+4];
  }
}


void ChooseMBModeInterlaceField(VC1Context* pContext, Ipp32s MBMODETAB)
{
  if(pContext->m_picLayerHeader->MVMODE == VC1_MVMODE_MIXED_MV)
  {
    pContext->m_picLayerHeader->m_pMBMode =
        pContext->m_vlcTbl->MBMODE_INTERLACE_FIELD_MIXED_TABLES[MBMODETAB];
  }
  else
  {
    pContext->m_picLayerHeader->m_pMBMode =
        pContext->m_vlcTbl->MBMODE_INTERLACE_FIELD_TABLES[MBMODETAB];
  }
}

 void ChoosePredScaleValuePPictbl(VC1PictureLayerHeader* picLayerHeader)
 {
    if(picLayerHeader->CurrField == 0)
    {
        picLayerHeader->m_pCurrPredScaleValuePPictbl
            = &VC1_PredictScaleValuesPPicTbl1[picLayerHeader->REFDIST];
    }
    else
        picLayerHeader->m_pCurrPredScaleValuePPictbl
            = &VC1_PredictScaleValuesPPicTbl2[picLayerHeader->REFDIST];
 }

 void ChoosePredScaleValueBPictbl(VC1PictureLayerHeader* picLayerHeader)
 {

     Ipp32u FREFDIST = ((picLayerHeader->ScaleFactor * picLayerHeader->REFDIST) >> 8);
     Ipp32u BREFDIST = picLayerHeader->REFDIST - FREFDIST - 1;

     picLayerHeader->m_pCurrPredScaleValueB_BPictbl = &VC1_PredictScaleValuesBPicTbl1[BREFDIST];
     picLayerHeader->m_pCurrPredScaleValueP_BPictbl[1] = &VC1_PredictScaleValuesPPicTbl1[BREFDIST];


    if(picLayerHeader->CurrField == 0)
        picLayerHeader->m_pCurrPredScaleValueP_BPictbl[0] = &VC1_PredictScaleValuesPPicTbl1[FREFDIST];
    else
        picLayerHeader->m_pCurrPredScaleValueP_BPictbl[0] = &VC1_PredictScaleValuesPPicTbl2[FREFDIST];
 }

#endif //UMC_ENABLE_VC1_VIDEO_DECODER

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -