📄 umc_h264_pack.cpp
字号:
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 + -