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

📄 umc_mpeg2_dec_mc.cpp

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 CPP
📖 第 1 页 / 共 4 页
字号:
                ref_U_data = video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].U_comp_data;                ref_V_data = video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].V_comp_data;            for(r = 0; r < pMacro->motion_vector_count; r++)            {                pMacro->vector_luma[4*r + 1] = (pMacro->vector[4*r + 1] >> 1) << 1;                pMacro->vector_luma[4*r] = pMacro->vector[4*r] >> 1;                pMacro->vector_chroma[4*r + 1] = pMacro->vector_luma[4*r + 1];//down                pMacro->vector_chroma[4*r] = pMacro->vector[4*r] >> 2;//right                offs = (pMacro->vector_chroma[4*r + 1]  + pMacro->row_c + pMacro->motion_vertical_field_select[2*r])* pitch_uv +                            pMacro->vector_chroma[4*r] + pMacro->col_c;                flag1 =  ((pMacro->vector[4*r]  & 1) << 3) | ((pMacro->vector[4*r + 1]  & 1) << 2);                flag2 =  ((pMacro->vector[4*r]  & 2) << 2) | ((pMacro->vector[4*r + 1]  & 1) << 2);                i = ippiMC16x8_8u_C1(  ref_Y_data +                                        (pMacro->vector_luma[4*r + 1]  + pMacro->row_l+ pMacro->motion_vertical_field_select[2*r]) * pitch_y +                                        pMacro->vector_luma[4*r] + pMacro->col_l,                                        ptc_y,                                        diff+16*r,64,                                        video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].Y_comp_data + pMacro->offset_l + pMacro->shift_y[r],                                        ptc_y, flag1, 0);                VM_ASSERT(i == ippStsOk);                i = ippiMC8x8_8u_C1(  ref_U_data + offs, ptc_uv,                                        diff+256+8*r,32,                                        video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].U_comp_data + pMacro->offset_c + pMacro->shift_uv[r],                                        ptc_uv, flag2, 0);                VM_ASSERT(i == ippStsOk);                i = ippiMC8x8_8u_C1(  ref_V_data + offs, ptc_uv,                                        diff+384+8*r,32,                                        video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].V_comp_data + pMacro->offset_c + pMacro->shift_uv[r],                                        ptc_uv, flag2, 0);                VM_ASSERT(i == ippStsOk);            }//for(r)            }            else            {                ref_Y_data = video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].Y_comp_data;                ref_U_data = video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].U_comp_data;                ref_V_data = video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].V_comp_data;                if(PictureHeader.picture_coding_type == P_FRAME && PictureHeader.field_buffer_index)                {                    if(PictureHeader.picture_structure == BOTTOM_FIELD)                    {                        if(!pMacro->motion_vertical_field_select[0])                        {                            ref_Y_data  = video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].Y_comp_data;                            ref_U_data  = video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].U_comp_data;                            ref_V_data  = video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].V_comp_data;                        }                    }                    else                    {                        if(pMacro->motion_vertical_field_select[0])                        {                            ref_Y_data  = video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].Y_comp_data;                            ref_U_data  = video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].U_comp_data;                            ref_V_data  = video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].V_comp_data;                        }                    }                }//if(PictureHeader.picture_coding_type == P_FRAME && PictureHeader.field_buffer_index)                pMacro->vector_luma[1] = (pMacro->vector[1] >> 1) << 1;                pMacro->vector_luma[0] = pMacro->vector[0] >> 1;                pMacro->vector_chroma[1] = (pMacro->vector[1] >> 1) << 1;//down                pMacro->vector_chroma[0] = pMacro->vector[0] >> 2;//right                offs = (pMacro->vector_chroma[1]  + pMacro->row_c + pMacro->motion_vertical_field_select[0])* pitch_uv +                            pMacro->vector_chroma[0] + pMacro->col_c;                flag1 =  ((pMacro->vector[0]  & 1) << 3) | ((pMacro->vector[1]  & 1) << 2);                flag2 =  ((pMacro->vector[0]  & 2) << 2) | ((pMacro->vector[1]  & 1) << 2);                i = ippiMC16x16_8u_C1(  ref_Y_data +                                        (pMacro->vector_luma[1]  + pMacro->row_l+ pMacro->motion_vertical_field_select[0]) * pitch_y +                                        pMacro->vector_luma[0] + pMacro->col_l,                                        ptc_y,                                        diff,32,                                        video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].Y_comp_data + pMacro->offset_l + pMacro->odd_pitch_y,                                        ptc_y, flag1, 0);                VM_ASSERT(i == ippStsOk);                i = ippiMC8x16_8u_C1(  ref_U_data + offs, ptc_uv,                                        diff+256,16,                                        video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].U_comp_data + pMacro->offset_c + pMacro->odd_pitch_uv,                                        ptc_uv, flag2, 0);                VM_ASSERT(i == ippStsOk);                i = ippiMC8x16_8u_C1(  ref_V_data + offs, ptc_uv,                                        diff+384,16,                                        video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].V_comp_data + pMacro->offset_c + pMacro->odd_pitch_uv,                                        ptc_uv, flag2, 0);                VM_ASSERT(i == ippStsOk);            }            break;      case IPPVC_MC_16X8:        for(r = 0; r < pMacro->motion_vector_count; r++)        {            ref_Y_data = video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].Y_comp_data;            ref_U_data = video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].U_comp_data;            ref_V_data = video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].V_comp_data;            if(PictureHeader.picture_coding_type == P_FRAME && PictureHeader.field_buffer_index)            {                if(PictureHeader.picture_structure == BOTTOM_FIELD)                {                    if(!pMacro->motion_vertical_field_select[2*r])                    {                        ref_Y_data  = video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].Y_comp_data;                        ref_U_data  = video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].U_comp_data;                        ref_V_data  = video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].V_comp_data;                    }                }                else                {                    if(pMacro->motion_vertical_field_select[2*r])                    {                        ref_Y_data  = video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].Y_comp_data;                        ref_U_data  = video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].U_comp_data;                        ref_V_data  = video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].V_comp_data;                    }                }            }//if(PictureHeader.picture_coding_type == P_FRAME && PictureHeader.field_buffer_index)            pMacro->vector_luma[4*r + 1] = (pMacro->vector[4*r + 1] >> 1) << 1;            pMacro->vector_luma[4*r] = pMacro->vector[4*r] >> 1;            pMacro->vector_chroma[4*r + 1] = (pMacro->vector[4*r + 1] >> 1) << 1;//down            pMacro->vector_chroma[4*r] = pMacro->vector[4*r] >> 2;//right            offs = (pMacro->vector_chroma[4*r + 1]  + pMacro->row_c + pMacro->motion_vertical_field_select[2*r])* pitch_uv +                        pMacro->vector_chroma[4*r] + pMacro->col_c;            flag1 =  ((pMacro->vector[4*r]  & 1) << 3) | ((pMacro->vector[4*r + 1]  & 1) << 2);            flag2 =  ((pMacro->vector[4*r]  & 2) << 2) | ((pMacro->vector[4*r + 1]  & 1) << 2);            i = ippiMC16x8_8u_C1(  ref_Y_data +                                    (pMacro->vector_luma[4*r + 1]  + pMacro->row_l + 16*r + pMacro->motion_vertical_field_select[2*r])*pitch_y +                                    pMacro->vector_luma[4*r] + pMacro->col_l,                                    pitch_y_2,                                    diff+128*r,32,                                    video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].Y_comp_data + pMacro->offset_l + pMacro->shift_y[r] + pMacro->odd_pitch_y,                                    pitch_y_2, flag1, 0);            VM_ASSERT(i == ippStsOk);            i = ippiMC8x8_8u_C1(  ref_U_data + offs + 8 * r * pitch_uv,                                    pitch_uv_2,                                    diff+256+64*r,16,                                    video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].U_comp_data + pMacro->offset_c + pMacro->shift_uv[r] + pMacro->odd_pitch_uv,                                    pitch_uv_2, flag2, 0);            VM_ASSERT(i == ippStsOk);            i = ippiMC8x8_8u_C1(  ref_V_data + offs + 8 * r * pitch_uv,                                    pitch_uv_2,                                    diff+384+64*r,16,                                    video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].V_comp_data + pMacro->offset_c + pMacro->shift_uv[r] + pMacro->odd_pitch_uv,                                    pitch_uv_2, flag2, 0);            VM_ASSERT(i == ippStsOk);        }//for(r)            break;      default:          VM_ASSERT(0);      }    }    else if(!pMacro->macroblock_motion_forward && pMacro->macroblock_motion_backward)    {        //single direction backward        VM_ASSERT(pMacro->macroblock_motion_backward);        ref_Y_data = video->frame_buffer.frame_p_c_n[video->frame_buffer.next_index].Y_comp_data;        ref_U_data = video->frame_buffer.frame_p_c_n[video->frame_buffer.next_index].U_comp_data;        ref_V_data = video->frame_buffer.frame_p_c_n[video->frame_buffer.next_index].V_comp_data;        switch(pMacro->prediction_type)        {        case IPPVC_MC_FRAME:            pMacro->vector_luma[3] = pMacro->vector[3] >> 1;            pMacro->vector_luma[2] = pMacro->vector[2] >> 1;            pMacro->vector_chroma[3] = pMacro->vector[3] >> 1;//down            pMacro->vector_chroma[2] = pMacro->vector[2] >> 2;//right            offs = (pMacro->vector_chroma[3] + pMacro->row_c + pMacro->motion_vertical_field_select[1])*pitch_uv +                        pMacro->vector_chroma[2] + pMacro->col_c;            flag1 =  ((pMacro->vector[2]  & 1) << 3) | ((pMacro->vector[3]  & 1) << 2);            flag2 =  ((pMacro->vector[2]  & 2) << 2) | ((pMacro->vector[3]  & 1) << 2);            i = ippiMC16x16_8u_C1(    ref_Y_data +                                    (pMacro->vector_luma[3]  + pMacro->row_l)*pitch_y +                                    pMacro->vector_luma[2] + pMacro->col_l,                                    ptc_y,                                    diff,32,                                    video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].Y_comp_data + pMacro->offset_l,                                    ptc_y, flag1, 0);            VM_ASSERT(i == ippStsOk);            i = ippiMC8x16_8u_C1(    ref_U_data + offs, ptc_uv,                                    diff+256,16,                                    video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].U_comp_data + pMacro->offset_c,                                    ptc_uv, flag2, 0);            VM_ASSERT(i == ippStsOk);            i = ippiMC8x16_8u_C1(    ref_V_data + offs, ptc_uv,                                    diff+384,16,                                    video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].V_comp_data + pMacro->offset_c,                                    ptc_uv, flag2, 0);            VM_ASSERT(i == ippStsOk);            break;        case IPPVC_MC_FIELD:            if(PictureHeader.picture_structure == FRAME_PICTURE)            {            for(r = 0; r < pMacro->motion_vector_count; r++)            {                pMacro->vector_luma[4*r + 3] = (pMacro->vector[4*r + 3] >> 1) << 1;                pMacro->vector_luma[4*r + 2] = pMacro->vector[4*r + 2] >> 1;                pMacro->vector_chroma[4*r + 3] = pMacro->vector_luma[4*r + 3];//down                pMacro->vector_chroma[4*r + 2] = pMacro->vector[4*r + 2] >> 2;//right                offs = (pMacro->vector_chroma[4*r + 3] + pMacro->row_c + pMacro->motion_vertical_field_select[2*r+1])*pitch_uv +                            pMacro->vector_chroma[4*r + 2] + pMacro->col_c;                flag1 =  ((pMacro->vector[4*r + 2]  & 1) << 3) | ((pMacro->vector[4*r + 3]  & 1) << 2);                flag2 =  ((pMacro->vector[4*r + 2]  & 2) << 2) | ((pMacro->vector[4*r + 3]  & 1) << 2);                i = ippiMC16x8_8u_C1(    ref_Y_data +                                        (pMacro->vector_luma[4*r + 3]  + pMacro->row_l + pMacro->motion_vertical_field_select[2*r+1])*pitch_y +                                        pMacro->vector_luma[4*r + 2] + pMacro->col_l,                                        ptc_y,                                        diff+16*r,64,                                        video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].Y_comp_data + pMacro->offset_l  + pMacro->shift_y[r],                                        ptc_y, flag1, 0);                VM_ASSERT(i == ippStsOk);                i = ippiMC8x8_8u_C1(    ref_U_data + offs, ptc_uv,                                        diff+256+8*r,32,                                        video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].U_comp_data + pMacro->offset_c + pMacro->shift_uv[r],                                        ptc_uv, flag2, 0);                VM_ASSERT(i == ippStsOk);                i = ippiMC8x8_8u_C1(    ref_V_data + offs, ptc_uv,                                        diff+384+8*r,32,                                        video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].V_comp_data + pMacro->offset_c + pMacro->shift_uv[r],                                        ptc_uv, flag2, 0);                VM_ASSERT(i == ippStsOk);            }//for(r)            }            else            {                pMacro->vector_luma[3] = (pMacro->vector[3] >> 1) << 1;                pMacro->vector_luma[2] = pMacro->vector[2] >> 1;                pMacro->vector_chroma[3] = (pMacro->vector[3] >> 1) << 1;//down                pMacro->vector_chroma[2] = pMacro->vector[2] >> 2;//right                offs = (pMacro->vector_chroma[3] + pMacro->row_c + pMacro->motion_vertical_field_select[1])*pitch_uv +                            pMacro->vector_chroma[2] + pMacro->col_c;                flag1 =  ((pMacro->vector[2]  & 1) << 3) | ((pMacro->vector[3]  & 1) << 2);                flag2 =  ((pMacro->vector[2]  & 2) << 2) | ((pMacro->vector[3]  & 1) << 2);                i = ippiMC16x16_8u_C1(    ref_Y_data +                                        (pMacro->vector_luma[3]  + pMacro->row_l + pMacro->motion_vertical_field_select[1])*pitch_y +                                        pMacro->vector_luma[2] + pMacro->col_l,                                        ptc_y,                                        diff,32,                                        video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].Y_comp_data + pMacro->offset_l  + pMacro->odd_pitch_y,                                        ptc_y, flag1, 0);                VM_ASSERT(i == ippStsOk);                i = ippiMC8x16_8u_C1(    ref_U_data + offs, ptc_uv,                                        diff+256,16,                                        video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].U_comp_data + pMacro->offset_c + pMacro->odd_pitch_uv,                                        ptc_uv, flag2, 0);                VM_ASSERT(i == ippStsOk);                i = ippiMC8x16_8u_C1(    ref_V_data + offs, ptc_uv,                                        diff+384,16,                                        video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].V_comp_data + pMacro->offset_c + pMacro->odd_pitch_uv,                                        ptc_uv, flag2, 0);                VM_ASSERT(i == ippStsOk);

⌨️ 快捷键说明

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