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

📄 umc_h264_pack.cpp

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        Multiply_DMV(&m_pCurrentFrame->pDMVL0[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[0]],0,2,1,0,4,1,mvd[0]);        Multiply_DMV(&m_pCurrentFrame->pDMVL1[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[2]],0,2,1,0,4,1,mvd[1]);        break;    case MBTYPE_BWD_FWD_16x8:        ref0_vectors = 1;        num_vectors = 2;        num_ref_idx_l0 = 1;        num_ref_idx_l1 = 1;        block_index[0]=m_pCurrentFrame->block_positions[8];        block_index[1]=m_pCurrentFrame->block_positions[0];        ref_idx_l0[0] = pRefIdxL0[block_index[0]];        ref_idx_l1[0] = pRefIdxL1[block_index[1]];        Calc_One_MV_Predictor(uMB, 8, 0, 4, 2, mv, mvd, &ref_idx_l0_ctxIdxInc[0]);        Calc_One_MV_Predictor(uMB, 0, 1, 4, 2, mv+1, mvd+1, &ref_idx_l1_ctxIdxInc[0]);        if(!IS_Top_Available(uMB))        {            //Top_Block_Availability[0] = 0;            Top_Block_Availability[1] = 0;//since backward prediction is for top block        }        if(!IS_Left_Available(uMB))        {            Left_Block_Availability[0] = 0;            Left_Block_Availability[1] = 0;        }        Multiply_DMV(&m_pCurrentFrame->pDMVL0[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[8]],0,4,1,0,2,1,mvd[0]);        Multiply_DMV(&m_pCurrentFrame->pDMVL1[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[0]],0,4,1,0,2,1,mvd[1]);        break;    case MBTYPE_BWD_FWD_8x16:        ref0_vectors = 1;        num_vectors = 2;        num_ref_idx_l0 = 1;        num_ref_idx_l1 = 1;        block_index[0]=m_pCurrentFrame->block_positions[2];        block_index[1]=m_pCurrentFrame->block_positions[0];        ref_idx_l0[0] = pRefIdxL0[block_index[0]];        ref_idx_l1[0] = pRefIdxL1[block_index[1]];        // Special case!  Write forward vector first!        Calc_One_MV_Predictor(uMB, 2, 0, 2, 4, mv, mvd, &ref_idx_l0_ctxIdxInc[0]);        Calc_One_MV_Predictor(uMB, 0, 1, 2, 4, mv+1, mvd+1, &ref_idx_l1_ctxIdxInc[0]);        if(!IS_Top_Available(uMB))        {            Top_Block_Availability[0] = 0;            Top_Block_Availability[1] = 0;        }        if(!IS_Left_Available(uMB))        {            //Left_Block_Availability[0] = 0;            Left_Block_Availability[1] = 0;//since backward prediction is for left block        }        Multiply_DMV(&m_pCurrentFrame->pDMVL0[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[2]],0,2,1,0,4,1,mvd[0]);        Multiply_DMV(&m_pCurrentFrame->pDMVL1[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[0]],0,2,1,0,4,1,mvd[1]);        break;    case MBTYPE_BIDIR_FWD_16x8:        ref0_vectors = 2;        num_vectors = 3;        num_ref_idx_l0 = 2;        num_ref_idx_l1 = 1;        block_index[0]=m_pCurrentFrame->block_positions[0];        block_index[1]=m_pCurrentFrame->block_positions[8];        block_index[2]=m_pCurrentFrame->block_positions[0];        ref_idx_l0[0] = pRefIdxL0[block_index[0]];        ref_idx_l0[1] = pRefIdxL0[block_index[1]];        ref_idx_l1[0] = pRefIdxL1[block_index[2]];        Calc_One_MV_Predictor(uMB, 0, 0, 4, 2, mv, mvd, &ref_idx_l0_ctxIdxInc[0]);        Calc_One_MV_Predictor(uMB, 8, 0, 4, 2, mv+1, mvd+1, &ref_idx_l0_ctxIdxInc[1]);        // Backward Vector from Block 0        Calc_One_MV_Predictor(uMB, 0, 1, 4, 2, mv+2, mvd+2, &ref_idx_l1_ctxIdxInc[0]);        if(!IS_Top_Available(uMB))        {            Top_Block_Availability[0] = 0;            Top_Block_Availability[2] = 0;        }        if(!IS_Left_Available(uMB))        {            Left_Block_Availability[0] = 0;            Left_Block_Availability[1] = 0;            Left_Block_Availability[2] = 0;        }        Multiply_DMV(&m_pCurrentFrame->pDMVL0[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[0]],0,4,1,0,2,1,mvd[0]);        Multiply_DMV(&m_pCurrentFrame->pDMVL0[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[8]],0,4,1,0,2,1,mvd[1]);        Multiply_DMV(&m_pCurrentFrame->pDMVL1[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[0]],0,4,1,0,2,1,mvd[2]);        break;    case MBTYPE_FWD_BIDIR_16x8:        ref0_vectors = 2;        num_vectors = 3;        num_ref_idx_l0 = 2;        num_ref_idx_l1 = 1;        block_index[0]=m_pCurrentFrame->block_positions[0];        block_index[1]=m_pCurrentFrame->block_positions[8];        block_index[2]=m_pCurrentFrame->block_positions[8];        ref_idx_l0[0] = pRefIdxL0[block_index[0]];        ref_idx_l0[1] = pRefIdxL0[block_index[1]];        ref_idx_l1[0] = pRefIdxL1[block_index[2]];        Calc_One_MV_Predictor(uMB, 0, 0, 4, 2, mv, mvd, &ref_idx_l0_ctxIdxInc[0]);        Calc_One_MV_Predictor(uMB, 8, 0, 4, 2, mv+1, mvd+1, &ref_idx_l0_ctxIdxInc[1]);        // Backward Vector from Block 1        Calc_One_MV_Predictor(uMB, 8, 1, 4, 2, mv+2, mvd+2, &ref_idx_l1_ctxIdxInc[0]);        if(!IS_Top_Available(uMB))        {            Top_Block_Availability[0] = 0;        }        if(!IS_Left_Available(uMB))        {            Left_Block_Availability[0] = 0;            Left_Block_Availability[1] = 0;            Left_Block_Availability[2] = 0;        }        Multiply_DMV(&m_pCurrentFrame->pDMVL0[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[0]],0,4,1,0,2,1,mvd[0]);        Multiply_DMV(&m_pCurrentFrame->pDMVL0[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[8]],0,4,1,0,2,1,mvd[1]);        Multiply_DMV(&m_pCurrentFrame->pDMVL1[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[8]],0,4,1,0,2,1,mvd[2]);        break;    case MBTYPE_BIDIR_BWD_16x8:        ref0_vectors = 1;        num_vectors = 3;        num_ref_idx_l0 = 1;        num_ref_idx_l1 = 2;        block_index[0]=m_pCurrentFrame->block_positions[0];        block_index[1]=m_pCurrentFrame->block_positions[0];        block_index[2]=m_pCurrentFrame->block_positions[8];        ref_idx_l0[0] = pRefIdxL0[block_index[0]];        ref_idx_l1[0] = pRefIdxL1[block_index[1]];        ref_idx_l1[1] = pRefIdxL1[block_index[2]];        Calc_One_MV_Predictor(uMB, 0, 0, 4, 2, mv, mvd, &ref_idx_l0_ctxIdxInc[0]);        // Backward Vector from Block 0        Calc_One_MV_Predictor(uMB, 0, 1, 4, 2, mv+1, mvd+1, &ref_idx_l1_ctxIdxInc[0]);        // Backward Vector from Block 1        Calc_One_MV_Predictor(uMB, 8, 1, 4, 2, mv+2, mvd+2, &ref_idx_l1_ctxIdxInc[1]);        if(!IS_Top_Available(uMB))        {            Top_Block_Availability[0] = 0;            Top_Block_Availability[1] = 0;        }        if(!IS_Left_Available(uMB))        {            Left_Block_Availability[0] = 0;            Left_Block_Availability[1] = 0;            Left_Block_Availability[2] = 0;        }        Multiply_DMV(&m_pCurrentFrame->pDMVL0[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[0]],0,4,1,0,2,1,mvd[0]);        Multiply_DMV(&m_pCurrentFrame->pDMVL1[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[0]],0,4,1,0,2,1,mvd[1]);        Multiply_DMV(&m_pCurrentFrame->pDMVL1[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[8]],0,4,1,0,2,1,mvd[2]);        break;    case MBTYPE_BWD_BIDIR_16x8:        ref0_vectors = 1;        num_vectors = 3;        num_ref_idx_l0 = 1;        num_ref_idx_l1 = 2;        block_index[0]=m_pCurrentFrame->block_positions[8];        block_index[1]=m_pCurrentFrame->block_positions[0];        block_index[2]=m_pCurrentFrame->block_positions[8];        ref_idx_l0[0] = pRefIdxL0[block_index[0]];        ref_idx_l1[0] = pRefIdxL1[block_index[1]];        ref_idx_l1[1] = pRefIdxL1[block_index[2]];        Calc_One_MV_Predictor(uMB, 0, 1, 4, 2, mv+1, mvd+1, &ref_idx_l1_ctxIdxInc[0]);        Calc_One_MV_Predictor(uMB, 8, 0, 4, 2, mv, mvd, &ref_idx_l0_ctxIdxInc[0]);        Calc_One_MV_Predictor(uMB, 8, 1, 4, 2, mv+2, mvd+2, &ref_idx_l1_ctxIdxInc[1]);        if(!IS_Top_Available(uMB))        {            Top_Block_Availability[1] = 0;        }        if(!IS_Left_Available(uMB))        {            Left_Block_Availability[0] = 0;            Left_Block_Availability[1] = 0;            Left_Block_Availability[2] = 0;        }        Multiply_DMV(&m_pCurrentFrame->pDMVL0[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[8]],0,4,1,0,2,1,mvd[0]);        Multiply_DMV(&m_pCurrentFrame->pDMVL1[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[0]],0,4,1,0,2,1,mvd[1]);        Multiply_DMV(&m_pCurrentFrame->pDMVL1[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[8]],0,4,1,0,2,1,mvd[2]);        break;    case MBTYPE_BIDIR_BIDIR_16x8:        ref0_vectors = 2;        num_vectors = 4;        num_ref_idx_l0 = 2;        num_ref_idx_l1 = 2;        block_index[0]=m_pCurrentFrame->block_positions[0];        block_index[1]=m_pCurrentFrame->block_positions[8];        block_index[2]=m_pCurrentFrame->block_positions[0];        block_index[3]=m_pCurrentFrame->block_positions[8];        ref_idx_l0[0] = pRefIdxL0[block_index[0]];        ref_idx_l0[1] = pRefIdxL0[block_index[1]];        ref_idx_l1[0] = pRefIdxL1[block_index[2]];        ref_idx_l1[1] = pRefIdxL1[block_index[3]];        Calc_One_MV_Predictor(uMB, 0, 0, 4, 2, mv, mvd, &ref_idx_l0_ctxIdxInc[0]);        Calc_One_MV_Predictor(uMB, 0, 1, 4, 2, mv+2, mvd+2, &ref_idx_l1_ctxIdxInc[0]);        Calc_One_MV_Predictor(uMB, 8, 0, 4, 2, mv+1, mvd+1, &ref_idx_l0_ctxIdxInc[1]);        Calc_One_MV_Predictor(uMB, 8, 1, 4, 2, mv+3, mvd+3, &ref_idx_l1_ctxIdxInc[1]);        if(!IS_Top_Available(uMB))        {            Top_Block_Availability[0] = 0;            Top_Block_Availability[2] = 0;        }        if(!IS_Left_Available(uMB))        {            Left_Block_Availability[0] = 0;            Left_Block_Availability[1] = 0;            Left_Block_Availability[2] = 0;            Left_Block_Availability[3] = 0;        }        Multiply_DMV(&m_pCurrentFrame->pDMVL0[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[0]],0,4,1,0,2,1,mvd[0]);        Multiply_DMV(&m_pCurrentFrame->pDMVL0[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[8]],0,4,1,0,2,1,mvd[1]);        Multiply_DMV(&m_pCurrentFrame->pDMVL1[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[0]],0,4,1,0,2,1,mvd[2]);        Multiply_DMV(&m_pCurrentFrame->pDMVL1[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[8]],0,4,1,0,2,1,mvd[3]);        break;    case MBTYPE_BIDIR_FWD_8x16:        ref0_vectors = 2;        num_vectors = 3;        num_ref_idx_l0 = 2;        num_ref_idx_l1 = 1;        block_index[0]=m_pCurrentFrame->block_positions[0];        block_index[1]=m_pCurrentFrame->block_positions[2];        block_index[2]=m_pCurrentFrame->block_positions[0];        ref_idx_l0[0] = pRefIdxL0[block_index[0]];        ref_idx_l0[1] = pRefIdxL0[block_index[1]];        ref_idx_l1[0] = pRefIdxL1[block_index[2]];        Calc_One_MV_Predictor(uMB, 0, 0, 2, 4, mv, mvd, &ref_idx_l0_ctxIdxInc[0]);        Calc_One_MV_Predictor(uMB, 0, 1, 2, 4, mv+2, mvd+2, &ref_idx_l1_ctxIdxInc[0]);        Calc_One_MV_Predictor(uMB, 2, 0, 2, 4, mv+1, mvd+1, &ref_idx_l0_ctxIdxInc[1]);        if(!IS_Top_Available(uMB))        {            Top_Block_Availability[0] = 0;            Top_Block_Availability[1] = 0;            Top_Block_Availability[2] = 0;        }        if(!IS_Left_Available(uMB))        {            Left_Block_Availability[0] = 0;            Left_Block_Availability[2] = 0;        }        Multiply_DMV(&m_pCurrentFrame->pDMVL0[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[0]],0,2,1,0,4,1,mvd[0]);        Multiply_DMV(&m_pCurrentFrame->pDMVL0[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[2]],0,2,1,0,4,1,mvd[1]);        Multiply_DMV(&m_pCurrentFrame->pDMVL1[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[0]],0,2,1,0,4,1,mvd[2]);        break;    case MBTYPE_FWD_BIDIR_8x16:        ref0_vectors = 2;        num_vectors = 3;        num_ref_idx_l0 = 2;        num_ref_idx_l1 = 1;        block_index[0]=m_pCurrentFrame->block_positions[0];        block_index[1]=m_pCurrentFrame->block_positions[2];        block_index[2]=m_pCurrentFrame->block_positions[2];        ref_idx_l0[0] = pRefIdxL0[block_index[0]];        ref_idx_l0[1] = pRefIdxL0[block_index[1]];        ref_idx_l1[0] = pRefIdxL1[block_index[2]];        Calc_One_MV_Predictor(uMB, 0, 0, 2, 4, mv, mvd, &ref_idx_l0_ctxIdxInc[0]);        Calc_One_MV_Predictor(uMB, 2, 0, 2, 4, mv+1, mvd+1, &ref_idx_l0_ctxIdxInc[1]);        // Backward Vector from Block 1        Calc_One_MV_Predictor(uMB, 2, 1, 2, 4, mv+2, mvd+2, &ref_idx_l1_ctxIdxInc[0]);        if(!IS_Top_Available(uMB))        {            Top_Block_Availability[0] = 0;            Top_Block_Availability[1] = 0;            Top_Block_Availability[2] = 0;        }        if(!IS_Left_Available(uMB))        {            Left_Block_Availability[0] = 0;        }        Multiply_DMV(&m_pCurrentFrame->pDMVL0[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[0]],0,2,1,0,4,1,mvd[0]);        Multiply_DMV(&m_pCurrentFrame->pDMVL0[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[2]],0,2,1,0,4,1,mvd[1]);        Multiply_DMV(&m_pCurrentFrame->pDMVL1[m_pCurrentFrame->pMBOffsets[uMB].uFirstBlockIndex+m_pCurrentFrame->block_positions[2]],0,2,1,0,4,1,mvd[2]);        break;    case MBTYPE_BIDIR_BWD_8x16:        ref0_vectors = 1;        num_vectors = 3;        num_ref_idx_l0 = 1;        num_ref_idx_l1 = 2;        block_index[0]=m_pCurrentFrame->block_positions[0];        block_index[1]=m_pCurrentFrame->block_positions[0];        block_index[2]=m_pCurrentFrame->block_positions[2];        ref_idx_l0[0] = pRefIdxL0[block_index[0]];        ref_idx_l1[0] = pRefIdxL1[block_index[1]];        ref_idx_l1[1] = pRefIdxL1[block_index[2]];        Calc_One_MV_Predictor(uMB, 0, 0, 2, 4, mv, mvd, &ref_idx_l0_ctxIdxInc[0]);        // Backward Vector from Block 0        Calc_One_MV_Predictor(uMB, 0, 1, 2, 4, mv+1, mvd+1, &ref_idx_l1_ctxIdxInc[0]);        // Backward Vector from Block 1        Calc_One_MV_Predictor(uMB, 2, 1, 2, 4, mv+2, mvd+2, &ref_idx_l1_ctxIdxInc[1]);        if(!IS_Top_Available(uMB))        {            Top_Block_Availability[0] = 0;            Top_Block_Availability[1] = 0;            Top_Block_Availability[2] = 0;        }

⌨️ 快捷键说明

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