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

📄 umc_mpeg2_dec_mc.cpp

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    int pitch_y        = video->frame_buffer.Y_comp_pitch;    int pitch_uv    = video->frame_buffer.U_comp_pitch;    int pitch_y_2    = pitch_y*2;    int pitch_uv_2    = pitch_uv*2;    int ptc_uv, ptc_y;    int flag1, flag2, flag3, flag4;    int offs;    int offs1;    int offs2;    ptc_uv = pitch_uv  + pitch_uv*(!pMacro->prediction_type);    ptc_y  = pitch_y  + pitch_y*(!pMacro->prediction_type);    //bi_direction    if(pMacro->macroblock_motion_forward && pMacro->macroblock_motion_backward)    {        ref_Y_data1 = video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].Y_comp_data;        ref_U_data1 = video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].U_comp_data;        ref_V_data1 = video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].V_comp_data;        ref_Y_data2 = video->frame_buffer.frame_p_c_n[video->frame_buffer.next_index].Y_comp_data;        ref_U_data2 = video->frame_buffer.frame_p_c_n[video->frame_buffer.next_index].U_comp_data;        ref_V_data2 = 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[1] = pMacro->vector[1] >> 1;            pMacro->vector_luma[0] = pMacro->vector[0] >> 1;            pMacro->vector_luma[3] = pMacro->vector[3] >> 1;            pMacro->vector_luma[2] = pMacro->vector[2] >> 1;            pMacro->vector_chroma[1] = pMacro->vector[1] >> 1;//down            pMacro->vector_chroma[0] = pMacro->vector[0] >> 2;//right            pMacro->vector_chroma[3] = pMacro->vector[3] >> 1;//down            pMacro->vector_chroma[2] = pMacro->vector[2] >> 2;//right            offs1 = (pMacro->vector_chroma[1]  + pMacro->row_c + pMacro->motion_vertical_field_select[0])*pitch_uv +                    pMacro->vector_chroma[0] + pMacro->col_c;            offs2 = (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[0]  & 1) << 3) | ((pMacro->vector[1]  & 1) << 2);            flag2 =  ((pMacro->vector[0]  & 2) << 2) | ((pMacro->vector[1]  & 1) << 2);            flag3 =  ((pMacro->vector[2]  & 1) << 3) | ((pMacro->vector[3]  & 1) << 2);            flag4 =  ((pMacro->vector[2]  & 2) << 2) | ((pMacro->vector[3]  & 1) << 2);            i = ippiMC16x16B_8u_C1(  ref_Y_data1 +                                    (pMacro->vector_luma[1]  + pMacro->row_l)*pitch_y +                                    pMacro->vector_luma[0] + pMacro->col_l,                                    ptc_y,                                    flag1,                                    ref_Y_data2 +                                    (pMacro->vector_luma[3]  + pMacro->row_l)*pitch_y +                                    pMacro->vector_luma[2] + pMacro->col_l,                                    ptc_y,                                    flag3,                                    diff,32,                                    video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].Y_comp_data + pMacro->offset_l,                                    ptc_y, 0);            VM_ASSERT(i == ippStsOk);            i = ippiMC8x16B_8u_C1 (    ref_U_data1 + offs1, ptc_uv, flag2,                                    ref_U_data2 + offs2, ptc_uv, flag4,                                    diff+256,16,                                    video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].U_comp_data + pMacro->offset_c,                                    ptc_uv, 0);            VM_ASSERT(i == ippStsOk);            i = ippiMC8x16B_8u_C1 (    ref_V_data1 + offs1, ptc_uv,flag2,                                    ref_V_data2 + offs2, ptc_uv,flag4,                                    diff+384,16,                                    video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].V_comp_data + pMacro->offset_c,                                    ptc_uv, 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 + 1] = (pMacro->vector[4*r + 1] >> 1) << 1;                pMacro->vector_luma[4*r] = pMacro->vector[4*r] >> 1;                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 + 1] = pMacro->vector_luma[4*r + 1];//down                pMacro->vector_chroma[4*r] = pMacro->vector[4*r] >> 2;//right                 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                offs1 = (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;                offs2 = (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]  & 1) << 3) | ((pMacro->vector[4*r + 1]  & 1) << 2);                flag2 =  ((pMacro->vector[4*r]  & 2) << 2) | ((pMacro->vector[4*r + 1]  & 1) << 2);                flag3 =  ((pMacro->vector[4*r + 2]  & 1) << 3) | ((pMacro->vector[4*r + 3]  & 1) << 2);                flag4 =  ((pMacro->vector[4*r + 2]  & 2) << 2) | ((pMacro->vector[4*r + 3]  & 1) << 2);                i = ippiMC16x8B_8u_C1(  ref_Y_data1 +                                        (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,                                        flag1,                                        ref_Y_data2 +                                        (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,                                        flag3,                                        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, 0);                VM_ASSERT(i == ippStsOk);                i = ippiMC8x8B_8u_C1(    ref_U_data1 + offs1, ptc_uv, flag2,                                        ref_U_data2 + offs2, ptc_uv, flag4,                                        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, 0);                VM_ASSERT(i == ippStsOk);                i = ippiMC8x8B_8u_C1(    ref_V_data1 + offs1, ptc_uv,flag2,                                        ref_V_data2 + offs2, ptc_uv,flag4,                                        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, 0);                VM_ASSERT(i == ippStsOk);            }//for(r)           }           else           {                pMacro->vector_luma[1] = (pMacro->vector[1] >> 1) << 1;                pMacro->vector_luma[0] = pMacro->vector[0] >> 1;                pMacro->vector_luma[3] = (pMacro->vector[3] >> 1) << 1;                pMacro->vector_luma[2] = pMacro->vector[2] >> 1;                pMacro->vector_chroma[1] = (pMacro->vector[1] >> 1) << 1;//down                pMacro->vector_chroma[0] = pMacro->vector[0] >> 2;//right                pMacro->vector_chroma[3] = (pMacro->vector[3] >> 1) << 1;//down                pMacro->vector_chroma[2] = pMacro->vector[2] >> 2;//right                offs1 = (pMacro->vector_chroma[1]  + pMacro->row_c + pMacro->motion_vertical_field_select[0])*pitch_uv +                        pMacro->vector_chroma[0] + pMacro->col_c;                offs2 = (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[0]  & 1) << 3) | ((pMacro->vector[1]  & 1) << 2);                flag2 =  ((pMacro->vector[0]  & 2) << 2) | ((pMacro->vector[1]  & 1) << 2);                flag3 =  ((pMacro->vector[2]  & 1) << 3) | ((pMacro->vector[3]  & 1) << 2);                flag4 =  ((pMacro->vector[2]  & 2) << 2) | ((pMacro->vector[3]  & 1) << 2);                i = ippiMC16x16B_8u_C1(  ref_Y_data1 +                                        (pMacro->vector_luma[1]  + pMacro->row_l + pMacro->motion_vertical_field_select[0])*pitch_y +                                        pMacro->vector_luma[0] + pMacro->col_l,                                        ptc_y,                                        flag1,                                        ref_Y_data2 +                                        (pMacro->vector_luma[3]  + pMacro->row_l + pMacro->motion_vertical_field_select[1])*pitch_y +                                        pMacro->vector_luma[2] + pMacro->col_l,                                        ptc_y,                                        flag3,                                        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, 0);                VM_ASSERT(i == ippStsOk);                i = ippiMC8x16B_8u_C1(    ref_U_data1 + offs1, ptc_uv, flag2,                                        ref_U_data2 + offs2, ptc_uv, flag4,                                        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, 0);                VM_ASSERT(i == ippStsOk);                i = ippiMC8x16B_8u_C1(    ref_V_data1 + offs1, ptc_uv,flag2,                                        ref_V_data2 + offs2, ptc_uv,flag4,                                        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, 0);                VM_ASSERT(i == ippStsOk);           }           break;       case IPPVC_MC_16X8:            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_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 + 1] = (pMacro->vector[4*r + 1] >> 1) << 1;//down                pMacro->vector_chroma[4*r] = pMacro->vector[4*r] >> 2;//right                 pMacro->vector_chroma[4*r + 3] = (pMacro->vector[4*r + 3] >> 1) << 1;//down                pMacro->vector_chroma[4*r + 2] = pMacro->vector[4*r + 2] >> 2;//right                offs1 = (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;                offs2 = (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]  & 1) << 3) | ((pMacro->vector[4*r + 1]  & 1) << 2);                flag2 =  ((pMacro->vector[4*r]  & 2) << 2) | ((pMacro->vector[4*r + 1]  & 1) << 2);                flag3 =  ((pMacro->vector[4*r + 2]  & 1) << 3) | ((pMacro->vector[4*r + 3]  & 1) << 2);                flag4 =  ((pMacro->vector[4*r + 2]  & 2) << 2) | ((pMacro->vector[4*r + 3]  & 1) << 2);                i = ippiMC16x8B_8u_C1(  ref_Y_data1 +                                        (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,                                        flag1,                                        ref_Y_data2 +                                        (pMacro->vector_luma[4*r + 3]  + pMacro->row_l + 16 * r + pMacro->motion_vertical_field_select[2*r+1])*pitch_y +                                        pMacro->vector_luma[4*r + 2] + pMacro->col_l,                                        pitch_y_2,                                        flag3,                                        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, 0);                VM_ASSERT(i == ippStsOk);                i = ippiMC8x8B_8u_C1(    ref_U_data1 + offs1  + 8 * r * pitch_uv, pitch_uv_2, flag2,                                        ref_U_data2 + offs2  + 8 * r * pitch_uv, pitch_uv_2, flag4,                                        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, 0);                VM_ASSERT(i == ippStsOk);                i = ippiMC8x8B_8u_C1(    ref_V_data1 + offs1  + 8 * r * pitch_uv, pitch_uv_2,flag2,                                        ref_V_data2 + offs2  + 8 * r * pitch_uv, pitch_uv_2,flag4,                                        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, 0);                VM_ASSERT(i == ippStsOk);            }//for(r)           break;        }    }    else   if(pMacro->macroblock_motion_forward              || PictureHeader.picture_coding_type == P_FRAME)    {      switch(pMacro->prediction_type)      {      case IPPVC_MC_FRAME:            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;            pMacro->vector_luma[1] = pMacro->vector[1] >> 1;            pMacro->vector_luma[0] = pMacro->vector[0] >> 1;            pMacro->vector_chroma[1] = pMacro->vector[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) * 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,                                    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)            {                ref_Y_data = video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].Y_comp_data;

⌨️ 快捷键说明

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