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

📄 umc_mpeg1_dec.cpp

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*//////////////////////////////////////////////////////////////////////////////////                  INTEL CORPORATION PROPRIETARY INFORMATION//     This software is supplied under the terms of a license agreement or//     nondisclosure agreement with Intel Corporation and may not be copied//     or disclosed except in accordance with the terms of that agreement.//          Copyright(c) 2003-2005 Intel Corporation. All Rights Reserved.//*/#include "umc_mpeg2_dec_base.h"#pragma warning(disable: 4244)using namespace UMC;static short zero_memory[6*64] = {0};Status MPEG2VideoDecoderBase::skipped_macroblockP_mpeg1(int threadID){    IppVideoContext *video  = &Video[threadID];    sMacroblock     *pMacro = &Video[threadID].macroblock;    sSlice          *pSlice = &Video[threadID].slice;    int      y_plain_index;    int      u_plain_index;    int      pitch_y, pitch_uv;    IppiSize roiy, roiuv;    int      nmb;    int      toskip = pSlice->mb_address_increment-1;    pMacro->row_l = pSlice->mb_row_prev << 4;    pMacro->col_l = pSlice->mb_col_prev << 4;    pitch_y       = video->frame_buffer.Y_comp_pitch;    pitch_uv      = video->frame_buffer.U_comp_pitch;    nmb           = min(toskip, sequenceHeader.mb_width - pSlice->mb_col_prev);    roiy.height   = 16;    roiuv.height  = 8;    while(toskip>0){      pMacro->row_c = pMacro->row_l >> 1;      pMacro->col_c = pMacro->col_l >> 1;      roiy.width    = 16*nmb;      roiuv.width   = 8*nmb;      y_plain_index = pMacro->row_l * pitch_y + pMacro->col_l;      u_plain_index = pMacro->row_c * pitch_uv + pMacro->col_c;      ippiCopy_8u_C1R(&video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].Y_comp_data[y_plain_index],                      pitch_y,                      &video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].Y_comp_data[y_plain_index],                      pitch_y,                      roiy);      ippiCopy_8u_C1R(&video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].U_comp_data[u_plain_index],                      pitch_uv,                      &video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].U_comp_data[u_plain_index],                      pitch_uv,                      roiuv);      ippiCopy_8u_C1R(&video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].V_comp_data[u_plain_index],                      pitch_uv,                      &video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].V_comp_data[u_plain_index],                      pitch_uv,                      roiuv);      toskip -= nmb;      nmb = min(toskip, sequenceHeader.mb_width);      pMacro->col_l = 0;      pMacro->row_l += 16;      if(pMacro->row_l >= sequenceHeader.mb_height*16)        return UMC_BAD_STREAM;    }    return UMC_OK;}Status MPEG2VideoDecoderBase::skipped_macroblockB_mpeg1(int threadID){    int  i;    unsigned int width;    unsigned int width2;    int  offset_l, offset_c;    int  right_fl, down_fl, right_bl, down_bl, right_fc, down_fc, right_bc, down_bc;    int  flag1, flag2, flag1c, flag2c;    int  right_half;    int  down_half;    IppVideoContext *video  = &Video[threadID];    sMacroblock     *pMacro = &Video[threadID].macroblock;    sSlice          *pSlice = &Video[threadID].slice;    width  = video->frame_buffer.Y_comp_pitch;    width2 = video->frame_buffer.U_comp_pitch;    pMacro->row_l  = pSlice->mb_row_prev << 4;    pMacro->col_l  = pSlice->mb_col_prev << 4;    pMacro->row_c  = pSlice->mb_row_prev << 3;    pMacro->col_c  = pSlice->mb_col_prev << 3;    offset_l = pMacro->row_l * width + pMacro->col_l;    offset_c = pMacro->row_c * width2 + pMacro->col_c;    // All pMacro->recon* was converted into half pel mode in the previous MB.    if(pMacro->macroblock_motion_forward && pMacro->macroblock_motion_backward)    {        //half mode        down_fl     = pMacro->vector[1] >> 1;        right_fl   = pMacro->vector[0] >> 1;        flag1      = ((pMacro->vector[0] & 1) << 3) | ((pMacro->vector[1]  & 1) << 2);        right_half = pMacro->vector[0] / 2;        down_half  = pMacro->vector[1] / 2;        down_fc    = down_half >> 1;        right_fc   = right_half >> 1;        flag1c     = ((right_half & 1) << 3) | ((down_half & 1) << 2);        down_bl    = pMacro->vector[3] >> 1;        right_bl   = pMacro->vector[2] >> 1;        flag2      = ((pMacro->vector[2] & 1) << 3) | ((pMacro->vector[3]  & 1) << 2);        down_half  = pMacro->vector[3] / 2;        right_half = pMacro->vector[2] / 2;        down_bc    = down_half >> 1;        right_bc   = right_half >> 1;        flag2c     = ((right_half & 1) << 3) | ((down_half & 1) << 2);        int off_fl = down_fl * width  + right_fl;        int off_fc = down_fc * width2 + right_fc;        int off_bl = down_bl * width  + right_bl;        int off_bc = down_bc * width2 + right_bc;        for(i=0; i<pSlice->mb_address_increment-1; i++) {          ippiMC16x16B_8u_C1(video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].Y_comp_data + offset_l + off_fl,                               width,                               flag1,                               video->frame_buffer.frame_p_c_n[video->frame_buffer.next_index].Y_comp_data + offset_l + off_bl,                               width,                               flag2,                               zero_memory,                               32,                               video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].Y_comp_data + offset_l,                               width,                               0);          ippiMC8x8B_8u_C1(video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].U_comp_data + offset_c + off_fc,                             width2,                             flag1c,                             video->frame_buffer.frame_p_c_n[video->frame_buffer.next_index].U_comp_data + offset_c + off_bc,                             width2,                             flag2c,                             zero_memory,                             16,                             video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].U_comp_data + offset_c,                             width2,                             0);          ippiMC8x8B_8u_C1(video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].V_comp_data + offset_c + off_fc,                             width2,                             flag1c,                             video->frame_buffer.frame_p_c_n[video->frame_buffer.next_index].V_comp_data + offset_c + off_bc,                             width2,                             flag2c,                             zero_memory,                             16,                             video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].V_comp_data + offset_c,                             width2,                             0);          pMacro->col_l += 16;          if(pMacro->col_l >= sequenceHeader.mb_width * 16) {            pMacro->row_l += 16;            pMacro->row_c += 8;            if(pMacro->row_l >= sequenceHeader.mb_height * 16)              return UMC_BAD_STREAM;            offset_l = pMacro->row_l * width;            offset_c = pMacro->row_c * width2;            pMacro->col_l = 0;          } else {            offset_l += 16;            offset_c += 8;          }        }    }    else if(pMacro->macroblock_motion_forward)    {        //half mode        down_fl    = pMacro->vector[1] >> 1;        right_fl   = pMacro->vector[0] >> 1;        flag1      = ((pMacro->vector[0] & 1) << 3) | ((pMacro->vector[1]  & 1) << 2);        right_half = pMacro->vector[0] / 2;        down_half  = pMacro->vector[1] / 2;        down_fc    = down_half >> 1;        right_fc   = right_half >> 1;        flag1c     = ((right_half & 1) << 3) | ((down_half & 1) << 2);        int off_fl = down_fl * width  + right_fl;        int off_fc = down_fc * width2 + right_fc;        for(i=0; i<pSlice->mb_address_increment-1; i++) {          ippiMC16x16_8u_C1(video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].Y_comp_data + offset_l + off_fl,                               width,                               zero_memory,                               32,                               video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].Y_comp_data  + offset_l,                               width,                               flag1,                               0);          ippiMC8x8_8u_C1(video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].U_comp_data + offset_c + off_fc,                             width2,                             zero_memory,                             16,                             video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].U_comp_data  + offset_c,                             width2,                             flag1c,                             0);          ippiMC8x8_8u_C1(video->frame_buffer.frame_p_c_n[video->frame_buffer.prev_index].V_comp_data + offset_c + off_fc,                             width2,                             zero_memory,                             16,                             video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].V_comp_data  + offset_c,                             width2,                             flag1c,                             0);          pMacro->col_l += 16;          if(pMacro->col_l >= sequenceHeader.mb_width * 16) {            pMacro->row_l += 16;            pMacro->row_c += 8;            if(pMacro->row_l >= sequenceHeader.mb_height * 16)              return UMC_BAD_STREAM;            offset_l = pMacro->row_l * width;            offset_c = pMacro->row_c * width2;            pMacro->col_l = 0;          } else {            offset_l += 16;            offset_c += 8;          }        }    }    else    {        down_bl    = pMacro->vector[3] >> 1;        right_bl   = pMacro->vector[2] >> 1;        flag2      =  ((pMacro->vector[2] & 1) << 3) | ((pMacro->vector[3]  & 1) << 2);        down_half  = pMacro->vector[3] / 2;        right_half = pMacro->vector[2] / 2;        down_bc    = down_half >> 1;        right_bc   = right_half >> 1;        flag2c     = ((right_half & 1) << 3) | ((down_half & 1) << 2);        int off_bl = down_bl * width  + right_bl;        int off_bc = down_bc * width2 + right_bc;        for(i=0; i<pSlice->mb_address_increment-1; i++) {          ippiMC16x16_8u_C1( video->frame_buffer.frame_p_c_n[video->frame_buffer.next_index].Y_comp_data + offset_l + off_bl,                               width,                               zero_memory,                               32,                               video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].Y_comp_data  + offset_l,                               width,                               flag2,                               0);          ippiMC8x8_8u_C1( video->frame_buffer.frame_p_c_n[video->frame_buffer.next_index].U_comp_data + offset_c + off_bc,                             width2,                             zero_memory,                             16,                             video->frame_buffer.frame_p_c_n[video->frame_buffer.curr_index].U_comp_data  + offset_c,

⌨️ 快捷键说明

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