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

📄 umc_vc1_dec_seq.h

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